16 Commits
3.48.6 ... 3.48

Author SHA1 Message Date
Xavier Roche
87ed27845b Merged revisions 1288,1291-1293,1296-1297,1303,1305-1307,1311,1313-1315 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r1288 | roche | 2014-07-20 11:19:50 +0200 (dim., 20 juil. 2014) | 3 lines
  
  Additional message when crashing to report the issue.
........
  r1291 | roche | 2014-07-28 22:56:38 +0200 (lun., 28 juil. 2014) | 4 lines
  
  Fixed 'strlen(copyBuff) == qLen failed at htslib.c:3458' assertion failure.
  Rationale: strncat(..., ..., (size_t) -1) does not behave gently on Linux, and is not equivalent to strcat(..., ...) when using optimizations (could it be a corner-case bug ?)
........
  r1292 | roche | 2014-07-28 22:56:57 +0200 (lun., 28 juil. 2014) | 3 lines
  
  Added testcase for 'strlen(copyBuff) == qLen failed at htslib.c:3458'
........
  r1293 | roche | 2014-07-28 23:02:00 +0200 (lun., 28 juil. 2014) | 3 lines
  
  3.48.19
........
  r1296 | roche | 2014-07-28 23:16:44 +0200 (lun., 28 juil. 2014) | 3 lines
  
  Reverted useless check.
........
  r1297 | roche | 2014-07-28 23:19:57 +0200 (lun., 28 juil. 2014) | 3 lines
  
  Updated date
........
  r1303 | roche | 2014-08-16 10:16:08 +0200 (sam., 16 août 2014) | 3 lines
  
  Fixed "configure script cannot detect libressl" (junk4me46806)
........
  r1305 | roche | 2014-08-27 19:01:26 +0200 (mer., 27 août 2014) | 4 lines
  
  Do not include execinfo.h if missing (Android)
  Do not use strnlen if missing (Mac OS X 10.6.8) ( nthpowers)
........
  r1306 | roche | 2014-08-27 20:10:28 +0200 (mer., 27 août 2014) | 3 lines
  
  Off-by-one.
........
  r1307 | roche | 2014-08-27 20:22:56 +0200 (mer., 27 août 2014) | 3 lines
  
  Fixed HAVE_STRNLEN (sheesh, we don't have strnlen.o)
........
  r1311 | roche | 2014-10-04 09:39:18 +0200 (sam., 04 oct. 2014) | 1 line
  
  Fixed typo
........
  r1313 | roche | 2014-10-15 19:33:35 +0200 (mer., 15 oct. 2014) | 3 lines
  
  Typo :)
........
  r1314 | roche | 2014-10-15 21:17:29 +0200 (mer., 15 oct. 2014) | 8 lines
  
  Fixed webhttrack incompatibility with Chrome
    * closes:#53
  
  Also fixed HTML-escaping issues inside webhttrack
  
  Rationale: The webhttrack script made the wrong assumption that once the "browse" command returned, it meant the user killed the navigation window, and it had to kill the server itself. However, modern browsers tend to "attach" to an existing session (creating a new tab, for example, within an existing window), causing the browsing command to return immediately, thus causing the server to be killed immediately by the webhttrack script. I have rewritten the logic behind, and now the server is able to kill himself if the parent script dies, AND if the browsing client did not make any activity for two minutes. The "activity" can be any browser/refreshed page, or the internal "ping" iframe (which pings the server every 30 seconds). With this model, we *should* be compatible with old browsers, and modern ones.
........
  r1315 | roche | 2014-10-15 21:44:22 +0200 (mer., 15 oct. 2014) | 3 lines
  
  3.48.20
........
2014-10-15 19:45:19 +00:00
Xavier Roche
5ee4508f6a Merged revisions 1269-1272,1278-1282,1285 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r1269 | roche | 2014-07-14 10:08:55 +0200 (lun., 14 juil. 2014) | 3 lines
  
  Added stack trace on Linux when crashing for httrack
........
  r1270 | roche | 2014-07-14 10:10:06 +0200 (lun., 14 juil. 2014) | 3 lines
  
  Fixed typo.
........
  r1271 | roche | 2014-07-14 10:11:00 +0200 (lun., 14 juil. 2014) | 3 lines
  
  Cosmetic
........
  r1272 | roche | 2014-07-14 13:55:28 +0200 (lun., 14 juil. 2014) | 1 line
  
  Fixed WIN32
........
  r1278 | roche | 2014-07-17 20:38:59 +0200 (jeu., 17 juil. 2014) | 3 lines
  
  Warning fix.
........
  r1279 | roche | 2014-07-17 20:39:16 +0200 (jeu., 17 juil. 2014) | 3 lines
  
  Cache cleanup. Added assert()
........
  r1280 | roche | 2014-07-17 20:41:29 +0200 (jeu., 17 juil. 2014) | 3 lines
  
  assert => assertf
........
  r1281 | roche | 2014-07-17 21:30:53 +0200 (jeu., 17 juil. 2014) | 4 lines
  
  Fixed infamous crashes inside the DNS cache due to a corruption within the option structure (E.Kalinowski)
  This long-lasting bug was a real pain to hunt! :)
........
  r1282 | roche | 2014-07-17 21:52:35 +0200 (jeu., 17 juil. 2014) | 3 lines
  
  3.48.18
........
  r1285 | roche | 2014-07-17 22:01:10 +0200 (jeu., 17 juil. 2014) | 3 lines
  
  closes:#755107
........
2014-07-17 20:08:03 +00:00
Xavier Roche
8fa9a7fa04 Merged revisions 1259-1260,1263-1264,1266 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r1259 | roche | 2014-07-09 07:09:11 +0200 (mer., 09 juil. 2014) | 3 lines
  
  Fixed FTBFS on ARM/MIPS again.
........
  r1260 | roche | 2014-07-09 07:09:15 +0200 (mer., 09 juil. 2014) | 3 lines
  
  3.48.16
........
  r1263 | roche | 2014-07-12 14:18:33 +0200 (sam., 12 juil. 2014) | 1 line
  
  Fixed URL list not working anymore (tom swift)
........
  r1264 | roche | 2014-07-12 15:20:10 +0200 (sam., 12 juil. 2014) | 1 line
  
  3.48.17
........
  r1266 | roche | 2014-07-12 15:28:28 +0200 (sam., 12 juil. 2014) | 3 lines
  
  3.48.17
........
2014-07-12 13:30:47 +00:00
Xavier Roche
f085121f6d Merged revisions 1170-1190,1192-1211,1213,1218,1222-1224,1227,1230-1234,1236-1240,1247-1251,1253-1256 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r1170 | roche | 2014-06-08 21:54:49 +0200 (dim., 08 juin 2014) | 3 lines
  
  Fixed FTBFS when compiling with zlib versions < 1.2.70 (sammyx)
........
  r1171 | roche | 2014-06-08 22:00:57 +0200 (dim., 08 juin 2014) | 3 lines
  
  Added minizip orig files.
........
  r1172 | roche | 2014-06-08 22:06:06 +0200 (dim., 08 juin 2014) | 3 lines
  
  Reverted diff, groumph.
........
  r1173 | roche | 2014-06-08 22:08:21 +0200 (dim., 08 juin 2014) | 3 lines
  
  Added diff
........
  r1174 | roche | 2014-06-09 22:07:04 +0200 (lun., 09 juin 2014) | 3 lines
  
  Updated Makefile
........
  r1175 | roche | 2014-06-10 18:37:44 +0200 (mar., 10 juin 2014) | 3 lines
  
  Changed hashtable types to have either opaque void*, or unions.
........
  r1176 | roche | 2014-06-10 18:43:33 +0200 (mar., 10 juin 2014) | 1 line
  
  Fixed const
........
  r1177 | roche | 2014-06-10 19:04:48 +0200 (mar., 10 juin 2014) | 3 lines
  
  Added missing minizip/mztools.c.diff reference
........
  r1178 | roche | 2014-06-10 22:27:13 +0200 (mar., 10 juin 2014) | 6 lines
  
  Added the following compiler flags:
    * -Wcast-qual 
    * -Wmissing-parameter-type
    * -Wold-style-definition
........
  r1179 | roche | 2014-06-10 22:42:28 +0200 (mar., 10 juin 2014) | 3 lines
  
  -Wstrict-aliasing=2 => -Wstrict-aliasing
........
  r1180 | roche | 2014-06-11 18:50:00 +0200 (mer., 11 juin 2014) | 5 lines
  
  Added the following compiler flags:
    * -Wunused-but-set-parameter
    * -Wignored-qualifiers
........
  r1181 | roche | 2014-06-11 20:59:42 +0200 (mer., 11 juin 2014) | 3 lines
  
  Fixed zlib warning (build zlib with -DZLIB_CONST)
........
  r1182 | roche | 2014-06-11 21:04:32 +0200 (mer., 11 juin 2014) | 1 line
  
  Fixed WIN32 build (stdint.h)
........
  r1183 | roche | 2014-06-14 11:21:48 +0200 (sam., 14 juin 2014) | 3 lines
  
  Hashtable cleanup
........
  r1184 | roche | 2014-06-14 11:50:17 +0200 (sam., 14 juin 2014) | 3 lines
  
  Preparing to export the cuckoo hashtable library as "coucal" project
........
  r1185 | roche | 2014-06-14 11:51:03 +0200 (sam., 14 juin 2014) | 3 lines
  
  Fixed include
........
  r1186 | roche | 2014-06-14 11:55:50 +0200 (sam., 14 juin 2014) | 3 lines
  
  Re-license coucal to BSD-style license.
........
  r1187 | roche | 2014-06-14 11:56:14 +0200 (sam., 14 juin 2014) | 3 lines
  
  Fixed includes.
........
  r1188 | roche | 2014-06-14 12:05:44 +0200 (sam., 14 juin 2014) | 3 lines
  
  Renamed inthash_* API to coucal_* one.
........
  r1189 | roche | 2014-06-14 12:08:38 +0200 (sam., 14 juin 2014) | 3 lines
  
  Remarks over MD5 vs. murmur hashing.
........
  r1190 | roche | 2014-06-14 14:39:16 +0200 (sam., 14 juin 2014) | 2 lines
  
  Fixed exports.
  Fixed WIN32.
........
  r1192 | roche | 2014-06-14 14:46:19 +0200 (sam., 14 juin 2014) | 3 lines
  
  Added diff murmurhash3.h
........
  r1193 | roche | 2014-06-14 14:55:11 +0200 (sam., 14 juin 2014) | 3 lines
  
  BSD 3-Clause License
........
  r1194 | roche | 2014-06-14 14:59:42 +0200 (sam., 14 juin 2014) | 3 lines
  
  Wrapped lines.
........
  r1195 | roche | 2014-06-14 15:07:33 +0200 (sam., 14 juin 2014) | 1 line
  
  Added coucal_get_pvoid() and coucal_get_intptr()
........
  r1196 | roche | 2014-06-14 21:35:29 +0200 (sam., 14 juin 2014) | 3 lines
  
  Added comments.
........
  r1197 | roche | 2014-06-14 22:02:11 +0200 (sam., 14 juin 2014) | 3 lines
  
  Cosmetic
........
  r1198 | roche | 2014-06-14 22:18:56 +0200 (sam., 14 juin 2014) | 3 lines
  
  Added coucal_hash_data()
........
  r1199 | roche | 2014-06-15 09:39:57 +0200 (dim., 15 juin 2014) | 3 lines
  
  Original cuckoo hashing paper
........
  r1200 | roche | 2014-06-15 09:43:32 +0200 (dim., 15 juin 2014) | 3 lines
  
  Intro line.
........
  r1201 | roche | 2014-06-15 09:52:33 +0200 (dim., 15 juin 2014) | 3 lines
  
  Credits.
........
  r1202 | roche | 2014-06-15 10:29:02 +0200 (dim., 15 juin 2014) | 1 line
  
  Added coucal_fetch_value_hashes()
........
  r1203 | roche | 2014-06-15 10:31:41 +0200 (dim., 15 juin 2014) | 1 line
  
  Added coucal_fetch_value()
........
  r1204 | roche | 2014-06-15 10:48:18 +0200 (dim., 15 juin 2014) | 1 line
  
  Added coucal_calc_hashes()
........
  r1205 | roche | 2014-06-15 12:24:06 +0200 (dim., 15 juin 2014) | 1 line
  
  Optional 64-bit hash for really big hashtables. (disabled by default)
........
  r1206 | roche | 2014-06-15 13:12:08 +0200 (dim., 15 juin 2014) | 1 line
  
  Cleanup in coucal_new()
........
  r1207 | roche | 2014-06-15 13:21:17 +0200 (dim., 15 juin 2014) | 1 line
  
  Fixed log size limit check.
........
  r1208 | roche | 2014-06-15 14:10:52 +0200 (dim., 15 juin 2014) | 1 line
  
  Better coucal_is_acceptable_pow2() logic
........
  r1209 | roche | 2014-06-15 22:27:45 +0200 (dim., 15 juin 2014) | 3 lines
  
  Faster coucal_del_value_
........
  r1210 | roche | 2014-06-17 21:09:31 +0200 (mar., 17 juin 2014) | 3 lines
  
  Fixed "old-style function definition" warning.
........
  r1211 | roche | 2014-06-17 21:56:26 +0200 (mar., 17 juin 2014) | 3 lines
  
  Possible cause of crash at htstools.c:425 inside long_to_83()
........
  r1213 | roche | 2014-06-22 12:22:39 +0200 (dim., 22 juin 2014) | 3 lines
  
  No fopen64() on Android.
........
  r1218 | roche | 2014-06-22 12:42:38 +0200 (dim., 22 juin 2014) | 3 lines
  
  Fixed "comparison between signed and unsigned integer expressions"
........
  r1222 | roche | 2014-06-22 15:03:07 +0200 (dim., 22 juin 2014) | 2 lines
  
  Handle buggy SVG (Smiling Spectre)
........
  r1223 | roche | 2014-06-22 15:30:41 +0200 (dim., 22 juin 2014) | 1 line
  
  Do not uncompress .tgz advertised as "streamed" (Smiling Spectre)
........
  r1224 | roche | 2014-06-23 06:49:41 +0200 (lun., 23 juin 2014) | 3 lines
  
  Emergency fixing Invalid address alignment issues on Android
........
  r1227 | roche | 2014-06-23 09:33:30 +0200 (lun., 23 juin 2014) | 3 lines
  
  #ifdef failed
........
  r1230 | roche | 2014-06-23 20:52:33 +0200 (lun., 23 juin 2014) | 3 lines
  
  Check for aligned access requirements explicitly.
........
  r1231 | roche | 2014-06-24 20:16:30 +0200 (mar., 24 juin 2014) | 3 lines
  
  Temporarily switch to MD5 with architectures not supporting unaligned integer accesses.
........
  r1232 | roche | 2014-06-27 18:03:10 +0200 (ven., 27 juin 2014) | 3 lines
  
  Fixed NULL pointer dereferencing in back_unserialize (htsback.c:976) spotted on Android platforms
........
  r1233 | roche | 2014-06-28 13:18:06 +0200 (sam., 28 juin 2014) | 3 lines
  
  Optimize the case when realloc() returns the same base address while reallocating the string pool.
........
  r1234 | roche | 2014-06-28 13:20:04 +0200 (sam., 28 juin 2014) | 3 lines
  
  typo.
........
  r1236 | roche | 2014-07-06 10:00:36 +0200 (dim., 06 juil. 2014) | 1 line
  
  Added hts_has_stopped() flag, added some asserts
........
  r1237 | roche | 2014-07-06 10:05:19 +0200 (dim., 06 juil. 2014) | 3 lines
  
  Fixed MD5_Init()
........
  r1238 | roche | 2014-07-06 10:12:42 +0200 (dim., 06 juil. 2014) | 3 lines
  
  Fixed MD5 definitions
........
  r1239 | roche | 2014-07-06 10:17:09 +0200 (dim., 06 juil. 2014) | 3 lines
  
  Fixed HashMD5Context
........
  r1240 | roche | 2014-07-06 10:24:40 +0200 (dim., 06 juil. 2014) | 3 lines
  
  Fixed MD5_CTX => struct MD5Context
........
  r1247 | roche | 2014-07-07 21:07:08 +0200 (lun., 07 juil. 2014) | 1 line
  
  int => size_t cleanup
........
  r1248 | roche | 2014-07-07 21:24:18 +0200 (lun., 07 juil. 2014) | 1 line
  
  Another assert
........
  r1249 | roche | 2014-07-08 09:06:10 +0200 (mar., 08 juil. 2014) | 3 lines
  
  Fixed htssafe.h
........
  r1250 | roche | 2014-07-08 20:20:20 +0200 (mar., 08 juil. 2014) | 3 lines
  
  Fixed buggy FFFD (replacement character) in place of leading non-ascii character
    * closes:#48
........
  r1251 | roche | 2014-07-08 20:23:06 +0200 (mar., 08 juil. 2014) | 1 line
  
  3.48-14
........
  r1253 | roche | 2014-07-08 20:40:01 +0200 (mar., 08 juil. 2014) | 3 lines
  
  3.48.14
........
  r1254 | roche | 2014-07-08 22:01:22 +0200 (mar., 08 juil. 2014) | 3 lines
  
  proxytrack: fixed FTBFS on ARM/MIPS
........
  r1255 | roche | 2014-07-08 22:01:32 +0200 (mar., 08 juil. 2014) | 3 lines
  
  Updated man
........
  r1256 | roche | 2014-07-08 22:08:20 +0200 (mar., 08 juil. 2014) | 3 lines
  
  3.48.15
........
2014-07-08 20:17:21 +00:00
Xavier Roche
540efa3d86 Merged revisions 1020-1023,1027-1029,1031,1033-1036,1038,1040,1042,1044-1054,1058-1072,1074-1087,1089-1112,1114-1124,1126-1128,1130-1133,1137,1139-1143,1145,1147-1159,1161,1163-1164 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r1020 | roche | 2014-05-13 22:08:53 +0200 (mar., 13 mai 2014) | 3 lines
  
  #include <stdarg.h>
........
  r1021 | roche | 2014-05-13 22:11:02 +0200 (mar., 13 mai 2014) | 3 lines
  
  #include <stdarg.h>
........
  r1022 | roche | 2014-05-13 22:11:41 +0200 (mar., 13 mai 2014) | 3 lines
  
  #include <stdarg.h>
........
  r1023 | roche | 2014-05-13 22:12:10 +0200 (mar., 13 mai 2014) | 3 lines
  
  Better stdarg.h
........
  r1027 | roche | 2014-05-14 19:45:51 +0200 (mer., 14 mai 2014) | 1 line
  
  Added debug logging facility.
........
  r1028 | roche | 2014-05-14 19:48:04 +0200 (mer., 14 mai 2014) | 3 lines
  
  Fixed hashtable corruption because of dirty code directly modifying the host address in memory, leading to have hashtable positions not anymore valid.
  This issue was especially triggered when a redirect was processed ("Warning moved treated for .." messages)
    * closes: #43
........
  r1029 | roche | 2014-05-14 19:51:09 +0200 (mer., 14 mai 2014) | 1 line
  
  3.48.7
........
  r1031 | roche | 2014-05-14 19:57:18 +0200 (mer., 14 mai 2014) | 3 lines
  
  3.48.7
........
  r1033 | roche | 2014-05-14 21:51:33 +0200 (mer., 14 mai 2014) | 1 line
  
  Missing htsCallbackErr definition
........
  r1034 | roche | 2014-05-14 22:12:42 +0200 (mer., 14 mai 2014) | 1 line
  
  Clean hts_set_error_callback() and hts_get_error_callback()
........
  r1035 | roche | 2014-05-14 22:20:01 +0200 (mer., 14 mai 2014) | 1 line
  
  Fixed macro.
........
  r1036 | roche | 2014-05-14 22:27:55 +0200 (mer., 14 mai 2014) | 1 line
  
  Cosmetic
........
  r1038 | roche | 2014-05-15 19:06:59 +0200 (jeu., 15 mai 2014) | 1 line
  
  WIN32: zlib 1.2.8
........
  r1040 | roche | 2014-05-15 19:08:29 +0200 (jeu., 15 mai 2014) | 1 line
  
  3.48.8
........
  r1042 | roche | 2014-05-15 19:22:16 +0200 (jeu., 15 mai 2014) | 3 lines
  
  3.48.8-1
........
  r1044 | roche | 2014-05-15 19:26:46 +0200 (jeu., 15 mai 2014) | 3 lines
  
  Removed unused variable.
........
  r1045 | roche | 2014-05-15 21:24:56 +0200 (jeu., 15 mai 2014) | 1 line
  
  Fixed uint64_t vs. long long int
........
  r1046 | roche | 2014-05-15 21:25:27 +0200 (jeu., 15 mai 2014) | 1 line
  
  Compile-time checks.
........
  r1047 | roche | 2014-05-15 21:27:29 +0200 (jeu., 15 mai 2014) | 1 line
  
  Cosmetic.
........
  r1048 | roche | 2014-05-15 21:33:38 +0200 (jeu., 15 mai 2014) | 3 lines
  
  Added some asserts for Android.
........
  r1049 | roche | 2014-05-15 21:44:28 +0200 (jeu., 15 mai 2014) | 3 lines
  
  tr -d '\r'
........
  r1050 | roche | 2014-05-17 14:31:37 +0200 (sam., 17 mai 2014) | 3 lines
  
  Fixed potentiel overrun if the user injects a buggy user-defined structure with a non-terminated %[]
........
  r1051 | roche | 2014-05-17 15:20:42 +0200 (sam., 17 mai 2014) | 1 line
  
  Added hts_set_log_vprint_callback()
........
  r1052 | roche | 2014-05-17 15:21:03 +0200 (sam., 17 mai 2014) | 1 line
  
  Added hts_set_log_vprint_callback() definition
........
  r1053 | roche | 2014-05-17 15:29:45 +0200 (sam., 17 mai 2014) | 1 line
  
  Anonymous logging.
........
  r1054 | roche | 2014-05-17 15:55:17 +0200 (sam., 17 mai 2014) | 1 line
  
  Illegal use of strnlen(..., (size_t) -1)
........
  r1058 | roche | 2014-05-18 11:49:24 +0200 (dim., 18 mai 2014) | 1 line
  
  Cleanup in socket handling (less ugly casts!)
........
  r1059 | roche | 2014-05-18 12:53:29 +0200 (dim., 18 mai 2014) | 1 line
  
  Removed size member from SOCaddr
........
  r1060 | roche | 2014-05-18 12:59:07 +0200 (dim., 18 mai 2014) | 3 lines
  
  libtool: in_port_t and sa_family_t
........
  r1061 | roche | 2014-05-18 15:11:40 +0200 (dim., 18 mai 2014) | 5 lines
  
  Big cleanup in network address and dns functions:
    * removed t_fullhostent insanity
    * removed (struct sockaddr*) casts
    * use SOCaddr everywhere rather than raw struct hostent*
........
  r1062 | roche | 2014-05-18 15:43:09 +0200 (dim., 18 mai 2014) | 1 line
  
  Cleanup in callbacks.
........
  r1063 | roche | 2014-05-18 15:55:47 +0200 (dim., 18 mai 2014) | 3 lines
  
  Backlog for web server to 10.
........
  r1064 | roche | 2014-05-18 15:55:54 +0200 (dim., 18 mai 2014) | 3 lines
  
  tr -d '\r'
........
  r1065 | roche | 2014-05-18 16:02:06 +0200 (dim., 18 mai 2014) | 3 lines
  
  Removed unused variable.
........
  r1066 | roche | 2014-05-18 16:05:08 +0200 (dim., 18 mai 2014) | 1 line
  
  Fixed __builtin___strncat_chk warning
........
  r1067 | roche | 2014-05-19 21:12:27 +0200 (lun., 19 mai 2014) | 2 lines
  
  Fixed segOutputSize < segSize assertion fails at htscharset.c:993
    * closes:#44
........
  r1068 | roche | 2014-05-19 21:15:16 +0200 (lun., 19 mai 2014) | 1 line
  
  Added strlcpybuff() macro.
........
  r1069 | roche | 2014-05-19 21:17:50 +0200 (lun., 19 mai 2014) | 1 line
  
  char* => const char*
........
  r1070 | roche | 2014-05-19 21:24:06 +0200 (lun., 19 mai 2014) | 3 lines
  
  Added unit test for issue #44
........
  r1071 | roche | 2014-05-19 21:37:40 +0200 (lun., 19 mai 2014) | 3 lines
  
  tr -d '\r'
........
  r1072 | roche | 2014-05-21 19:01:30 +0200 (mer., 21 mai 2014) | 1 line
  
  Cleaner dup
........
  r1074 | roche | 2014-05-21 19:21:29 +0200 (mer., 21 mai 2014) | 1 line
  
  3.48.9
........
  r1075 | roche | 2014-05-23 17:23:17 +0200 (ven., 23 mai 2014) | 3 lines
  
  3.48.9-1 changelog
........
  r1076 | roche | 2014-05-23 17:24:50 +0200 (ven., 23 mai 2014) | 3 lines
  
  3.48.9 (autoconf)
........
  r1077 | roche | 2014-05-23 17:28:55 +0200 (ven., 23 mai 2014) | 3 lines
  
  Added symbol visibility features to the build to hide internal symbols (GCC)
........
  r1078 | roche | 2014-05-23 23:33:43 +0200 (ven., 23 mai 2014) | 9 lines
  
  "const correctness" cleanup
  added the following default flags:
    -Wformat
    -Wformat-security
    -Wmultichar
    -Wwrite-strings
  fixed several other warnings
........
  r1079 | roche | 2014-05-24 09:45:12 +0200 (sam., 24 mai 2014) | 3 lines
  
  Diff are better.
........
  r1080 | roche | 2014-05-24 09:50:51 +0200 (sam., 24 mai 2014) | 3 lines
  
  No diff.
........
  r1081 | roche | 2014-05-24 09:56:11 +0200 (sam., 24 mai 2014) | 3 lines
  
  Upgraded to minizip 1.1 from zlib 1.2.8
........
  r1082 | roche | 2014-05-24 10:17:08 +0200 (sam., 24 mai 2014) | 3 lines
  
  Missing zflush_file member.
........
  r1083 | roche | 2014-05-24 10:37:21 +0200 (sam., 24 mai 2014) | 3 lines
  
  Fixed minizip.
........
  r1084 | roche | 2014-05-24 13:31:17 +0200 (sam., 24 mai 2014) | 3 lines
  
  Removed ChangeLogUnzip
........
  r1085 | roche | 2014-05-24 13:38:11 +0200 (sam., 24 mai 2014) | 3 lines
  
  Fixed EXTRA_DIST
........
  r1086 | roche | 2014-05-24 13:57:25 +0200 (sam., 24 mai 2014) | 3 lines
  
  Minizip warning fixes.
........
  r1087 | roche | 2014-05-26 21:27:46 +0200 (lun., 26 mai 2014) | 1 line
  
  Big links heap handling cleanup, and removed very old and legacy macros
........
  r1089 | roche | 2014-05-26 21:32:34 +0200 (lun., 26 mai 2014) | 3 lines
  
  tr -d '\r'
........
  r1090 | roche | 2014-05-27 18:05:09 +0200 (mar., 27 mai 2014) | 3 lines
  
  Fixed symbol import.
........
  r1091 | roche | 2014-05-27 18:05:28 +0200 (mar., 27 mai 2014) | 3 lines
  
  tr -d '\r'
........
  r1092 | roche | 2014-05-27 18:05:54 +0200 (mar., 27 mai 2014) | 3 lines
  
  Export may_unknown and guess_httptype
........
  r1093 | roche | 2014-05-27 18:35:57 +0200 (mar., 27 mai 2014) | 3 lines
  
  Rewritten UTF8 writer to avoir spurious GCC 4.8.3 warnings.
........
  r1094 | roche | 2014-05-27 19:45:18 +0200 (mar., 27 mai 2014) | 3 lines
  
  Fixed help option, and too long help line (man: "cannot adjust line")
........
  r1095 | roche | 2014-05-27 20:55:13 +0200 (mar., 27 mai 2014) | 1 line
  
  Cleanup, const correctness
........
  r1096 | roche | 2014-05-28 18:34:06 +0200 (mer., 28 mai 2014) | 3 lines
  
  Added Vcs-Browser and Vcs-Svn fields to debian/control
........
  r1097 | roche | 2014-05-28 18:36:24 +0200 (mer., 28 mai 2014) | 3 lines
  
  Fixed dirty uint32_t cast leading to aliasing issues.
........
  r1098 | roche | 2014-05-28 18:50:47 +0200 (mer., 28 mai 2014) | 3 lines
  
  Added MD5 self-test
........
  r1099 | roche | 2014-05-28 18:51:56 +0200 (mer., 28 mai 2014) | 3 lines
  
  Fixed const T ** not being castable to const T **
........
  r1100 | roche | 2014-05-28 18:58:37 +0200 (mer., 28 mai 2014) | 3 lines
  
  Fixed build.
........
  r1101 | roche | 2014-05-28 19:06:47 +0200 (mer., 28 mai 2014) | 3 lines
  
  Really fixed.
........
  r1102 | roche | 2014-05-28 19:41:42 +0200 (mer., 28 mai 2014) | 3 lines
  
  Bad md5.
........
  r1103 | roche | 2014-05-28 19:55:49 +0200 (mer., 28 mai 2014) | 19 lines
  
  Added AM_PROG_CC_C_O and AM_PROG_LIBTOOL
  Removed unused CXX
  
  added the following default compiler flags:
    -Wdeclaration-after-statement
    -Wsequence-point
    -Wparentheses
    -Winit-self
    -Wuninitialized
    -Wformat
    -fstrict-aliasing -Wstrict-aliasing=2
  
  added the following default linker flags:
    -Wl,--discard-all
    -Wl,--no-undefined
  
  Depending on autoconf-archive because using AX_CHECK_COMPILE_FLAG and AX_CHECK_LINK_FLAG
........
  r1104 | roche | 2014-05-28 20:27:45 +0200 (mer., 28 mai 2014) | 3 lines
  
  Fixed %%%
........
  r1105 | roche | 2014-05-28 20:31:40 +0200 (mer., 28 mai 2014) | 1 line
  
  Rewrite template formatting to be format-injection proof.
........
  r1106 | roche | 2014-05-28 20:41:59 +0200 (mer., 28 mai 2014) | 1 line
  
  Fixed heap crawl overflow
........
  r1107 | roche | 2014-05-28 20:58:59 +0200 (mer., 28 mai 2014) | 1 line
  
  Rewrite string template formatting to be format-injection proof.
........
  r1108 | roche | 2014-05-28 21:03:07 +0200 (mer., 28 mai 2014) | 1 line
  
  Fixed NULL terminated string.
........
  r1109 | roche | 2014-05-28 21:03:26 +0200 (mer., 28 mai 2014) | 1 line
  
  Replaced sprintf() by hts_template_format_str()
........
  r1110 | roche | 2014-05-28 21:05:31 +0200 (mer., 28 mai 2014) | 1 line
  
  Added assert
........
  r1111 | roche | 2014-05-28 21:11:04 +0200 (mer., 28 mai 2014) | 3 lines
  
  Added -Wformat-nonliteral flag.
........
  r1112 | roche | 2014-05-29 10:20:07 +0200 (jeu., 29 mai 2014) | 1 line
  
  Allocation cleanup (why "+2", why ?)
........
  r1114 | roche | 2014-05-29 10:30:43 +0200 (jeu., 29 mai 2014) | 1 line
  
  Added off_t_to_size_t()
........
  r1115 | roche | 2014-05-29 11:34:37 +0200 (jeu., 29 mai 2014) | 3 lines
  
  Fixes.
........
  r1116 | roche | 2014-05-29 11:41:59 +0200 (jeu., 29 mai 2014) | 1 line
  
  Removed duplicate opt->lien_tot and opt->liens members in some functions.
........
  r1117 | roche | 2014-05-29 17:42:53 +0200 (jeu., 29 mai 2014) | 1 line
  
  Big cleanup: introducing cleaner lien_adrfilsave and lien_adrfil structures holding address/uri or address/uri/filename rather than passing opaque char* of unknown size.
........
  r1118 | roche | 2014-05-29 17:53:30 +0200 (jeu., 29 mai 2014) | 1 line
  
  Unused function.
........
  r1119 | roche | 2014-05-29 17:57:57 +0200 (jeu., 29 mai 2014) | 1 line
  
  Fixed API change.
........
  r1120 | roche | 2014-05-29 18:03:04 +0200 (jeu., 29 mai 2014) | 3 lines
  
  tr -d '\r'
........
  r1121 | roche | 2014-05-29 18:14:57 +0200 (jeu., 29 mai 2014) | 1 line
  
  Fixed regression over ./
........
  r1122 | roche | 2014-05-29 19:29:02 +0200 (jeu., 29 mai 2014) | 1 line
  
  Take in account opt->maxlink is non-zero
........
  r1123 | roche | 2014-05-29 19:58:05 +0200 (jeu., 29 mai 2014) | 1 line
  
  Allocation failure handling.
........
  r1124 | roche | 2014-05-29 20:10:14 +0200 (jeu., 29 mai 2014) | 1 line
  
  Better "too many links" reporting.
........
  r1126 | roche | 2014-05-30 18:09:02 +0200 (ven., 30 mai 2014) | 3 lines
  
  Missing string.h (moe)
........
  r1127 | roche | 2014-06-03 18:26:25 +0200 (mar., 03 juin 2014) | 1 line
  
  Potential fix for htshash.c:330 assertion failure: "error invalidating hash entry"
........
  r1128 | roche | 2014-06-04 18:10:38 +0200 (mer., 04 juin 2014) | 3 lines
  
  Do not depend on SetDllDirectory (Windows 2003) as it breaks Windows 2000
    * closes: #45
........
  r1130 | roche | 2014-06-04 19:02:44 +0200 (mer., 04 juin 2014) | 3 lines
  
  3.48-10
........
  r1131 | roche | 2014-06-04 19:06:43 +0200 (mer., 04 juin 2014) | 1 line
  
  3.48.10
........
  r1132 | roche | 2014-06-04 19:10:40 +0200 (mer., 04 juin 2014) | 3 lines
  
  Updated configure
........
  r1133 | roche | 2014-06-04 19:41:42 +0200 (mer., 04 juin 2014) | 3 lines
  
  Updated man
........
  r1137 | roche | 2014-06-04 21:53:07 +0200 (mer., 04 juin 2014) | 3 lines
  
  Fixed "this decimal constant is unsigned only in ISO C90"
........
  r1139 | roche | 2014-06-05 17:59:49 +0200 (jeu., 05 juin 2014) | 1 line
  
  changelog
........
  r1140 | roche | 2014-06-05 18:00:05 +0200 (jeu., 05 juin 2014) | 3 lines
  
  Added missing .h to -dev
........
  r1141 | roche | 2014-06-06 17:47:38 +0200 (ven., 06 juin 2014) | 7 lines
  
  Fixed assertion failure at htscore.c:244 (len + liensbuf->string_buffer_size < liensbuf->string_buffer_capa)
    * closes:46
  
  -Cette ligne, et les suivantes ci-dessous, seront ignorées--
  
  M    trunk/src/htscore.c
........
  r1142 | roche | 2014-06-06 17:48:05 +0200 (ven., 06 juin 2014) | 3 lines
  
  Additional check.
........
  r1143 | roche | 2014-06-06 17:57:02 +0200 (ven., 06 juin 2014) | 1 line
  
  3.48.11
........
  r1145 | roche | 2014-06-06 18:02:35 +0200 (ven., 06 juin 2014) | 3 lines
  
  3.48.11
........
  r1147 | roche | 2014-06-06 20:43:50 +0200 (ven., 06 juin 2014) | 3 lines
  
  Splitted typed arrays in htsarrays.h
  Cleaned-up page generation
........
  r1148 | roche | 2014-06-06 20:47:24 +0200 (ven., 06 juin 2014) | 3 lines
  
  Updated man
........
  r1149 | roche | 2014-06-06 20:47:39 +0200 (ven., 06 juin 2014) | 3 lines
  
  tr -d '\r'
........
  r1150 | roche | 2014-06-06 20:47:53 +0200 (ven., 06 juin 2014) | 3 lines
  
  Added htsarrays.h to Makefile and devel libs
........
  r1151 | roche | 2014-06-06 21:03:41 +0200 (ven., 06 juin 2014) | 1 line
  
  Progressive power-of-two allocator for linked blocks.
........
  r1152 | roche | 2014-06-06 21:08:47 +0200 (ven., 06 juin 2014) | 1 line
  
  Cleanup.
........
  r1153 | roche | 2014-06-06 22:58:35 +0200 (ven., 06 juin 2014) | 3 lines
  
  Fixed initializer.
........
  r1154 | roche | 2014-06-07 09:03:08 +0200 (sam., 07 juin 2014) | 3 lines
  
  Fixed --advanced-maxlinks broken (Localhost)
........
  r1155 | roche | 2014-06-07 09:03:13 +0200 (sam., 07 juin 2014) | 3 lines
  
  Better.
........
  r1156 | roche | 2014-06-08 11:26:46 +0200 (dim., 08 juin 2014) | 1 line
  
  Typos
........
  r1157 | roche | 2014-06-08 11:35:34 +0200 (dim., 08 juin 2014) | 3 lines
  
  Fixed __cplusplus issues
........
  r1158 | roche | 2014-06-08 13:12:21 +0200 (dim., 08 juin 2014) | 4 lines
  
  Using subdir-objects for automake
  Replaced legacy INCLUDES by AM_CPPFLAGS
........
  r1159 | roche | 2014-06-08 13:22:41 +0200 (dim., 08 juin 2014) | 3 lines
  
  3.48.12
........
  r1161 | roche | 2014-06-08 15:02:43 +0200 (dim., 08 juin 2014) | 9 lines
  
  Public definitions cleanup (especially for httraqt)
  
  htsopt.h now has the following definitions:
    * struct htsrequest_proxy
    * struct htsrequest
    * struct htsblk
    * struct lien_url
    * struct lien_back
........
  r1163 | roche | 2014-06-08 15:58:57 +0200 (dim., 08 juin 2014) | 1 line
  
  __cplusplus
........
  r1164 | roche | 2014-06-08 17:43:28 +0200 (dim., 08 juin 2014) | 3 lines
  
  3.48.13
........
2014-06-08 16:17:19 +00:00
Xavier Roche
c16bceaf22 Merged revisions 975,977-983,985-1014,1016 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r975 | roche | 2014-05-02 17:13:29 +0200 (ven., 02 mai 2014) | 1 line
  
  Big cleanup in functions writing to a char buffer without proper size boundary.
........
  r977 | roche | 2014-05-02 17:16:18 +0200 (ven., 02 mai 2014) | 3 lines
  
  Add htsconcat.c
........
  r978 | roche | 2014-05-02 19:44:51 +0200 (ven., 02 mai 2014) | 3 lines
  
  Fixes.
........
  r979 | roche | 2014-05-02 19:53:49 +0200 (ven., 02 mai 2014) | 1 line
  
  Fixed WIN32.
........
  r980 | roche | 2014-05-02 20:05:57 +0200 (ven., 02 mai 2014) | 1 line
  
  HTTRACK_DEFLIB cleanup.
........
  r981 | roche | 2014-05-02 20:39:21 +0200 (ven., 02 mai 2014) | 1 line
  
  Fixed issue #42 (long query strings with accents)
........
  r982 | roche | 2014-05-02 21:19:08 +0200 (ven., 02 mai 2014) | 4 lines
  
  Added "long query string" ut/
  See <https://code.google.com/p/httrack/issues/detail?id=42>
........
  r983 | roche | 2014-05-04 10:48:23 +0200 (dim., 04 mai 2014) | 1 line
  
  Big cleanup in string primitives and abort functions
........
  r985 | roche | 2014-05-04 11:01:07 +0200 (dim., 04 mai 2014) | 3 lines
  
  Newlines.
........
  r986 | roche | 2014-05-04 13:00:49 +0200 (dim., 04 mai 2014) | 3 lines
  
  Added htssafe.h
........
  r987 | roche | 2014-05-04 13:01:01 +0200 (dim., 04 mai 2014) | 3 lines
  
  Use GCC's __builtin_types_compatible_p()
........
  r988 | roche | 2014-05-04 13:02:43 +0200 (dim., 04 mai 2014) | 3 lines
  
  Comment.
........
  r989 | roche | 2014-05-04 16:00:30 +0200 (dim., 04 mai 2014) | 1 line
  
  More hashtable stress
........
  r990 | roche | 2014-05-04 16:24:27 +0200 (dim., 04 mai 2014) | 2 lines
  
  Hashtable: logging in case of troubles
........
  r991 | roche | 2014-05-04 16:29:26 +0200 (dim., 04 mai 2014) | 1 line
  
  Cleanup.
........
  r992 | roche | 2014-05-04 16:35:01 +0200 (dim., 04 mai 2014) | 3 lines
  
  Fix.
........
  r993 | roche | 2014-05-04 16:35:22 +0200 (dim., 04 mai 2014) | 1 line
  
  Fix 2.
........
  r994 | roche | 2014-05-04 16:44:17 +0200 (dim., 04 mai 2014) | 1 line
  
  Potentially unused functions.
........
  r995 | roche | 2014-05-04 16:57:41 +0200 (dim., 04 mai 2014) | 1 line
  
  Fixed hidden type.
........
  r996 | roche | 2014-05-04 17:16:59 +0200 (dim., 04 mai 2014) | 1 line
  
  Replaced ugly cat by snprintf
........
  r997 | roche | 2014-05-04 17:17:21 +0200 (dim., 04 mai 2014) | 1 line
  
  Added strlcatbuff
........
  r998 | roche | 2014-05-04 17:50:12 +0200 (dim., 04 mai 2014) | 1 line
  
  Fixed build.
........
  r999 | roche | 2014-05-04 18:04:18 +0200 (dim., 04 mai 2014) | 3 lines
  
  Added -DLIBHTTRACK_EXPORTS for libhttrack
........
  r1000 | roche | 2014-05-06 20:40:50 +0200 (mar., 06 mai 2014) | 1 line
  
  Fixed regression introduced in r995 over strcpybuff() reusing macro arguments multiple times, leading to troubles when using side-effects.
........
  r1001 | roche | 2014-05-06 20:42:45 +0200 (mar., 06 mai 2014) | 1 line
  
  Cleanup in dirty mallocated strings
........
  r1002 | roche | 2014-05-08 11:13:54 +0200 (jeu., 08 mai 2014) | 1 line
  
  Added assertion handlers to hashtables.
........
  r1003 | roche | 2014-05-08 11:14:19 +0200 (jeu., 08 mai 2014) | 1 line
  
  Assertion handler
........
  r1004 | roche | 2014-05-08 11:14:48 +0200 (jeu., 08 mai 2014) | 1 line
  
  Assertion handler (2)
........
  r1005 | roche | 2014-05-08 11:17:27 +0200 (jeu., 08 mai 2014) | 1 line
  
  Missing NULL.
........
  r1006 | roche | 2014-05-08 11:25:11 +0200 (jeu., 08 mai 2014) | 1 line
  
  Inline keyword.
........
  r1007 | roche | 2014-05-09 18:43:48 +0200 (ven., 09 mai 2014) | 3 lines
  
  assert cleanup.
........
  r1008 | roche | 2014-05-09 18:52:29 +0200 (ven., 09 mai 2014) | 3 lines
  
  cache->iadr is not supposed to be NULL, but ... (could explain crashes on Android at data.app_lib.com_httrack_android_1.libhttrack_so.0x62e4c)
........
  r1009 | roche | 2014-05-10 16:15:22 +0200 (sam., 10 mai 2014) | 2 lines
  
  Mitigate stash overflow by resizing the hashtable.
  Added better logging.
........
  r1010 | roche | 2014-05-10 21:07:51 +0200 (sam., 10 mai 2014) | 1 line
  
  Hashtable: names for debugging, and better logging
........
  r1011 | roche | 2014-05-10 21:08:05 +0200 (sam., 10 mai 2014) | 1 line
  
  Better logging for hashtables
........
  r1012 | roche | 2014-05-11 10:27:09 +0200 (dim., 11 mai 2014) | 1 line
  
  Fixed warning: "warning: no previous prototype for 'htsthread_wait'"
........
  r1013 | roche | 2014-05-12 20:54:27 +0200 (lun., 12 mai 2014) | 3 lines
  
  Fixed buggy , in man
........
  r1014 | roche | 2014-05-13 21:21:12 +0200 (mar., 13 mai 2014) | 1 line
  
  3.48.6
........
  r1016 | roche | 2014-05-13 21:24:40 +0200 (mar., 13 mai 2014) | 3 lines
  
  3.48.6
........
2014-06-08 16:16:55 +00:00
Xavier Roche
f179036bda Missing merges. 2014-05-02 15:12:11 +00:00
Xavier Roche
2f99eec8d9 Merged revisions 972 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r972 | roche | 2014-05-02 16:39:27 +0200 (ven., 02 mai 2014) | 3 lines
  
  3.48.5
........
2014-05-02 14:45:45 +00:00
Xavier Roche
6e611c37bd Merged revisions 970 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r970 | roche | 2014-04-29 21:32:18 +0200 (mar., 29 avril 2014) | 3 lines
  
  Fixed manual (lintian)
........
2014-05-02 14:13:31 +00:00
Xavier Roche
aa3c3ed18f Merged revisions 941,943,946,961-968 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r941 | roche | 2014-04-13 16:29:00 +0200 (dim., 13 avril 2014) | 3 lines
  
  changelog (Windows only)
........
  r943 | roche | 2014-04-13 16:29:24 +0200 (dim., 13 avril 2014) | 3 lines
  
  3.48.3 (Windows only diffs)
........
  r946 | roche | 2014-04-13 20:59:36 +0200 (dim., 13 avril 2014) | 3 lines
  
  const char* fixes.
........
  r961 | roche | 2014-04-24 21:24:11 +0200 (jeu., 24 avril 2014) | 3 lines
  
  Removed __DATE__ for reproducible builds.
   
........
  r962 | roche | 2014-04-24 21:28:32 +0200 (jeu., 24 avril 2014) | 3 lines
  
  2013 is so last year.
........
  r963 | roche | 2014-04-24 21:32:26 +0200 (jeu., 24 avril 2014) | 3 lines
  
  More 2014.
........
  r964 | roche | 2014-04-27 18:46:08 +0200 (dim., 27 avril 2014) | 3 lines
  
  Removed buggy definitions (Michael Tautschnig)
........
  r965 | roche | 2014-04-27 18:51:21 +0200 (dim., 27 avril 2014) | 3 lines
  
  3.48.4
........
  r966 | roche | 2014-04-27 18:52:54 +0200 (dim., 27 avril 2014) | 3 lines
  
  Removed duplicate is_realspace definition
........
  r967 | roche | 2014-04-27 18:59:05 +0200 (dim., 27 avril 2014) | 3 lines
  
  Better be unsigned int.
........
  r968 | roche | 2014-04-27 19:05:20 +0200 (dim., 27 avril 2014) | 3 lines
  
  Updated doc.
........
2014-04-27 17:14:27 +00:00
Xavier Roche
3f603d7b35 Merged revisions 956 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r956 | roche | 2014-04-16 18:08:25 +0200 (mer., 16 avril 2014) | 3 lines
  
  Really call dh_autoreconf (Matthias Klose)
........
2014-04-16 16:08:53 +00:00
Xavier Roche
4d6337ec60 Merged revisions 954 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r954 | roche | 2014-04-15 22:15:46 +0200 (mar., 15 avril 2014) | 3 lines
  
  3.48.1-4
........
2014-04-15 20:16:13 +00:00
Xavier Roche
117d8bebb3 Merged revisions 942 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r942 | roche | 2014-04-13 16:29:03 +0200 (dim., 13 avril 2014) | 3 lines
  
  VERBOSE=1 dh_auto_test
........
2014-04-15 19:40:38 +00:00
Xavier Roche
1a8f462462 Merged revisions 950-951 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r950 | roche | 2014-04-15 21:30:24 +0200 (mar., 15 avril 2014) | 3 lines
  
  Build-Depends: dh-autoreconf
........
  r951 | roche | 2014-04-15 21:33:00 +0200 (mar., 15 avril 2014) | 3 lines
  
  3.48.1-3
........
2014-04-15 19:33:34 +00:00
Xavier Roche
57a9befbd2 Merged revisions 944-945,947-948 via svnmerge from
http://proliant/svn/httrack/trunk

........
  r944 | roche | 2014-04-13 19:34:39 +0200 (dim., 13 avril 2014) | 3 lines
  
  Call dh_autoreconf_clean before dh_clean
........
  r945 | roche | 2014-04-13 20:50:24 +0200 (dim., 13 avril 2014) | 4 lines
  
  Do not erase *.a files is these files are the shared library ones.
  See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=744594
........
  r947 | roche | 2014-04-15 21:07:32 +0200 (mar., 15 avril 2014) | 3 lines
  
  Standards-Version: 3.9.5
........
  r948 | roche | 2014-04-15 21:10:14 +0200 (mar., 15 avril 2014) | 3 lines
  
  3.48.1-2
........
2014-04-15 19:11:15 +00:00
Xavier Roche
80289b6966 New 3.48 branch 2014-04-13 14:21:05 +00:00
148 changed files with 16024 additions and 16246 deletions

View File

@@ -134,6 +134,7 @@ am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -142,14 +143,12 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
@@ -163,6 +162,7 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HTTPS_SUPPORT = @HTTPS_SUPPORT@
ICONV_LIBS = @ICONV_LIBS@
INSTALL = @INSTALL@
@@ -218,7 +218,6 @@ abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@

241
compile
View File

@@ -1,9 +1,10 @@
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.
# Wrapper for compilers which do not understand '-c -o'.
scriptversion=2005-05-14.22
scriptversion=2012-03-05.13; # UTC
# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
# Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
@@ -17,8 +18,7 @@ scriptversion=2005-05-14.22
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -29,21 +29,219 @@ scriptversion=2005-05-14.22
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
nl='
'
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" "" $nl"
file_conv=
# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
file=$1
case $file in
/ | /[!/]*) # absolute file, and not a UNC file
if test -z "$file_conv"; then
# lazily determine how to convert abs files
case `uname -s` in
MINGW*)
file_conv=mingw
;;
CYGWIN*)
file_conv=cygwin
;;
*)
file_conv=wine
;;
esac
fi
case $file_conv/,$2, in
*,$file_conv,*)
;;
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
cygwin/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
file=`winepath -w "$file" || echo "$file"`
;;
esac
;;
esac
}
# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
func_file_conv "$1"
if test -z "$lib_path"; then
lib_path=$file
else
lib_path="$lib_path;$file"
fi
linker_opts="$linker_opts -LIBPATH:$file"
}
# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
lib=$1
found=no
save_IFS=$IFS
IFS=';'
for dir in $lib_path $LIB
do
IFS=$save_IFS
if $shared && test -f "$dir/$lib.dll.lib"; then
found=yes
lib=$dir/$lib.dll.lib
break
fi
if test -f "$dir/$lib.lib"; then
found=yes
lib=$dir/$lib.lib
break
fi
done
IFS=$save_IFS
if test "$found" != yes; then
lib=$lib.lib
fi
}
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
# Assume a capable shell
lib_path=
shared=:
linker_opts=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1
case $2 in
*.o | *.[oO][bB][jJ])
func_file_conv "$2"
set x "$@" -Fo"$file"
shift
;;
*)
func_file_conv "$2"
set x "$@" -Fe"$file"
shift
;;
esac
;;
-I)
eat=1
func_file_conv "$2" mingw
set x "$@" -I"$file"
shift
;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
-l)
eat=1
func_cl_dashl "$2"
set x "$@" "$lib"
shift
;;
-l*)
func_cl_dashl "${1#-l}"
set x "$@" "$lib"
shift
;;
-L)
eat=1
func_cl_dashL "$2"
;;
-L*)
func_cl_dashL "${1#-L}"
;;
-static)
shared=false
;;
-Wl,*)
arg=${1#-Wl,}
save_ifs="$IFS"; IFS=','
for flag in $arg; do
IFS="$save_ifs"
linker_opts="$linker_opts $flag"
done
IFS="$save_ifs"
;;
-Xlinker)
eat=1
linker_opts="$linker_opts $2"
;;
-*)
set x "$@" "$1"
shift
;;
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
func_file_conv "$1"
set x "$@" -Tp"$file"
shift
;;
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
func_file_conv "$1" mingw
set x "$@" "$file"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -n "$linker_opts"; then
linker_opts="-link$linker_opts"
fi
exec "$@" $linker_opts
exit 1
}
eat=
case $1 in
'')
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand `-c -o'.
Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file `INSTALL'.
right script to run: please start by reading the file 'INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
@@ -53,11 +251,13 @@ EOF
echo "compile $scriptversion"
exit $?
;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
ofile=
cfile=
eat=
for arg
do
@@ -66,8 +266,8 @@ do
else
case $1 in
-o)
# configure might choose to run compile as `compile cc -o foo foo.c'.
# So we strip `-o arg' only if arg is an object.
# configure might choose to run compile as 'compile cc -o foo foo.c'.
# So we strip '-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
@@ -94,22 +294,22 @@ do
done
if test -z "$ofile" || test -z "$cfile"; then
# If no `-o' option was seen then we might have been invoked from a
# If no '-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# `.c' file was seen then we are probably linking. That is also
# '.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
# Create the lock directory.
# Note: use `[/.-]' here to ensure that we don't use the same name
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
@@ -124,9 +324,9 @@ trap "rmdir '$lockdir'; exit 1" 1 2 15
ret=$?
if test -f "$cofile"; then
mv "$cofile" "$ofile"
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
mv "${cofile}bj" "$ofile"
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
@@ -138,5 +338,6 @@ exit $ret
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-end: "$"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

View File

@@ -6,9 +6,15 @@
/* Check for ftime */
#undef FTIME
/* Define if pointers to integers require aligned access */
#undef HAVE_ALIGNED_ACCESS_REQUIRED
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <execinfo.h> header file. */
#undef HAVE_EXECINFO_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
@@ -33,6 +39,9 @@
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Check for strnlen */
#undef HAVE_STRNLEN
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
@@ -42,6 +51,10 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 or 0, depending whether the compiler supports simple visibility
declarations. */
#undef HAVE_VISIBILITY
/* Define to 1 if you have the `vsnprintf' function. */
#undef HAVE_VSNPRINTF
@@ -67,6 +80,9 @@
*/
#undef LT_OBJDIR
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* Name of package */
#undef PACKAGE
@@ -106,5 +122,43 @@
/* Check for pthread in pthreads */
#undef THREADS
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# undef _POSIX_PTHREAD_SEMANTICS
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# undef _TANDEM_SOURCE
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# undef __EXTENSIONS__
#endif
/* Version number of package */
#undef VERSION
/* Define to 1 if on MINIX. */
#undef _MINIX
/* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
#undef _POSIX_1_SOURCE
/* Define to 1 if you need to in order for `stat' and other things to work. */
#undef _POSIX_SOURCE
/* in_port_t */
#undef in_port_t
/* sa_family_t */
#undef sa_family_t

6237
configure vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,18 +1,46 @@
AC_INIT([httrack], [3.48.5], [roche+packaging@httrack.com], [httrack], [http://www.httrack.com/])
AC_PREREQ(2.59)
AC_INIT([httrack], [3.48.20], [roche+packaging@httrack.com], [httrack], [http://www.httrack.com/])
AC_COPYRIGHT([
HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2014 Xavier Roche and other contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes:
- We hereby ask people using this source NOT to use it in purpose of grabbing
emails addresses, or collecting any other private information on persons.
This would disgrace our work, and spoil the many hours we spent on it.
Please visit our Website: http://www.httrack.com
])
AC_CONFIG_SRCDIR(src/httrack.c)
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS(config.h)
AM_INIT_AUTOMAKE
AM_INIT_AUTOMAKE([subdir-objects])
VERSION_INFO="2:48:0"
AM_MAINTAINER_MODE
AC_PREREQ(2.50)
AC_USE_SYSTEM_EXTENSIONS
AC_PROG_CC
AC_PROG_CXX
AM_PROG_CC_C_O
AC_STDC_HEADERS
LT_INIT
AC_PROG_LN_S
AM_PROG_LIBTOOL
# Export LD_LIBRARY_PATH name or equivalent.
AC_SUBST(SHLIBPATH_VAR,$shlibpath_var)
@@ -20,13 +48,43 @@ AC_SUBST(SHLIBPATH_VAR,$shlibpath_var)
# Export .libs or equivalent.
AC_SUBST(LT_CV_OBJDIR,$lt_cv_objdir)
### Default CFLAGS
DEFAULT_CFLAGS="-Wall -Wcast-align -Wstrict-prototypes \
-Wmissing-prototypes -Wmissing-declarations -Wpointer-arith \
-Wnested-externs -D_REENTRANT"
AC_SUBST(DEFAULT_CFLAGS)
# Export version info
AC_SUBST(VERSION_INFO)
### Default CFLAGS
DEFAULT_CFLAGS="-Wall -Wformat -Wformat-security \
-Wmultichar -Wwrite-strings -Wcast-qual -Wcast-align \
-Wstrict-prototypes -Wmissing-prototypes \
-Wmissing-declarations -Wdeclaration-after-statement \
-Wpointer-arith -Wsequence-point -Wnested-externs \
-D_REENTRANT"
AC_SUBST(DEFAULT_CFLAGS)
DEFAULT_LDFLAGS=""
AC_SUBST(DEFAULT_LDFLAGS)
### Additional flags (if supported)
AX_CHECK_COMPILE_FLAG([-Wparentheses], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wparentheses"])
AX_CHECK_COMPILE_FLAG([-Winit-self], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Winit-self"])
AX_CHECK_COMPILE_FLAG([-Wunused-but-set-parameter], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wunused-but-set-parameter"])
AX_CHECK_COMPILE_FLAG([-Waddress], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Waddress"])
AX_CHECK_COMPILE_FLAG([-Wuninitialized], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wuninitialized"])
AX_CHECK_COMPILE_FLAG([-Wformat=2], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wformat=2"])
AX_CHECK_COMPILE_FLAG([-Wformat-nonliteral], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wformat-nonliteral"])
AX_CHECK_COMPILE_FLAG([-Wmissing-parameter-type], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wmissing-parameter-type"])
AX_CHECK_COMPILE_FLAG([-Wold-style-definition], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wold-style-definition"])
AX_CHECK_COMPILE_FLAG([-Wignored-qualifiers], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -Wignored-qualifiers"])
AX_CHECK_COMPILE_FLAG([-fstrict-aliasing -Wstrict-aliasing], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -fstrict-aliasing -Wstrict-aliasing"])
AX_CHECK_LINK_FLAG([-Wl,--discard-all], [DEFAULT_LDLAGS="$DEFAULT_LDLAGS -Wl,--discard-all"])
AX_CHECK_LINK_FLAG([-Wl,--no-undefined], [DEFAULT_LDLAGS="$DEFAULT_LDLAGS -Wl,--no-undefined"])
## Export all symbols for backtraces
AX_CHECK_COMPILE_FLAG([-rdynamic], [DEFAULT_CFLAGS="$DEFAULT_CFLAGS -rdynamic"])
### Check for -fvisibility=hidden support
gl_VISIBILITY
AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY"
AC_SUBST([AM_CFLAGS])
### Check for platform
#case $host in
#AIX) AC_DEFINE(HTS_PLATFORM, 1, [Defined to build under AIX]);;
@@ -47,6 +105,24 @@ AC_MSG_WARN([*** in_addr_t not found]),
#include <netinet/in.h>
#include <arpa/inet.h>])
# check for in_port_
AC_CHECK_TYPE(in_port_t, [], [AC_DEFINE([in_port_t], [uint16_t], [in_port_t])], [
#include <sys/types.h>
#include <netinet/in.h>
])
# check for sa_family_t
AC_CHECK_TYPE(sa_family_t, [], [AC_DEFINE([sa_family_t], [uint16_t], [sa_family_t])], [
#include <sys/types.h>
#include <netinet/in.h>
])
# check wether misaligned access is possible or not
AX_CHECK_ALIGNED_ACCESS_REQUIRED
# check for various headers
AC_CHECK_HEADERS([execinfo.h])
### zlib
CHECK_ZLIB()
@@ -77,9 +153,16 @@ if test x"$https_support" = x"no"; then
AC_MSG_NOTICE([disabling https support])
AC_DEFINE(HTS_USEOPENSSL, 0)
else
SAVE_LIBS=$LIBS
AC_CHECK_LIB(crypto, EVP_get_digestbyname,
[
OPENSSL_LIBS="-lcrypto"
]
)
LIBS="$LIBS $OPENSSL_LIBS"
AC_CHECK_LIB(ssl, SSL_library_init,
[
OPENSSL_LIBS="-lcrypto -lssl"
OPENSSL_LIBS="$OPENSSL_LIBS -lssl"
AC_DEFINE(HTS_USEOPENSSL, 1, [Check for OpenSSL])
],
[
@@ -90,6 +173,7 @@ AC_CHECK_LIB(ssl, SSL_library_init,
fi
]
)
LIBS=$SAVE_LIBS
AC_SUBST(OPENSSL_LIBS)
fi
@@ -154,6 +238,10 @@ AC_DEFINE(SETUID, 1,[Check for setuid])], AC_MSG_RESULT([not found]))
### Check for snprintf
AC_FUNC_SNPRINTF()
### Check for strnlen
AC_CHECK_LIB(c, strnlen, [
AC_DEFINE(HAVE_STRNLEN, 1,[Check for strnlen])], AC_MSG_RESULT([not found]))
## Online unit tests
AC_MSG_CHECKING(whether to enable online unit tests)
AC_ARG_ENABLE([online-unit-tests],

97
debian/changelog vendored
View File

@@ -1,3 +1,100 @@
httrack (3.48.20-1) unstable; urgency=low
* Updated to 3.48.20 (3.48-20)
closes:#765019
-- Xavier Roche <xavier@debian.org> Wed, 15 Oct 2014 21:37:54 +0200
httrack (3.48.19-1) unstable; urgency=low
* Updated to 3.48.19 (3.48-19)
closes:#756328
-- Xavier Roche <xavier@debian.org> Mon, 28 Jul 2014 22:52:19 +0200
httrack (3.48.18-1) unstable; urgency=low
* Updated to 3.48.18 (3.48-18)
closes:#755107
-- Xavier Roche <xavier@debian.org> Thu, 17 Jul 2014 21:35:10 +0200
httrack (3.48.17-1) unstable; urgency=low
* Updated to 3.48.17 (3.48-17)
-- Xavier Roche <xavier@debian.org> Sat, 12 Jul 2014 15:21:14 +0200
httrack (3.48.16-1) unstable; urgency=low
* Updated to 3.48.16 (3.48-16)
fixed FTBFS on ARM/MIPS again
-- Xavier Roche <xavier@debian.org> Wed, 09 Jul 2014 07:02:08 +0200
httrack (3.48.15-1) unstable; urgency=low
* Updated to 3.48.15 (3.48-15)
fixed FTBFS on ARM/MIPS
-- Xavier Roche <xavier@debian.org> Tue, 08 Jul 2014 22:05:14 +0200
httrack (3.48.14-1) unstable; urgency=low
* Updated to 3.48.14 (3.48-14)
-- Xavier Roche <xavier@debian.org> Tue, 08 Jul 2014 20:36:55 +0200
httrack (3.48.13-1) unstable; urgency=low
* Updated to 3.48.13 (3.48-13)
closes:#750931
-- Xavier Roche <xavier@debian.org> Sun, 08 Jun 2014 16:22:13 +0200
httrack (3.48.12-1) unstable; urgency=low
* Updated to 3.48.12 (3.48-12)
Should fix missing/broken .h for libhttrack-dev
-- Xavier Roche <xavier@debian.org> Sun, 08 Jun 2014 13:19:49 +0200
httrack (3.48.11-1) unstable; urgency=low
* Updated to 3.48.11 (3.48-11)
-- Xavier Roche <xavier@debian.org> Fri, 06 Jun 2014 17:58:12 +0200
httrack (3.48.10-1) unstable; urgency=low
* Updated to 3.48.10 (3.48-10)
-- Xavier Roche <xavier@debian.org> Wed, 04 Jun 2014 19:00:07 +0200
httrack (3.48.9-1) unstable; urgency=low
* Updated to 3.48.9 (3.48-9)
-- Xavier Roche <xavier@debian.org> Wed, 21 May 2014 19:22:04 +0200
httrack (3.48.8-1) unstable; urgency=low
* Updated to 3.48.8 (3.48-8)
-- Xavier Roche <xavier@debian.org> Thu, 15 May 2014 19:21:21 +0200
httrack (3.48.7-1) unstable; urgency=low
* Updated to 3.48.7 (3.48-7)
-- Xavier Roche <xavier@debian.org> Wed, 14 May 2014 19:51:57 +0200
httrack (3.48.6-1) unstable; urgency=low
* Updated to 3.48.6 (3.48-6)
-- Xavier Roche <xavier@debian.org> Tue, 13 May 2014 21:23:02 +0200
httrack (3.48.5-1) unstable; urgency=low
* Updated to 3.48.5 (3.48-5)

4
debian/control vendored
View File

@@ -3,8 +3,10 @@ Section: web
Priority: optional
Maintainer: Xavier Roche <roche@httrack.com>
Standards-Version: 3.9.5
Build-Depends: debhelper (>= 8.0.0), dh-autoreconf, autotools-dev, autoconf, automake, libtool, zlib1g-dev, libssl-dev
Build-Depends: debhelper (>= 8.0.0), dh-autoreconf, autotools-dev, autoconf, autoconf-archive, automake, libtool, zlib1g-dev, libssl-dev
Homepage: http://www.httrack.com
Vcs-Svn: http://httrack.googlecode.com/svn/trunk
Vcs-Browser: https://code.google.com/p/httrack/source/browse/trunk/src
Package: httrack
Architecture: any

View File

@@ -2,9 +2,35 @@
HTTrack Website Copier release history:
--------------------------------------
This file lists all changes and fixes that have been made for HTTrack.
3.48-3
This file lists all changes and fixes that have been made for HTTrack
3.48-20
+ Fixed: webhttrack incompatibility with Chrome
+ Fixed: assertion failure at htslib.c:3458 (strlen(copyBuff) == qLen) seen on Linux
+ Fixed: infamous crashes inside the DNS cache due to a corruption within the option structure (E.Kalinowski/karbofos)
+ New: added minimalistic crash reporting on Windows and Linux
+ Fixed: URL list not working anymore (tom swift)
+ Fixed: FTBFS on ARM
+ Fixed: buggy FFFD (replacement character) in place of leading non-ascii character such as Chinese ones (aballboy)
+ Fixed: FTBFS when compiling with zlib versions < 1.2.70 (sammyx)
+ Fixed: buggy SVG (Smiling Spectre)
+ Fixed: do not uncompress .tgz advertised as "streamed" (Smiling Spectre)
+ Fixed: NULL pointer dereferencing in back_unserialize (htsback.c:976)
+ Fixed: library development files
+ Fixed: --advanced-maxlinks broken (Localhost)
+ Fixed: -devel package should now be standalone
+ Fixed: assertion failure at htscore.c:244 (len + liensbuf->string_buffer_size < liensbuf->string_buffer_capa)
+ Fixed: injection-proof templates
+ Fixed: htshash.c:330 assertion failure ("error invalidating hash entry") (Sergey)
+ Fixed: Windows 2000 regression (fantozzi.usenet)
+ Fixed: code cleanup (aliasing issues, const correctness, safe strings)
+ New: handle --advanced-maxlinks=0 to disable maximum link limits
+ New: updated ZIP routines (zlib 1.2.8)
+ Fixed: broken 32-bit version
+ Fixed: assertion "segOutputSize < segSize assertion fails at htscharset.c:993"
+ Fixed: new zlib version fixing CVE-2004-0797 and CVE-2005-2096
+ Fixed: more reliable crash reporting
+ Fixed: fixed infamous "hashtable internal error: cuckoo/stash collision" errors
+ Fixed: safety cleanup in many strings operations
+ Fixed: buggy option pannels
+ New: Enforce check against CVE-2014-0160
+ New: improved hashtables to speedup large mirrors

View File

@@ -20,7 +20,7 @@ HelpHtmldiv_DATA = div/search.sh
HelpHtmlimg_DATA = img/*
HelpHtmlimages_DATA = images/*
HelpHtmlTxt_DATA = ../greetings.txt ../history.txt ../license.txt
WebHtml_DATA = server/*.html
WebHtml_DATA = server/*.html server/*.js server/*.css
WebHtmlimages_DATA = server/images/*
WebHtmlsfx_DATA = server/sfx/*
# note: converted & normalized by
@@ -41,6 +41,6 @@ EXTRA_DIST = $(HelpHtml_DATA) $(HelpHtmlimg_DATA) $(HelpHtmlimages_DATA) \
install-data-hook:
if test ! -L $(DESTDIR)$(prefix)/share/httrack/html ; then \
( cd $(DESTDIR)$(prefix)/share/httrack \
&& $(LN_S) $(htmldir) html \
&& $(LN_S) ../doc/httrack html \
) \
fi

View File

@@ -115,6 +115,7 @@ DATA = $(HelpHtml_DATA) $(HelpHtmlTxt_DATA) $(HelpHtmldiv_DATA) \
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -123,14 +124,12 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
@@ -144,6 +143,7 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HTTPS_SUPPORT = @HTTPS_SUPPORT@
ICONV_LIBS = @ICONV_LIBS@
INSTALL = @INSTALL@
@@ -199,7 +199,6 @@ abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
@@ -266,7 +265,7 @@ HelpHtmldiv_DATA = div/search.sh
HelpHtmlimg_DATA = img/*
HelpHtmlimages_DATA = images/*
HelpHtmlTxt_DATA = ../greetings.txt ../history.txt ../license.txt
WebHtml_DATA = server/*.html
WebHtml_DATA = server/*.html server/*.js server/*.css
WebHtmlimages_DATA = server/images/*
WebHtmlsfx_DATA = server/sfx/*
# note: converted & normalized by
@@ -801,7 +800,7 @@ uninstall-am: uninstall-HelpHtmlDATA uninstall-HelpHtmlTxtDATA \
install-data-hook:
if test ! -L $(DESTDIR)$(prefix)/share/httrack/html ; then \
( cd $(DESTDIR)$(prefix)/share/httrack \
&& $(LN_S) $(htmldir) html \
&& $(LN_S) ../doc/httrack html \
) \
fi

View File

@@ -51,98 +51,99 @@ offline browser : copy websites to a local directory</p>
<p style="margin-left:11%; margin-top: 1em"><b>httrack [
url ]... [ &minus;filter ]... [ +filter ]... [ &minus;O
&minus;&minus;path</b> ] [ <b>&minus;w
&minus;&minus;mirror</b> ] [ <b>&minus;W
&minus;&minus;mirror&minus;wizard</b> ] [ <b>&minus;g
&minus;&minus;get&minus;files</b> ] [ <b>&minus;i
&minus;&minus;continue</b> ] [ <b>&minus;Y
&minus;&minus;mirrorlinks</b> ] [ <b>&minus;P
&minus;&minus;proxy</b> ] [ <b>&minus;%f
&minus;&minus;httpproxy&minus;ftp[=N]</b> ] [ <b>&minus;%b
&minus;&minus;bind</b> ] [ <b>&minus;rN
&minus;&minus;depth[=N]</b> ] [ <b>&minus;%eN
&minus;&minus;ext&minus;depth[=N]</b> ] [ <b>&minus;mN
&minus;&minus;max&minus;files[=N]</b> ] [ <b>&minus;MN
&minus;&minus;max&minus;size[=N]</b> ] [ <b>&minus;EN
&minus;&minus;max&minus;time[=N]</b> ] [ <b>&minus;AN
&minus;&minus;max&minus;rate[=N]</b> ] [ <b>&minus;%cN
url ]... [ &minus;filter ]... [ +filter ]... [ &minus;O,
&minus;&minus;path</b> ] [ <b>&minus;w,
&minus;&minus;mirror</b> ] [ <b>&minus;W,
&minus;&minus;mirror&minus;wizard</b> ] [ <b>&minus;g,
&minus;&minus;get&minus;files</b> ] [ <b>&minus;i,
&minus;&minus;continue</b> ] [ <b>&minus;Y,
&minus;&minus;mirrorlinks</b> ] [ <b>&minus;P,
&minus;&minus;proxy</b> ] [ <b>&minus;%f,
&minus;&minus;httpproxy&minus;ftp[=N]</b> ] [ <b>&minus;%b,
&minus;&minus;bind</b> ] [ <b>&minus;rN,
&minus;&minus;depth[=N]</b> ] [ <b>&minus;%eN,
&minus;&minus;ext&minus;depth[=N]</b> ] [ <b>&minus;mN,
&minus;&minus;max&minus;files[=N]</b> ] [ <b>&minus;MN,
&minus;&minus;max&minus;size[=N]</b> ] [ <b>&minus;EN,
&minus;&minus;max&minus;time[=N]</b> ] [ <b>&minus;AN,
&minus;&minus;max&minus;rate[=N]</b> ] [ <b>&minus;%cN,
&minus;&minus;connection&minus;per&minus;second[=N]</b> ] [
<b>&minus;GN &minus;&minus;max&minus;pause[=N]</b> ] [
<b>&minus;cN &minus;&minus;sockets[=N]</b> ] [ <b>&minus;TN
&minus;&minus;timeout[=N]</b> ] [ <b>&minus;RN
&minus;&minus;retries[=N]</b> ] [ <b>&minus;JN
&minus;&minus;min&minus;rate[=N]</b> ] [ <b>&minus;HN
&minus;&minus;host&minus;control[=N]</b> ] [ <b>&minus;%P
&minus;&minus;extended&minus;parsing[=N]</b> ] [ <b>&minus;n
&minus;&minus;near</b> ] [ <b>&minus;t
&minus;&minus;test</b> ] [ <b>&minus;%L
&minus;&minus;list</b> ] [ <b>&minus;%S
&minus;&minus;urllist</b> ] [ <b>&minus;NN
&minus;&minus;structure[=N]</b> ] [ <b>&minus;%D
<b>&minus;GN, &minus;&minus;max&minus;pause[=N]</b> ] [
<b>&minus;cN, &minus;&minus;sockets[=N]</b> ] [
<b>&minus;TN, &minus;&minus;timeout[=N]</b> ] [
<b>&minus;RN, &minus;&minus;retries[=N]</b> ] [
<b>&minus;JN, &minus;&minus;min&minus;rate[=N]</b> ] [
<b>&minus;HN, &minus;&minus;host&minus;control[=N]</b> ] [
<b>&minus;%P, &minus;&minus;extended&minus;parsing[=N]</b> ]
[ <b>&minus;n, &minus;&minus;near</b> ] [ <b>&minus;t,
&minus;&minus;test</b> ] [ <b>&minus;%L,
&minus;&minus;list</b> ] [ <b>&minus;%S,
&minus;&minus;urllist</b> ] [ <b>&minus;NN,
&minus;&minus;structure[=N]</b> ] [ <b>&minus;%D,
&minus;&minus;cached&minus;delayed&minus;type&minus;check</b>
] [ <b>&minus;%M &minus;&minus;mime&minus;html</b> ] [
<b>&minus;LN &minus;&minus;long&minus;names[=N]</b> ] [
<b>&minus;KN &minus;&minus;keep&minus;links[=N]</b> ] [
<b>&minus;x &minus;&minus;replace&minus;external</b> ] [
<b>&minus;%x &minus;&minus;disable&minus;passwords</b> ] [
<b>&minus;%q
] [ <b>&minus;%M, &minus;&minus;mime&minus;html</b> ] [
<b>&minus;LN, &minus;&minus;long&minus;names[=N]</b> ] [
<b>&minus;KN, &minus;&minus;keep&minus;links[=N]</b> ] [
<b>&minus;x, &minus;&minus;replace&minus;external</b> ] [
<b>&minus;%x, &minus;&minus;disable&minus;passwords</b> ] [
<b>&minus;%q,
&minus;&minus;include&minus;query&minus;string</b> ] [
<b>&minus;o &minus;&minus;generate&minus;errors</b> ] [
<b>&minus;X &minus;&minus;purge&minus;old[=N]</b> ] [
<b>&minus;%p &minus;&minus;preserve</b> ] [ <b>&minus;%T
&minus;&minus;utf8&minus;conversion</b> ] [ <b>&minus;bN
&minus;&minus;cookies[=N]</b> ] [ <b>&minus;u
&minus;&minus;check&minus;type[=N]</b> ] [ <b>&minus;j
&minus;&minus;parse&minus;java[=N]</b> ] [ <b>&minus;sN
&minus;&minus;robots[=N]</b> ] [ <b>&minus;%h
&minus;&minus;http&minus;10</b> ] [ <b>&minus;%k
&minus;&minus;keep&minus;alive</b> ] [ <b>&minus;%B
&minus;&minus;tolerant</b> ] [ <b>&minus;%s
&minus;&minus;updatehack</b> ] [ <b>&minus;%u
&minus;&minus;urlhack</b> ] [ <b>&minus;%A
&minus;&minus;assume</b> ] [ <b>&minus;@iN
&minus;&minus;protocol[=N]</b> ] [ <b>&minus;%w
&minus;&minus;disable&minus;module</b> ] [ <b>&minus;F
&minus;&minus;user&minus;agent</b> ] [ <b>&minus;%R
&minus;&minus;referer</b> ] [ <b>&minus;%E
&minus;&minus;from</b> ] [ <b>&minus;%F
&minus;&minus;footer</b> ] [ <b>&minus;%l
&minus;&minus;language</b> ] [ <b>&minus;%a
&minus;&minus;accept</b> ] [ <b>&minus;%X
&minus;&minus;headers</b> ] [ <b>&minus;C
&minus;&minus;cache[=N]</b> ] [ <b>&minus;k
<b>&minus;o, &minus;&minus;generate&minus;errors</b> ] [
<b>&minus;X, &minus;&minus;purge&minus;old[=N]</b> ] [
<b>&minus;%p, &minus;&minus;preserve</b> ] [ <b>&minus;%T,
&minus;&minus;utf8&minus;conversion</b> ] [ <b>&minus;bN,
&minus;&minus;cookies[=N]</b> ] [ <b>&minus;u,
&minus;&minus;check&minus;type[=N]</b> ] [ <b>&minus;j,
&minus;&minus;parse&minus;java[=N]</b> ] [ <b>&minus;sN,
&minus;&minus;robots[=N]</b> ] [ <b>&minus;%h,
&minus;&minus;http&minus;10</b> ] [ <b>&minus;%k,
&minus;&minus;keep&minus;alive</b> ] [ <b>&minus;%B,
&minus;&minus;tolerant</b> ] [ <b>&minus;%s,
&minus;&minus;updatehack</b> ] [ <b>&minus;%u,
&minus;&minus;urlhack</b> ] [ <b>&minus;%A,
&minus;&minus;assume</b> ] [ <b>&minus;@iN,
&minus;&minus;protocol[=N]</b> ] [ <b>&minus;%w,
&minus;&minus;disable&minus;module</b> ] [ <b>&minus;F,
&minus;&minus;user&minus;agent</b> ] [ <b>&minus;%R,
&minus;&minus;referer</b> ] [ <b>&minus;%E,
&minus;&minus;from</b> ] [ <b>&minus;%F,
&minus;&minus;footer</b> ] [ <b>&minus;%l,
&minus;&minus;language</b> ] [ <b>&minus;%a,
&minus;&minus;accept</b> ] [ <b>&minus;%X,
&minus;&minus;headers</b> ] [ <b>&minus;C,
&minus;&minus;cache[=N]</b> ] [ <b>&minus;k,
&minus;&minus;store&minus;all&minus;in&minus;cache</b> ] [
<b>&minus;%n &minus;&minus;do&minus;not&minus;recatch</b> ]
[ <b>&minus;%v &minus;&minus;display</b> ] [ <b>&minus;Q
&minus;&minus;do&minus;not&minus;log</b> ] [ <b>&minus;q
&minus;&minus;quiet</b> ] [ <b>&minus;z
&minus;&minus;extra&minus;log</b> ] [ <b>&minus;Z
&minus;&minus;debug&minus;log</b> ] [ <b>&minus;v
&minus;&minus;verbose</b> ] [ <b>&minus;f
&minus;&minus;file&minus;log</b> ] [ <b>&minus;f2
&minus;&minus;single&minus;log</b> ] [ <b>&minus;I
&minus;&minus;index</b> ] [ <b>&minus;%i
<b>&minus;%n, &minus;&minus;do&minus;not&minus;recatch</b> ]
[ <b>&minus;%v, &minus;&minus;display</b> ] [ <b>&minus;Q,
&minus;&minus;do&minus;not&minus;log</b> ] [ <b>&minus;q,
&minus;&minus;quiet</b> ] [ <b>&minus;z,
&minus;&minus;extra&minus;log</b> ] [ <b>&minus;Z,
&minus;&minus;debug&minus;log</b> ] [ <b>&minus;v,
&minus;&minus;verbose</b> ] [ <b>&minus;f,
&minus;&minus;file&minus;log</b> ] [ <b>&minus;f2,
&minus;&minus;single&minus;log</b> ] [ <b>&minus;I,
&minus;&minus;index</b> ] [ <b>&minus;%i,
&minus;&minus;build&minus;top&minus;index</b> ] [
<b>&minus;%I &minus;&minus;search&minus;index</b> ] [
<b>&minus;pN &minus;&minus;priority[=N]</b> ] [ <b>&minus;S
<b>&minus;%I, &minus;&minus;search&minus;index</b> ] [
<b>&minus;pN, &minus;&minus;priority[=N]</b> ] [
<b>&minus;S,
&minus;&minus;stay&minus;on&minus;same&minus;dir</b> ] [
<b>&minus;D &minus;&minus;can&minus;go&minus;down</b> ] [
<b>&minus;U &minus;&minus;can&minus;go&minus;up</b> ] [
<b>&minus;B
<b>&minus;D, &minus;&minus;can&minus;go&minus;down</b> ] [
<b>&minus;U, &minus;&minus;can&minus;go&minus;up</b> ] [
<b>&minus;B,
&minus;&minus;can&minus;go&minus;up&minus;and&minus;down</b>
] [ <b>&minus;a
] [ <b>&minus;a,
&minus;&minus;stay&minus;on&minus;same&minus;address</b> ] [
<b>&minus;d
<b>&minus;d,
&minus;&minus;stay&minus;on&minus;same&minus;domain</b> ] [
<b>&minus;l
<b>&minus;l,
&minus;&minus;stay&minus;on&minus;same&minus;tld</b> ] [
<b>&minus;e &minus;&minus;go&minus;everywhere</b> ] [
<b>&minus;%H &minus;&minus;debug&minus;headers</b> ] [
<b>&minus;%!
<b>&minus;e, &minus;&minus;go&minus;everywhere</b> ] [
<b>&minus;%H, &minus;&minus;debug&minus;headers</b> ] [
<b>&minus;%!,
&minus;&minus;disable&minus;security&minus;limits</b> ] [
<b>&minus;V &minus;&minus;userdef&minus;cmd</b> ] [
<b>&minus;%W &minus;&minus;callback</b> ] [ <b>&minus;K
<b>&minus;V, &minus;&minus;userdef&minus;cmd</b> ] [
<b>&minus;%W, &minus;&minus;callback</b> ] [ <b>&minus;K,
&minus;&minus;keep&minus;links[=N]</b> ] [</p>
<h2>DESCRIPTION
@@ -184,7 +185,7 @@ sites</p>
www.someweb.com/bob/bobby.html +* &minus;r6</b></p>
<p style="margin-left:22%;">means get all files starting
from bobby.html with 6 link&minus;depth and possibility of
from bobby.html, with 6 link&minus;depth, and possibility of
going everywhere on the web</p>
<p style="margin-left:11%;"><b>httrack
@@ -233,7 +234,7 @@ options:</b></p>
<p>path for mirror/logfiles+cache (&minus;O path
mirror[path cache and logfiles]) (&minus;&minus;path
mirror[,path cache and logfiles]) (&minus;&minus;path
&lt;param&gt;)</p> </td></tr>
</table>
@@ -264,7 +265,7 @@ options:</b></p>
<td width="78%">
<p>mirror web sites semi&minus;automatic (asks questions)
<p>mirror web sites, semi&minus;automatic (asks questions)
(&minus;&minus;mirror&minus;wizard)</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -355,11 +356,11 @@ options:</b></p>
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p style="margin-top: 1em">&minus;rN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
@@ -367,11 +368,11 @@ options:</b></p>
r9999) (&minus;&minus;depth[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;%eN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
@@ -379,11 +380,11 @@ r9999) (&minus;&minus;depth[=N])</p></td></tr>
(&minus;&minus;ext&minus;depth[=N])</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;mN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
@@ -391,22 +392,22 @@ r9999) (&minus;&minus;depth[=N])</p></td></tr>
(&minus;&minus;max&minus;files[=N])</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;mNN2</p></td>
<td width="4%"></td>
<p>&minus;mN,N2</p></td>
<td width="2%"></td>
<td width="78%">
<p>maximum file length for non html (N) and html (N2)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;MN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
@@ -414,23 +415,23 @@ r9999) (&minus;&minus;depth[=N])</p></td></tr>
(&minus;&minus;max&minus;size[=N])</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;EN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
<p>maximum mirror time in seconds (60=1 minute 3600=1 hour)
(&minus;&minus;max&minus;time[=N])</p> </td></tr>
<p>maximum mirror time in seconds (60=1 minute, 3600=1
hour) (&minus;&minus;max&minus;time[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;AN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
@@ -438,11 +439,11 @@ r9999) (&minus;&minus;depth[=N])</p></td></tr>
(&minus;&minus;max&minus;rate[=N])</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;%cN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
@@ -450,15 +451,15 @@ r9999) (&minus;&minus;depth[=N])</p></td></tr>
(&minus;&minus;connection&minus;per&minus;second[=N])</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="7%">
<td width="9%">
<p>&minus;GN</p></td>
<td width="4%"></td>
<td width="2%"></td>
<td width="78%">
<p>pause transfer if N bytes reached and wait until lock
<p>pause transfer if N bytes reached, and wait until lock
file is deleted (&minus;&minus;max&minus;pause[=N])</p></td></tr>
</table>
@@ -489,7 +490,7 @@ control:</b></p>
<td width="78%">
<p>timeout number of seconds after a non&minus;responding
<p>timeout, number of seconds after a non&minus;responding
link is shutdown (&minus;&minus;timeout[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -501,7 +502,7 @@ link is shutdown (&minus;&minus;timeout[=N])</p></td></tr>
<td width="78%">
<p>number of retries in case of timeout or non&minus;fatal
<p>number of retries, in case of timeout or non&minus;fatal
errors (*R1) (&minus;&minus;retries[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -513,7 +514,7 @@ errors (*R1) (&minus;&minus;retries[=N])</p></td></tr>
<td width="78%">
<p>traffic jam control minimum transfert rate
<p>traffic jam control, minimum transfert rate
(bytes/seconds) tolerated for a link
(&minus;&minus;min&minus;rate[=N])</p> </td></tr>
<tr valign="top" align="left">
@@ -526,7 +527,7 @@ errors (*R1) (&minus;&minus;retries[=N])</p></td></tr>
<td width="78%">
<p>host is abandonned if: 0=never 1=timeout 2=slow
<p>host is abandonned if: 0=never, 1=timeout, 2=slow,
3=timeout or slow (&minus;&minus;host&minus;control[=N])</p></td></tr>
</table>
@@ -545,8 +546,8 @@ options:</b></p>
<td width="78%">
<p style="margin-top: 1em">*extended parsing attempt to
parse all links even in unknown tags or Javascript (%P0 don
<p style="margin-top: 1em">*extended parsing, attempt to
parse all links, even in unknown tags or Javascript (%P0 don
t use) (&minus;&minus;extended&minus;parsing[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -615,7 +616,7 @@ options:</b></p>
<p style="margin-top: 1em">structure type (0 *original
structure 1+: see below) (&minus;&minus;structure[=N])</p></td></tr>
structure, 1+: see below) (&minus;&minus;structure[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="4%">
@@ -638,9 +639,9 @@ structure 1+: see below) (&minus;&minus;structure[=N])</p></td></tr>
<td width="78%">
<p>delayed type check don t make any link test but wait for
files download to start instead (experimental) (%N0 don t
use %N1 use for unknown extensions * %N2 always use)</p></td></tr>
<p>delayed type check, don t make any link test but wait
for files download to start instead (experimental) (%N0 don
t use, %N1 use for unknown extensions, * %N2 always use)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="4%">
@@ -651,8 +652,8 @@ use %N1 use for unknown extensions * %N2 always use)</p></td></tr>
<td width="78%">
<p>cached delayed type check don t wait for remote type
during updates to speedup them (%D0 wait * %D1 don t wait)
<p>cached delayed type check, don t wait for remote type
during updates, to speedup them (%D0 wait, * %D1 don t wait)
(&minus;&minus;cached&minus;delayed&minus;type&minus;check)</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -691,8 +692,8 @@ L2 ISO9660 compatible)
<p>keep original links (e.g. http://www.adr/link) (K0
*relative link K absolute links K4 original links K3
absolute URI links K5 transparent proxy link)
*relative link, K absolute links, K4 original links, K3
absolute URI links, K5 transparent proxy link)
(&minus;&minus;keep&minus;links[=N])</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -729,7 +730,7 @@ protected websites (%x0 include)
<td width="78%">
<p>*include query string for local files (useless for
<p>*include query string for local files (useless, for
information purpose only) (%q0 don t include)
(&minus;&minus;include&minus;query&minus;string)</p> </td></tr>
<tr valign="top" align="left">
@@ -798,7 +799,7 @@ options:</b></p>
<p style="margin-top: 1em">accept cookies in cookies.txt
(0=do not accept* 1=accept) (&minus;&minus;cookies[=N])</p></td></tr>
(0=do not accept,* 1=accept) (&minus;&minus;cookies[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -809,8 +810,8 @@ options:</b></p>
<td width="78%">
<p>check document type if unknown (cgiasp..) (u0 don t
check * u1 check but / u2 check always)
<p>check document type if unknown (cgi,asp..) (u0 don t
check, * u1 check but /, u2 check always)
(&minus;&minus;check&minus;type[=N])</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -822,9 +823,9 @@ check * u1 check but / u2 check always)
<td width="78%">
<p>*parse Java Classes (j0 don t parse bitmask: |1 parse
default |2 don t parse .class |4 don t parse .js |8 don t be
aggressive) (&minus;&minus;parse&minus;java[=N])</p></td></tr>
<p>*parse Java Classes (j0 don t parse, bitmask: |1 parse
default, |2 don t parse .class |4 don t parse .js |8 don t
be aggressive) (&minus;&minus;parse&minus;java[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -836,8 +837,8 @@ aggressive) (&minus;&minus;parse&minus;java[=N])</p></td></tr>
<p>follow robots.txt and meta robots tags
(0=never1=sometimes* 2=always 3=always (even strict rules))
(&minus;&minus;robots[=N])</p> </td></tr>
(0=never,1=sometimes,* 2=always, 3=always (even strict
rules)) (&minus;&minus;robots[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -848,8 +849,9 @@ aggressive) (&minus;&minus;parse&minus;java[=N])</p></td></tr>
<td width="78%">
<p>force HTTP/1.0 requests (reduce update features only for
old servers or proxies) (&minus;&minus;http&minus;10)</p></td></tr>
<p>force HTTP/1.0 requests (reduce update features, only
for old servers or proxies)
(&minus;&minus;http&minus;10)</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -860,7 +862,7 @@ old servers or proxies) (&minus;&minus;http&minus;10)</p></td></tr>
<td width="78%">
<p>use keep&minus;alive if possible greately reducing
<p>use keep&minus;alive if possible, greately reducing
latency for small files and test requests (%k0 don t use)
(&minus;&minus;keep&minus;alive)</p> </td></tr>
<tr valign="top" align="left">
@@ -874,7 +876,7 @@ latency for small files and test requests (%k0 don t use)
<p>tolerant requests (accept bogus responses on some
servers but not standard!) (&minus;&minus;tolerant)</p></td></tr>
servers, but not standard!) (&minus;&minus;tolerant)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -886,7 +888,7 @@ servers but not standard!) (&minus;&minus;tolerant)</p></td></tr>
<p>update hacks: various hacks to limit re&minus;transfers
when updating (identical size bogus response..)
when updating (identical size, bogus response..)
(&minus;&minus;updatehack)</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -899,7 +901,7 @@ when updating (identical size bogus response..)
<p>url hacks: various hacks to limit duplicate URLs (strip
// www.foo.com==foo.com..) (&minus;&minus;urlhack)</p></td></tr>
//, www.foo.com==foo.com..) (&minus;&minus;urlhack)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -910,9 +912,9 @@ when updating (identical size bogus response..)
<td width="78%">
<p>assume that a type (cgiasp..) is always linked with a
<p>assume that a type (cgi,asp..) is always linked with a
mime type (&minus;%A
php3cgi=text/html;datbin=application/x&minus;zip)
php3,cgi=text/html;dat,bin=application/x&minus;zip)
(&minus;&minus;assume &lt;param&gt;)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -936,7 +938,7 @@ php3cgi=text/html;datbin=application/x&minus;zip)
<td width="78%">
<p>internet protocol (0=both ipv6+ipv4 4=ipv4 only 6=ipv6
<p>internet protocol (0=both ipv6+ipv4, 4=ipv4 only, 6=ipv6
only) (&minus;&minus;protocol[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -1018,7 +1020,7 @@ HTTP headers (&minus;F &quot;user&minus;agent name&quot;)
<td width="78%">
<p>preffered language (&minus;%l &quot;fr en jp *&quot;
<p>preffered language (&minus;%l &quot;fr, en, jp, *&quot;
(&minus;&minus;language &lt;param&gt;)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -1030,8 +1032,8 @@ HTTP headers (&minus;F &quot;user&minus;agent name&quot;)
<td width="78%">
<p>accepted formats (&minus;%l
&quot;text/htmlimage/pngimage/jpegimage/gif;q=0.9*/*;q=0.1&quot;
<p>accepted formats (&minus;%a
&quot;text/html,image/png;q=0.9,*/*;q=0.1&quot;
(&minus;&minus;accept &lt;param&gt;)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -1048,7 +1050,7 @@ HTTP headers (&minus;F &quot;user&minus;agent name&quot;)
&lt;param&gt;)</p> </td></tr>
</table>
<p style="margin-left:11%; margin-top: 1em"><b>Log index
<p style="margin-left:11%; margin-top: 1em"><b>Log, index,
cache</b></p>
<table width="100%" border="0" rules="none" frame="void"
@@ -1064,7 +1066,7 @@ cache</b></p>
<p style="margin-top: 1em">create/use a cache for updates
and retries (C0 no cacheC1 cache is prioritary* C2 test
and retries (C0 no cache,C1 cache is prioritary,* C2 test
update before) (&minus;&minus;cache[=N])</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -1247,7 +1249,7 @@ options:</b></p>
<td width="78%">
<p>just scan don t save anything (for checking links)</p></td></tr>
<p>just scan, don t save anything (for checking links)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -1291,7 +1293,7 @@ options:</b></p>
<td width="78%">
<p>get html files before then treat other files</p></td></tr>
<p>get html files before, then treat other files</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="6%">
@@ -1648,14 +1650,14 @@ doing)</b></p>
<p style="margin-top: 1em">bypass built&minus;in security
limits aimed to avoid bandwidth abuses (bandwidth
limits aimed to avoid bandwidth abuses (bandwidth,
simultaneous connections)
(&minus;&minus;disable&minus;security&minus;limits)</p> </td></tr>
</table>
<p style="margin-left:11%;">&minus;IMPORTANT</p>
<p style="margin-left:22%;">NOTE: DANGEROUS OPTION ONLY
<p style="margin-left:22%;">NOTE: DANGEROUS OPTION, ONLY
SUITABLE FOR EXPERTS</p>
<table width="100%" border="0" rules="none" frame="void"
@@ -1692,7 +1694,7 @@ specific options:</b></p>
<p style="margin-top: 1em">execute system command after
each files ($0 is the filename: &minus;V &quot;rm &quot;)
each files ($0 is the filename: &minus;V &quot;rm \$0&quot;)
(&minus;&minus;userdef&minus;cmd &lt;param&gt;)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -1705,7 +1707,7 @@ each files ($0 is the filename: &minus;V &quot;rm &quot;)
<p>use an external library function as a wrapper (&minus;%W
myfoo.so[myparameters]) (&minus;&minus;callback
myfoo.so[,myparameters]) (&minus;&minus;callback
&lt;param&gt;)</p> </td></tr>
</table>
@@ -1736,7 +1738,7 @@ Option N</b></p>
<td width="78%">
<p>HTML in web/ images/other files in web/images/</p></td></tr>
<p>HTML in web/, images/other files in web/images/</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
@@ -1747,7 +1749,7 @@ Option N</b></p>
<td width="78%">
<p>HTML in web/HTML images/other in web/images</p></td></tr>
<p>HTML in web/HTML, images/other in web/images</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
@@ -1758,7 +1760,7 @@ Option N</b></p>
<td width="78%">
<p>HTML in web/ images/other in web/</p></td></tr>
<p>HTML in web/, images/other in web/</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
@@ -1769,8 +1771,8 @@ Option N</b></p>
<td width="78%">
<p>HTML in web/ images/other in web/xxx where xxx is the
file extension (all gif will be placed onto web/gif for
<p>HTML in web/, images/other in web/xxx, where xxx is the
file extension (all gif will be placed onto web/gif, for
example)</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -1793,7 +1795,7 @@ example)</p> </td></tr>
<td width="78%">
<p>All files in web/ with random names (gadget !)</p></td></tr>
<p>All files in web/, with random names (gadget !)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
@@ -1804,7 +1806,7 @@ example)</p> </td></tr>
<td width="78%">
<p>Site&minus;structure without www.domain.xxx/</p></td></tr>
<p>Site&minus;structure, without www.domain.xxx/</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
@@ -1954,15 +1956,15 @@ directory</p> </td></tr>
<p style="margin-left:11%; margin-top: 1em"><b>Details:
User&minus;defined option N</b> <br>
%n Name of file without file type (ex: image) <br>
%N Name of file including file type (ex: image.gif) <br>
%N Name of file, including file type (ex: image.gif) <br>
%t File type (ex: gif) <br>
%p Path [without ending /] (ex: /someimages) <br>
%h Host name (ex: www.someweb.com) <br>
%M URL MD5 (128 bits 32 ascii bytes) <br>
%Q query string MD5 (128 bits 32 ascii bytes) <br>
%M URL MD5 (128 bits, 32 ascii bytes) <br>
%Q query string MD5 (128 bits, 32 ascii bytes) <br>
%k full query string <br>
%r protocol name (ex: http) <br>
%q small query string MD5 (16 bits 4 ascii bytes) <br>
%q small query string MD5 (16 bits, 4 ascii bytes) <br>
%s? Short name version (ex: %sN) <br>
%[param] param variable in query string <br>
%[param:before:after:empty:notfound] advanced variable
@@ -2040,8 +2042,8 @@ parameter could not be found</p>
<td width="78%">
<p>fields except the first one (the parameter name) can be
empty</p> </td></tr>
<p>fields, except the first one (the parameter name), can
be empty</p></td></tr>
</table>
<p style="margin-left:11%; margin-top: 1em"><b>Details:
@@ -2060,7 +2062,7 @@ Option K</b></p>
<p style="margin-top: 1em">foo.cgi?q=45 &minus;&gt;
foo4B54.html?q=45 (relative URI default)</p></td></tr>
foo4B54.html?q=45 (relative URI, default)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="4%">
@@ -2130,7 +2132,7 @@ site(s) (default)</p>
<td width="78%">
<p>&lt;URLs&gt; get the files indicated do not seek other
<p>&lt;URLs&gt; get the files indicated, do not seek other
URLs (&minus;qg)</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
@@ -2158,7 +2160,7 @@ pages (&minus;r1p0C0I0t)</p>
<p style="margin-left:11%;">&minus;&minus;spider</p>
<p style="margin-left:22%;">&lt;URLs&gt; spider site(s) to
<p style="margin-left:22%;">&lt;URLs&gt; spider site(s), to
test links: reports Errors &amp; Warnings
(&minus;p0C0I0t)</p>
@@ -2169,17 +2171,17 @@ test links: reports Errors &amp; Warnings
<p style="margin-left:11%;">&minus;&minus;skeleton</p>
<p style="margin-left:22%;">&lt;URLs&gt; make a mirror but
<p style="margin-left:22%;">&lt;URLs&gt; make a mirror, but
gets only html files (&minus;p1)</p>
<p style="margin-left:11%;">&minus;&minus;update</p>
<p style="margin-left:22%;">update a mirror without
<p style="margin-left:22%;">update a mirror, without
confirmation (&minus;iC2)</p>
<p style="margin-left:11%;">&minus;&minus;continue</p>
<p style="margin-left:22%;">continue a mirror without
<p style="margin-left:22%;">continue a mirror, without
confirmation (&minus;iC1)</p>
<p style="margin-left:11%;">&minus;&minus;catchurl</p>

View File

@@ -6,79 +6,9 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -139,7 +69,7 @@ ${LANG_K3} : ${HTTRACK_WEB}
<form>
<input type="button" value="OK" onClick="window.close();"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</form>

View File

@@ -6,75 +6,10 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -138,7 +73,7 @@ function info(str) {
<td id="subTitle" align="right">
<a href="/server/file.html" target="_blank"
onClick="window.open('/server/file.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O1}
@@ -150,7 +85,7 @@ ${do:if-file-exists:html/index.html}
<td id="subTitle" align="right">
<a href="/index.html" target="_blank"
onClick="window.open('/server/help.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O5}
@@ -183,20 +118,20 @@ ${do:end-if}
<form action="${thisfile}" name="form">
<table width="100%">
<tr><td>${LANG_T2}</td><td>http://<input name="urladr"
onMouseOver="info('${LANG_T10}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_T10}'); return true" onMouseOut="info('&nbsp;'); return true"
></td></tr>
<tr><td colspan=2>
<table width="100%">
<th>${LANG_T4}</th>
<tr><td>${LANG_T5}:</td><td><input name="urllogin"
onMouseOver="info('${LANG_T12}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_T12}'); return true" onMouseOut="info('&nbsp;'); return true"
></td></tr>
<tr><td>${LANG_T6}:</td><td><input name="urlpass"
onMouseOver="info('${LANG_T13}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_T13}'); return true" onMouseOut="info('&nbsp;'); return true"
></td></tr>
<tr><td>${LANG_T7}:</td><td><input type="button" value="${LANG_T8}" onClick="alert('not yet implemented!')"
onMouseOver="info('${LANG_T14}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_T14}'); return true" onMouseOut="info('&nbsp;'); return true"
></td></tr>
</table>
@@ -204,7 +139,7 @@ ${do:end-if}
<tr><td>
<input type="button" value="OK" onClick="if (do_add()) { window.close(); }"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>

View File

@@ -6,75 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--

View File

@@ -7,10 +7,10 @@
<title>'${projname}' - HTTrack Website Copier</title>
<script language="javascript">
<!--
<!--
function do_load() {
window.status=' ';
window.close();
window.close();
}
function do_unload() {
}

View File

@@ -6,79 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--

View File

@@ -6,75 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -103,7 +36,7 @@ function info(str) {
<td id="subTitle" align="right">
<a href="/server/file.html" target="_blank"
onClick="window.open('/server/file.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O1}
@@ -115,7 +48,7 @@ ${do:if-file-exists:html/index.html}
<td id="subTitle" align="right">
<a href="/index.html" target="_blank"
onClick="window.open('/server/help.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O5}
@@ -147,23 +80,23 @@ ${do:end-if}
<br>
<pre>
${do:if-not-empty:commandReturn}
${LANG_F19}
<font color="red">
${commandReturnMsg}
</font>
${LANG_F20}
<font color="blue">
httrack ${commandReturnCmdl}
</font>
${LANG_F21}
${do:end-if}
${do:if-empty:commandReturn}
<pre>
${do:if-not-empty:commandReturn}
${LANG_F19}
<font color="red">
${commandReturnMsg}
</font>
${LANG_F20}
<font color="blue">
httrack ${commandReturnCmdl}
</font>
${LANG_F21}
${do:end-if}
${do:if-empty:commandReturn}
${LANG_F22}
${do:end-if}
${do:end-if}
</pre>
${LANG_G8} :
@@ -177,7 +110,7 @@ ${path}/${projname}
<li><a href="/website/hts-log.txt" target="_new">${LANG_D4}</a></li>
</ul>
<form method="POST" action="exit.html" name="form">
<form method="POST" action="exit.html" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="command" value="quit">
@@ -191,8 +124,8 @@ ${path}/${projname}
<table width="100%" border="0"><tr><td align="left">
&nbsp;
</td><td align="right">
<input type="submit" value=" ${LANG_QUIT} "
onClick="form.submit()">
<input type="submit" value=" ${LANG_QUIT} "
onClick="form.submit()">
</td></tr></table>
</td></tr>

View File

@@ -6,79 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -129,7 +58,7 @@ function info(str) {
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr><td class="tabCtrl" align="left">
<a style="background:black;color: white" href="about.html" target="_new"
onMouseOver="info('${LANG_G21}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G21}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${LANG_O16}...
</a>
@@ -138,7 +67,7 @@ ${LANG_O16}...
<tr><td class="tabCtrl" align="left">
<a style="background:black;color: white"
href="http://www.httrack.com/update.php3?Product=HTTrack&Version=${HTTRACK_VERSIONID}&VersionStr=${HTTRACK_VERSION}&Platform=${HTS_PLATFORM}&LanguageId=${lang}" target="_new"
onMouseOver="info('${LANG_O17}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_O17}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${LANG_O17}...
</a>
@@ -149,7 +78,7 @@ ${do:if-file-exists:html/index.html}
<tr><td class="tabCtrl" align="left">
<a style="background:black;color: white"
href="/index.html" target="_new"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${LANG_P16}
</a>

View File

@@ -6,75 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>HTTrack Website Copier - Offline Browser</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -110,7 +43,7 @@ function info(str) {
<td id="subTitle" align="right">
<a href="/server/file.html" target="_blank"
onClick="window.open('/server/file.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O1}
@@ -122,7 +55,7 @@ ${do:if-file-exists:html/index.html}
<td id="subTitle" align="right">
<a href="/index.html" target="_blank"
onClick="window.open('/server/help.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O5}
@@ -180,7 +113,7 @@ ${LANG_THANKYOU}!
<tr><td align="right">
<input name="nextBtn" type="submit" value=" ${LANG_NEXT} >> "
onMouseOver="info('${LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt1.html" target="_blank"
onClick="window.open('/step9_opt1.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,7 +96,7 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<!-- clear if not checked -->
<input type="hidden" name="parseall" value="">
@@ -178,34 +107,34 @@ ${do:end-if}
<!-- checkboxes -->
<table border="0" width="100%" cellspacing="0">
<tr><td><input type="checkbox" name="parseall" ${checked:parseall}
onMouseOver="info('${LANG_I1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I31}</td></tr>
<tr><td><input type="checkbox" name="link" ${checked:link}
onMouseOver="info('${LANG_I2}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I2}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I32}</td></tr>
<tr><td><input type="checkbox" name="testall" ${checked:testall}
onMouseOver="info('${LANG_I2b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I2b}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I32b}</td></tr>
<tr><td><input type="checkbox" name="htmlfirst" ${checked:htmlfirst}
onMouseOver="info('${LANG_I2c}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I2c}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I32c}</td></tr>
</table>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt7.html" target="_blank"
onClick="window.open('/step9_opt7.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,37 +96,37 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
${LANG_IOPT10}:
<input name="prox" value="${prox}" size="32"
onMouseOver="info('${LANG_G14}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G14}'); return true" onMouseOut="info('&nbsp;'); return true"
>:
<input name="portprox" value="${portprox}" size="4"
onMouseOver="info('${LANG_G15}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G15}'); return true" onMouseOut="info('&nbsp;'); return true"
>
<br>
<input type="checkbox" name="ftpprox" ${checked:ftpprox}
onMouseOver="info('${LANG_G15c}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G15c}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I47c}
<br><br>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt9.html" target="_blank"
onClick="window.open('/step9_opt9.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,7 +96,7 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
${LANG_W1}:
<br>
@@ -183,97 +112,97 @@ ${LANG_W3}
<td align="left">
<input name="ext1" value="${ext1}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime1" value="${mime1}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
<td align="left">
<input name="ext2" value="${ext2}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime2" value="${mime2}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
<td align="left">
<input name="ext3" value="${ext3}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime3" value="${mime3}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
<td align="left">
<input name="ext4" value="${ext4}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime4" value="${mime4}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
<td align="left">
<input name="ext5" value="${ext5}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime5" value="${mime5}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
<td align="left">
<input name="ext6" value="${ext6}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime6" value="${mime6}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
<td align="left">
<input name="ext7" value="${ext7}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime7" value="${mime7}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
<td align="left">
<input name="ext8" value="${ext8}"
onMouseOver="info('${LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="left">
&#x21d4;
</td><td align="left">
<input name="mime8" value="${mime8}"
onMouseOver="info('${LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_W5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<!-- -->
@@ -283,21 +212,21 @@ ${LANG_W3}
<br><br>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,94 +6,23 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
function info(str) {
window.status = str;
}
}
// -->
</script>
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt5.html" target="_blank"
onClick="window.open('/step9_opt5.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,62 +96,62 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
${LANG_I33}
<br>
<select name="build"
onMouseOver="info('${LANG_I3}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I3}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:build:LISTDEF_3}
</select>
<input type="button" value="${LANG_O2}"
onClick="form.build.selectedIndex=14; window.open('option2b.html', 'option2b', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480').wparent=document; form.submit();"
onMouseOver="info('${LANG_I4}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I4}'); return true" onMouseOut="info('&nbsp;'); return true"
>
<!-- checkboxes -->
<table border="0" width="100%" cellspacing="0">
<tr><td>
<select name="dos"
onMouseOver="info('${LANG_I8}\r\n${LANG_I8b}'); return true" onMouseOut="info('&nbsp;'); return true"
>
<option value="0"${ztest:dos: selected::}>&nbsp;</option>
<option value="1"${ztest:dos:: selected:}>${LANG_I37}</option>
<option value="2"${ztest:dos::: selected}>${LANG_I37b}</option>
</select>
<tr><td>
<select name="dos"
onMouseOver="info('${html:LANG_I8}\r\n${LANG_I8b}'); return true" onMouseOut="info('&nbsp;'); return true"
>
<option value="0"${ztest:dos: selected::}>&nbsp;</option>
<option value="1"${ztest:dos:: selected:}>${LANG_I37}</option>
<option value="2"${ztest:dos::: selected}>${LANG_I37b}</option>
</select>
</td></tr>
<tr><td><input type="checkbox" name="errpage" ${checked:errpage}
onMouseOver="info('${LANG_I9}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I9}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I38}</td></tr>
<tr><td><input type="checkbox" name="external" ${checked:external}
onMouseOver="info('${LANG_I29}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I29}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I56}</td></tr>
<tr><td><input type="checkbox" name="hidepwd" ${checked:hidepwd}
onMouseOver="info('${LANG_I30}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I30}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I66}</td></tr>
<tr><td><input type="checkbox" name="hidequery" ${checked:hidequery}
onMouseOver="info('${LANG_I30b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I30b}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I67}</td></tr>
<tr><td><input type="checkbox" name="nopurge" ${checked:nopurge}
onMouseOver="info('${LANG_I1a}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1a}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I57}</td></tr>
</table>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -141,7 +70,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt5.html" target="_blank"
onClick="window.open('/step9_opt5.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -155,7 +84,7 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<input name="BuildString" size="60" value="${BuildString}">
@@ -170,25 +99,25 @@ ${LANG_Q3}
</pre>
<br>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK]"
${do:output-mode:html-urlescaped}
onClick="if (confirm(str_replace(str_replace('${LANG_DIAL7}', '%20', ' '), '%0a', ' '))) { form.closeme.value=1; form.submit(); } return false;"
${do:output-mode:}
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK]"
${do:output-mode:html-urlescaped}
onClick="if (confirm(str_replace(str_replace('${LANG_DIAL7}', '%20', ' '), '%0a', ' '))) { form.closeme.value=1; form.submit(); } return false;"
${do:output-mode:}
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>
</td></tr>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt10.html" target="_blank"
onClick="window.open('/step9_opt10.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,7 +96,7 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
${LANG_I40c}
<br>
@@ -175,7 +104,7 @@ ${LANG_I40c}
<!-- checkboxes -->
<table border="0" width="100%" cellspacing="0">
<tr><td><input type="checkbox" name="cache" ${checked:cache}
onMouseOver="info('${LANG_I5}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I5}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I34}</td></tr>
</table>
<br>
@@ -183,7 +112,7 @@ ${LANG_I40c}
${LANG_I39}
<br>
<select name="filter"
onMouseOver="info('${LANG_I29}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I29}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:filter:LISTDEF_4}
</select>
@@ -192,7 +121,7 @@ ${listid:filter:LISTDEF_4}
${LANG_I40}
<br>
<select name="travel"
onMouseOver="info('${LANG_I11}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I11}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:travel:LISTDEF_5}
</select>
@@ -201,7 +130,7 @@ ${listid:travel:LISTDEF_5}
${LANG_I40b}
<br>
<select name="travel2"
onMouseOver="info('${LANG_I11b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I11b}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:travel2:LISTDEF_6}
</select>
@@ -210,7 +139,7 @@ ${listid:travel2:LISTDEF_6}
${LANG_I40e}
<br>
<select name="travel3"
onMouseOver="info('${LANG_I11c}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I11c}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:travel3:LISTDEF_11}
</select>
@@ -219,26 +148,26 @@ ${listid:travel3:LISTDEF_11}
<!-- checkboxes -->
<table border="0" width="100%" cellspacing="0">
<tr><td><input type="checkbox" name="windebug" ${checked:windebug}
onMouseOver="info('${LANG_I1h}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1h}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I40d}</td></tr>
</table>
<br>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt3.html" target="_blank"
onClick="window.open('/step9_opt3.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,7 +96,7 @@ ${do:end-if}
<form method="POST" action="refresh.html" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<table border="0" width="100%" cellspacing="0">
@@ -175,11 +104,11 @@ ${do:end-if}
${LANG_I44}
</td><td>
<input name="connexion" value="${connexion}" size="4"
onMouseOver="info('${LANG_I12}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I12}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr><tr><td></td><td>
<input type="checkbox" name="ka" ${checked:ka}
onMouseOver="info('${LANG_I47f}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I47f}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I47e}
</td></tr>
@@ -187,11 +116,11 @@ ${LANG_I44}
${LANG_I47d}
</td><td>
<input name="timeout" value="${timeout}" size="4"
onMouseOver="info('${LANG_I13}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I13}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr><tr><td></td><td>
<input type="checkbox" name="remt" ${checked:remt}
onMouseOver="info('${LANG_I14}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I14}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I45}
</td></tr>
@@ -199,7 +128,7 @@ ${LANG_I47d}
${LANG_I48}
</td><td>
<input name="retry" value="${retry}" size="4"
onMouseOver="info('${LANG_I17}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I17}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -207,31 +136,31 @@ ${LANG_I48}
${LANG_I46}
</td><td>
<input name="rate" value="${rate}" size="4"
onMouseOver="info('${LANG_I15}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I15}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr><tr><td></td><td>
<input type="checkbox" name="rems" ${checked:rems}
onMouseOver="info('${LANG_I16}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I16}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I47}
</td></tr>
</table>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt2.html" target="_blank"
onClick="window.open('/step9_opt2.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,7 +96,7 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<table border="0" width="100%" cellspacing="0">
@@ -175,7 +104,7 @@ ${do:end-if}
${LANG_G32}
</td><td>
<input name="depth" value="${depth}" size="4"
onMouseOver="info('${LANG_I1g}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1g}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -183,7 +112,7 @@ ${LANG_G32}
${LANG_G32b}
</td><td>
<input name="depth2" value="${depth2}" size="4"
onMouseOver="info('${LANG_I1g2}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1g2}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -191,7 +120,7 @@ ${LANG_G32b}
${LANG_I50}
</td><td>
<input name="maxhtml" value="${maxhtml}" size="4"
onMouseOver="info('${LANG_I18}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I18}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -199,7 +128,7 @@ ${LANG_I50}
${LANG_I50b}
</td><td>
<input name="othermax" value="${othermax}" size="4"
onMouseOver="info('${LANG_I19}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I19}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -207,7 +136,7 @@ ${LANG_I50b}
${LANG_I51}
</td><td>
<input name="sizemax" value="${sizemax}" size="4"
onMouseOver="info('${LANG_I20}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I20}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -215,7 +144,7 @@ ${LANG_I51}
${LANG_I65}
</td><td>
<input name="pausebytes" value="${pausebytes}" size="4"
onMouseOver="info('${LANG_I20b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I20b}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -223,7 +152,7 @@ ${LANG_I65}
${LANG_I52}
</td><td>
<input name="maxtime" value="${maxtime}" size="4"
onMouseOver="info('${LANG_I21}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I21}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -231,7 +160,7 @@ ${LANG_I52}
${LANG_I54}
</td><td>
<input name="maxrate" value="${maxrate}" size="4"
onMouseOver="info('${LANG_I22}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I22}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -239,7 +168,7 @@ ${LANG_I54}
${LANG_I64}
</td><td>
<input name="maxconn" value="${maxconn}" size="4"
onMouseOver="info('${LANG_I22b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I22b}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -247,25 +176,25 @@ ${LANG_I64}
${LANG_I64b}
</td><td>
<input name="maxlinks" value="${maxlinks}" size="4"
onMouseOver="info('${LANG_I22c}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I22c}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</table>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt8.html" target="_blank"
onClick="window.open('/step9_opt8.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,7 +96,7 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<table border="0" width="100%" cellspacing="0">
@@ -175,7 +104,7 @@ ${do:end-if}
${LANG_I43}
</td><td>
<input name="user" value="${user}" size="60"
onMouseOver="info('${LANG_I23}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I23}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
@@ -183,27 +112,27 @@ ${LANG_I43}
${LANG_I43b}
</td><td>
<input name="footer" value="${footer}" size="60"
onMouseOver="info('${LANG_I23b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I23b}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt4.html" target="_blank"
onClick="window.open('/step9_opt4.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,13 +96,13 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<tt>
${LANG_B10}
</tt>
<textarea name="url2" cols="60" rows="8"
onMouseOver="info('${LANG_C3}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_C3}'); return true" onMouseOut="info('&nbsp;'); return true"
>${url2}</textarea>
<br>
@@ -181,21 +110,21 @@ ${LANG_B10}
${LANG_B13}
</tt>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt6.html" target="_blank"
onClick="window.open('/step9_opt6.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,72 +96,72 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<input type="checkbox" name="cookies" ${checked:cookies}
onMouseOver="info('${LANG_I1b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1b}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I58}
<br><br>
${LANG_I59}
<br>
<select name="checktype"
onMouseOver="info('${LANG_I1c}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1c}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:checktype:LISTDEF_7}
</select>
<br><br>
<input type="checkbox" name="parsejava" ${checked:parsejava}
onMouseOver="info('${LANG_I1d}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1d}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I60}
<br><br>
${LANG_I55}
<br>
<select name="robots"
onMouseOver="info('${LANG_I28}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I28}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:robots:LISTDEF_8}
</select>
<br><br>
<input type="checkbox" name="updhack" ${checked:updhack}
onMouseOver="info('${LANG_I1k}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1k}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I62b}
<br><br>
<input type="checkbox" name="urlhack" ${checked:urlhack}
onMouseOver="info('${LANG_I1k2}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1k2}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I62b2}
<br><br>
<input type="checkbox" name="toler" ${checked:toler}
onMouseOver="info('${LANG_I1i}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1i}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I62}
<br><br>
<input type="checkbox" name="http10" ${checked:http10}
onMouseOver="info('${LANG_I1j}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1j}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I63}
<br><br>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

View File

@@ -6,88 +6,17 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
${do:if-not-empty:closeme}
window.close();
${do:end-if}
${do:set:closeme:}
}
function do_unload() {
}
@@ -131,7 +60,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step9_opt9.html" target="_blank"
onClick="window.open('/step9_opt9.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -142,18 +71,18 @@ ${do:end-if}
<table class="tableWidth" border="0" width="100%" cellspacing="0">
<tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option1.html" onClick="form.redirect.value='option1.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT1}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT1}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option2.html" onClick="form.redirect.value='option2.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT2}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT2}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option3.html" onClick="form.redirect.value='option3.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT3}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT3}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option4.html" onClick="form.redirect.value='option4.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT4}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT4}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option5.html" onClick="form.redirect.value='option5.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT5}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT5}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option11.html" onClick="form.redirect.value='option11.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT11}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT11}</a></td>
</tr><tr>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option6.html" onClick="form.redirect.value='option6.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT6}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT6}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option7.html" onClick="form.redirect.value='option7.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT7}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT7}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option8.html" onClick="form.redirect.value='option8.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT8}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT8}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option9.html" onClick="form.redirect.value='option9.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT9}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT9}</a></td>
<td class="tabCtrl" align="center"><a style="background:black;color: white" href="option10.html" onClick="form.redirect.value='option10.html'; form.submit(); return false;" align="center" onMouseOver="info('${html:LANG_IOPT10}'); return true" onMouseOut="info('&nbsp;'); return true">${LANG_IOPT10}</a></td>
<td class="tabCtrl" align="center">&nbsp;</td>
</tr>
@@ -167,53 +96,53 @@ ${do:end-if}
<form method="POST" action="${thisfile}" name="form">
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="closeme" value="">
<input type="hidden" name="closeme" value="">
<input type="checkbox" name="cache2" ${checked:cache2}
onMouseOver="info('${LANG_I1e}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1e}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I61}
<br><br>
<input type="checkbox" name="norecatch" ${checked:norecatch}
onMouseOver="info('${LANG_I5b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I5b}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I34b}
<br><br>
<input type="checkbox" name="logf" ${checked:logf}
onMouseOver="info('${LANG_I7}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I7}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I36}
<select name="logtype"
onMouseOver="info('${LANG_I1f}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I1f}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:logtype:LISTDEF_9}
</select>
<br><br>
<input type="checkbox" name="index" ${checked:index}
onMouseOver="info('${LANG_I6}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I6}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I35}
<br><br>
<input type="checkbox" name="index2" ${checked:index2}
onMouseOver="info('${LANG_I6b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_I6b}'); return true" onMouseOut="info('&nbsp;'); return true"
> ${LANG_I35b}
<br><br>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
<tr><td>
<table width="100%">
<tr><td align="left">
<input type="submit" value="${LANG_OK}"
onClick="form.closeme.value=1; form.submit(); return false;"
onMouseOver="info('${html:LANG_TIPOK}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input type="button" value="${LANG_CANCEL}"
onClick="window.close();"
onMouseOver="info('${html:LANG_TIPCANCEL}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr>
</table>
</td></tr>
</form>

26
html/server/ping.js Normal file
View File

@@ -0,0 +1,26 @@
// Function aimed to ping the webhttrack server regularly to keep it alive
// If the browser window is closed, the server will eventually shutdown
function ping_server() {
var iframe = document.getElementById('pingiframe');
if (iframe && iframe.src) {
iframe.src = iframe.src;
setTimeout(ping_server, 30000);
}
}
// Create an invisible iframe to hold the server ping result
// Only modern browsers will support that, but old browsers are compatible
// with the legacy "wait for browser PID" mode
if (document && document.createElement && document.body
&& document.body.appendChild && document.getElementById) {
var iframe = document.createElement('iframe');
if (iframe) {
iframe.id = 'pingiframe';
iframe.style.display = "none";
iframe.style.visibility = "hidden";
iframe.width = iframe.height = 0;
iframe.src = "/ping";
document.body.appendChild(iframe);
ping_server();
}
}

View File

@@ -7,122 +7,55 @@
<META http-equiv="refresh" content="30; URL=finished.html">
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
<!--
var freeze=0;
setTimeout(do_refresh, 1000);
setTimeout(do_refresh, 1000);
function do_load() {
window.status=' ';
enable_timer();
}
function disable_timer() {
if (freeze == 0) {
freeze=1;
}
window.status=' ';
enable_timer();
}
function disable_timer() {
if (freeze == 0) {
freeze=1;
}
}
function lock_timer() {
freeze=2;
}
function enable_timer() {
if (freeze == 1) {
freeze=0;
}
}
function unlock_timer() {
freeze=0;
}
function do_confirm(str) {
lock_timer();
ret=confirm(str);
if (!ret) {
unlock_timer();
}
return ret;
}
function lock_timer() {
freeze=2;
}
function enable_timer() {
if (freeze == 1) {
freeze=0;
}
}
function unlock_timer() {
freeze=0;
}
function do_confirm(str) {
lock_timer();
ret=confirm(str);
if (!ret) {
unlock_timer();
}
return ret;
}
function do_unload() {
}
function info(str) {
window.status = str;
}
function do_refresh() {
if (!freeze) {
document.location.reload();
} else {
setTimeout(do_refresh, 1000);
}
}
function no_refresh() {
}
function do_refresh() {
if (!freeze) {
document.location.reload();
} else {
setTimeout(do_refresh, 1000);
}
}
function no_refresh() {
}
// -->
</script>
@@ -140,7 +73,7 @@ function no_refresh() {
<td id="subTitle" align="right">
<a href="/server/file.html" target="_blank"
onClick="window.open('/server/file.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O1}
@@ -152,7 +85,7 @@ ${do:if-file-exists:html/index.html}
<td id="subTitle" align="right">
<a href="/index.html" target="_blank"
onClick="window.open('/server/help.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O5}
@@ -198,8 +131,8 @@ ${do:end-if}
</tr>
</table>
<br>
<br>
<table border="0" width="100%">
<tr>
@@ -210,8 +143,8 @@ ${LANG_H20} ${info.currentjob}
</td>
</tr>
</table>
<br>
<br>
<form method="POST" action="step4.html" name="form">
<input type="hidden" name="sid" value="${sid}">
@@ -219,20 +152,20 @@ ${LANG_H20} ${info.currentjob}
<table border="0" width="100%">
<tr><td>${info.state[0]}</td><td>${info.name[0]}</td><td>${info.file[0]}</td><td>${info.size[0]}/${info.sizetot[0]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[0]}'; form.submit()" onMouseOver="info('${LANG_H6}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[1]}</td><td>${info.name[1]}</td><td>${info.file[1]}</td><td>${info.size[1]}/${info.sizetot[1]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[1]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[2]}</td><td>${info.name[2]}</td><td>${info.file[2]}</td><td>${info.size[2]}/${info.sizetot[2]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[2]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[3]}</td><td>${info.name[3]}</td><td>${info.file[3]}</td><td>${info.size[3]}/${info.sizetot[3]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[3]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[4]}</td><td>${info.name[4]}</td><td>${info.file[4]}</td><td>${info.size[4]}/${info.sizetot[4]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[4]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[5]}</td><td>${info.name[5]}</td><td>${info.file[5]}</td><td>${info.size[5]}/${info.sizetot[5]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[5]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[6]}</td><td>${info.name[6]}</td><td>${info.file[6]}</td><td>${info.size[6]}/${info.sizetot[6]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[6]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[7]}</td><td>${info.name[7]}</td><td>${info.file[7]}</td><td>${info.size[7]}/${info.sizetot[7]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[7]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[8]}</td><td>${info.name[8]}</td><td>${info.file[8]}</td><td>${info.size[8]}/${info.sizetot[8]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[8]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[9]}</td><td>${info.name[9]}</td><td>${info.file[9]}</td><td>${info.size[9]}/${info.sizetot[9]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[9]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[10]}</td><td>${info.name[10]}</td><td>${info.file[10]}</td><td>${info.size[10]}/${info.sizetot[10]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[10]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[11]}</td><td>${info.name[11]}</td><td>${info.file[11]}</td><td>${info.size[11]}/${info.sizetot[11]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[11]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[12]}</td><td>${info.name[12]}</td><td>${info.file[12]}</td><td>${info.size[12]}/${info.sizetot[12]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[12]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[13]}</td><td>${info.name[13]}</td><td>${info.file[13]}</td><td>${info.size[13]}/${info.sizetot[13]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[13]}'; form.submit()" onMouseOver="info('${LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[0]}</td><td>${info.name[0]}</td><td>${info.file[0]}</td><td>${info.size[0]}/${info.sizetot[0]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[0]}'; form.submit()" onMouseOver="info('${html:LANG_H6}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[1]}</td><td>${info.name[1]}</td><td>${info.file[1]}</td><td>${info.size[1]}/${info.sizetot[1]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[1]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[2]}</td><td>${info.name[2]}</td><td>${info.file[2]}</td><td>${info.size[2]}/${info.sizetot[2]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[2]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[3]}</td><td>${info.name[3]}</td><td>${info.file[3]}</td><td>${info.size[3]}/${info.sizetot[3]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[3]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[4]}</td><td>${info.name[4]}</td><td>${info.file[4]}</td><td>${info.size[4]}/${info.sizetot[4]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[4]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[5]}</td><td>${info.name[5]}</td><td>${info.file[5]}</td><td>${info.size[5]}/${info.sizetot[5]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[5]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[6]}</td><td>${info.name[6]}</td><td>${info.file[6]}</td><td>${info.size[6]}/${info.sizetot[6]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[6]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[7]}</td><td>${info.name[7]}</td><td>${info.file[7]}</td><td>${info.size[7]}/${info.sizetot[7]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[7]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[8]}</td><td>${info.name[8]}</td><td>${info.file[8]}</td><td>${info.size[8]}/${info.sizetot[8]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[8]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[9]}</td><td>${info.name[9]}</td><td>${info.file[9]}</td><td>${info.size[9]}/${info.sizetot[9]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[9]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[10]}</td><td>${info.name[10]}</td><td>${info.file[10]}</td><td>${info.size[10]}/${info.sizetot[10]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[10]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[11]}</td><td>${info.name[11]}</td><td>${info.file[11]}</td><td>${info.size[11]}/${info.sizetot[11]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[11]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[12]}</td><td>${info.name[12]}</td><td>${info.file[12]}</td><td>${info.size[12]}/${info.sizetot[12]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[12]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
<tr><td>${info.state[13]}</td><td>${info.name[13]}</td><td>${info.file[13]}</td><td>${info.size[13]}/${info.sizetot[13]}</td><td><input type="submit" value="${LANG_H15}" onClick="form.command.value='cancel-file=${info.url_sav[13]}'; form.submit()" onMouseOver="info('${html:LANG_H7}'); return true" onMouseOut="info('&nbsp;'); return true"></td></tr>
</table>
@@ -246,10 +179,10 @@ ${LANG_H20} ${info.currentjob}
<table width="100%" border="0"><tr><td align="left">
&nbsp;
</td><td align="right">
<input type="submit" value=" ${LANG_V4} "
onMouseOver="disable_timer(); info('${LANG_D3}'); return true"
onMouseOut="info('&nbsp;'); enable_timer(); return true"
onClick="if (do_confirm('${LANG_G1}')) { form.command.value='cancel'; form.submit(); } return false"
<input type="submit" value=" ${LANG_V4} "
onMouseOver="disable_timer(); info('${LANG_D3}'); return true"
onMouseOut="info('&nbsp;'); enable_timer(); return true"
onClick="if (do_confirm('${LANG_G1}')) { form.command.value='cancel'; form.submit(); } return false"
>
</td></tr></table>

View File

@@ -6,75 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -119,7 +52,7 @@ function info(str) {
<td id="subTitle" align="right">
<a href="/server/file.html" target="_blank"
onClick="window.open('/server/file.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:html:LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O1}
@@ -131,7 +64,7 @@ ${do:if-file-exists:html/index.html}
<td id="subTitle" align="right">
<a href="/index.html" target="_blank"
onClick="window.open('/server/help.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O5}
@@ -160,18 +93,18 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step1.html" target="_blank"
onClick="window.open('/step1.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
</tr></table>
${/* Default values for empty settings */}
${do:set:cache:1}
${do:set:cache:1}
${/* Convert winprofile.ini into internal variables */}
${do:copy:CurrentUrl:urls}
${do:copy:Category:projcateg}
${do:copy:CurrentUrl:urls}
${do:copy:Category:projcateg}
${do:copy:CurrentAction:todo}
${do:copy:CurrentURLList:filelist}
${do:copy:Proxy:proxy}
@@ -267,7 +200,7 @@ ${do:end-if}
${do:loadhash}
${LANG_S11b}
<select name="loadprojname" onChange="form.redirect.value='step2.html'; form.submit()">
<option value="">&nbsp;</option>
@@ -278,30 +211,30 @@ ${do:loadhash}
${LANG_S11}
<input name="projname" value="${projname}"
onMouseOver="info('${LANG_S1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:html:LANG_S1}'); return true" onMouseOut="info('&nbsp;'); return true"
>
<br>
<table border="0">
<tr><td>
${LANG_S13}
<select name="loadprojcateg" onChange="form.redirect.value='step2.html'; form.submit()">
<option value="">&nbsp;</option>
${liststr:wincateg}
</select>
</td><td>
<input name="projcateg" value="${projcateg}"
onMouseOver="info('${LANG_S5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>
<br>
<table border="0">
<tr><td>
${LANG_S13}
<select name="loadprojcateg" onChange="form.redirect.value='step2.html'; form.submit()">
<option value="">&nbsp;</option>
${liststr:wincateg}
</select>
</td><td>
<input name="projcateg" value="${projcateg}"
onMouseOver="info('${html:html:LANG_S5}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>
<br>
${LANG_S12}
<input name="path" value="${path}"
onMouseOver="info('${LANG_S2}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:html:LANG_S2}'); return true" onMouseOut="info('&nbsp;'); return true"
>
<input type="button" value="refresh" onClick="form.redirect.value='step2.html'; form.submit()">
@@ -310,11 +243,11 @@ ${do:loadhash}
<tr><td>
<table width="100%" border="0"><tr><td align="left">
<input type="submit" value=" << ${LANG_PREVIOUS} " onClick="form.redirect.value='index.html'; form.submit()"
onMouseOver="info('${LANG_TIPPREV}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:html:LANG_TIPPREV}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input name="nextBtn" type="submit" value=" ${LANG_NEXT} >> " onClick="return checkname();" default
onMouseOver="info('${LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:html:LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>

View File

@@ -6,75 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -128,7 +61,7 @@ function do_check_child() {
<td id="subTitle" align="right">
<a href="/server/file.html" target="_blank"
onClick="window.open('/server/file.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O1}
@@ -140,7 +73,7 @@ ${do:if-file-exists:html/index.html}
<td id="subTitle" align="right">
<a href="/index.html" target="_blank"
onClick="window.open('/server/help.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O5}
@@ -169,7 +102,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step2.html" target="_blank"
onClick="window.open('/step2.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -185,7 +118,7 @@ ${do:end-if}
<tr><td>
${LANG_G31}
<select name="todo"
onMouseOver="info('${LANG_G9}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G9}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${listid:todo:LISTDEF_10}
</select>
@@ -198,12 +131,12 @@ ${do:end-if}
</td><td>
<input type="button" value="${LANG_G43}"
onClick="doOpenWindow()"
onMouseOver="info('${LANG_G24b}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G24b}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>
<br>
<textarea name="urls" cols="50" rows="8"
onMouseOver="info('${LANG_G11}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G11}'); return true" onMouseOut="info('&nbsp;'); return true"
>
${do:output-mode:html}
${urls}
@@ -217,7 +150,7 @@ ${do:output-mode:}
${LANG_URLLIST}:
</td><td>
<input name="filelist" value="${filelist}" size="40"
onMouseOver="info('${LANG_G24c}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G24c}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>
@@ -228,7 +161,7 @@ ${do:output-mode:}
${LANG_G41}
</td><td>
<input type="button" value="${LANG_G40}" onClick="window.open('option1.html', 'option1', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_G24}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_G24}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>
@@ -237,11 +170,11 @@ ${do:output-mode:}
<tr><td align="right">
<table width="100%" border="0"><tr><td align="left">
<input type="submit" value=" << ${LANG_PREVIOUS} " onClick="form.redirect.value='step2.html'; form.submit()"
onMouseOver="info('${LANG_TIPPREV}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPPREV}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input name="nextBtn" type="submit" value=" ${LANG_NEXT} >> "
onMouseOver="info('${LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>

View File

@@ -6,75 +6,8 @@
<meta name="keywords" content="${LANG_METAKEYW}" />
<title>'${projname}' - HTTrack Website Copier</title>
<style type="text/css">
<!--
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }
// -->
</style>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
@@ -110,7 +43,7 @@ function info(str) {
<td id="subTitle" align="right">
<a href="/server/file.html" target="_blank"
onClick="window.open('/server/file.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_O1}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O1}
@@ -122,7 +55,7 @@ ${do:if-file-exists:html/index.html}
<td id="subTitle" align="right">
<a href="/index.html" target="_blank"
onClick="window.open('/server/help.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
style="color:#FFFFFF"
>
${LANG_O5}
@@ -151,7 +84,7 @@ ${do:if-file-exists:html/index.html}
<td>
<a href="/step3.html" target="_blank"
onClick="window.open('/step3.html', 'help', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=640, height=480'); return false"
onMouseOver="info('${LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPHELP}'); return true" onMouseOut="info('&nbsp;'); return true"
>${LANG_TIPHELP}</a>
</td>
${do:end-if}
@@ -163,34 +96,34 @@ ${do:end-if}
<input type="hidden" name="sid" value="${sid}">
<input type="hidden" name="redirect" value="">
<input type="hidden" name="projpath" value="${path}/${projname}/">
<input type="hidden" name="command_arg_profile" value="path,lang">
<input type="hidden" name="command_arg_profile" value="path,lang">
<table border="0" width="100%">
<tr><td>
</td></tr>
</td></tr>
<tr><td>
<input type="radio" name="command_do" value="start" checked><b>${LANG_J10}</b>
</td></tr>
<tr><td>
<input type="radio" name="command_do" value="save">${LANG_J10b}
</td></tr>
<tr><td>
${/* Real commands and ini file generated below */}
<input type="radio" name="command_do" value="start" checked><b>${LANG_J10}</b>
</td></tr>
<tr><td>
<input type="radio" name="command_do" value="save">${LANG_J10b}
</td></tr>
<tr><td>
${/* Real commands and ini file generated below */}
<!-- engine commandline -->
${do:output-mode:html}
<textarea name="command" cols="50" rows="4" style="visibility:hidden">
httrack \
--quiet \
--quiet \
--build-top-index \
${test:todo:--mirror:--mirror:--mirror-wizard:--get:--mirrorlinks:--testlinks:--continue:--update}
${urls}
${test:filelist:-%L "}${filelist}${test:filelist:"}
--path "${path}/${projname}"
--path "${html:path}/${html:projname}"
\
${test:parseall:--near}
${test:link:--test}
@@ -203,8 +136,8 @@ ${do:end-if}
${test:build:-N0:-N0:-N1:-N2:-N3:-N4:-N5:-N100:-N101:-N102:-N103:-N104:-N105:-N99:-N199:}
\
${ztest:dos::--long-names=0:--long-names=2}
${test:robots:--robots=0:--robots=0:--robots=1:--robots=2}
${test:errpage:--generate-errors:--generate-errors=0}
${test:robots:--robots=0:--robots=0:--robots=1:--robots=2}
${test:errpage:--generate-errors:--generate-errors=0}
${test:external:--replace-external}
${test:hidepwd:--disable-passwords}
${test:hidequery:--include-query-string=1:--include-query-string=0}
@@ -236,8 +169,8 @@ ${do:end-if}
${test:maxconn:--connection-per-second=}${maxconn}
${test:maxlinks:--advanced-maxlinks=}${maxlinks}
\
--user-agent "${user}"
--footer "${footer}"
--user-agent "${html:user}"
--footer "${html:footer}"
\
${url2}
\
@@ -261,7 +194,7 @@ ${do:end-if}
${do:output-mode:inifile}
<textarea name="winprofile" cols="50" rows="4" style="visibility:hidden">
CurrentUrl=${urls}
Category=${projcateg}
Category=${projcateg}
CurrentAction=${todo}
CurrentURLList=${filelist}
Proxy=${proxy}
@@ -338,25 +271,25 @@ MIMEDefsMime7=${mime7}
MIMEDefsMime8=${mime8}
</textarea>
${do:output-mode:}
<!-- winprofile.ini -->
<!-- httrack.ini -->
${do:output-mode:inifile}
<textarea name="userprofile" cols="50" rows="4" style="visibility:hidden">
path=${path}
lang=${lang_}
</textarea>
${do:output-mode:}
<!-- httrack.ini -->
<!-- winprofile.ini -->
<!-- httrack.ini -->
${do:output-mode:inifile}
<textarea name="userprofile" cols="50" rows="4" style="visibility:hidden">
path=${path}
lang=${lang_}
</textarea>
${do:output-mode:}
<!-- httrack.ini -->
</td></tr><tr><td>
<table width="100%" border="0"><tr><td align="left">
<input type="submit" value=" << ${LANG_PREVIOUS} " onClick="form.command.value=''; form.redirect.value='step3.html'; form.submit()"
onMouseOver="info('${LANG_TIPPREV}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPPREV}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td><td align="right">
<input name="nextBtn" type="submit" value=" ${LANG_J9} >> "
onMouseOver="info('${LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
onMouseOver="info('${html:LANG_TIPNEXT}'); return true" onMouseOut="info('&nbsp;'); return true"
>
</td></tr></table>

66
html/server/style.css Normal file
View File

@@ -0,0 +1,66 @@
body {
margin: 0; padding: 0; margin-bottom: 15px; margin-top: 8px;
background: #77b;
}
body, td {
font: 14px "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
}
#subTitle {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
.tabCtrl {
background: #000; color: #fff; padding: 4px; font-weight: bold;
}
#siteNavigation a, #siteNavigation .current {
font-weight: bold; color: #448;
}
#siteNavigation a:link { text-decoration: none; }
#siteNavigation a:visited { text-decoration: none; }
#siteNavigation .current { background-color: #ccd; }
#siteNavigation a:hover { text-decoration: none; background-color: #fff; color: #000; }
#siteNavigation a:active { text-decoration: none; background-color: #ccc; }
a:link { text-decoration: underline; color: #00f; }
a:visited { text-decoration: underline; color: #000; }
a:hover { text-decoration: underline; color: #c00; }
a:active { text-decoration: underline; }
#pageContent {
clear: both;
border-bottom: 6px solid #000;
padding: 10px; padding-top: 20px;
line-height: 1.65em;
background-image: url(images/bg_rings.gif);
background-repeat: no-repeat;
background-position: top right;
}
#pageContent, #siteNavigation {
background-color: #ccd;
}
.imgLeft { float: left; margin-right: 10px; margin-bottom: 10px; }
.imgRight { float: right; margin-left: 10px; margin-bottom: 10px; }
hr { height: 1px; color: #000; background-color: #000; margin-bottom: 15px; }
h1 { margin: 0; font-weight: bold; font-size: 2em; }
h2 { margin: 0; font-weight: bold; font-size: 1.6em; }
h3 { margin: 0; font-weight: bold; font-size: 1.3em; }
h4 { margin: 0; font-weight: bold; font-size: 1.18em; }
.blak { background-color: #000; }
.hide { display: none; }
.tableWidth { min-width: 400px; }
.tblRegular { border-collapse: collapse; }
.tblRegular td { padding: 6px; background-image: url(images/fade.gif); border: 2px solid #99c; }
.tblHeaderColor, .tblHeaderColor td { background: #99c; }
.tblNoBorder td { border: 0; }

View File

@@ -104,6 +104,7 @@ DATA = $(lang_DATA) $(langroot_DATA)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -112,14 +113,12 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
@@ -133,6 +132,7 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HTTPS_SUPPORT = @HTTPS_SUPPORT@
ICONV_LIBS = @ICONV_LIBS@
INSTALL = @INSTALL@
@@ -188,7 +188,6 @@ abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@

View File

@@ -3,7 +3,7 @@ exemplesdir = $(datadir)/httrack/libtest
exemples_DATA = *.c *.h *.txt
EXTRA_DIST = $(exemples_DATA)
INCLUDES = \
AM_CPPFLAGS = \
@DEFAULT_CFLAGS@ \
@THREADS_CFLAGS@ \
@V6_FLAG@ \
@@ -13,7 +13,7 @@ INCLUDES = \
-DDATADIR=\""$(datadir)"\" \
-DLIBDIR=\""$(libdir)"\"
AM_CPPFLAGS = -I../src
AM_CPPFLAGS += -I../src
AM_LDFLAGS = -L../src
# Examples

View File

@@ -201,6 +201,7 @@ CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -209,14 +210,12 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
@@ -230,6 +229,7 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HTTPS_SUPPORT = @HTTPS_SUPPORT@
ICONV_LIBS = @ICONV_LIBS@
INSTALL = @INSTALL@
@@ -285,7 +285,6 @@ abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
@@ -335,17 +334,9 @@ top_srcdir = @top_srcdir@
exemplesdir = $(datadir)/httrack/libtest
exemples_DATA = *.c *.h *.txt
EXTRA_DIST = $(exemples_DATA)
INCLUDES = \
@DEFAULT_CFLAGS@ \
@THREADS_CFLAGS@ \
@V6_FLAG@ \
@LFS_FLAG@ \
-DPREFIX=\""$(prefix)"\" \
-DSYSCONFDIR=\""$(sysconfdir)"\" \
-DDATADIR=\""$(datadir)"\" \
-DLIBDIR=\""$(libdir)"\"
AM_CPPFLAGS = -I../src
AM_CPPFLAGS = @DEFAULT_CFLAGS@ @THREADS_CFLAGS@ @V6_FLAG@ @LFS_FLAG@ \
-DPREFIX=\""$(prefix)"\" -DSYSCONFDIR=\""$(sysconfdir)"\" \
-DDATADIR=\""$(datadir)"\" -DLIBDIR=\""$(libdir)"\" -I../src
AM_LDFLAGS = -L../src
# Examples
@@ -485,22 +476,25 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks-example-simple.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@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 $<
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@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) '$<'`
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<

View File

@@ -100,9 +100,9 @@ EXTERNAL_FUNCTION int hts_plug(httrackp * opt, const char *argv) {
if (arg == NULL)
arg = "log-wrapper-info";
hts_log(opt, arg, "* plugging functions");
CHAIN_FUNCTION(opt, check_html, process_file, (char *) arg);
CHAIN_FUNCTION(opt, start, start_of_mirror, (char *) arg);
CHAIN_FUNCTION(opt, end, end_of_mirror, (char *) arg);
CHAIN_FUNCTION(opt, check_html, process_file, (void *) (uintptr_t) arg);
CHAIN_FUNCTION(opt, start, start_of_mirror, (void *) (uintptr_t) arg);
CHAIN_FUNCTION(opt, end, end_of_mirror, (void *) (uintptr_t) arg);
hts_log(opt, arg, "* module successfully plugged");
return 1; /* success */

View File

@@ -74,6 +74,7 @@ am__can_run_installinfo = \
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -82,14 +83,12 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
@@ -103,6 +102,7 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HTTPS_SUPPORT = @HTTPS_SUPPORT@
ICONV_LIBS = @ICONV_LIBS@
INSTALL = @INSTALL@
@@ -158,7 +158,6 @@ abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@

View File

@@ -105,6 +105,7 @@ MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -113,14 +114,12 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
@@ -134,6 +133,7 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HTTPS_SUPPORT = @HTTPS_SUPPORT@
ICONV_LIBS = @ICONV_LIBS@
INSTALL = @INSTALL@
@@ -189,7 +189,6 @@ abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@

View File

@@ -1,182 +1,182 @@
.\" Process this file with
.\" groff -man -Tascii httrack.1
.\"
.TH httrack 1 "02 May 2014" "httrack website copier"
.TH httrack 1 "28 July 2014" "httrack website copier"
.SH NAME
httrack \- offline browser : copy websites to a local directory
.SH SYNOPSIS
.B httrack [ url ]... [ \-filter ]... [ +filter ]... [
.B \-O\, \-\-path
.B \-O, \-\-path
] [
.B \-w\, \-\-mirror
.B \-w, \-\-mirror
] [
.B \-W\, \-\-mirror\-wizard
.B \-W, \-\-mirror\-wizard
] [
.B \-g\, \-\-get\-files
.B \-g, \-\-get\-files
] [
.B \-i\, \-\-continue
.B \-i, \-\-continue
] [
.B \-Y\, \-\-mirrorlinks
.B \-Y, \-\-mirrorlinks
] [
.B \-P\, \-\-proxy
.B \-P, \-\-proxy
] [
.B \-%f\, \-\-httpproxy\-ftp[=N]
.B \-%f, \-\-httpproxy\-ftp[=N]
] [
.B \-%b\, \-\-bind
.B \-%b, \-\-bind
] [
.B \-rN\, \-\-depth[=N]
.B \-rN, \-\-depth[=N]
] [
.B \-%eN\, \-\-ext\-depth[=N]
.B \-%eN, \-\-ext\-depth[=N]
] [
.B \-mN\, \-\-max\-files[=N]
.B \-mN, \-\-max\-files[=N]
] [
.B \-MN\, \-\-max\-size[=N]
.B \-MN, \-\-max\-size[=N]
] [
.B \-EN\, \-\-max\-time[=N]
.B \-EN, \-\-max\-time[=N]
] [
.B \-AN\, \-\-max\-rate[=N]
.B \-AN, \-\-max\-rate[=N]
] [
.B \-%cN\, \-\-connection\-per\-second[=N]
.B \-%cN, \-\-connection\-per\-second[=N]
] [
.B \-GN\, \-\-max\-pause[=N]
.B \-GN, \-\-max\-pause[=N]
] [
.B \-cN\, \-\-sockets[=N]
.B \-cN, \-\-sockets[=N]
] [
.B \-TN\, \-\-timeout[=N]
.B \-TN, \-\-timeout[=N]
] [
.B \-RN\, \-\-retries[=N]
.B \-RN, \-\-retries[=N]
] [
.B \-JN\, \-\-min\-rate[=N]
.B \-JN, \-\-min\-rate[=N]
] [
.B \-HN\, \-\-host\-control[=N]
.B \-HN, \-\-host\-control[=N]
] [
.B \-%P\, \-\-extended\-parsing[=N]
.B \-%P, \-\-extended\-parsing[=N]
] [
.B \-n\, \-\-near
.B \-n, \-\-near
] [
.B \-t\, \-\-test
.B \-t, \-\-test
] [
.B \-%L\, \-\-list
.B \-%L, \-\-list
] [
.B \-%S\, \-\-urllist
.B \-%S, \-\-urllist
] [
.B \-NN\, \-\-structure[=N]
.B \-NN, \-\-structure[=N]
] [
.B \-%D\, \-\-cached\-delayed\-type\-check
.B \-%D, \-\-cached\-delayed\-type\-check
] [
.B \-%M\, \-\-mime\-html
.B \-%M, \-\-mime\-html
] [
.B \-LN\, \-\-long\-names[=N]
.B \-LN, \-\-long\-names[=N]
] [
.B \-KN\, \-\-keep\-links[=N]
.B \-KN, \-\-keep\-links[=N]
] [
.B \-x\, \-\-replace\-external
.B \-x, \-\-replace\-external
] [
.B \-%x\, \-\-disable\-passwords
.B \-%x, \-\-disable\-passwords
] [
.B \-%q\, \-\-include\-query\-string
.B \-%q, \-\-include\-query\-string
] [
.B \-o\, \-\-generate\-errors
.B \-o, \-\-generate\-errors
] [
.B \-X\, \-\-purge\-old[=N]
.B \-X, \-\-purge\-old[=N]
] [
.B \-%p\, \-\-preserve
.B \-%p, \-\-preserve
] [
.B \-%T\, \-\-utf8\-conversion
.B \-%T, \-\-utf8\-conversion
] [
.B \-bN\, \-\-cookies[=N]
.B \-bN, \-\-cookies[=N]
] [
.B \-u\, \-\-check\-type[=N]
.B \-u, \-\-check\-type[=N]
] [
.B \-j\, \-\-parse\-java[=N]
.B \-j, \-\-parse\-java[=N]
] [
.B \-sN\, \-\-robots[=N]
.B \-sN, \-\-robots[=N]
] [
.B \-%h\, \-\-http\-10
.B \-%h, \-\-http\-10
] [
.B \-%k\, \-\-keep\-alive
.B \-%k, \-\-keep\-alive
] [
.B \-%B\, \-\-tolerant
.B \-%B, \-\-tolerant
] [
.B \-%s\, \-\-updatehack
.B \-%s, \-\-updatehack
] [
.B \-%u\, \-\-urlhack
.B \-%u, \-\-urlhack
] [
.B \-%A\, \-\-assume
.B \-%A, \-\-assume
] [
.B \-@iN\, \-\-protocol[=N]
.B \-@iN, \-\-protocol[=N]
] [
.B \-%w\, \-\-disable\-module
.B \-%w, \-\-disable\-module
] [
.B \-F\, \-\-user\-agent
.B \-F, \-\-user\-agent
] [
.B \-%R\, \-\-referer
.B \-%R, \-\-referer
] [
.B \-%E\, \-\-from
.B \-%E, \-\-from
] [
.B \-%F\, \-\-footer
.B \-%F, \-\-footer
] [
.B \-%l\, \-\-language
.B \-%l, \-\-language
] [
.B \-%a\, \-\-accept
.B \-%a, \-\-accept
] [
.B \-%X\, \-\-headers
.B \-%X, \-\-headers
] [
.B \-C\, \-\-cache[=N]
.B \-C, \-\-cache[=N]
] [
.B \-k\, \-\-store\-all\-in\-cache
.B \-k, \-\-store\-all\-in\-cache
] [
.B \-%n\, \-\-do\-not\-recatch
.B \-%n, \-\-do\-not\-recatch
] [
.B \-%v\, \-\-display
.B \-%v, \-\-display
] [
.B \-Q\, \-\-do\-not\-log
.B \-Q, \-\-do\-not\-log
] [
.B \-q\, \-\-quiet
.B \-q, \-\-quiet
] [
.B \-z\, \-\-extra\-log
.B \-z, \-\-extra\-log
] [
.B \-Z\, \-\-debug\-log
.B \-Z, \-\-debug\-log
] [
.B \-v\, \-\-verbose
.B \-v, \-\-verbose
] [
.B \-f\, \-\-file\-log
.B \-f, \-\-file\-log
] [
.B \-f2\, \-\-single\-log
.B \-f2, \-\-single\-log
] [
.B \-I\, \-\-index
.B \-I, \-\-index
] [
.B \-%i\, \-\-build\-top\-index
.B \-%i, \-\-build\-top\-index
] [
.B \-%I\, \-\-search\-index
.B \-%I, \-\-search\-index
] [
.B \-pN\, \-\-priority[=N]
.B \-pN, \-\-priority[=N]
] [
.B \-S\, \-\-stay\-on\-same\-dir
.B \-S, \-\-stay\-on\-same\-dir
] [
.B \-D\, \-\-can\-go\-down
.B \-D, \-\-can\-go\-down
] [
.B \-U\, \-\-can\-go\-up
.B \-U, \-\-can\-go\-up
] [
.B \-B\, \-\-can\-go\-up\-and\-down
.B \-B, \-\-can\-go\-up\-and\-down
] [
.B \-a\, \-\-stay\-on\-same\-address
.B \-a, \-\-stay\-on\-same\-address
] [
.B \-d\, \-\-stay\-on\-same\-domain
.B \-d, \-\-stay\-on\-same\-domain
] [
.B \-l\, \-\-stay\-on\-same\-tld
.B \-l, \-\-stay\-on\-same\-tld
] [
.B \-e\, \-\-go\-everywhere
.B \-e, \-\-go\-everywhere
] [
.B \-%H\, \-\-debug\-headers
.B \-%H, \-\-debug\-headers
] [
.B \-%!\, \-\-disable\-security\-limits
.B \-%!, \-\-disable\-security\-limits
] [
.B \-V\, \-\-userdef\-cmd
.B \-V, \-\-userdef\-cmd
] [
.B \-%W\, \-\-callback
.B \-%W, \-\-callback
] [
.B \-K\, \-\-keep\-links[=N]
.B \-K, \-\-keep\-links[=N]
] [
.B
.SH DESCRIPTION
@@ -191,7 +191,7 @@ allows you to download a World Wide Web site from the Internet to a local direct
mirror the two sites together (with shared links) and accept any .jpg files on .com sites
.TP
.B httrack www.someweb.com/bob/bobby.html +* \-r6
means get all files starting from bobby.html\, with 6 link\-depth\, and possibility of going everywhere on the web
means get all files starting from bobby.html, with 6 link\-depth, and possibility of going everywhere on the web
.TP
.B httrack www.someweb.com/bob/bobby.html \-\-spider \-P proxy.myhost.com:8080
runs the spider on www.someweb.com/bob/bobby.html using a proxy
@@ -208,7 +208,7 @@ continues a mirror in the current folder
.SS General options:
.IP \-O
path for mirror/logfiles+cache (\-O path
mirror[\,path
mirror[,path
cache
and
logfiles]) (\-\-path <param>)
@@ -217,7 +217,7 @@ logfiles]) (\-\-path <param>)
.IP \-w
*mirror web sites (\-\-mirror)
.IP \-W
mirror web sites\, semi\-automatic (asks questions) (\-\-mirror\-wizard)
mirror web sites, semi\-automatic (asks questions) (\-\-mirror\-wizard)
.IP \-g
just get files (saved in the current directory) (\-\-get\-files)
.IP \-i
@@ -240,34 +240,34 @@ set the mirror depth to N (* r9999) (\-\-depth[=N])
set the external links depth to N (* %e0) (\-\-ext\-depth[=N])
.IP \-mN
maximum file length for a non\-html file (\-\-max\-files[=N])
.IP \-mN\,N2
.IP \-mN,N2
maximum file length for non html (N) and html (N2)
.IP \-MN
maximum overall size that can be uploaded/scanned (\-\-max\-size[=N])
.IP \-EN
maximum mirror time in seconds (60=1 minute\, 3600=1 hour) (\-\-max\-time[=N])
maximum mirror time in seconds (60=1 minute, 3600=1 hour) (\-\-max\-time[=N])
.IP \-AN
maximum transfer rate in bytes/seconds (1000=1KB/s max) (\-\-max\-rate[=N])
.IP \-%cN
maximum number of connections/seconds (*%c10) (\-\-connection\-per\-second[=N])
.IP \-GN
pause transfer if N bytes reached\, and wait until lock file is deleted (\-\-max\-pause[=N])
pause transfer if N bytes reached, and wait until lock file is deleted (\-\-max\-pause[=N])
.SS Flow control:
.IP \-cN
number of multiple connections (*c8) (\-\-sockets[=N])
.IP \-TN
timeout\, number of seconds after a non\-responding link is shutdown (\-\-timeout[=N])
timeout, number of seconds after a non\-responding link is shutdown (\-\-timeout[=N])
.IP \-RN
number of retries\, in case of timeout or non\-fatal errors (*R1) (\-\-retries[=N])
number of retries, in case of timeout or non\-fatal errors (*R1) (\-\-retries[=N])
.IP \-JN
traffic jam control\, minimum transfert rate (bytes/seconds) tolerated for a link (\-\-min\-rate[=N])
traffic jam control, minimum transfert rate (bytes/seconds) tolerated for a link (\-\-min\-rate[=N])
.IP \-HN
host is abandonned if: 0=never\, 1=timeout\, 2=slow\, 3=timeout or slow (\-\-host\-control[=N])
host is abandonned if: 0=never, 1=timeout, 2=slow, 3=timeout or slow (\-\-host\-control[=N])
.SS Links options:
.IP \-%P
*extended parsing\, attempt to parse all links\, even in unknown tags or Javascript (%P0 don t use) (\-\-extended\-parsing[=N])
*extended parsing, attempt to parse all links, even in unknown tags or Javascript (%P0 don t use) (\-\-extended\-parsing[=N])
.IP \-n
get non\-html files near an html file (ex: an image located outside) (\-\-near)
.IP \-t
@@ -279,25 +279,25 @@ test all URLs (even forbidden ones) (\-\-test)
.SS Build options:
.IP \-NN
structure type (0 *original structure\, 1+: see below) (\-\-structure[=N])
structure type (0 *original structure, 1+: see below) (\-\-structure[=N])
.IP \-or
user defined structure (\-N "%h%p/%n%q.%t")
.IP \-%N
delayed type check\, don t make any link test but wait for files download to start instead (experimental) (%N0 don t use\, %N1 use for unknown extensions\, * %N2 always use)
delayed type check, don t make any link test but wait for files download to start instead (experimental) (%N0 don t use, %N1 use for unknown extensions, * %N2 always use)
.IP \-%D
cached delayed type check\, don t wait for remote type during updates\, to speedup them (%D0 wait\, * %D1 don t wait) (\-\-cached\-delayed\-type\-check)
cached delayed type check, don t wait for remote type during updates, to speedup them (%D0 wait, * %D1 don t wait) (\-\-cached\-delayed\-type\-check)
.IP \-%M
generate a RFC MIME\-encapsulated full\-archive (.mht) (\-\-mime\-html)
.IP \-LN
long names (L1 *long names / L0 8\-3 conversion / L2 ISO9660 compatible) (\-\-long\-names[=N])
.IP \-KN
keep original links (e.g. http://www.adr/link) (K0 *relative link\, K absolute links\, K4 original links\, K3 absolute URI links\, K5 transparent proxy link) (\-\-keep\-links[=N])
keep original links (e.g. http://www.adr/link) (K0 *relative link, K absolute links, K4 original links, K3 absolute URI links, K5 transparent proxy link) (\-\-keep\-links[=N])
.IP \-x
replace external html links by error pages (\-\-replace\-external)
.IP \-%x
do not include any password for external password protected websites (%x0 include) (\-\-disable\-passwords)
.IP \-%q
*include query string for local files (useless\, for information purpose only) (%q0 don t include) (\-\-include\-query\-string)
*include query string for local files (useless, for information purpose only) (%q0 don t include) (\-\-include\-query\-string)
.IP \-o
*generate output html file in case of error (404..) (o0 don t generate) (\-\-generate\-errors)
.IP \-X
@@ -309,29 +309,29 @@ links conversion to UTF\-8 (\-\-utf8\-conversion)
.SS Spider options:
.IP \-bN
accept cookies in cookies.txt (0=do not accept\,* 1=accept) (\-\-cookies[=N])
accept cookies in cookies.txt (0=do not accept,* 1=accept) (\-\-cookies[=N])
.IP \-u
check document type if unknown (cgi\,asp..) (u0 don t check\, * u1 check but /\, u2 check always) (\-\-check\-type[=N])
check document type if unknown (cgi,asp..) (u0 don t check, * u1 check but /, u2 check always) (\-\-check\-type[=N])
.IP \-j
*parse Java Classes (j0 don t parse\, bitmask: |1 parse default\, |2 don t parse .class |4 don t parse .js |8 don t be aggressive) (\-\-parse\-java[=N])
*parse Java Classes (j0 don t parse, bitmask: |1 parse default, |2 don t parse .class |4 don t parse .js |8 don t be aggressive) (\-\-parse\-java[=N])
.IP \-sN
follow robots.txt and meta robots tags (0=never\,1=sometimes\,* 2=always\, 3=always (even strict rules)) (\-\-robots[=N])
follow robots.txt and meta robots tags (0=never,1=sometimes,* 2=always, 3=always (even strict rules)) (\-\-robots[=N])
.IP \-%h
force HTTP/1.0 requests (reduce update features\, only for old servers or proxies) (\-\-http\-10)
force HTTP/1.0 requests (reduce update features, only for old servers or proxies) (\-\-http\-10)
.IP \-%k
use keep\-alive if possible\, greately reducing latency for small files and test requests (%k0 don t use) (\-\-keep\-alive)
use keep\-alive if possible, greately reducing latency for small files and test requests (%k0 don t use) (\-\-keep\-alive)
.IP \-%B
tolerant requests (accept bogus responses on some servers\, but not standard!) (\-\-tolerant)
tolerant requests (accept bogus responses on some servers, but not standard!) (\-\-tolerant)
.IP \-%s
update hacks: various hacks to limit re\-transfers when updating (identical size\, bogus response..) (\-\-updatehack)
update hacks: various hacks to limit re\-transfers when updating (identical size, bogus response..) (\-\-updatehack)
.IP \-%u
url hacks: various hacks to limit duplicate URLs (strip //\, www.foo.com==foo.com..) (\-\-urlhack)
url hacks: various hacks to limit duplicate URLs (strip //, www.foo.com==foo.com..) (\-\-urlhack)
.IP \-%A
assume that a type (cgi\,asp..) is always linked with a mime type (\-%A php3\,cgi=text/html;dat\,bin=application/x\-zip) (\-\-assume <param>)
assume that a type (cgi,asp..) is always linked with a mime type (\-%A php3,cgi=text/html;dat,bin=application/x\-zip) (\-\-assume <param>)
.IP \-can
also be used to force a specific file type: \-\-assume foo.cgi=text/html
.IP \-@iN
internet protocol (0=both ipv6+ipv4\, 4=ipv4 only\, 6=ipv6 only) (\-\-protocol[=N])
internet protocol (0=both ipv6+ipv4, 4=ipv4 only, 6=ipv6 only) (\-\-protocol[=N])
.IP \-%w
disable a specific external mime module (\-%w htsswf \-%w htsjava) (\-\-disable\-module <param>)
@@ -345,15 +345,15 @@ from email address sent in HTTP headers (\-\-from <param>)
.IP \-%F
footer string in Html code (\-%F "Mirrored [from host %s [file %s [at %s]]]" (\-\-footer <param>)
.IP \-%l
preffered language (\-%l "fr\, en\, jp\, *" (\-\-language <param>)
preffered language (\-%l "fr, en, jp, *" (\-\-language <param>)
.IP \-%a
accepted formats (\-%l "text/html\,image/png\,image/jpeg\,image/gif;q=0.9\,*/*;q=0.1" (\-\-accept <param>)
accepted formats (\-%a "text/html,image/png;q=0.9,*/*;q=0.1" (\-\-accept <param>)
.IP \-%X
additional HTTP header line (\-%X "X\-Magic: 42" (\-\-headers <param>)
.SS Log\, index\, cache
.SS Log, index, cache
.IP \-C
create/use a cache for updates and retries (C0 no cache\,C1 cache is prioritary\,* C2 test update before) (\-\-cache[=N])
create/use a cache for updates and retries (C0 no cache,C1 cache is prioritary,* C2 test update before) (\-\-cache[=N])
.IP \-k
store all files in cache (not useful if files on disk) (\-\-store\-all\-in\-cache)
.IP \-%n
@@ -385,7 +385,7 @@ make an searchable index for this mirror (* %I0 don t make) (\-\-search\-index)
.IP \-pN
priority mode: (* p3) (\-\-priority[=N])
.IP \-p0
just scan\, don t save anything (for checking links)
just scan, don t save anything (for checking links)
.IP \-p1
save only html files
.IP \-p2
@@ -393,7 +393,7 @@ save only non html files
.IP \-*p3
save all files
.IP \-p7
get html files before\, then treat other files
get html files before, then treat other files
.IP \-S
stay on the same directory (\-\-stay\-on\-same\-dir)
.IP \-D
@@ -455,35 +455,35 @@ generate transfer rate statictics every minutes (\-\-debug\-ratestats)
.SS Dangerous options: (do NOT use unless you exactly know what you are doing)
.IP \-%!
bypass built\-in security limits aimed to avoid bandwidth abuses (bandwidth\, simultaneous connections) (\-\-disable\-security\-limits)
bypass built\-in security limits aimed to avoid bandwidth abuses (bandwidth, simultaneous connections) (\-\-disable\-security\-limits)
.IP \-IMPORTANT
NOTE: DANGEROUS OPTION\, ONLY SUITABLE FOR EXPERTS
NOTE: DANGEROUS OPTION, ONLY SUITABLE FOR EXPERTS
.IP \-USE
IT WITH EXTREME CARE
.SS Command\-line specific options:
.IP \-V
execute system command after each files ($0 is the filename: \-V "rm \$0") (\-\-userdef\-cmd <param>)
execute system command after each files ($0 is the filename: \-V "rm \\$0") (\-\-userdef\-cmd <param>)
.IP \-%W
use an external library function as a wrapper (\-%W myfoo.so[\,myparameters]) (\-\-callback <param>)
use an external library function as a wrapper (\-%W myfoo.so[,myparameters]) (\-\-callback <param>)
.SS Details: Option N
.IP \-N0
Site\-structure (default)
.IP \-N1
HTML in web/\, images/other files in web/images/
HTML in web/, images/other files in web/images/
.IP \-N2
HTML in web/HTML\, images/other in web/images
HTML in web/HTML, images/other in web/images
.IP \-N3
HTML in web/\, images/other in web/
HTML in web/, images/other in web/
.IP \-N4
HTML in web/\, images/other in web/xxx\, where xxx is the file extension (all gif will be placed onto web/gif\, for example)
HTML in web/, images/other in web/xxx, where xxx is the file extension (all gif will be placed onto web/gif, for example)
.IP \-N5
Images/other in web/xxx and HTML in web/HTML
.IP \-N99
All files in web/\, with random names (gadget !)
All files in web/, with random names (gadget !)
.IP \-N100
Site\-structure\, without www.domain.xxx/
Site\-structure, without www.domain.xxx/
.IP \-N101
Identical to N1 exept that "web" is replaced by the site s name
.IP \-N102
@@ -510,15 +510,15 @@ Identical to N5 exept that there is no "web" directory
Identical to N99 exept that there is no "web" directory
.SS Details: User\-defined option N
%n Name of file without file type (ex: image)
%N Name of file\, including file type (ex: image.gif)
%N Name of file, including file type (ex: image.gif)
%t File type (ex: gif)
%p Path [without ending /] (ex: /someimages)
%h Host name (ex: www.someweb.com)
%M URL MD5 (128 bits\, 32 ascii bytes)
%Q query string MD5 (128 bits\, 32 ascii bytes)
%M URL MD5 (128 bits, 32 ascii bytes)
%Q query string MD5 (128 bits, 32 ascii bytes)
%k full query string
%r protocol name (ex: http)
%q small query string MD5 (16 bits\, 4 ascii bytes)
%q small query string MD5 (16 bits, 4 ascii bytes)
%s? Short name version (ex: %sN)
%[param] param variable in query string
%[param:before:after:empty:notfound] advanced variable extraction
@@ -535,11 +535,11 @@ Identical to N99 exept that there is no "web" directory
.IP \-empty
: string replacement if the parameter was empty
.IP \-all
fields\, except the first one (the parameter name)\, can be empty
fields, except the first one (the parameter name), can be empty
.SS Details: Option K
.IP \-K0
foo.cgi?q=45 \-> foo4B54.html?q=45 (relative URI\, default)
foo.cgi?q=45 \-> foo4B54.html?q=45 (relative URI, default)
.IP \-K
\-> http://www.foobar.com/folder/foo.cgi?q=45 (absolute URL) (\-\-keep\-links[=N])
.IP \-K3
@@ -553,7 +553,7 @@ foo.cgi?q=45 \-> foo4B54.html?q=45 (relative URI\, default)
.IP \-\-mirror
<URLs> *make a mirror of site(s) (default)
.IP \-\-get
<URLs> get the files indicated\, do not seek other URLs (\-qg)
<URLs> get the files indicated, do not seek other URLs (\-qg)
.IP \-\-list
<text file> add all URL located in this text file (\-%L)
.IP \-\-mirrorlinks
@@ -561,15 +561,15 @@ foo.cgi?q=45 \-> foo4B54.html?q=45 (relative URI\, default)
.IP \-\-testlinks
<URLs> test links in pages (\-r1p0C0I0t)
.IP \-\-spider
<URLs> spider site(s)\, to test links: reports Errors & Warnings (\-p0C0I0t)
<URLs> spider site(s), to test links: reports Errors & Warnings (\-p0C0I0t)
.IP \-\-testsite
<URLs> identical to \-\-spider
.IP \-\-skeleton
<URLs> make a mirror\, but gets only html files (\-p1)
<URLs> make a mirror, but gets only html files (\-p1)
.IP \-\-update
update a mirror\, without confirmation (\-iC2)
update a mirror, without confirmation (\-iC2)
.IP \-\-continue
continue a mirror\, without confirmation (\-iC1)
continue a mirror, without confirmation (\-iC1)
.IP \-\-catchurl
create a temporary proxy to capture an URL or a form post URL

View File

@@ -8,10 +8,14 @@ DevIncludes_DATA = \
../config.h \
htsmodules.h \
htsbasenet.h \
htsnet.h \
htsbauth.h \
htsdefines.h
htsdefines.h \
htsstrings.h \
htsarrays.h \
htssafe.h
INCLUDES = \
AM_CPPFLAGS = \
@DEFAULT_CFLAGS@ \
@THREADS_CFLAGS@ \
@V6_FLAG@ \
@@ -26,21 +30,22 @@ bin_PROGRAMS = proxytrack httrack htsserver
httrack_LDADD = $(THREADS_LIBS) libhttrack.la
htsserver_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS) libhttrack.la
proxytrack_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS)
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT -DZLIB_CONST -DHTS_INTHASH_USES_MD5
htsserver_CFLAGS = $(AM_CFLAGS) -DZLIB_CONST -DHTS_INTHASH_USES_MD5
lib_LTLIBRARIES = libhttrack.la libhtsjava.la
htsserver_SOURCES = htsserver.c htsserver.h htsweb.c htsweb.h
proxytrack_SOURCES = proxy/main.c \
proxy/proxytrack.c proxy/store.c \
htsinthash.c htsmd5.c md5.c \
coucal.c htsmd5.c md5.c \
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c
whttrackrundir = $(bindir)
whttrackrun_SCRIPTS = webhttrack
libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
htscatchurl.c htsfilters.c htsftp.c htshash.c htsinthash.c \
htscatchurl.c htsfilters.c htsftp.c htshash.c coucal.c \
htshelp.c htslib.c htscoremain.c \
htsname.c htsrobots.c htstools.c htswizard.c \
htsalias.c htsthread.c htsindex.c htsbauth.c \
@@ -51,17 +56,18 @@ libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \
htsbasenet.h htsbauth.h htscache.h htscatchurl.h \
htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \
htsfilters.h htsftp.h htsglobal.h htshash.h htsinthash.h \
htsfilters.h htsftp.h htsglobal.h htshash.h coucal.h \
htshelp.h htsindex.h htslib.h htsmd5.h \
htsmodules.h htsname.h htsnet.h \
htsopt.h htsrobots.h htsthread.h \
htstools.h htswizard.h htswrap.h htszlib.h \
htsstrings.h httrack-library.h htscharset.h punycode.h htsencoding.h \
htsstrings.h htsarrays.h httrack-library.h \
htscharset.h punycode.h htsencoding.h \
htsentities.h htsentities.sh htsbasiccharsets.sh htscodepages.h \
md5.h murmurhash3.h \
minizip/crypt.h minizip/ioapi.h minizip/mztools.h minizip/unzip.h minizip/zip.h
libhttrack_la_LIBADD = $(THREADS_LIBS) $(ZLIB_LIBS) $(OPENSSL_LIBS) $(DL_LIBS) $(SOCKET_LIBS) $(ICONV_LIBS)
libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS
libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS -DZLIB_CONST
libhttrack_la_LDFLAGS = -version-info $(VERSION_INFO)
libhtsjava_la_SOURCES = htsjava.c htsjava.h
@@ -69,9 +75,22 @@ libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la
libhtsjava_la_LDFLAGS = -version-info $(VERSION_INFO)
EXTRA_DIST = httrack.h webhttrack \
minizip/ChangeLogUnzip \
murmurhash3.h.diff \
murmurhash3.h.orig \
minizip/iowin32.c \
minizip/iowin32.h \
minizip/ioapi.c.diff \
minizip/ioapi.h.diff \
minizip/zip.c.diff \
minizip/zip.h.diff \
minizip/mztools.c.diff \
minizip/ioapi.c.orig \
minizip/ioapi.h.orig \
minizip/mztools.c.orig \
minizip/zip.c.orig \
minizip/zip.h.orig \
minizip/MiniZip64_Changes.txt \
minizip/MiniZip64_info.txt \
proxy/AUTHORS \
proxy/COPYING \
proxy/changelog.txt \

View File

@@ -110,11 +110,12 @@ libhtsjava_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
libhttrack_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
am__dirstamp = $(am__leading_dot)dirstamp
am_libhttrack_la_OBJECTS = libhttrack_la-htscore.lo \
libhttrack_la-htsparse.lo libhttrack_la-htsback.lo \
libhttrack_la-htscache.lo libhttrack_la-htscatchurl.lo \
libhttrack_la-htsfilters.lo libhttrack_la-htsftp.lo \
libhttrack_la-htshash.lo libhttrack_la-htsinthash.lo \
libhttrack_la-htshash.lo libhttrack_la-coucal.lo \
libhttrack_la-htshelp.lo libhttrack_la-htslib.lo \
libhttrack_la-htscoremain.lo libhttrack_la-htsname.lo \
libhttrack_la-htsrobots.lo libhttrack_la-htstools.lo \
@@ -125,26 +126,33 @@ am_libhttrack_la_OBJECTS = libhttrack_la-htscore.lo \
libhttrack_la-htsconcat.lo libhttrack_la-htsmodules.lo \
libhttrack_la-htscharset.lo libhttrack_la-punycode.lo \
libhttrack_la-htsencoding.lo libhttrack_la-md5.lo \
libhttrack_la-ioapi.lo libhttrack_la-mztools.lo \
libhttrack_la-unzip.lo libhttrack_la-zip.lo
minizip/libhttrack_la-ioapi.lo \
minizip/libhttrack_la-mztools.lo \
minizip/libhttrack_la-unzip.lo minizip/libhttrack_la-zip.lo
libhttrack_la_OBJECTS = $(am_libhttrack_la_OBJECTS)
libhttrack_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libhttrack_la_CFLAGS) \
$(CFLAGS) $(libhttrack_la_LDFLAGS) $(LDFLAGS) -o $@
PROGRAMS = $(bin_PROGRAMS)
am_htsserver_OBJECTS = htsserver.$(OBJEXT) htsweb.$(OBJEXT)
am_htsserver_OBJECTS = htsserver-htsserver.$(OBJEXT) \
htsserver-htsweb.$(OBJEXT)
htsserver_OBJECTS = $(am_htsserver_OBJECTS)
htsserver_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
libhttrack.la
htsserver_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(htsserver_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
httrack_SOURCES = httrack.c
httrack_OBJECTS = httrack.$(OBJEXT)
httrack_DEPENDENCIES = $(am__DEPENDENCIES_1) libhttrack.la
am_proxytrack_OBJECTS = proxytrack-main.$(OBJEXT) \
proxytrack-proxytrack.$(OBJEXT) proxytrack-store.$(OBJEXT) \
proxytrack-htsinthash.$(OBJEXT) proxytrack-htsmd5.$(OBJEXT) \
proxytrack-md5.$(OBJEXT) proxytrack-ioapi.$(OBJEXT) \
proxytrack-mztools.$(OBJEXT) proxytrack-unzip.$(OBJEXT) \
proxytrack-zip.$(OBJEXT)
am_proxytrack_OBJECTS = proxy/proxytrack-main.$(OBJEXT) \
proxy/proxytrack-proxytrack.$(OBJEXT) \
proxy/proxytrack-store.$(OBJEXT) proxytrack-coucal.$(OBJEXT) \
proxytrack-htsmd5.$(OBJEXT) proxytrack-md5.$(OBJEXT) \
minizip/proxytrack-ioapi.$(OBJEXT) \
minizip/proxytrack-mztools.$(OBJEXT) \
minizip/proxytrack-unzip.$(OBJEXT) \
minizip/proxytrack-zip.$(OBJEXT)
proxytrack_OBJECTS = $(am_proxytrack_OBJECTS)
proxytrack_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
proxytrack_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -179,6 +187,7 @@ CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_CFLAGS = @AM_CFLAGS@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -187,14 +196,12 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_CFLAGS = @DEFAULT_CFLAGS@
DEFAULT_LDFLAGS = @DEFAULT_LDFLAGS@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
@@ -208,6 +215,7 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HTTPS_SUPPORT = @HTTPS_SUPPORT@
ICONV_LIBS = @ICONV_LIBS@
INSTALL = @INSTALL@
@@ -263,7 +271,6 @@ abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
@@ -320,10 +327,14 @@ DevIncludes_DATA = \
../config.h \
htsmodules.h \
htsbasenet.h \
htsnet.h \
htsbauth.h \
htsdefines.h
htsdefines.h \
htsstrings.h \
htsarrays.h \
htssafe.h
INCLUDES = \
AM_CPPFLAGS = \
@DEFAULT_CFLAGS@ \
@THREADS_CFLAGS@ \
@V6_FLAG@ \
@@ -336,18 +347,19 @@ INCLUDES = \
httrack_LDADD = $(THREADS_LIBS) libhttrack.la
htsserver_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS) libhttrack.la
proxytrack_LDADD = $(THREADS_LIBS) $(SOCKET_LIBS)
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT
proxytrack_CFLAGS = $(AM_CFLAGS) -DNO_MALLOCT -DZLIB_CONST -DHTS_INTHASH_USES_MD5
htsserver_CFLAGS = $(AM_CFLAGS) -DZLIB_CONST -DHTS_INTHASH_USES_MD5
lib_LTLIBRARIES = libhttrack.la libhtsjava.la
htsserver_SOURCES = htsserver.c htsserver.h htsweb.c htsweb.h
proxytrack_SOURCES = proxy/main.c \
proxy/proxytrack.c proxy/store.c \
htsinthash.c htsmd5.c md5.c \
coucal.c htsmd5.c md5.c \
minizip/ioapi.c minizip/mztools.c minizip/unzip.c minizip/zip.c
whttrackrundir = $(bindir)
whttrackrun_SCRIPTS = webhttrack
libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
htscatchurl.c htsfilters.c htsftp.c htshash.c htsinthash.c \
htscatchurl.c htsfilters.c htsftp.c htshash.c coucal.c \
htshelp.c htslib.c htscoremain.c \
htsname.c htsrobots.c htstools.c htswizard.c \
htsalias.c htsthread.c htsindex.c htsbauth.c \
@@ -358,26 +370,40 @@ libhttrack_la_SOURCES = htscore.c htsparse.c htsback.c htscache.c \
hts-indextmpl.h htsalias.h htsback.h htsbase.h htssafe.h \
htsbasenet.h htsbauth.h htscache.h htscatchurl.h \
htsconfig.h htscore.h htsparse.h htscoremain.h htsdefines.h \
htsfilters.h htsftp.h htsglobal.h htshash.h htsinthash.h \
htsfilters.h htsftp.h htsglobal.h htshash.h coucal.h \
htshelp.h htsindex.h htslib.h htsmd5.h \
htsmodules.h htsname.h htsnet.h \
htsopt.h htsrobots.h htsthread.h \
htstools.h htswizard.h htswrap.h htszlib.h \
htsstrings.h httrack-library.h htscharset.h punycode.h htsencoding.h \
htsstrings.h htsarrays.h httrack-library.h \
htscharset.h punycode.h htsencoding.h \
htsentities.h htsentities.sh htsbasiccharsets.sh htscodepages.h \
md5.h murmurhash3.h \
minizip/crypt.h minizip/ioapi.h minizip/mztools.h minizip/unzip.h minizip/zip.h
libhttrack_la_LIBADD = $(THREADS_LIBS) $(ZLIB_LIBS) $(OPENSSL_LIBS) $(DL_LIBS) $(SOCKET_LIBS) $(ICONV_LIBS)
libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS
libhttrack_la_CFLAGS = $(AM_CFLAGS) -DLIBHTTRACK_EXPORTS -DZLIB_CONST
libhttrack_la_LDFLAGS = -version-info $(VERSION_INFO)
libhtsjava_la_SOURCES = htsjava.c htsjava.h
libhtsjava_la_LIBADD = $(THREADS_LIBS) $(DL_LIBS) libhttrack.la
libhtsjava_la_LDFLAGS = -version-info $(VERSION_INFO)
EXTRA_DIST = httrack.h webhttrack \
minizip/ChangeLogUnzip \
murmurhash3.h.diff \
murmurhash3.h.orig \
minizip/iowin32.c \
minizip/iowin32.h \
minizip/ioapi.c.diff \
minizip/ioapi.h.diff \
minizip/zip.c.diff \
minizip/zip.h.diff \
minizip/mztools.c.diff \
minizip/ioapi.c.orig \
minizip/ioapi.h.orig \
minizip/mztools.c.orig \
minizip/zip.c.orig \
minizip/zip.h.orig \
minizip/MiniZip64_Changes.txt \
minizip/MiniZip64_info.txt \
proxy/AUTHORS \
proxy/COPYING \
proxy/changelog.txt \
@@ -454,6 +480,20 @@ clean-libLTLIBRARIES:
done
libhtsjava.la: $(libhtsjava_la_OBJECTS) $(libhtsjava_la_DEPENDENCIES) $(EXTRA_libhtsjava_la_DEPENDENCIES)
$(libhtsjava_la_LINK) -rpath $(libdir) $(libhtsjava_la_OBJECTS) $(libhtsjava_la_LIBADD) $(LIBS)
minizip/$(am__dirstamp):
@$(MKDIR_P) minizip
@: > minizip/$(am__dirstamp)
minizip/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) minizip/$(DEPDIR)
@: > minizip/$(DEPDIR)/$(am__dirstamp)
minizip/libhttrack_la-ioapi.lo: minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
minizip/libhttrack_la-mztools.lo: minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
minizip/libhttrack_la-unzip.lo: minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
minizip/libhttrack_la-zip.lo: minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
libhttrack.la: $(libhttrack_la_OBJECTS) $(libhttrack_la_DEPENDENCIES) $(EXTRA_libhttrack_la_DEPENDENCIES)
$(libhttrack_la_LINK) -rpath $(libdir) $(libhttrack_la_OBJECTS) $(libhttrack_la_LIBADD) $(LIBS)
install-binPROGRAMS: $(bin_PROGRAMS)
@@ -504,10 +544,30 @@ clean-binPROGRAMS:
rm -f $$list
htsserver$(EXEEXT): $(htsserver_OBJECTS) $(htsserver_DEPENDENCIES) $(EXTRA_htsserver_DEPENDENCIES)
@rm -f htsserver$(EXEEXT)
$(LINK) $(htsserver_OBJECTS) $(htsserver_LDADD) $(LIBS)
$(htsserver_LINK) $(htsserver_OBJECTS) $(htsserver_LDADD) $(LIBS)
httrack$(EXEEXT): $(httrack_OBJECTS) $(httrack_DEPENDENCIES) $(EXTRA_httrack_DEPENDENCIES)
@rm -f httrack$(EXEEXT)
$(LINK) $(httrack_OBJECTS) $(httrack_LDADD) $(LIBS)
proxy/$(am__dirstamp):
@$(MKDIR_P) proxy
@: > proxy/$(am__dirstamp)
proxy/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) proxy/$(DEPDIR)
@: > proxy/$(DEPDIR)/$(am__dirstamp)
proxy/proxytrack-main.$(OBJEXT): proxy/$(am__dirstamp) \
proxy/$(DEPDIR)/$(am__dirstamp)
proxy/proxytrack-proxytrack.$(OBJEXT): proxy/$(am__dirstamp) \
proxy/$(DEPDIR)/$(am__dirstamp)
proxy/proxytrack-store.$(OBJEXT): proxy/$(am__dirstamp) \
proxy/$(DEPDIR)/$(am__dirstamp)
minizip/proxytrack-ioapi.$(OBJEXT): minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
minizip/proxytrack-mztools.$(OBJEXT): minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
minizip/proxytrack-unzip.$(OBJEXT): minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
minizip/proxytrack-zip.$(OBJEXT): minizip/$(am__dirstamp) \
minizip/$(DEPDIR)/$(am__dirstamp)
proxytrack$(EXEEXT): $(proxytrack_OBJECTS) $(proxytrack_DEPENDENCIES) $(EXTRA_proxytrack_DEPENDENCIES)
@rm -f proxytrack$(EXEEXT)
$(proxytrack_LINK) $(proxytrack_OBJECTS) $(proxytrack_LDADD) $(LIBS)
@@ -549,14 +609,30 @@ uninstall-whttrackrunSCRIPTS:
mostlyclean-compile:
-rm -f *.$(OBJEXT)
-rm -f minizip/libhttrack_la-ioapi.$(OBJEXT)
-rm -f minizip/libhttrack_la-ioapi.lo
-rm -f minizip/libhttrack_la-mztools.$(OBJEXT)
-rm -f minizip/libhttrack_la-mztools.lo
-rm -f minizip/libhttrack_la-unzip.$(OBJEXT)
-rm -f minizip/libhttrack_la-unzip.lo
-rm -f minizip/libhttrack_la-zip.$(OBJEXT)
-rm -f minizip/libhttrack_la-zip.lo
-rm -f minizip/proxytrack-ioapi.$(OBJEXT)
-rm -f minizip/proxytrack-mztools.$(OBJEXT)
-rm -f minizip/proxytrack-unzip.$(OBJEXT)
-rm -f minizip/proxytrack-zip.$(OBJEXT)
-rm -f proxy/proxytrack-main.$(OBJEXT)
-rm -f proxy/proxytrack-proxytrack.$(OBJEXT)
-rm -f proxy/proxytrack-store.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsjava.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsserver.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsweb.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsserver-htsserver.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/htsserver-htsweb.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/httrack.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-coucal.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsalias.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsback.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsbauth.Plo@am__quote@
@@ -572,7 +648,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htshash.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htshelp.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsindex.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsinthash.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htslib.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsmd5.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htsmodules.Plo@am__quote@
@@ -584,40 +659,43 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htswizard.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htswrap.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-htszlib.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-ioapi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-md5.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-mztools.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-punycode.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-unzip.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhttrack_la-zip.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-htsinthash.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-coucal.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-htsmd5.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-ioapi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-md5.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-mztools.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-proxytrack.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-store.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-unzip.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proxytrack-zip.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-ioapi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-mztools.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-unzip.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/libhttrack_la-zip.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-ioapi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-mztools.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-unzip.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@minizip/$(DEPDIR)/proxytrack-zip.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@proxy/$(DEPDIR)/proxytrack-main.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@proxy/$(DEPDIR)/proxytrack-proxytrack.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@proxy/$(DEPDIR)/proxytrack-store.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@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 $<
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
@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) '$<'`
@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
@@ -678,12 +756,12 @@ libhttrack_la-htshash.lo: htshash.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htshash.lo `test -f 'htshash.c' || echo '$(srcdir)/'`htshash.c
libhttrack_la-htsinthash.lo: htsinthash.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htsinthash.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htsinthash.Tpo -c -o libhttrack_la-htsinthash.lo `test -f 'htsinthash.c' || echo '$(srcdir)/'`htsinthash.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-htsinthash.Tpo $(DEPDIR)/libhttrack_la-htsinthash.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsinthash.c' object='libhttrack_la-htsinthash.lo' libtool=yes @AMDEPBACKSLASH@
libhttrack_la-coucal.lo: coucal.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-coucal.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-coucal.Tpo -c -o libhttrack_la-coucal.lo `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-coucal.Tpo $(DEPDIR)/libhttrack_la-coucal.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coucal.c' object='libhttrack_la-coucal.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-htsinthash.lo `test -f 'htsinthash.c' || echo '$(srcdir)/'`htsinthash.c
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-coucal.lo `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
libhttrack_la-htshelp.lo: htshelp.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-htshelp.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-htshelp.Tpo -c -o libhttrack_la-htshelp.lo `test -f 'htshelp.c' || echo '$(srcdir)/'`htshelp.c
@@ -825,89 +903,117 @@ libhttrack_la-md5.lo: md5.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-md5.lo `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
libhttrack_la-ioapi.lo: minizip/ioapi.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-ioapi.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-ioapi.Tpo -c -o libhttrack_la-ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-ioapi.Tpo $(DEPDIR)/libhttrack_la-ioapi.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='libhttrack_la-ioapi.lo' libtool=yes @AMDEPBACKSLASH@
minizip/libhttrack_la-ioapi.lo: minizip/ioapi.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-ioapi.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-ioapi.Tpo -c -o minizip/libhttrack_la-ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-ioapi.Tpo minizip/$(DEPDIR)/libhttrack_la-ioapi.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='minizip/libhttrack_la-ioapi.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-ioapi.lo `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
libhttrack_la-mztools.lo: minizip/mztools.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-mztools.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-mztools.Tpo -c -o libhttrack_la-mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-mztools.Tpo $(DEPDIR)/libhttrack_la-mztools.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='libhttrack_la-mztools.lo' libtool=yes @AMDEPBACKSLASH@
minizip/libhttrack_la-mztools.lo: minizip/mztools.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-mztools.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-mztools.Tpo -c -o minizip/libhttrack_la-mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-mztools.Tpo minizip/$(DEPDIR)/libhttrack_la-mztools.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='minizip/libhttrack_la-mztools.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-mztools.lo `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
libhttrack_la-unzip.lo: minizip/unzip.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-unzip.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-unzip.Tpo -c -o libhttrack_la-unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-unzip.Tpo $(DEPDIR)/libhttrack_la-unzip.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='libhttrack_la-unzip.lo' libtool=yes @AMDEPBACKSLASH@
minizip/libhttrack_la-unzip.lo: minizip/unzip.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-unzip.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-unzip.Tpo -c -o minizip/libhttrack_la-unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-unzip.Tpo minizip/$(DEPDIR)/libhttrack_la-unzip.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='minizip/libhttrack_la-unzip.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-unzip.lo `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
libhttrack_la-zip.lo: minizip/zip.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT libhttrack_la-zip.lo -MD -MP -MF $(DEPDIR)/libhttrack_la-zip.Tpo -c -o libhttrack_la-zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libhttrack_la-zip.Tpo $(DEPDIR)/libhttrack_la-zip.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='libhttrack_la-zip.lo' libtool=yes @AMDEPBACKSLASH@
minizip/libhttrack_la-zip.lo: minizip/zip.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -MT minizip/libhttrack_la-zip.lo -MD -MP -MF minizip/$(DEPDIR)/libhttrack_la-zip.Tpo -c -o minizip/libhttrack_la-zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/libhttrack_la-zip.Tpo minizip/$(DEPDIR)/libhttrack_la-zip.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='minizip/libhttrack_la-zip.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o libhttrack_la-zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libhttrack_la_CFLAGS) $(CFLAGS) -c -o minizip/libhttrack_la-zip.lo `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
proxytrack-main.o: proxy/main.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-main.o -MD -MP -MF $(DEPDIR)/proxytrack-main.Tpo -c -o proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-main.Tpo $(DEPDIR)/proxytrack-main.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxytrack-main.o' libtool=no @AMDEPBACKSLASH@
htsserver-htsserver.o: htsserver.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsserver.o -MD -MP -MF $(DEPDIR)/htsserver-htsserver.Tpo -c -o htsserver-htsserver.o `test -f 'htsserver.c' || echo '$(srcdir)/'`htsserver.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsserver.Tpo $(DEPDIR)/htsserver-htsserver.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsserver.c' object='htsserver-htsserver.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsserver.o `test -f 'htsserver.c' || echo '$(srcdir)/'`htsserver.c
proxytrack-main.obj: proxy/main.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-main.obj -MD -MP -MF $(DEPDIR)/proxytrack-main.Tpo -c -o proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-main.Tpo $(DEPDIR)/proxytrack-main.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxytrack-main.obj' libtool=no @AMDEPBACKSLASH@
htsserver-htsserver.obj: htsserver.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsserver.obj -MD -MP -MF $(DEPDIR)/htsserver-htsserver.Tpo -c -o htsserver-htsserver.obj `if test -f 'htsserver.c'; then $(CYGPATH_W) 'htsserver.c'; else $(CYGPATH_W) '$(srcdir)/htsserver.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsserver.Tpo $(DEPDIR)/htsserver-htsserver.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsserver.c' object='htsserver-htsserver.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsserver.obj `if test -f 'htsserver.c'; then $(CYGPATH_W) 'htsserver.c'; else $(CYGPATH_W) '$(srcdir)/htsserver.c'; fi`
proxytrack-proxytrack.o: proxy/proxytrack.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-proxytrack.o -MD -MP -MF $(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-proxytrack.Tpo $(DEPDIR)/proxytrack-proxytrack.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxytrack-proxytrack.o' libtool=no @AMDEPBACKSLASH@
htsserver-htsweb.o: htsweb.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsweb.o -MD -MP -MF $(DEPDIR)/htsserver-htsweb.Tpo -c -o htsserver-htsweb.o `test -f 'htsweb.c' || echo '$(srcdir)/'`htsweb.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsweb.Tpo $(DEPDIR)/htsserver-htsweb.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsweb.c' object='htsserver-htsweb.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsweb.o `test -f 'htsweb.c' || echo '$(srcdir)/'`htsweb.c
proxytrack-proxytrack.obj: proxy/proxytrack.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-proxytrack.obj -MD -MP -MF $(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-proxytrack.Tpo $(DEPDIR)/proxytrack-proxytrack.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxytrack-proxytrack.obj' libtool=no @AMDEPBACKSLASH@
htsserver-htsweb.obj: htsweb.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -MT htsserver-htsweb.obj -MD -MP -MF $(DEPDIR)/htsserver-htsweb.Tpo -c -o htsserver-htsweb.obj `if test -f 'htsweb.c'; then $(CYGPATH_W) 'htsweb.c'; else $(CYGPATH_W) '$(srcdir)/htsweb.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/htsserver-htsweb.Tpo $(DEPDIR)/htsserver-htsweb.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsweb.c' object='htsserver-htsweb.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(htsserver_CFLAGS) $(CFLAGS) -c -o htsserver-htsweb.obj `if test -f 'htsweb.c'; then $(CYGPATH_W) 'htsweb.c'; else $(CYGPATH_W) '$(srcdir)/htsweb.c'; fi`
proxytrack-store.o: proxy/store.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-store.o -MD -MP -MF $(DEPDIR)/proxytrack-store.Tpo -c -o proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-store.Tpo $(DEPDIR)/proxytrack-store.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxytrack-store.o' libtool=no @AMDEPBACKSLASH@
proxy/proxytrack-main.o: proxy/main.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-main.o -MD -MP -MF proxy/$(DEPDIR)/proxytrack-main.Tpo -c -o proxy/proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-main.Tpo proxy/$(DEPDIR)/proxytrack-main.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxy/proxytrack-main.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-main.o `test -f 'proxy/main.c' || echo '$(srcdir)/'`proxy/main.c
proxytrack-store.obj: proxy/store.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-store.obj -MD -MP -MF $(DEPDIR)/proxytrack-store.Tpo -c -o proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-store.Tpo $(DEPDIR)/proxytrack-store.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxytrack-store.obj' libtool=no @AMDEPBACKSLASH@
proxy/proxytrack-main.obj: proxy/main.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-main.obj -MD -MP -MF proxy/$(DEPDIR)/proxytrack-main.Tpo -c -o proxy/proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-main.Tpo proxy/$(DEPDIR)/proxytrack-main.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/main.c' object='proxy/proxytrack-main.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-main.obj `if test -f 'proxy/main.c'; then $(CYGPATH_W) 'proxy/main.c'; else $(CYGPATH_W) '$(srcdir)/proxy/main.c'; fi`
proxytrack-htsinthash.o: htsinthash.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-htsinthash.o -MD -MP -MF $(DEPDIR)/proxytrack-htsinthash.Tpo -c -o proxytrack-htsinthash.o `test -f 'htsinthash.c' || echo '$(srcdir)/'`htsinthash.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-htsinthash.Tpo $(DEPDIR)/proxytrack-htsinthash.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsinthash.c' object='proxytrack-htsinthash.o' libtool=no @AMDEPBACKSLASH@
proxy/proxytrack-proxytrack.o: proxy/proxytrack.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-proxytrack.o -MD -MP -MF proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxy/proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo proxy/$(DEPDIR)/proxytrack-proxytrack.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxy/proxytrack-proxytrack.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-htsinthash.o `test -f 'htsinthash.c' || echo '$(srcdir)/'`htsinthash.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-proxytrack.o `test -f 'proxy/proxytrack.c' || echo '$(srcdir)/'`proxy/proxytrack.c
proxytrack-htsinthash.obj: htsinthash.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-htsinthash.obj -MD -MP -MF $(DEPDIR)/proxytrack-htsinthash.Tpo -c -o proxytrack-htsinthash.obj `if test -f 'htsinthash.c'; then $(CYGPATH_W) 'htsinthash.c'; else $(CYGPATH_W) '$(srcdir)/htsinthash.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-htsinthash.Tpo $(DEPDIR)/proxytrack-htsinthash.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='htsinthash.c' object='proxytrack-htsinthash.obj' libtool=no @AMDEPBACKSLASH@
proxy/proxytrack-proxytrack.obj: proxy/proxytrack.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-proxytrack.obj -MD -MP -MF proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo -c -o proxy/proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-proxytrack.Tpo proxy/$(DEPDIR)/proxytrack-proxytrack.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/proxytrack.c' object='proxy/proxytrack-proxytrack.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-htsinthash.obj `if test -f 'htsinthash.c'; then $(CYGPATH_W) 'htsinthash.c'; else $(CYGPATH_W) '$(srcdir)/htsinthash.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-proxytrack.obj `if test -f 'proxy/proxytrack.c'; then $(CYGPATH_W) 'proxy/proxytrack.c'; else $(CYGPATH_W) '$(srcdir)/proxy/proxytrack.c'; fi`
proxy/proxytrack-store.o: proxy/store.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-store.o -MD -MP -MF proxy/$(DEPDIR)/proxytrack-store.Tpo -c -o proxy/proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-store.Tpo proxy/$(DEPDIR)/proxytrack-store.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxy/proxytrack-store.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-store.o `test -f 'proxy/store.c' || echo '$(srcdir)/'`proxy/store.c
proxy/proxytrack-store.obj: proxy/store.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxy/proxytrack-store.obj -MD -MP -MF proxy/$(DEPDIR)/proxytrack-store.Tpo -c -o proxy/proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) proxy/$(DEPDIR)/proxytrack-store.Tpo proxy/$(DEPDIR)/proxytrack-store.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='proxy/store.c' object='proxy/proxytrack-store.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxy/proxytrack-store.obj `if test -f 'proxy/store.c'; then $(CYGPATH_W) 'proxy/store.c'; else $(CYGPATH_W) '$(srcdir)/proxy/store.c'; fi`
proxytrack-coucal.o: coucal.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-coucal.o -MD -MP -MF $(DEPDIR)/proxytrack-coucal.Tpo -c -o proxytrack-coucal.o `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-coucal.Tpo $(DEPDIR)/proxytrack-coucal.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coucal.c' object='proxytrack-coucal.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-coucal.o `test -f 'coucal.c' || echo '$(srcdir)/'`coucal.c
proxytrack-coucal.obj: coucal.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-coucal.obj -MD -MP -MF $(DEPDIR)/proxytrack-coucal.Tpo -c -o proxytrack-coucal.obj `if test -f 'coucal.c'; then $(CYGPATH_W) 'coucal.c'; else $(CYGPATH_W) '$(srcdir)/coucal.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-coucal.Tpo $(DEPDIR)/proxytrack-coucal.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='coucal.c' object='proxytrack-coucal.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-coucal.obj `if test -f 'coucal.c'; then $(CYGPATH_W) 'coucal.c'; else $(CYGPATH_W) '$(srcdir)/coucal.c'; fi`
proxytrack-htsmd5.o: htsmd5.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-htsmd5.o -MD -MP -MF $(DEPDIR)/proxytrack-htsmd5.Tpo -c -o proxytrack-htsmd5.o `test -f 'htsmd5.c' || echo '$(srcdir)/'`htsmd5.c
@@ -937,67 +1043,68 @@ proxytrack-md5.obj: md5.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
proxytrack-ioapi.o: minizip/ioapi.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-ioapi.o -MD -MP -MF $(DEPDIR)/proxytrack-ioapi.Tpo -c -o proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-ioapi.Tpo $(DEPDIR)/proxytrack-ioapi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='proxytrack-ioapi.o' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-ioapi.o: minizip/ioapi.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-ioapi.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-ioapi.Tpo -c -o minizip/proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-ioapi.Tpo minizip/$(DEPDIR)/proxytrack-ioapi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='minizip/proxytrack-ioapi.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-ioapi.o `test -f 'minizip/ioapi.c' || echo '$(srcdir)/'`minizip/ioapi.c
proxytrack-ioapi.obj: minizip/ioapi.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-ioapi.obj -MD -MP -MF $(DEPDIR)/proxytrack-ioapi.Tpo -c -o proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-ioapi.Tpo $(DEPDIR)/proxytrack-ioapi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='proxytrack-ioapi.obj' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-ioapi.obj: minizip/ioapi.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-ioapi.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-ioapi.Tpo -c -o minizip/proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-ioapi.Tpo minizip/$(DEPDIR)/proxytrack-ioapi.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/ioapi.c' object='minizip/proxytrack-ioapi.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-ioapi.obj `if test -f 'minizip/ioapi.c'; then $(CYGPATH_W) 'minizip/ioapi.c'; else $(CYGPATH_W) '$(srcdir)/minizip/ioapi.c'; fi`
proxytrack-mztools.o: minizip/mztools.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-mztools.o -MD -MP -MF $(DEPDIR)/proxytrack-mztools.Tpo -c -o proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-mztools.Tpo $(DEPDIR)/proxytrack-mztools.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='proxytrack-mztools.o' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-mztools.o: minizip/mztools.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-mztools.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-mztools.Tpo -c -o minizip/proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-mztools.Tpo minizip/$(DEPDIR)/proxytrack-mztools.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='minizip/proxytrack-mztools.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-mztools.o `test -f 'minizip/mztools.c' || echo '$(srcdir)/'`minizip/mztools.c
proxytrack-mztools.obj: minizip/mztools.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-mztools.obj -MD -MP -MF $(DEPDIR)/proxytrack-mztools.Tpo -c -o proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-mztools.Tpo $(DEPDIR)/proxytrack-mztools.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='proxytrack-mztools.obj' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-mztools.obj: minizip/mztools.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-mztools.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-mztools.Tpo -c -o minizip/proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-mztools.Tpo minizip/$(DEPDIR)/proxytrack-mztools.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/mztools.c' object='minizip/proxytrack-mztools.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-mztools.obj `if test -f 'minizip/mztools.c'; then $(CYGPATH_W) 'minizip/mztools.c'; else $(CYGPATH_W) '$(srcdir)/minizip/mztools.c'; fi`
proxytrack-unzip.o: minizip/unzip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-unzip.o -MD -MP -MF $(DEPDIR)/proxytrack-unzip.Tpo -c -o proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-unzip.Tpo $(DEPDIR)/proxytrack-unzip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='proxytrack-unzip.o' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-unzip.o: minizip/unzip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-unzip.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-unzip.Tpo -c -o minizip/proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-unzip.Tpo minizip/$(DEPDIR)/proxytrack-unzip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='minizip/proxytrack-unzip.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-unzip.o `test -f 'minizip/unzip.c' || echo '$(srcdir)/'`minizip/unzip.c
proxytrack-unzip.obj: minizip/unzip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-unzip.obj -MD -MP -MF $(DEPDIR)/proxytrack-unzip.Tpo -c -o proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-unzip.Tpo $(DEPDIR)/proxytrack-unzip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='proxytrack-unzip.obj' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-unzip.obj: minizip/unzip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-unzip.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-unzip.Tpo -c -o minizip/proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-unzip.Tpo minizip/$(DEPDIR)/proxytrack-unzip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/unzip.c' object='minizip/proxytrack-unzip.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-unzip.obj `if test -f 'minizip/unzip.c'; then $(CYGPATH_W) 'minizip/unzip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/unzip.c'; fi`
proxytrack-zip.o: minizip/zip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-zip.o -MD -MP -MF $(DEPDIR)/proxytrack-zip.Tpo -c -o proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-zip.Tpo $(DEPDIR)/proxytrack-zip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='proxytrack-zip.o' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-zip.o: minizip/zip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-zip.o -MD -MP -MF minizip/$(DEPDIR)/proxytrack-zip.Tpo -c -o minizip/proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-zip.Tpo minizip/$(DEPDIR)/proxytrack-zip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='minizip/proxytrack-zip.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-zip.o `test -f 'minizip/zip.c' || echo '$(srcdir)/'`minizip/zip.c
proxytrack-zip.obj: minizip/zip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT proxytrack-zip.obj -MD -MP -MF $(DEPDIR)/proxytrack-zip.Tpo -c -o proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/proxytrack-zip.Tpo $(DEPDIR)/proxytrack-zip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='proxytrack-zip.obj' libtool=no @AMDEPBACKSLASH@
minizip/proxytrack-zip.obj: minizip/zip.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -MT minizip/proxytrack-zip.obj -MD -MP -MF minizip/$(DEPDIR)/proxytrack-zip.Tpo -c -o minizip/proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
@am__fastdepCC_TRUE@ $(am__mv) minizip/$(DEPDIR)/proxytrack-zip.Tpo minizip/$(DEPDIR)/proxytrack-zip.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minizip/zip.c' object='minizip/proxytrack-zip.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(proxytrack_CFLAGS) $(CFLAGS) -c -o minizip/proxytrack-zip.obj `if test -f 'minizip/zip.c'; then $(CYGPATH_W) 'minizip/zip.c'; else $(CYGPATH_W) '$(srcdir)/minizip/zip.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
-rm -rf minizip/.libs minizip/_libs
install-DevIncludesDATA: $(DevIncludes_DATA)
@$(NORMAL_INSTALL)
@list='$(DevIncludes_DATA)'; test -n "$(DevIncludesdir)" || list=; \
@@ -1137,6 +1244,10 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-rm -f minizip/$(DEPDIR)/$(am__dirstamp)
-rm -f minizip/$(am__dirstamp)
-rm -f proxy/$(DEPDIR)/$(am__dirstamp)
-rm -f proxy/$(am__dirstamp)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@@ -1147,7 +1258,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
clean-libtool mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -rf ./$(DEPDIR) minizip/$(DEPDIR) proxy/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@@ -1193,7 +1304,7 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -rf ./$(DEPDIR) minizip/$(DEPDIR) proxy/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

File diff suppressed because it is too large Load Diff

529
src/coucal.h Normal file
View File

@@ -0,0 +1,529 @@
/* ------------------------------------------------------------ */
/*
Coucal, Cuckoo hashing-based hashtable with stash area.
Copyright (C) 2013-2014 Xavier Roche (http://www.httrack.com/)
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. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS 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 COPYRIGHT HOLDER OR 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.
*/
/**
* Coucal, a Cuckoo-hashing-based hashtable with stash area C library.
*
* This hashtable library provides key/value hashtable, with by default a
* string key, and integer/pointer value (with an associated optional
* allocator). Both key and value can be of any type, using custom settings.
* By default, the string key is dup'ed using a string pool, and the opaque
* value is stored as-is (either the pointer, or an uintptr_t integer value).
* It features O(1) average insertion, and guaranteed O(1) lookup, replace,
* and delete operations.
*
* Implementation notes:
* Implementation is auto-rehashable, and uses cuckoo hashing of size 2**n
* with a Murmur or MD5 hash function, with one additional auxiliary hash
* function.
* It also uses a small stash area to handle rare cases of collisions.
* Enumeration of all key/values is possible, deletion is also possible, but
* currently without any auto-shrinking (ie. table will never shrink).
* Overall, two main blocks are allocated: one for the items, and one for
* the keys (pool).
* If the string pool is being used (to store dup'ed keys), deleting is only
* O(1) average, because the pool needs to be compacted time to time.
* Currently the default maximum number of elements in the hashtable is
* 2**31 - 1 (that is, 2,147,483,648 elements), but this default can be changed
* by setting COUCAL_HASH_SIZE to a higher value (64 is the only higher value
* currently supported), and rebuilding the library.
*
* References:
*
* Cuckoo Hashing, by Rasmus Pagh and Flemming Friche Rodler
* http://www.it-c.dk/people/pagh/papers/cuckoo-jour.pdf
*
* Cuckoo Stash, by Adam Kirsch, Michael Mitzenmacher and Udi Wieder
* http://research.microsoft.com/pubs/73856/stash-full.9-30.pdf
*
* MurmurHash3, by Austin Appleby
* http://en.wikipedia.org/wiki/MurmurHash
*
* MD5 http://en.wikipedia.org/wiki/MD5
* FNV http://www.isthe.com/chongo/tech/comp/fnv/
**/
#ifndef COUCAL_DEFH
#define COUCAL_DEFH
/* Includes */
#ifdef _WIN32
#include <stddef.h>
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
#elif (defined(SOLARIS) || defined(sun) || defined(HAVE_INTTYPES_H) \
|| defined(BSD) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD_kernel__))
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#include <stdarg.h>
/* External definitions */
#ifndef COUCAL_EXTERN
#ifdef _WIN32
#ifdef COUCAL_BUILDING
#define COUCAL_EXTERN __declspec(dllimport)
#else
#define COUCAL_EXTERN __declspec(dllexport)
#endif
#elif ( ( defined(__GNUC__) && ( __GNUC__ >= 4 ) ) \
|| ( defined(HAVE_VISIBILITY) && HAVE_VISIBILITY ) )
#define COUCAL_EXTERN extern __attribute__ ((visibility("default")))
#else
#define COUCAL_EXTERN extern
#endif
#endif
/** Key opaque type. May be a regular 'const char*'. **/
typedef void* coucal_key;
/** Key constant (can not be modified) opaque type. **/
typedef const void* coucal_key_const;
/** Opaque user-defined pointer. **/
typedef void* coucal_opaque;
/** Value (union of any value). **/
typedef union coucal_value {
/** Integer value. **/
intptr_t intg;
/** Unsigned integer value. **/
uintptr_t uintg;
/** Pointer value. **/
void *ptr;
} coucal_value;
/** Value constant. **/
typedef const coucal_value coucal_value_const;
/** NULL Value. **/
#define INTHASH_VALUE_NULL { 0 }
#ifndef HTS_DEF_FWSTRUCT_coucal_item
#define HTS_DEF_FWSTRUCT_coucal_item
typedef struct coucal_item coucal_item;
#endif
/** Coucal primary hash size. Default is 32-bit. **/
#ifndef COUCAL_HASH_SIZE
#define COUCAL_HASH_SIZE 32
#endif
/** Hash integer type. **/
#if (COUCAL_HASH_SIZE == 32)
/** 32-bit hash key. **/
typedef uint32_t coucal_hashkey;
#elif (COUCAL_HASH_SIZE == 64)
/** 64-bit hash key. **/
typedef uint64_t coucal_hashkey;
#else
#error "Unsupported COUCAL_HASH_SIZE"
#endif
/** Pair of hashes **/
typedef struct coucal_hashkeys {
coucal_hashkey hash1;
coucal_hashkey hash2;
} coucal_hashkeys;
/** NULL pair of hashes. **/
#define INTHASH_KEYS_NULL { 0, 0 }
/** Item holding a value. **/
struct coucal_item {
/** Key. **/
coucal_key name;
/** Value. **/
coucal_value value;
/** Hashes of the key. **/
coucal_hashkeys hashes;
};
/** Log level. **/
typedef enum coucal_loglevel {
coucal_log_critical,
coucal_log_warning,
coucal_log_info,
coucal_log_debug,
coucal_log_trace
} coucal_loglevel;
/** free handler. Only used when values are markes as xxc **/
typedef void (*t_coucal_key_freehandler)(coucal_opaque arg,
coucal_key key);
/** Value free handler. Only used when values are markes as xxc **/
typedef void (*t_coucal_value_freehandler)(coucal_opaque arg,
coucal_value value);
/** Key dup handler. **/
typedef coucal_key (*t_coucal_duphandler)(coucal_opaque arg,
coucal_key_const name);
/** Key hash computation handler. **/
typedef coucal_hashkeys (*t_coucal_hasheshandler)(coucal_opaque arg,
coucal_key_const name);
/** Hashtable logging handler. **/
typedef void (*t_coucal_loghandler)(coucal_opaque arg, coucal_loglevel level,
const char* format, va_list args);
/** Hashtable fatal assertion failure. **/
typedef void (*t_coucal_asserthandler)(coucal_opaque arg, const char* exp,
const char* file, int line);
/** Key printer (debug) **/
typedef const char* (*t_coucal_printkeyhandler)(coucal_opaque arg,
coucal_key_const name);
/** Value printer (debug) **/
typedef const char* (*t_coucal_printvaluehandler)(coucal_opaque arg,
coucal_value_const value);
/**
* Value comparison handler (returns non-zero value if strings are equal).
**/
typedef int (*t_coucal_cmphandler)(coucal_opaque arg,
coucal_key_const a,
coucal_key_const b);
/** Hashtable (opaque structure). **/
#ifndef HTS_DEF_FWSTRUCT_struct_coucal
#define HTS_DEF_FWSTRUCT_struct_coucal
typedef struct struct_coucal struct_coucal, *coucal;
#endif
/** Hashtable enumeration (opaque structure). **/
#ifndef HTS_DEF_FWSTRUCT_struct_coucal_enum
#define HTS_DEF_FWSTRUCT_struct_coucal_enum
typedef struct struct_coucal_enum struct_coucal_enum;
#endif
/** Enumeration. **/
struct struct_coucal_enum {
coucal table;
size_t index;
};
#ifdef __cplusplus
extern "C" {
#endif
/**
* Create a new hashtable, with initial bucket size of 'size'.
* If size is 0, use the default minimal bucket size.
* Return a non-NULL pointer upon success.
*
* By default, keys are supposed to be '\0'-terminated strings, which are
* duplicated by the library (the passed pointer does not need to be
* persistent), and values are opaque pointers (or integers) which are copied
* "as is", without further processing. Use coucal_value_set_key_handler()
* and coucal_value_set_value_handler() to alter this default behavior.
**/
COUCAL_EXTERN coucal coucal_new(size_t size);
/**
* Was the hashtable successfully created ?
* Return non-zero value if the hashtable is valid.
**/
COUCAL_EXTERN int coucal_created(coucal hashtable);
/**
* Delete a hashtable, freeing all entries.
**/
COUCAL_EXTERN void coucal_delete(coucal * hashtable);
/**
* Return the number of items in the hashtable.
**/
COUCAL_EXTERN size_t coucal_nitems(coucal hashtable);
/**
* Return the memory size taken by the hashtable.
* (This does not take account of the possible memory taken by values)
**/
COUCAL_EXTERN size_t coucal_memory_size(coucal hashtable);
/**
* Return the library hash size compiled.
* The returned value MUST match COUCAL_HASH_SIZE.
**/
COUCAL_EXTERN size_t coucal_hash_size(void);
/**
* If 'flag' is non-zero, calls coucal_value_set_value_handler() with
* default system free() handler function, otherwise, free the value handlers.
**/
COUCAL_EXTERN void coucal_value_is_malloc(coucal hashtable, int flag);
/**
* Set handlers for values.
* free: this handler will be called when a value is to be removed from
* the hashtable. if NULL, values won't be free'd.
* arg: opaque custom argument to be used by functions.
* Handler(s) MUST NOT be changed once elements have been added.
**/
COUCAL_EXTERN void coucal_value_set_value_handler(coucal hashtable,
t_coucal_value_freehandler free,
coucal_opaque arg);
/**
* Set handlers for keys.
* dup: handler called to duplicate a key. if NULL, the internal pool is used.
* free: handler called to free a key. if NULL, the internal pool is used.
* hash: hashing handler, called to hash a key. if NULL, the default hash
* function is used.
* equals: comparison handler, returning non-zero value when two keys are
* identical. if NULL, the default comparison function is used.
* arg: opaque custom argument to be used by functions.
* Handler(s) MUST NOT be changed once elements have been added.
**/
COUCAL_EXTERN void coucal_value_set_key_handler(coucal hashtable,
t_coucal_duphandler dup,
t_coucal_key_freehandler free,
t_coucal_hasheshandler hash,
t_coucal_cmphandler equals,
coucal_opaque arg);
/**
* Set assertion failure handler.
* log: handler called upon serious programming error
* fatal: handler called upon serious programming error
**/
COUCAL_EXTERN void coucal_set_assert_handler(coucal hashtable,
t_coucal_loghandler log,
t_coucal_asserthandler fatal,
coucal_opaque arg);
/**
* Set pretty print loggers (debug). Both handlers must return a string
* pointer which shall be valid until the next call. Both key and value
* pointers shall be valid at the same time.
* name: handler called to print the string representation of the name
* value: handler called to print the string representation of the value
**/
COUCAL_EXTERN void coucal_set_print_handler(coucal hashtable,
t_coucal_printkeyhandler key,
t_coucal_printvaluehandler value,
coucal_opaque arg);
/**
* Set the hashtable name, for degugging purpose.
* name: the hashtable name (ASCII or UTF-8)
*/
COUCAL_EXTERN void coucal_set_name(coucal hashtable, coucal_key_const name);
/**
* Get the hashtable name, for degugging purpose.
* Return NULL if no name was defined.
**/
COUCAL_EXTERN const char* coucal_get_name(coucal hashtable);
/**
* Read an integer entry from the hashtable.
* Return non-zero value upon success and sets intvalue.
**/
COUCAL_EXTERN int coucal_read(coucal hashtable, coucal_key_const name,
intptr_t * intvalue);
/**
* Same as coucal_read(), but return 0 is the value was zero.
**/
COUCAL_EXTERN int coucal_readptr(coucal hashtable, coucal_key_const name,
intptr_t * intvalue);
/**
* Read an integer entry from the hashtable.
* Return 0 if the entry could not be found.
**/
COUCAL_EXTERN intptr_t coucal_get_intptr(coucal hashtable,
coucal_key_const name);
/**
* Return non-zero value if the given entry exists.
**/
COUCAL_EXTERN int coucal_exists(coucal hashtable, coucal_key_const name);
/**
* Read an entry from the hashtable.
* Return non-zero value upon success and sets value.
**/
COUCAL_EXTERN int coucal_read_value(coucal hashtable, coucal_key_const name,
coucal_value *value);
/**
* Write an entry to the hashtable.
* Return non-zero value if the entry was added, zero if it was replaced.
**/
COUCAL_EXTERN int coucal_write_value(coucal hashtable, coucal_key_const name,
coucal_value_const value);
/**
* Read a pointer entry from the hashtable.
* Return non-zero value upon success and sets value.
**/
COUCAL_EXTERN int coucal_read_pvoid(coucal hashtable, coucal_key_const name,
void **value);
/**
* Read a pointer entry from the hashtable and returns its value.
* Return NULL if the entry could not be found.
**/
COUCAL_EXTERN void* coucal_get_pvoid(coucal hashtable, coucal_key_const name);
/**
* Write a pointer entry to the hashtable.
* Return non-zero value if the entry was added, zero if it was replaced.
**/
COUCAL_EXTERN int coucal_write_pvoid(coucal hashtable, coucal_key_const name,
void *value);
/**
* Alias to coucal_write_pvoid()
**/
COUCAL_EXTERN void coucal_add_pvoid(coucal hashtable, coucal_key_const name,
void *value);
/**
* Write an integer entry to the hashtable.
* Return non-zero value if the entry was added, zero if it was replaced.
**/
COUCAL_EXTERN int coucal_write(coucal hashtable, coucal_key_const name,
intptr_t value);
/**
* Alias to coucal_write()
**/
COUCAL_EXTERN void coucal_add(coucal hashtable, coucal_key_const name,
intptr_t value);
/**
* Increment an entry value in the hashtable
* (or create a new entry with value 1 if it does not yet exist)
* Return non-zero value if the entry was added, zero if it was changed.
**/
COUCAL_EXTERN int coucal_inc(coucal hashtable, coucal_key_const name);
/**
* Decrement an entry value in the hashtable
* (or create a new entry with value -1 if it does not yet exist)
* Return non-zero value if the entry was added, zero if it was changed.
**/
COUCAL_EXTERN int coucal_dec(coucal hashtable, coucal_key_const name);
/**
* Fetch an entry value from the hashtable.
* Returns NULL if the entry could not be found.
* The returned pointer is only valid until next call to this library, and can
* be used for read or write operations.
**/
COUCAL_EXTERN coucal_value* coucal_fetch_value(coucal hashtable,
coucal_key_const name);
/**
* Fetch an entry value from the hashtable, given a name, and its hashes.
* Returns NULL if the entry could not be found.
* The returned pointer is only valid until next call to this library, and can
* be used for read or write operations.
* The hashes MUST have been computed using coucal_calc_hashes(), or by
* copying an existing hash during an enumeration.
* The use of a non-matching hash is safe, but will return NULL.
**/
COUCAL_EXTERN coucal_value* coucal_fetch_value_hashes(coucal hashtable,
coucal_key_const name,
const coucal_hashkeys
*hashes);
/**
* Remove an entry from the hashtable
* Return non-zero value if the entry was removed, zero otherwise.
**/
COUCAL_EXTERN int coucal_remove(coucal hashtable, coucal_key_const name);
/**
* Return a new enumerator.
* Note: deleting entries is safe while enumerating, but adding entries
* lead to undefined enumeration behavior (yet safe).
**/
COUCAL_EXTERN struct_coucal_enum coucal_enum_new(coucal hashtable);
/**
* Enumerate the next entry.
**/
COUCAL_EXTERN coucal_item *coucal_enum_next(struct_coucal_enum * e);
/**
* Compute a hash of a key for the hashtable 'hashtable'.
* The returned hash is suitable for use with coucal_fetch_value_hashes()
* Note: the default implementation uses coucal_hash_string()
**/
COUCAL_EXTERN coucal_hashkeys coucal_calc_hashes(coucal hashtable,
coucal_key_const value);
/**
* Compute a hash, given a string. This is the default function used for
* hashing keys, which are by default strings. This function uses
* coucal_hash_data() as backend.
**/
COUCAL_EXTERN coucal_hashkeys coucal_hash_string(const char *value);
/**
* Compute a hash, given an opaque buffer.
**/
COUCAL_EXTERN coucal_hashkeys coucal_hash_data(const void *data, size_t size);
/**
* Set default global assertion failure handler.
* The handler will be used if no specific handler was defined in the
* hashtable itself.
* log: handler called upon serious error log (opaque argument
* is the hashtable itself)
* fatal: handler called upon serious programming error (opaque argument
* is the hashtable itself)
**/
COUCAL_EXTERN void coucal_set_global_assert_handler(t_coucal_loghandler log,
t_coucal_asserthandler fatal);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -189,10 +189,10 @@ const char *hts_optalias[][4] = {
/* Badly documented */
{"debug-testfilters", "-#0", "param1", "debug: test filters"},
{"advanced-flushlogs", "-#f", "single", ""},
{"advanced-maxfilters", "-#F", "param", ""},
{"advanced-maxfilters", "-#F", "param", "maximum number of scan rules"},
{"version", "-#h", "single", ""},
{"debug-scanstdin", "-#K", "single", ""},
{"advanced-maxlinks", "-#L", "single", ""},
{"advanced-maxlinks", "-#L", "param", "maximum number of links (0 to disable limit)"},
{"advanced-progressinfo", "-#p", "single", "deprecated"},
{"catch-url", "-#P", "single", "catch complex URL through proxy"},
/*{"debug-oldftp","-#R","single",""}, */
@@ -517,9 +517,9 @@ int optinclude_file(const char *name, int *argc, char **argv, char *x_argvblk,
tmp_argv[1] = _tmp_argv[1];
tmp_argv[2] = _tmp_argv[2];
tmp_argv[3] = _tmp_argv[3];
strcpybuff(tmp_argv[0], "--");
strcatbuff(tmp_argv[0], a);
strcpybuff(tmp_argv[1], b);
strcpybuff(_tmp_argv[0], "--");
strcatbuff(_tmp_argv[0], a);
strcpybuff(_tmp_argv[1], b);
result =
optalias_check(2, (const char *const *) tmp_argv, 0, &return_argc,
@@ -560,8 +560,8 @@ int optinclude_file(const char *name, int *argc, char **argv, char *x_argvblk,
/* Get home directory, '.' if failed */
/* example: /home/smith */
char *hts_gethome(void) {
char *home = getenv("HOME");
const char *hts_gethome(void) {
const char *home = getenv("HOME");
if (home)
return home;

View File

@@ -48,7 +48,7 @@ const char *optreal_value(int p);
const char *optalias_value(int p);
const char *opttype_value(int p);
const char *opthelp_value(int p);
char *hts_gethome(void);
const char *hts_gethome(void);
void expand_home(String * str);
#endif

149
src/htsarrays.h Normal file
View File

@@ -0,0 +1,149 @@
/* ------------------------------------------------------------ */
/*
HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2014 Xavier Roche and other contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes:
- We hereby ask people using this source NOT to use it in purpose of grabbing
emails addresses, or collecting any other private information on persons.
This would disgrace our work, and spoil the many hours we spent on it.
Please visit our Website: http://www.httrack.com
*/
/* ------------------------------------------------------------ */
/* File: Arrays */
/* Author: Xavier Roche */
/* ------------------------------------------------------------ */
#ifndef HTS_ARRAYS_DEFSTATIC
#define HTS_ARRAYS_DEFSTATIC
/* System definitions. */
#include <stdlib.h>
#include <string.h>
#include "htssafe.h"
/* Memory allocation assertion failure */
static void hts_record_assert_memory_failed(const size_t size) {
fprintf(stderr, "memory allocation failed (%lu bytes)", \
(long int) size); \
assertf(! "memory allocation failed"); \
}
/** Dynamic array of T elements. **/
#define TypedArray(T) \
struct { \
/** Elements. **/ \
union { \
/** Typed. **/ \
T* elts; \
/** Opaque. **/ \
void* ptr; \
} data; \
/** Count. **/ \
size_t size; \
/** Capacity. **/ \
size_t capa; \
}
#define EMPTY_TYPED_ARRAY { { NULL }, 0, 0 }
/** Array size, in elements. **/
#define TypedArraySize(A) ((A).size)
/** Array capacity, in elements. **/
#define TypedArrayCapa(A) ((A).capa)
/**
* Remaining free space, in elements.
* Macro, first element evaluated multiple times.
**/
#define TypedArrayRoom(A) ( TypedArrayCapa(A) - TypedArraySize(A) )
/** Array elements, of type T*. **/
#define TypedArrayElts(A) ((A).data.elts)
/** Array pointer, of type void*. **/
#define TypedArrayPtr(A) ((A).data.ptr)
/** Size of T. **/
#define TypedArrayWidth(A) (sizeof(*TypedArrayElts(A)))
/** Nth element of the array. **/
#define TypedArrayNth(A, N) (TypedArrayElts(A)[N])
/**
* Tail of the array (outside the array).
* The returned pointer points to the beginning of TypedArrayRoom(A)
* free elements.
**/
#define TypedArrayTail(A) (TypedArrayNth(A, TypedArraySize(A)))
/**
* Ensure at least 'ROOM' elements can be put in the remaining space.
* After a call to this macro, TypedArrayRoom(A) is guaranteed to be at
* least equal to 'ROOM'.
**/
#define TypedArrayEnsureRoom(A, ROOM) do { \
const size_t room_ = (ROOM); \
while (TypedArrayRoom(A) < room_) { \
TypedArrayCapa(A) = TypedArrayCapa(A) < 16 ? 16 : TypedArrayCapa(A) * 2; \
} \
TypedArrayPtr(A) = realloc(TypedArrayPtr(A), \
TypedArrayCapa(A)*TypedArrayWidth(A)); \
if (TypedArrayPtr(A) == NULL) { \
hts_record_assert_memory_failed(TypedArrayCapa(A)*TypedArrayWidth(A)); \
} \
} while(0)
/** Add an element. Macro, first element evaluated multiple times. **/
#define TypedArrayAdd(A, E) do { \
TypedArrayEnsureRoom(A, 1); \
assertf(TypedArraySize(A) < TypedArrayCapa(A)); \
TypedArrayTail(A) = (E); \
TypedArraySize(A)++; \
} while(0)
/**
* Add 'COUNT' elements from 'PTR'.
* Macro, first element evaluated multiple times.
**/
#define TypedArrayAppend(A, PTR, COUNT) do { \
const size_t count_ = (COUNT); \
/* This 1-case is to benefit from type safety. */ \
if (count_ == 1) { \
TypedArrayAdd(A, *(PTR)); \
} else { \
const void *const source_ = (PTR); \
TypedArrayEnsureRoom(A, count_); \
assertf(count_ <= TypedArrayRoom(A)); \
memcpy(&TypedArrayTail(A), source_, count_ * TypedArrayWidth(A)); \
TypedArraySize(A) += count_; \
} \
} while(0)
/** Clear an array, freeing memory and clearing size and capacity. **/
#define TypedArrayFree(A) do { \
if (TypedArrayPtr(A) != NULL) { \
TypedArrayCapa(A) = TypedArraySize(A) = 0; \
free(TypedArrayPtr(A)); \
TypedArrayPtr(A) = NULL; \
} \
} while(0)
#endif

View File

@@ -73,11 +73,11 @@ struct_back *back_new(httrackp *opt, int back_max) {
sback->count = back_max;
sback->lnk = (lien_back *) calloct((back_max + 1), sizeof(lien_back));
sback->ready = inthash_new(0);
sback->ready = coucal_new(0);
hts_set_hash_handler(sback->ready, opt);
inthash_set_name(sback->ready, "back_new");
coucal_set_name(sback->ready, "back_new");
sback->ready_size_bytes = 0;
inthash_value_is_malloc(sback->ready, 1);
coucal_value_is_malloc(sback->ready, 1);
// init
for(i = 0; i < sback->count; i++) {
sback->lnk[i].r.location = sback->lnk[i].location_buffer;
@@ -94,7 +94,7 @@ void back_free(struct_back ** sback) {
(*sback)->lnk = NULL;
}
if ((*sback)->ready != NULL) {
inthash_delete(&(*sback)->ready);
coucal_delete(&(*sback)->ready);
(*sback)->ready_size_bytes = 0;
}
freet(*sback);
@@ -112,12 +112,12 @@ void back_delete_all(httrackp * opt, cache_back * cache, struct_back * sback) {
}
// delete stored slots
if (sback->ready != NULL) {
struct_inthash_enum e = inthash_enum_new(sback->ready);
inthash_chain *item;
struct_coucal_enum e = coucal_enum_new(sback->ready);
coucal_item *item;
while((item = inthash_enum_next(&e))) {
while((item = coucal_enum_next(&e))) {
#ifndef HTS_NO_BACK_ON_DISK
char *filename = (char *) item->value.ptr;
const char *filename = (char *) item->value.ptr;
if (filename != NULL) {
(void) UNLINK(filename);
@@ -130,7 +130,7 @@ void back_delete_all(httrackp * opt, cache_back * cache, struct_back * sback) {
#endif
}
/* delete hashtable & content */
inthash_delete(&sback->ready);
coucal_delete(&sback->ready);
sback->ready_size_bytes = 0;
}
}
@@ -139,19 +139,19 @@ void back_delete_all(httrackp * opt, cache_back * cache, struct_back * sback) {
// ---
// routines de backing
static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
char *fil, char *sav, int getIndex);
static int back_index_fetch(httrackp * opt, struct_back * sback, char *adr,
char *fil, char *sav, int getIndex);
static int back_index_ready(httrackp * opt, struct_back * sback, const char *adr,
const char *fil, const char *sav, int getIndex);
static int back_index_fetch(httrackp * opt, struct_back * sback, const char *adr,
const char *fil, const char *sav, int getIndex);
// retourne l'index d'un lien dans un tableau de backing
int back_index(httrackp * opt, struct_back * sback, char *adr, char *fil,
char *sav) {
int back_index(httrackp * opt, struct_back * sback, const char *adr, const char *fil,
const char *sav) {
return back_index_fetch(opt, sback, adr, fil, sav, 1);
}
static int back_index_fetch(httrackp * opt, struct_back * sback, char *adr,
char *fil, char *sav, int getIndex) {
static int back_index_fetch(httrackp * opt, struct_back * sback, const char *adr,
const char *fil, const char *sav, int getIndex) {
lien_back *const back = sback->lnk;
const int back_max = sback->count;
int index = -1;
@@ -177,12 +177,12 @@ static int back_index_fetch(httrackp * opt, struct_back * sback, char *adr,
}
/* resurrect stored entry */
static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
char *fil, char *sav, int getIndex) {
static int back_index_ready(httrackp * opt, struct_back * sback, const char *adr,
const char *fil, const char *sav, int getIndex) {
lien_back *const back = sback->lnk;
void *ptr = NULL;
if (inthash_read_pvoid(sback->ready, sav, &ptr)) {
if (coucal_read_pvoid(sback->ready, sav, &ptr)) {
if (!getIndex) { /* don't "pagefault" the entry */
if (ptr != NULL) {
return sback->count; /* (invalid but) positive result */
@@ -194,7 +194,7 @@ static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
#ifndef HTS_NO_BACK_ON_DISK
FILE *fp;
char *fileback = (char *) ptr;
const char *fileback = (char *) ptr;
char catbuff[CATBUFF_SIZE];
if ((fp = FOPEN(fconv(catbuff, sizeof(catbuff), fileback), "rb")) != NULL) {
@@ -228,7 +228,7 @@ static int back_index_ready(httrackp * opt, struct_back * sback, char *adr,
back_clear_entry(itemback); /* delete entry content */
freet(itemback); /* delete item */
itemback = NULL;
inthash_remove(sback->ready, sav); // delete item
coucal_remove(sback->ready, sav); // delete item
sback->ready_size_bytes -= back[q].r.size; /* substract for stats */
back_set_locked(sback, q); /* locked */
return q;
@@ -309,7 +309,7 @@ int back_cleanup_background(httrackp * opt, cache_back * cache,
/* Create file and serialize slot */
if ((fp = filecreate(NULL, filename)) != NULL) {
if (back_serialize(fp, &back[i]) == 0) {
inthash_add_pvoid(sback->ready, back[i].url_sav, filename);
coucal_add_pvoid(sback->ready, back[i].url_sav, filename);
filename = NULL;
sback->ready_size_bytes += back[i].r.size; /* add for stats */
nclean++;
@@ -340,7 +340,7 @@ int back_cleanup_background(httrackp * opt, cache_back * cache,
#else
itemback = calloct(1, sizeof(lien_back));
back_move(&back[i], itemback);
inthash_add_pvoid(sback->ready, itemback->url_sav, itemback);
coucal_add_pvoid(sback->ready, itemback->url_sav, itemback);
nclean++;
#endif
}
@@ -349,8 +349,8 @@ int back_cleanup_background(httrackp * opt, cache_back * cache,
}
// nombre d'entrées libres dans le backing
int back_available(struct_back * sback) {
lien_back *const back = sback->lnk;
int back_available(const struct_back * sback) {
const lien_back *const back = sback->lnk;
const int back_max = sback->count;
int i;
int nb = 0;
@@ -362,8 +362,8 @@ int back_available(struct_back * sback) {
}
// retourne estimation de la taille des html et fichiers stockés en mémoire
LLint back_incache(struct_back * sback) {
lien_back *const back = sback->lnk;
LLint back_incache(const struct_back * sback) {
const lien_back *const back = sback->lnk;
const int back_max = sback->count;
int i;
LLint sum = 0;
@@ -375,10 +375,10 @@ LLint back_incache(struct_back * sback) {
// stored (ready) slots
#ifdef HTS_NO_BACK_ON_DISK
if (sback->ready != NULL) {
struct_inthash_enum e = inthash_enum_new(sback->ready);
inthash_chain *item;
struct_coucal_enum e = coucal_enum_new(sback->ready);
coucal_item *item;
while((item = inthash_enum_next(&e))) {
while((item = coucal_enum_next(&e))) {
lien_back *ritem = (lien_back *) item->value.ptr;
if (ritem->status != -1)
@@ -391,8 +391,8 @@ LLint back_incache(struct_back * sback) {
}
// retourne estimation de la taille des html et fichiers stockés en mémoire
int back_done_incache(struct_back * sback) {
lien_back *const back = sback->lnk;
int back_done_incache(const struct_back * sback) {
const lien_back *const back = sback->lnk;
const int back_max = sback->count;
int i;
int n = 0;
@@ -403,12 +403,12 @@ int back_done_incache(struct_back * sback) {
// stored (ready) slots
if (sback->ready != NULL) {
#ifndef HTS_NO_BACK_ON_DISK
n += (int) inthash_nitems(sback->ready);
n += (int) coucal_nitems(sback->ready);
#else
struct_inthash_enum e = inthash_enum_new(sback->ready);
inthash_chain *item;
struct_coucal_enum e = coucal_enum_new(sback->ready);
coucal_item *item;
while((item = inthash_enum_next(&e))) {
while((item = coucal_enum_next(&e))) {
lien_back *ritem = (lien_back *) item->value.ptr;
if (ritem->status == STATUS_READY)
@@ -420,14 +420,14 @@ int back_done_incache(struct_back * sback) {
}
// le lien a-t-il été mis en backing?
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, char *adr,
char *fil, char *sav) {
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, const char *adr,
const char *fil, const char *sav) {
return (back_index_fetch(opt, sback, adr, fil, sav, /*don't fetch */ 0) >= 0);
}
// nombre de sockets en tâche de fond
int back_nsoc(struct_back * sback) {
lien_back *const back = sback->lnk;
int back_nsoc(const struct_back * sback) {
const lien_back *const back = sback->lnk;
const int back_max = sback->count;
int n = 0;
int i;
@@ -438,8 +438,8 @@ int back_nsoc(struct_back * sback) {
return n;
}
int back_nsoc_overall(struct_back * sback) {
lien_back *const back = sback->lnk;
int back_nsoc_overall(const struct_back * sback) {
const lien_back *const back = sback->lnk;
const int back_max = sback->count;
int n = 0;
int i;
@@ -515,7 +515,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
&& (back[p].r.statuscode > 0) // not internal error
) {
if (!back[p].testmode) { // not test mode
char *state = "unknown";
const char *state = "unknown";
/* décompression */
#if HTS_USEZLIB
@@ -626,7 +626,7 @@ int back_finalize(httrackp * opt, cache_back * cache, struct_back * sback,
FILE *fp = FOPEN(back[p].url_sav, "rb");
if (fp) {
back[p].r.adr = malloct((int) sz + 2);
back[p].r.adr = malloct((size_t) sz + 1);
if (back[p].r.adr) {
if (fread(back[p].r.adr, 1, sz, fp) == sz) {
back[p].r.size = sz;
@@ -971,16 +971,17 @@ int back_unserialize(FILE * fp, lien_back ** dst) {
if ((*dst)->r.adr != NULL)
freet((*dst)->r.adr);
}
if (dst != NULL)
freet(dst);
*dst = NULL;
if (dst != NULL) {
freet(*dst);
*dst = NULL;
}
return 1; /* error */
}
/* serialize a reference ; used to store references of files being downloaded in case of broken download */
/* Note: NOT utf-8 */
int back_serialize_ref(httrackp * opt, const lien_back * src) {
char *filename =
const char *filename =
url_savename_refname_fullpath(opt, src->url_adr, src->url_fil);
FILE *fp = fopen(filename, "wb");
@@ -1012,7 +1013,7 @@ int back_serialize_ref(httrackp * opt, const lien_back * src) {
/* unserialize a reference ; used to store references of files being downloaded in case of broken download */
int back_unserialize_ref(httrackp * opt, const char *adr, const char *fil,
lien_back ** dst) {
char *filename = url_savename_refname_fullpath(opt, adr, fil);
const char *filename = url_savename_refname_fullpath(opt, adr, fil);
FILE *fp = FOPEN(filename, "rb");
if (fp != NULL) {
@@ -1148,7 +1149,7 @@ int back_trylive(httrackp * opt, cache_back * cache, struct_back * sback,
}
/* search for a live position, or, if not possible, try to return a new one */
int back_searchlive(httrackp * opt, struct_back * sback, char *search_addr) {
int back_searchlive(httrackp * opt, struct_back * sback, const char *search_addr) {
lien_back *const back = sback->lnk;
const int back_max = sback->count;
int i;
@@ -1400,8 +1401,8 @@ int back_stack_available(struct_back * sback) {
// ajouter un lien en backing
int back_add_if_not_exists(struct_back * sback, httrackp * opt,
cache_back * cache, char *adr, char *fil, char *save,
char *referer_adr, char *referer_fil, int test) {
cache_back * cache, const char *adr, const char *fil, const char *save,
const char *referer_adr, const char *referer_fil, int test) {
back_clean(opt, cache, sback); /* first cleanup the backlog to ensure that we have some entry left */
if (!back_exist(sback, opt, adr, fil, save)) {
return back_add(sback, opt, cache, adr, fil, save, referer_adr, referer_fil,
@@ -1410,8 +1411,8 @@ int back_add_if_not_exists(struct_back * sback, httrackp * opt,
return 0;
}
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
char *fil, char *save, char *referer_adr, char *referer_fil,
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, const char *adr,
const char *fil, const char *save, const char *referer_adr, const char *referer_fil,
int test) {
lien_back *const back = sback->lnk;
const int back_max = sback->count;
@@ -1506,7 +1507,7 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
if (cache->cached_tests != NULL) {
intptr_t ptr = 0;
if (inthash_read(cache->cached_tests,
if (coucal_read(cache->cached_tests,
concat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), adr, fil), &ptr)) { // gotcha
if (ptr != 0) {
char *text = (char *) ptr;
@@ -1544,7 +1545,7 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
#if HTS_FAST_CACHE
strcpybuff(buff, adr);
strcatbuff(buff, fil);
hash_pos_return = inthash_read(cache->hashtable, buff, &hash_pos);
hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos);
#else
buff[0] = '\0';
strcatbuff(buff, "\n");
@@ -1974,7 +1975,7 @@ int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
printf("ok, dns cache ready..\n");
#endif
soc =
http_xfopen(opt, 0, 0, 0, back[p].send_too, adr, fil, &(back[p].r));
http_xfopen(opt, 0, 0, 0, back[p].send_too, adr, fil, &back[p].r);
if (soc == INVALID_SOCKET) {
back[p].status = STATUS_READY; // fini, erreur
back_set_finished(sback, p);
@@ -2131,7 +2132,7 @@ void back_solve(httrackp * opt, lien_back * back) {
else
a = back->r.req.proxy.name;
assertf(a != NULL);
a = jump_protocol(a);
a = jump_protocol_const(a);
if (check_hostname_dns(a)) {
hts_log_print(opt, LOG_DEBUG, "resolved: %s", a);
} else {
@@ -2780,8 +2781,8 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
back[i].r.is_write = 1; // écrire
if (back[i].r.compressed &&
/* .gz are *NOT* depacked!! */
(strfield
(get_ext(catbuff, sizeof(catbuff), back[i].url_sav), "gz") == 0)
strfield(get_ext(catbuff, sizeof(catbuff), back[i].url_sav), "gz") == 0
&& strfield(get_ext(catbuff, sizeof(catbuff), back[i].url_sav), "tgz") == 0
) {
if (create_back_tmpfile(opt, &back[i]) == 0) {
assertf(back[i].tmpfile != NULL);
@@ -3240,7 +3241,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
fprintf(ioinfo,
"[%d] response for %s%s:\r\ncode=%d\r\n",
back[i].r.debugid,
jump_identification(back[i].url_adr),
jump_identification_const(back[i].url_adr),
back[i].url_fil, back[i].r.statuscode);
fprintfio(ioinfo, back[i].r.adr, ">>> ");
fprintf(ioinfo, "\r\n");
@@ -3978,10 +3979,10 @@ LLint back_transferred(LLint nb, struct_back * sback) {
#ifndef HTS_NO_BACK_ON_DISK
nb += sback->ready_size_bytes;
#else
struct_inthash_enum e = inthash_enum_new(sback->ready);
inthash_chain *item;
struct_coucal_enum e = coucal_enum_new(sback->ready);
coucal_item *item;
while((item = inthash_enum_next(&e))) {
while((item = coucal_enum_next(&e))) {
lien_back *ritem = (lien_back *) item->value.ptr;
if ((ritem->status > 0) && (ritem->status < 99 || ritem->status >= 1000))

View File

@@ -74,21 +74,21 @@ void back_free(struct_back ** sback);
// backing
#define BACK_ADD_TEST "(dummy)"
#define BACK_ADD_TEST2 "(dummy2)"
int back_index(httrackp * opt, struct_back * sback, char *adr, char *fil,
char *sav);
int back_available(struct_back * sback);
LLint back_incache(struct_back * sback);
int back_done_incache(struct_back * sback);
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, char *adr,
char *fil, char *sav);
int back_nsoc(struct_back * sback);
int back_nsoc_overall(struct_back * sback);
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, char *adr,
char *fil, char *save, char *referer_adr, char *referer_fil,
int back_index(httrackp * opt, struct_back * sback, const char *adr, const char *fil,
const char *sav);
int back_available(const struct_back * sback);
LLint back_incache(const struct_back * sback);
int back_done_incache(const struct_back * sback);
HTS_INLINE int back_exist(struct_back * sback, httrackp * opt, const char *adr,
const char *fil, const char *sav);
int back_nsoc(const struct_back * sback);
int back_nsoc_overall(const struct_back * sback);
int back_add(struct_back * sback, httrackp * opt, cache_back * cache, const char *adr,
const char *fil, const char *save, const char *referer_adr, const char *referer_fil,
int test);
int back_add_if_not_exists(struct_back * sback, httrackp * opt,
cache_back * cache, char *adr, char *fil, char *save,
char *referer_adr, char *referer_fil, int test);
cache_back * cache, const char *adr, const char *fil, const char *save,
const char *referer_adr, const char *referer_fil, int test);
int back_stack_available(struct_back * sback);
int back_search(httrackp * opt, struct_back * sback);
int back_search_quick(struct_back * sback);
@@ -99,7 +99,7 @@ void back_wait(struct_back * sback, httrackp * opt, cache_back * cache,
TStamp stat_timestart);
int back_letlive(httrackp * opt, cache_back * cache, struct_back * sback,
const int p);
int back_searchlive(httrackp * opt, struct_back * sback, char *search_addr);
int back_searchlive(httrackp * opt, struct_back * sback, const char *search_addr);
void back_connxfr(htsblk * src, htsblk * dst);
void back_move(lien_back * src, lien_back * dst);
void back_copy_static(const lien_back * src, lien_back * dst);

View File

@@ -54,12 +54,13 @@ Please visit our Website: http://www.httrack.com
#endif
typedef struct hostent FAR t_hostent;
#else
#define HTS_USESCOPEID
#define INVALID_SOCKET -1
typedef struct hostent t_hostent;
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if HTS_USEOPENSSL
@@ -157,4 +158,8 @@ typedef enum HTTrackStatus {
STATUS_FTP_READY = 1001
} HTTrackStatus;
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -38,14 +38,15 @@ Please visit our Website: http://www.httrack.com
/* specific definitions */
#include "htsglobal.h"
#include "htslib.h"
#include "htscore.h"
/* END specific definitions */
// gestion des cookie
// ajoute, dans l'ordre
// !=0 : erreur
int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
char *domain, char *path) {
int cookie_add(t_cookie * cookie, const char *cook_name, const char *cook_value,
const char *domain, const char *path) {
char buffer[8192];
char *a = cookie->data;
char *insert;
@@ -53,20 +54,20 @@ int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
// effacer éventuel cookie en double
cookie_del(cookie, cook_name, domain, path);
if ((int) strlen(cook_value) > 1024)
if (strlen(cook_value) > 1024)
return -1; // trop long
if ((int) strlen(cook_name) > 256)
if (strlen(cook_name) > 256)
return -1; // trop long
if ((int) strlen(domain) > 256)
if (strlen(domain) > 256)
return -1; // trop long
if ((int) strlen(path) > 256)
if (strlen(path) > 256)
return -1; // trop long
if ((int) (strlen(cookie->data)
if (strlen(cookie->data)
+ strlen(cook_value)
+ strlen(cook_name)
+ strlen(domain)
+ strlen(path)
+ 256) > cookie->max_len)
+ 256 > cookie->max_len)
return -1; // impossible d'ajouter
insert = a; // insérer ici
@@ -99,7 +100,7 @@ int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
strcatbuff(cook, "\t");
strcatbuff(cook, cook_value);
strcatbuff(cook, "\n");
if (!(((int) strlen(cookie->data) + (int) strlen(cook)) < cookie->max_len))
if (!((strlen(cookie->data) + strlen(cook)) < cookie->max_len))
return -1; // impossible d'ajouter
cookie_insert(insert, cook);
#if DEBUG_COOK
@@ -111,13 +112,13 @@ int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
}
// effacer cookie si existe
int cookie_del(t_cookie * cookie, char *cook_name, char *domain, char *path) {
int cookie_del(t_cookie * cookie, const char *cook_name, const char *domain, const char *path) {
char *a, *b;
b = cookie_find(cookie->data, cook_name, domain, path);
if (b) {
a = cookie_nextfield(b);
cookie_delete(b, (int) (a - b));
cookie_delete(b, a - b);
#if DEBUG_COOK
printf("deleted old cookie: %s %s %s\n", cook_name, domain, path);
#endif
@@ -128,7 +129,7 @@ int cookie_del(t_cookie * cookie, char *cook_name, char *domain, char *path) {
// Matches wildcard cookie domains that start with a dot
// chk_dom: the domain stored in the cookie (potentially wildcard).
// domain: query domain
static int cookie_cmp_wildcard_domain(char *chk_dom, char *domain) {
static int cookie_cmp_wildcard_domain(const char *chk_dom, const char *domain) {
const size_t n = strlen(chk_dom);
const size_t m = strlen(domain);
const size_t l = n < m ? n : m;
@@ -152,7 +153,7 @@ static int cookie_cmp_wildcard_domain(char *chk_dom, char *domain) {
// renvoie pointeur sur ligne, ou NULL si introuvable
// path est aligné à droite et cook_name peut être vide (chercher alors tout cookie)
// .doubleclick.net TRUE / FALSE 1999999999 id A
char *cookie_find(char *s, char *cook_name, char *domain, char *path) {
char *cookie_find(char *s, const char *cook_name, const char *domain, const char *path) {
char buffer[8192];
char *a = s;
@@ -165,15 +166,15 @@ char *cookie_find(char *s, char *cook_name, char *domain, char *path) {
t = (strcmp(cookie_get(buffer, a, 5), cook_name) == 0); // tester si même nom
if (t) { // même nom ou nom qualconque
//
char *chk_dom = cookie_get(buffer, a, 0); // domaine concerné par le cookie
const char *chk_dom = cookie_get(buffer, a, 0); // domaine concerné par le cookie
if (((int) strlen(chk_dom) <= (int) strlen(domain) &&
if ((strlen(chk_dom) <= strlen(domain) &&
strcmp(chk_dom, domain + strlen(domain) - strlen(chk_dom)) == 0) ||
!cookie_cmp_wildcard_domain(chk_dom, domain)) { // même domaine
//
char *chk_path = cookie_get(buffer, a, 2); // chemin concerné par le cookie
const char *chk_path = cookie_get(buffer, a, 2); // chemin concerné par le cookie
if ((int) strlen(chk_path) <= (int) strlen(path)) {
if (strlen(chk_path) <= strlen(path)) {
if (strncmp(path, chk_path, strlen(chk_path)) == 0) { // même chemin
return a;
}
@@ -231,15 +232,14 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
char dummy[512];
//
char domain[256]; // domaine cookie (.netscape.com)
char path[256]; // chemin (/)
lien_adrfil af; // chemin (/)
int cookie_merged = 0;
//
// Read all cookies
while(!feof(fp)) {
cook_name[0] = cook_value[0] = domainpathpath[0]
= dummy[0] = domain[0] = path[0] = '\0';
= dummy[0] = af.adr[0] = af.fil[0] = '\0';
linput(fp, cook_name, 250);
if (!feof(fp)) {
linput(fp, cook_value, 250);
@@ -254,8 +254,8 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
if (strnotempty(cook_name)
&& strnotempty(cook_value)
&& strnotempty(domainpathpath)) {
if (ident_url_absolute(domainpathpath, domain, path) >= 0) {
cookie_add(cookie, cook_name, cook_value, domain, path);
if (ident_url_absolute(domainpathpath, &af) >= 0) {
cookie_add(cookie, cook_name, cook_value, af.adr, af.fil);
cookie_merged = 1;
}
}
@@ -311,7 +311,7 @@ int cookie_load(t_cookie * cookie, const char *fpath, const char *name) {
// écrire cookies.txt
// !=0 : erreur
int cookie_save(t_cookie * cookie, char *name) {
int cookie_save(t_cookie * cookie, const char *name) {
char catbuff[CATBUFF_SIZE];
if (strnotempty(cookie->data)) {
@@ -337,13 +337,13 @@ int cookie_save(t_cookie * cookie, char *name) {
}
// insertion chaine ins avant s
void cookie_insert(char *s, char *ins) {
void cookie_insert(char *s, const char *ins) {
char *buff;
if (strnotempty(s) == 0) { // rien à faire, juste concat
strcatbuff(s, ins);
} else {
buff = (char *) malloct(strlen(s) + 2);
buff = (char *) malloct(strlen(s) + 1);
if (buff) {
strcpybuff(buff, s); // copie temporaire
strcpybuff(s, ins); // insérer
@@ -354,13 +354,13 @@ void cookie_insert(char *s, char *ins) {
}
// destruction chaine dans s position pos
void cookie_delete(char *s, int pos) {
void cookie_delete(char *s, size_t pos) {
char *buff;
if (strnotempty(s + pos) == 0) { // rien à faire, effacer
s[0] = '\0';
} else {
buff = (char *) malloct(strlen(s + pos) + 2);
buff = (char *) malloct(strlen(s + pos) + 1);
if (buff) {
strcpybuff(buff, s + pos); // copie temporaire
strcpybuff(s, buff); // copier
@@ -371,8 +371,8 @@ void cookie_delete(char *s, int pos) {
// renvoie champ param de la chaine cookie_base
// ex: cookie_get("ceci est<tab>un<tab>exemple",1) renvoi "un"
char *cookie_get(char *buffer, char *cookie_base, int param) {
char *limit;
const char *cookie_get(char *buffer, const char *cookie_base, int param) {
const char *limit;
while(*cookie_base == '\n')
cookie_base++;
@@ -393,7 +393,7 @@ char *cookie_get(char *buffer, char *cookie_base, int param) {
}
if (cookie_base) {
if (cookie_base < limit) {
char *a = cookie_base;
const char *a = cookie_base;
while((*a) && (*a != '\t') && (*a != '\n'))
a++;
@@ -413,7 +413,7 @@ char *cookie_get(char *buffer, char *cookie_base, int param) {
// -- basic auth --
/* déclarer un répertoire comme possédant une authentification propre */
int bauth_add(t_cookie * cookie, char *adr, char *fil, char *auth) {
int bauth_add(t_cookie * cookie, const char *adr, const char *fil, const char *auth) {
char buffer[HTS_URLMAXSIZE * 2];
if (cookie) {
@@ -439,7 +439,7 @@ int bauth_add(t_cookie * cookie, char *adr, char *fil, char *auth) {
/* tester adr et fil, et retourner authentification si nécessaire */
/* sinon, retourne NULL */
char *bauth_check(t_cookie * cookie, char *adr, char *fil) {
char *bauth_check(t_cookie * cookie, const char *adr, const char *fil) {
char buffer[HTS_URLMAXSIZE * 2];
if (cookie) {
@@ -458,10 +458,10 @@ char *bauth_check(t_cookie * cookie, char *adr, char *fil) {
return NULL;
}
char *bauth_prefix(char *prefix, char *adr, char *fil) {
char *bauth_prefix(char *prefix, const char *adr, const char *fil) {
char *a;
strcpybuff(prefix, jump_identification(adr));
strcpybuff(prefix, jump_identification_const(adr));
strcatbuff(prefix, fil);
a = strchr(prefix, '?');
if (a)

View File

@@ -34,6 +34,8 @@ Please visit our Website: http://www.httrack.com
#ifndef HTSBAUTH_DEFH
#define HTSBAUTH_DEFH
#include <sys/types.h>
// robots wizard
#ifndef HTS_DEF_FWSTRUCT_bauth_chain
#define HTS_DEF_FWSTRUCT_bauth_chain
@@ -60,21 +62,21 @@ struct t_cookie {
#ifdef HTS_INTERNAL_BYTECODE
// cookies
int cookie_add(t_cookie * cookie, char *cook_name, char *cook_value,
char *domain, char *path);
int cookie_del(t_cookie * cookie, char *cook_name, char *domain, char *path);
int cookie_add(t_cookie * cookie, const char *cook_name, const char *cook_value,
const char *domain, const char *path);
int cookie_del(t_cookie * cookie, const char *cook_name, const char *domain, const char *path);
int cookie_load(t_cookie * cookie, const char *path, const char *name);
int cookie_save(t_cookie * cookie, char *name);
void cookie_insert(char *s, char *ins);
void cookie_delete(char *s, int pos);
char *cookie_get(char *buffer, char *cookie_base, int param);
char *cookie_find(char *s, char *cook_name, char *domain, char *path);
int cookie_save(t_cookie * cookie, const char *name);
void cookie_insert(char *s, const char *ins);
void cookie_delete(char *s, size_t pos);
const char *cookie_get(char *buffer, const char *cookie_base, int param);
char *cookie_find(char *s, const char *cook_name, const char *domain, const char *path);
char *cookie_nextfield(char *a);
// basic auth
int bauth_add(t_cookie * cookie, char *adr, char *fil, char *auth);
char *bauth_check(t_cookie * cookie, char *adr, char *fil);
char *bauth_prefix(char *buffer, char *adr, char *fil);
int bauth_add(t_cookie * cookie, const char *adr, const char *fil, const char *auth);
char *bauth_check(t_cookie * cookie, const char *adr, const char *fil);
char *bauth_prefix(char *buffer, const char *adr, const char *fil);
#endif

View File

@@ -145,7 +145,7 @@ void cache_mayadd(httrackp * opt, cache_back * cache, htsblk * r,
// we just store statuscode + location (if any)
if (url_save == NULL && r->statuscode / 100 >= 3) {
// cached "fast" header doesn't yet exists
if (inthash_read
if (coucal_read
(cache->cached_tests,
concat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), url_adr, url_fil), NULL) == 0) {
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
@@ -158,7 +158,7 @@ void cache_mayadd(httrackp * opt, cache_back * cache, htsblk * r,
hts_log_print(opt, LOG_DEBUG,
"Cached fast-header response: %s%s is %d",
url_adr, url_fil, (int) r->statuscode);
inthash_add(cache->cached_tests,
coucal_add(cache->cached_tests,
concat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), url_adr, url_fil),
(intptr_t) strdupt(tempo));
}
@@ -646,7 +646,7 @@ static htsblk cache_readex_new(httrackp * opt, cache_back * cache,
strcpybuff(r.location, "");
strcpybuff(buff, adr);
strcatbuff(buff, fil);
hash_pos_return = inthash_read(cache->hashtable, buff, &hash_pos);
hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos);
/* avoid errors on data entries */
if (adr[0] == '/' && adr[1] == '/' && adr[2] == '[') {
#if HTS_FAST_CACHE
@@ -1029,7 +1029,7 @@ static htsblk cache_readex_old(httrackp * opt, cache_back * cache,
#if HTS_FAST_CACHE
strcpybuff(buff, adr);
strcatbuff(buff, fil);
hash_pos_return = inthash_read(cache->hashtable, buff, &hash_pos);
hash_pos_return = coucal_read(cache->hashtable, buff, &hash_pos);
#else
buff[0] = '\0';
strcatbuff(buff, "\n");
@@ -1349,7 +1349,7 @@ int cache_readdata(cache_back * cache, const char *str1, const char *str2,
strcpybuff(buff, str1);
strcatbuff(buff, str2);
if (inthash_read(cache->hashtable, buff, &pos)) {
if (coucal_read(cache->hashtable, buff, &pos)) {
if (fseek(cache->olddat, (long) ((pos > 0) ? pos : (-pos)), SEEK_SET) ==
0) {
INTsys len;
@@ -1642,9 +1642,9 @@ void cache_init(cache_back * cache, httrackp * opt) {
}
}
if (dataincache)
inthash_add(cache->hashtable, filenameIndex, pos);
coucal_add(cache->hashtable, filenameIndex, pos);
else
inthash_add(cache->hashtable, filenameIndex, -pos);
coucal_add(cache->hashtable, filenameIndex, -pos);
} else {
hts_log_print(opt, LOG_WARNING,
"Corrupted cache meta entry #%d",
@@ -1810,7 +1810,7 @@ void cache_init(cache_back * cache, httrackp * opt) {
/* read position */
a += binput(a, linepos, 200);
sscanf(linepos, "%d", &pos);
inthash_add(cache->hashtable, line, pos);
coucal_add(cache->hashtable, line, pos);
}
}
/* Not needed anymore! */
@@ -2016,12 +2016,12 @@ void cache_init(cache_back * cache, httrackp * opt) {
// lire un fichier.. (compatible \0)
/* Note: NOT utf-8 */
char *readfile(char *fil) {
char *readfile(const char *fil) {
return readfile2(fil, NULL);
}
/* Note: NOT utf-8 */
char *readfile2(char *fil, LLint * size) {
char *readfile2(const char *fil, LLint * size) {
char *adr = NULL;
char catbuff[CATBUFF_SIZE];
INTsys len = 0;
@@ -2049,7 +2049,7 @@ char *readfile2(char *fil, LLint * size) {
}
/* Note: utf-8 */
char *readfile_utf8(char *fil) {
char *readfile_utf8(const char *fil) {
char *adr = NULL;
char catbuff[CATBUFF_SIZE];
const off_t len = fsize_utf8(fil);
@@ -2074,8 +2074,8 @@ char *readfile_utf8(char *fil) {
}
/* Note: NOT utf-8 */
char *readfile_or(char *fil, char *defaultdata) {
char *realfile = fil;
char *readfile_or(const char *fil, const char *defaultdata) {
const char *realfile = fil;
char *ret;
char catbuff[CATBUFF_SIZE];
@@ -2085,7 +2085,7 @@ char *readfile_or(char *fil, char *defaultdata) {
if (ret)
return ret;
else {
char *adr = malloct(strlen(defaultdata) + 2);
char *adr = malloct(strlen(defaultdata) + 1);
if (adr) {
strcpybuff(adr, defaultdata);

View File

@@ -40,6 +40,7 @@ Please visit our Website: http://www.httrack.com
#include "htsbase.h"
#include "htsnet.h"
#include "htslib.h"
#include "htscore.h"
#include <fcntl.h>
#ifdef _WIN32
#else
@@ -77,40 +78,25 @@ HTSEXT_API T_SOC catch_url_init_std(int *port_prox, char *adr_prox) {
// 1- Init the URL catcher
// catch_url_init(&port,&return_host);
HTSEXT_API T_SOC catch_url_init(int *port, char *adr) {
HTSEXT_API T_SOC catch_url_init(int *port, /* 128 bytes */ char *adr) {
T_SOC soc = INVALID_SOCKET;
char h_loc[256 + 2];
char h_loc[256];
if (gethostname(h_loc, 256) == 0) { // host name
if (gethostname(h_loc, sizeof(h_loc)) == 0) { // host name
SOCaddr server;
int server_size = sizeof(server);
t_hostent *hp_loc;
t_fullhostent buffer;
// effacer structure
memset(&server, 0, sizeof(server));
if ((hp_loc = vxgethostbyname(h_loc, &buffer))) { // notre host
// copie adresse
SOCaddr_copyaddr(server, server_size, hp_loc->h_addr_list[0],
hp_loc->h_length);
if (hts_dns_resolve_nocache(h_loc, &server) != NULL) { // notre host
if ((soc =
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
0)) != INVALID_SOCKET) {
SOCaddr_initport(server, *port);
if (bind(soc, (struct sockaddr *) &server, server_size) == 0) {
if (bind(soc, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
SOCaddr server2;
SOClen len;
SOClen len = SOCaddr_capacity(server2);
len = sizeof(server2);
// effacer structure
memset(&server2, 0, sizeof(server2));
if (getsockname(soc, (struct sockaddr *) &server2, &len) == 0) {
if (getsockname(soc, &SOCaddr_sockaddr(server2), &len) == 0) {
*port = ntohs(SOCaddr_sinport(server)); // récupérer port
if (listen(soc, 10) >= 0) { // au pif le 10
SOCaddr_inetntoa(adr, 128, server2, len);
if (listen(soc, 1) >= 0) {
SOCaddr_inetntoa(adr, 128, server2);
} else {
#ifdef _WIN32
closesocket(soc);
@@ -168,15 +154,13 @@ HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data) {
/* INFOS */
{
SOCaddr server2;
SOClen len = sizeof(server2);
SOClen len = SOCaddr_capacity(server2);
// effacer structure
memset(&server2, 0, sizeof(server2));
if (getpeername(soc, (struct sockaddr *) &server2, &len) == 0) {
if (getpeername(soc, &SOCaddr_sockaddr(server2), &len) == 0) {
char dot[256 + 2];
SOCaddr_inetntoa(dot, 256, server2, sizeof(server2));
sprintf(url, "%s:%d", dot, htons(SOCaddr_sinport(server2)));
SOCaddr_inetntoa(dot, sizeof(dot), server2);
sprintf(url, "%s:%d", dot, ntohs(SOCaddr_sinport(server2)));
}
}
/* INFOS */
@@ -191,21 +175,20 @@ HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data) {
socinput(soc, line, 1000);
if (strnotempty(line)) {
if (sscanf(line, "%s %s %s", method, url, protocol) == 3) {
char BIGSTK url_adr[HTS_URLMAXSIZE * 2];
char BIGSTK url_fil[HTS_URLMAXSIZE * 2];
lien_adrfil af;
// méthode en majuscule
size_t i;
int r = 0;
url_adr[0] = url_fil[0] = '\0';
af.adr[0] = af.fil[0] = '\0';
//
for(i = 0; method[i] != '\0'; i++) {
if ((method[i] >= 'a') && (method[i] <= 'z'))
method[i] -= ('a' - 'A');
}
// adresse du lien
if (ident_url_absolute(url, url_adr, url_fil) >= 0) {
if (ident_url_absolute(url, &af) >= 0) {
// Traitement des en-têtes
char BIGSTK loc[HTS_URLMAXSIZE * 2];
htsblk blkretour;
@@ -214,7 +197,7 @@ HTSEXT_API int catch_url(T_SOC soc, char *url, char *method, char *data) {
//memset(&blkretour, 0, sizeof(htsblk)); // effacer
blkretour.location = loc; // si non nul, contiendra l'adresse véritable en cas de moved xx
// Lire en têtes restants
sprintf(data, "%s %s %s\r\n", method, url_fil, protocol);
sprintf(data, "%s %s %s\r\n", method, af.fil, protocol);
while(strnotempty(line)) {
socinput(soc, line, 1000);
treathead(NULL, NULL, NULL, &blkretour, line); // traiter

View File

@@ -35,6 +35,18 @@ Please visit our Website: http://www.httrack.com
#include "punycode.h"
#include "htssafe.h"
#ifdef _WIN32
#include <stddef.h>
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
#elif (defined(SOLARIS) || defined(sun) || defined(HAVE_INTTYPES_H) \
|| defined(BSD) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD_kernel__))
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#include <stdarg.h>
int hts_isStringAscii(const char *s, size_t size) {
size_t i;
@@ -441,7 +453,7 @@ static char *hts_convertStringCharset(const char *s, size_t size,
const iconv_t cp = iconv_open(to, from);
if (cp != (iconv_t) - 1) {
char *inbuf = (char *) s;
char *inbuf = (char*) (uintptr_t) s; /* ugly iconv api, sheesh */
size_t inbytesleft = size;
size_t outbufCapa = 0;
char *outbuf = NULL;
@@ -723,43 +735,21 @@ static unsigned int nlz8(unsigned char x) {
26 U+200000 U+3FFFFFF 5 111110xx
31 U+4000000 U+7FFFFFFF 6 1111110x
*/
#define ADD_SEQ(UC, BITS, EMITTER) do { \
/* number of data bits in first octet */ \
const unsigned int bits = BITS % 6; \
/* shift for first octet */ \
const unsigned int shift0 = BITS - bits; \
/* first octet */ \
const unsigned char lead = \
/* leading bits */ \
( 0xff ^ ( ( 1 << ( bits + 1 ) ) - 1 ) ) \
/* encoded bits */ \
| ( ( (UC) >> shift0 ) & ( ( 1 << ( bits + 1 ) ) - 1 ) ) \
; \
/* further bytes are encoding 6 bits */ \
const unsigned char second = \
0x80 | ( ( (UC) >> ( shift0 - 6 ) ) & 0x3f ); \
EMITTER(lead); \
EMITTER(second); \
if (BITS > 6*2) { \
const unsigned char next = \
0x80 | ( ( (UC) >> ( shift0 - 6*2 ) ) & 0x3f ); \
EMITTER(next); \
if (BITS > 6*3) { \
const unsigned char next = \
0x80 | ( ( (UC) >> ( shift0 - 6*3 ) ) & 0x3f ); \
EMITTER(next); \
if (BITS > 6*4) { \
const unsigned char next = \
0x80 | ( ( (UC) >> ( shift0 - 6*4 ) ) & 0x3f ); \
EMITTER(next); \
if (BITS > 6*5) { \
const unsigned char next = \
0x80 | ( ( (UC) >> ( shift0 - 6*5 ) ) & 0x3f ); \
EMITTER(next); \
} \
} \
} \
} \
#define ADD_FIRST_SEQ(UC, LEN, EMITTER) do { \
/* first octet */ \
const unsigned char lead = \
/* leading bits: LEN "1" bits */ \
~ ( ( 1 << (unsigned) ( 8 - LEN ) ) - 1 ) \
/* encoded bits */ \
| ( (UC) >> (unsigned) ( ( LEN - 1 ) * 6 ) ); \
EMITTER(lead); \
} while(0)
#define ADD_NEXT_SEQ(UC, SHIFT, EMITTER) do { \
/* further bytes are encoding 6 bits */ \
const unsigned char next = \
0x80 | ( ( (UC) >> SHIFT ) & 0x3f ); \
EMITTER(next); \
} while(0)
/* UC is a constant. EMITTER is a macro function taking an unsigned int. */
@@ -767,15 +757,30 @@ static unsigned int nlz8(unsigned char x) {
if ((UC) < 0x80) { \
EMITTER(((unsigned char) (UC))); \
} else if ((UC) < 0x0800) { \
ADD_SEQ(UC, 11, EMITTER); \
ADD_FIRST_SEQ(UC, 2, EMITTER); \
ADD_NEXT_SEQ(UC, 0, EMITTER); \
} else if ((UC) < 0x10000) { \
ADD_SEQ(UC, 16, EMITTER); \
ADD_FIRST_SEQ(UC, 3, EMITTER); \
ADD_NEXT_SEQ(UC, 6, EMITTER); \
ADD_NEXT_SEQ(UC, 0, EMITTER); \
} else if ((UC) < 0x200000) { \
ADD_SEQ(UC, 21, EMITTER); \
ADD_FIRST_SEQ(UC, 4, EMITTER); \
ADD_NEXT_SEQ(UC, 12, EMITTER); \
ADD_NEXT_SEQ(UC, 6, EMITTER); \
ADD_NEXT_SEQ(UC, 0, EMITTER); \
} else if ((UC) < 0x4000000) { \
ADD_SEQ(UC, 26, EMITTER); \
ADD_FIRST_SEQ(UC, 5, EMITTER); \
ADD_NEXT_SEQ(UC, 18, EMITTER); \
ADD_NEXT_SEQ(UC, 12, EMITTER); \
ADD_NEXT_SEQ(UC, 6, EMITTER); \
ADD_NEXT_SEQ(UC, 0, EMITTER); \
} else { \
ADD_SEQ(UC, 31, EMITTER); \
ADD_FIRST_SEQ(UC, 6, EMITTER); \
ADD_NEXT_SEQ(UC, 24, EMITTER); \
ADD_NEXT_SEQ(UC, 18, EMITTER); \
ADD_NEXT_SEQ(UC, 12, EMITTER); \
ADD_NEXT_SEQ(UC, 6, EMITTER); \
ADD_NEXT_SEQ(UC, 0, EMITTER); \
} \
} while(0)
@@ -966,24 +971,29 @@ char *hts_convertStringUTF8ToIDNA(const char *s, size_t size) {
if (HTS_IS_LEADING_UTF8(c)) {
/* commit sequence ? */
if (utfSeq != (size_t) -1) {
/* unicode character */
punycode_uint uc = 0;
/* Reader: can read bytes up to j */
#define RD ( utfSeq < j ? segData[utfSeq++] : -1 )
/* Writer: upon error, return FFFD (replacement character) */
#define WR(C) uc = C != -1 ? (punycode_uint) C : (punycode_uint) 0xfffd
#define WR(C) do { \
if ((C) != -1) { \
/* copy character */ \
assertf(segOutputSize < segSize); \
segInt[segOutputSize++] = (C); \
} \
/* In case of error, abort. */ \
else { \
FREE_BUFFER(); \
return NULL; \
} \
} while(0)
/* Read Unicode character. */
/* Read/Write Unicode character. */
READ_UNICODE(RD, WR);
#undef RD
#undef WR
/* copy character */
assertf(segOutputSize < segSize);
segInt[segOutputSize++] = uc;
/* not anymore in sequence */
utfSeq = (size_t) -1;
}

View File

@@ -105,7 +105,7 @@ char *fslash(char *catbuff, size_t size, const char *a) {
}
// extension : html,gif..
HTSEXT_API char *get_ext(char *catbuff, size_t size, const char *fil) {
HTSEXT_API const char *get_ext(char *catbuff, size_t size, const char *fil) {
size_t i, last;
RUNTIME_TIME_CHECK_SIZE(size);

File diff suppressed because it is too large Load Diff

View File

@@ -123,84 +123,30 @@ typedef struct filecreate_params filecreate_params;
// gestion hashage
#include "htshash.h"
#include "htsinthash.h"
#include "coucal.h"
#include "htsdefines.h"
#include "hts-indextmpl.h"
// structure d'un lien
#ifndef HTS_DEF_FWSTRUCT_lien_url
#define HTS_DEF_FWSTRUCT_lien_url
typedef struct lien_url lien_url;
// adr, fil
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
#define HTS_DEF_FWSTRUCT_lien_adrfil
typedef struct lien_adrfil lien_adrfil;
#endif
struct lien_url {
char firstblock; // flag 1=premier malloc
char link_import; // lien importé à la suite d'un moved - ne pas appliquer les règles classiques up/down
int depth; // profondeur autorisée lien ; >0 forte 0=faible
int pass2; // traiter après les autres, seconde passe. si == -1, lien traité en background
int premier; // pointeur sur le premier lien qui a donné lieu aux autres liens du domaine
int precedent; // pointeur sur le lien qui a donné lieu à ce lien précis
//int moved; // pointeur sur moved
int retry; // nombre de retry restants
int testmode; // mode test uniquement, envoyer juste un head!
char *adr; // adresse
char *fil; // nom du fichier distant
char *sav; // nom à sauver sur disque (avec chemin éventuel)
char *cod; // chemin codebase éventuel si classe java
char *former_adr; // adresse initiale (avant éventuel moved), peut être nulle
char *former_fil; // nom du fichier distant initial (avant éventuel moved), peut être nul
struct lien_adrfil {
char adr[HTS_URLMAXSIZE * 2]; // adresse
char fil[HTS_URLMAXSIZE * 2]; // nom du fichier distant
};
// chargement de fichiers en 'arrière plan'
#ifndef HTS_DEF_FWSTRUCT_lien_back
#define HTS_DEF_FWSTRUCT_lien_back
typedef struct lien_back lien_back;
#endif
struct lien_back {
#if DEBUG_CHECKINT
char magic;
#endif
char url_adr[HTS_URLMAXSIZE * 2]; // adresse
char url_fil[HTS_URLMAXSIZE * 2]; // nom du fichier distant
char url_sav[HTS_URLMAXSIZE * 2]; // nom à sauver sur disque (avec chemin éventuel)
char referer_adr[HTS_URLMAXSIZE * 2]; // adresse host page referer
char referer_fil[HTS_URLMAXSIZE * 2]; // fichier page referer
char location_buffer[HTS_URLMAXSIZE * 2]; // "location" en cas de "moved" (302,..)
char *tmpfile; // nom à sauver temporairement (compressé)
char tmpfile_buffer[HTS_URLMAXSIZE * 2]; // buffer pour le nom à sauver temporairement
char send_too[1024]; // données à envoyer en même temps que le header
int status; // status (-1=non utilisé, 0: prêt, >0: opération en cours)
int locked; // locked (to be used soon)
int testmode; // mode de test
int timeout; // gérer des timeouts? (!=0 : nombre de secondes)
TStamp timeout_refresh; // si oui, time refresh
int rateout; // timeout refresh? (!=0 : taux minimum toléré en octets/s)
TStamp rateout_time; // si oui, date de départ
LLint maxfile_nonhtml; // taille max d'un fichier non html
LLint maxfile_html; // idem pour un ficheir html
htsblk r; // structure htsblk de chaque objet en background
int is_update; // mode update
int head_request; // requète HEAD?
LLint range_req_size; // range utilisé
TStamp ka_time_start; // refresh time for KA
//
int http11; // L'en tête doit être signé HTTP/1.1 et non HTTP/1.0
int is_chunk; // chunk?
char *chunk_adr; // adresse chunk en cours de chargement
LLint chunk_size; // taille chunk en cours de chargement
LLint chunk_blocksize; // taille data declaree par le chunk
LLint compressed_size; // taille compressés (stats uniquement)
//
//int links_index; // to access liens[links_index]
//
char info[256]; // éventuel status pour le ftp
int stop_ftp; // flag stop pour ftp
int finalized; // finalized (optim memory)
int early_add; // was added before link heap saw it
#if DEBUG_CHECKINT
char magic2;
// adr, fil, save
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
typedef struct lien_adrfilsave lien_adrfilsave;
#endif
struct lien_adrfilsave {
lien_adrfil af;
char save[HTS_URLMAXSIZE * 2]; // nom à sauver sur disque (avec chemin éventuel)
};
#ifndef HTS_DEF_FWSTRUCT_struct_back
@@ -210,7 +156,7 @@ typedef struct struct_back struct_back;
struct struct_back {
lien_back *lnk;
int count;
inthash ready;
coucal ready;
LLint ready_size_bytes;
};
@@ -232,9 +178,9 @@ struct cache_back {
FILE *txt; // liste des fichiers (info)
char lastmodified[256];
// HASH
inthash hashtable;
coucal hashtable;
// HASH for tests (naming subsystem)
inthash cached_tests;
coucal cached_tests;
// fichiers log optionnels
FILE *log;
FILE *errlog;
@@ -255,13 +201,13 @@ typedef struct hash_struct hash_struct;
#endif
struct hash_struct {
/* Links big array reference */
const lien_url **liens;
const lien_url *const*const*liens;
/* Savename (case insensitive ; lowercased) */
inthash sav;
coucal sav;
/* Address and path */
inthash adrfil;
coucal adrfil;
/* Former address and path */
inthash former_adrfil;
coucal former_adrfil;
/** Buffers **/
int normalized;
char normfil[HTS_URLMAXSIZE * 2];
@@ -278,6 +224,20 @@ struct filecreate_params {
char path[HTS_URLMAXSIZE * 2];
};
/* Access macros. */
#define heap(N) (opt->liens[N])
#define heap_top_index() (opt->lien_tot - 1)
#define heap_top() (heap(heap_top_index()))
#define urladr() (heap(ptr)->adr)
#define urlfil() (heap(ptr)->fil)
#define savename() (heap(ptr)->sav)
#define parenturladr() (heap(heap(ptr)->precedent)->adr)
#define parenturlfil() (heap(heap(ptr)->precedent)->fil)
#define parentsavename() (heap(heap(ptr)->precedent)->sav)
#define relativeurladr() ((!parent_relative)?urladr():parenturladr())
#define relativeurlfil() ((!parent_relative)?urlfil():parenturlfil())
#define relativesavename() ((!parent_relative)?savename():parentsavename())
/* Library internal definictions */
#ifdef HTS_INTERNAL_BYTECODE
@@ -302,7 +262,21 @@ char *hts_cancel_file_pop(httrackp * opt);
#endif
//
// add a link on the heap
int hts_record_link(httrackp * opt,
const char *address, const char *file, const char *save,
const char *ref_address, const char *ref_file,
const char *codebase);
// index of the latest added link
size_t hts_record_link_latest(httrackp *opt);
// invalidate an entry
void hts_invalidate_link(httrackp * opt, int lpos);
// wipe all records
void hts_record_init(httrackp *opt);
void hts_record_free(httrackp *opt);
//int httpmirror(char* url,int level,httrackp opt);
int httpmirror(char *url1, httrackp * opt);
@@ -312,8 +286,7 @@ int filesave(httrackp * opt, const char *adr, int len, const char *s,
char *hts_cancel_file_pop(httrackp * opt);
int check_fatal_io_errno(void);
int engine_stats(void);
void host_ban(httrackp * opt, lien_url ** liens, int ptr, int lien_tot,
struct_back * sback, char *host);
void host_ban(httrackp * opt, int ptr, struct_back * sback, const char *host);
FILE *filecreate(filenote_strc * strct, const char *s);
FILE *fileappend(filenote_strc * strct, const char *s);
int filecreateempty(filenote_strc * strct, const char *filename);
@@ -329,10 +302,10 @@ int fspc(httrackp * opt, FILE * fp, const char *type);
char *next_token(char *p, int flag);
//
char *readfile(char *fil);
char *readfile2(char *fil, LLint * size);
char *readfile_utf8(char *fil);
char *readfile_or(char *fil, char *defaultdata);
char *readfile(const char *fil);
char *readfile2(const char *fil, LLint * size);
char *readfile_utf8(const char *fil);
char *readfile_or(const char *fil, const char *defaultdata);
#if 0
void check_rate(TStamp stat_timestart, int maxrate);
@@ -346,11 +319,11 @@ int liens_record(char *adr, char *fil, char *save, char *former_adr,
int back_pluggable_sockets(struct_back * sback, httrackp * opt);
int back_pluggable_sockets_strict(struct_back * sback, httrackp * opt);
int back_fill(struct_back * sback, httrackp * opt, cache_back * cache,
lien_url ** liens, int ptr, int numero_passe, int lien_tot);
int backlinks_done(struct_back * sback, lien_url ** liens, int lien_tot,
int ptr);
int ptr, int numero_passe);
int backlinks_done(const struct_back * sback, lien_url ** liens,
int lien_tot, int ptr);
int back_fillmax(struct_back * sback, httrackp * opt, cache_back * cache,
lien_url ** liens, int ptr, int numero_passe, int lien_tot);
int ptr, int numero_passe);
int ask_continue(httrackp * opt);
int nombre_digit(int n);
@@ -374,7 +347,6 @@ int htsAddLink(htsmoduleStruct * str, char *link);
// Void
void voidf(void);
#define HTS_TOPINDEX "TOP_INDEX_HTTRACK"
#endif

View File

@@ -45,6 +45,7 @@ Please visit our Website: http://www.httrack.com
#include "htszlib.h"
#include "htscharset.h"
#include "htsencoding.h"
#include "htsmd5.h"
#include <ctype.h>
#if USE_BEGINTHREAD
@@ -85,7 +86,11 @@ extern int IPV6_resolver;
ptr += (int) (strlen(argv[0])+2); \
argc++
#define htsmain_free() do { if (url != NULL) { free(url); } } while(0)
#define htsmain_free() do { \
if (url != NULL) { \
free(url); \
} \
} while(0)
#define ensureUrlCapacity(url, urlsize, size) do { \
if (urlsize < size || url == NULL) { \
@@ -125,8 +130,38 @@ HTSEXT_API int hts_main(int argc, char **argv) {
return ret;
}
// very minimalistic internal tests
static void basic_selftests(void) {
// BUG 756328
const char *const source = "/intent/tweet?url=https%3A%2F%2Fwww.httrack.com%2Fvacatures%2F1562519%2Fmedewerker-data-services&text=Medewerker+Data+Services&via=httrackcom";
char buffer[1024];
fil_normalized(source, buffer);
// MD5 selftests
md5selftest();
}
static int hts_main_internal(int argc, char **argv, httrackp * opt);
// Main, récupère les paramètres et appelle le robot
HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
int code;
// Set ended state (3.48-14)
hts_mutexlock(&opt->state.lock);
opt->state.is_ended = 0;
hts_mutexrelease(&opt->state.lock);
code = hts_main_internal(argc, argv, opt);
// Set ended state (3.48-14)
hts_mutexlock(&opt->state.lock);
opt->state.is_ended = 1;
hts_mutexrelease(&opt->state.lock);
return code;
}
static int hts_main_internal(int argc, char **argv, httrackp * opt) {
char **x_argv = NULL; // Patch pour argv et argc: en cas de récupération de ligne de commande
char *x_argvblk = NULL; // (reprise ou update)
int x_ptr = 0; // offset
@@ -1983,7 +2018,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
int found = 0;
char *filter = NULL;
cache_back cache;
inthash cache_hashtable = inthash_new(0);
coucal cache_hashtable = coucal_new(0);
int sendb = 0;
if (isdigit((unsigned char) *(com + 1))) {
@@ -2006,8 +2041,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
cache.hashtable = (void *) cache_hashtable; /* copy backcache hash */
cache.ro = 1; /* read only */
if (cache.hashtable) {
char BIGSTK adr[HTS_URLMAXSIZE * 2];
char BIGSTK fil[HTS_URLMAXSIZE * 2];
lien_adrfilsave afs;
char BIGSTK url[HTS_URLMAXSIZE * 2];
char linepos[256];
int pos;
@@ -2030,52 +2064,50 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
/* */
a++;
/* read "host/file" */
a += binput(a, adr, HTS_URLMAXSIZE);
a += binput(a, fil, HTS_URLMAXSIZE);
a += binput(a, afs.af.adr, HTS_URLMAXSIZE);
a += binput(a, afs.af.fil, HTS_URLMAXSIZE);
url[0] = '\0';
if (!link_has_authority(adr))
if (!link_has_authority(afs.af.adr))
strcatbuff(url, "http://");
strcatbuff(url, adr);
strcatbuff(url, fil);
strcatbuff(url, afs.af.adr);
strcatbuff(url, afs.af.fil);
/* read position */
a += binput(a, linepos, 200);
sscanf(linepos, "%d", &pos);
if (!hasFilter
|| (strjoker(url, filter, NULL, NULL) != NULL)
) {
r = cache_read_ro(opt, &cache, adr, fil, "", NULL); // lire entrée cache + data
r = cache_read_ro(opt, &cache, afs.af.adr, afs.af.fil, "", NULL); // lire entrée cache + data
if (r.statuscode != -1) { // No errors
found++;
if (!hasFilter) {
fprintf(stdout, "%s%s%s\r\n",
(link_has_authority(adr)) ? "" :
"http://", adr, fil);
(link_has_authority(afs.af.adr)) ? "" :
"http://", afs.af.adr, afs.af.fil);
} else {
char msg[256], cdate[256];
char BIGSTK sav[HTS_URLMAXSIZE * 2];
infostatuscode(msg, r.statuscode);
time_gmt_rfc822(cdate);
fprintf(stdout, "HTTP/1.1 %d %s\r\n",
r.statuscode, r.msg[0] ? r.msg : msg);
fprintf(stdout, "X-Host: %s\r\n", adr);
fprintf(stdout, "X-File: %s\r\n", fil);
fprintf(stdout, "X-Host: %s\r\n", afs.af.adr);
fprintf(stdout, "X-File: %s\r\n", afs.af.fil);
fprintf(stdout, "X-URL: %s%s%s\r\n",
(link_has_authority(adr)) ? "" :
"http://", adr, fil);
(link_has_authority(afs.af.adr)) ? "" :
"http://", afs.af.adr, afs.af.fil);
if (url_savename
(adr, fil, sav, /*former_adr */ NULL,
/*former_fil */ NULL, /*referer_adr */
(&afs, /*former */ NULL,
/*referer_adr */
NULL, /*referer_fil */ NULL,
/*opt */ opt, /*liens */ NULL,
/*lien_tot */ 0, /*sback */ NULL,
/*opt */ opt, /*sback */ NULL,
/*cache */ &cache, /*hash */ NULL, /*ptr */
0, /*numero_passe */ 0, /*mime_type */
NULL) != -1) {
if (fexist(sav)) {
if (fexist(afs.save)) {
fprintf(stdout, "Content-location: %s\r\n",
sav);
afs.save);
}
}
fprintf(stdout, "Date: %s\r\n", cdate);
@@ -2410,6 +2442,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
return 0;
break;
case '7': // hashtable selftest: httrack -#7 nb_entries
basic_selftests();
if (++na < argc) {
char *const snum = strdup(argv[na]);
unsigned long count = 0;
@@ -2516,7 +2549,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
/* successfully read */
if (count > 0) {
inthash hashtable = inthash_new(0);
coucal hashtable = coucal_new(0);
size_t loop;
for(loop = 0 ; bench[loop].type != DO_END ; loop++) {
size_t i;
@@ -2527,9 +2560,9 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
if (bench[loop].type == DO_ADD
|| bench[loop].type == DO_DRY_ADD) {
size_t k;
result = inthash_write(hashtable, name, (uintptr_t) expected);
result = coucal_write(hashtable, name, (uintptr_t) expected);
for(k = 0 ; k < /* stash_size*2 */ 32 ; k++) {
(void) inthash_write(hashtable, name, (uintptr_t) expected);
(void) coucal_write(hashtable, name, (uintptr_t) expected);
}
/* revert logic */
if (bench[loop].type == DO_DRY_ADD) {
@@ -2539,9 +2572,9 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
else if (bench[loop].type == DO_DEL
|| bench[loop].type == DO_DRY_DEL) {
size_t k;
result = inthash_remove(hashtable, name);
result = coucal_remove(hashtable, name);
for(k = 0 ; k < /* stash_size*2 */ 32 ; k++) {
(void) inthash_remove(hashtable, name);
(void) coucal_remove(hashtable, name);
}
/* revert logic */
if (bench[loop].type == DO_DRY_DEL) {
@@ -2551,7 +2584,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
else if (bench[loop].type == TEST_ADD
|| bench[loop].type == TEST_DEL) {
intptr_t value = -1;
result = inthash_readptr(hashtable, name, &value);
result = coucal_readptr(hashtable, name, &value);
if (bench[loop].type == TEST_ADD && result
&& value != expected) {
fprintf(stderr, "value failed for %s (expected %ld, got %ld)\n",
@@ -2574,7 +2607,7 @@ HTSEXT_API int hts_main2(int argc, char **argv, httrackp * opt) {
}
}
}
inthash_delete(&hashtable);
coucal_delete(&hashtable);
fprintf(stderr, "all hashtable tests were successful!\n");
} else {
fprintf(stderr, "Malformed number\n");

View File

@@ -231,8 +231,15 @@ struct t_hts_callback_ref {
size_t offset;
};
#ifdef __cplusplus
extern "C" {
#endif
extern const t_hts_htmlcheck_callbacks default_callbacks;
extern const t_hts_callback_ref default_callbacks_ref[];
#ifdef __cplusplus
}
#endif
#define HT_PRINT(A) strcatbuff(opt->state.HTbuff,A);
#define HT_REQUEST_START opt->state.HTbuff[0]='\0';

View File

@@ -270,7 +270,7 @@ int hts_unescapeUrlSpecial(const char *src, char *dest, const size_t max,
/* First character */
if (k == 0) {
/* New destination-centric offset of utf-8 buffer beginning */
if (i == lastI + 2) { /* just read a %xx */
if (lastI != (size_t) -1 && i == lastI + 2) { /* just read a %xx */
utfBufferJ = lastJ; /* position of % */
} else {
utfBufferJ = j; /* current position otherwise */

File diff suppressed because it is too large Load Diff

View File

@@ -56,7 +56,7 @@ EOF
i=$[${i}+1]
done
echo -e " /* $A */"
echo -e " case ${hash}:"
echo -e " case ${hash}u:"
echo -e " if (len == ${#ent} /* && strncmp(ent, \"${ent}\") == 0 */) {"
echo -e " return ${code};"
echo -e " }"

View File

@@ -54,7 +54,7 @@ Please visit our Website: http://www.httrack.com
// optionnel: taille à contrôller (ou numéro, etc) en pointeur
// (en de détection de *size, la taille limite est écrite par dessus *size)
// exemple: +-*.gif*[<5] == supprimer GIF si <5KB
int fa_strjoker(int type, char **filters, int nfil, char *nom, LLint * size,
int fa_strjoker(int type, char **filters, int nfil, const char *nom, LLint * size,
int *size_flag, int *depth) {
int verdict = 0; // on sait pas
int i;
@@ -101,7 +101,7 @@ int fa_strjoker(int type, char **filters, int nfil, char *nom, LLint * size,
// cet algo est 'un peu' récursif mais ne consomme pas trop de tm
// * = toute lettre
// --?-- : spécifique à HTTrack et aux ?
HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
HTS_INLINE const char *strjoker(const char *chaine, const char *joker, LLint * size,
int *size_flag) {
//int err=0;
if (strnotempty(joker) == 0) { // fin de chaine joker
@@ -262,7 +262,7 @@ HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
{
int i, max;
char *adr;
const char *adr;
// la chaine doit se terminer exactement
if (cut) {
@@ -335,8 +335,8 @@ HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
// exemple: find dans un texte de strcpybuff(*[A-Z,a-z],"*[0-9]"); va rechercher la première occurence
// d'un strcpy sur une variable ayant un nom en lettres et copiant une chaine de chiffres
// ATTENTION!! Eviter les jokers en début, où gare au temps machine!
char *strjokerfind(char *chaine, char *joker) {
char *adr;
const char *strjokerfind(const char *chaine, const char *joker) {
const char *adr;
while(*chaine) {
if ((adr = strjoker(chaine, joker, NULL, NULL))) { // ok trouvé

View File

@@ -39,11 +39,11 @@ Please visit our Website: http://www.httrack.com
#include "htsbase.h"
int fa_strjoker(int type, char **filters, int nfil, char *nom, LLint * size,
int fa_strjoker(int type, char **filters, int nfil, const char *nom, LLint * size,
int *size_flag, int *depth);
HTS_INLINE char *strjoker(char *chaine, char *joker, LLint * size,
HTS_INLINE const char *strjoker(const char *chaine, const char *joker, LLint * size,
int *size_flag);
char *strjokerfind(char *chaine, char *joker);
const char *strjokerfind(const char *chaine, const char *joker);
#endif
#endif

View File

@@ -142,21 +142,17 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
#endif
char BIGSTK adr_ip[1024];
char *adr, *real_adr;
char *ftp_filename = "";
const char *ftp_filename = "";
int timeout = 300; // timeout
int timeout_onfly = 8; // attente réponse supplémentaire
int transfer_list = 0; // directory
int rest_understood = 0; // rest command understood
t_fullhostent fullhostent_buffer; // buffer pour resolver
//
T_SOC soc_ctl = INVALID_SOCKET;
T_SOC soc_servdat = INVALID_SOCKET;
T_SOC soc_dat = INVALID_SOCKET;
//
SOCaddr server_data;
int server_data_size = sizeof(server_data);
//
line_retr[0] = adr_ip[0] = '\0';
@@ -249,8 +245,6 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
// connexion
{
SOCaddr server;
int server_size = sizeof(server);
t_hostent *hp;
char *a;
char _adr[256];
const char *error = "unknown error";
@@ -270,8 +264,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
// récupérer adresse résolue
strcpybuff(back->info, "host name");
hp = hts_gethostbyname2(opt, _adr, &fullhostent_buffer, &error);
if (hp == NULL) {
if (hts_dns_resolve2(opt, _adr, &server, &error) == NULL) {
snprintf(back->r.msg, sizeof(back->r.msg),
"Unable to get server's address: %s", error);
// back->status=STATUS_FTP_READY; // fini
@@ -280,12 +273,8 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
}
_CHECK_HALT_FTP;
// copie adresse
SOCaddr_copyaddr(server, server_size, hp->h_addr_list[0], hp->h_length);
// copie adresse pour cnx data
SOCaddr_copyaddr(server_data, server_data_size, hp->h_addr_list[0],
hp->h_length);
// memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
SOCaddr_copy_SOCaddr(server_data, server);
// créer ("attachement") une socket (point d'accès) internet,en flot
soc_ctl = (T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM, 0);
@@ -302,12 +291,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
// connexion (bloquante, on est en thread)
strcpybuff(back->info, "connect");
#ifdef _WIN32
if (connect(soc_ctl, (const struct sockaddr FAR *) &server, server_size) !=
0) {
#else
if (connect(soc_ctl, (struct sockaddr *) &server, server_size) == -1) {
#endif
if (connect(soc_ctl, &SOCaddr_sockaddr(server), SOCaddr_size(server)) != 0) {
strcpybuff(back->r.msg, "Unable to connect to the server");
// back->status=STATUS_FTP_READY; // fini
back->r.statuscode = STATUSCODE_INVALID;
@@ -419,7 +403,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
// Pré-REST
//
#if FTP_PASV
if (SOCaddr_getproto(server, server_size) == '1') {
if (SOCaddr_getproto(server) == '1') {
strcpybuff(back->info, "pasv");
snprintf(line, sizeof(line), "PASV");
send_line(soc_ctl, line);
@@ -581,7 +565,6 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
if (port_pasv) {
SOCaddr server;
int server_size = sizeof(server);
t_hostent *hp;
const char *error = "unknown error";
// effacer structure
@@ -592,16 +575,9 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
// résoudre
if (adr_ip[0]) {
hp = hts_gethostbyname2(opt, adr_ip, &fullhostent_buffer, &error);
if (hp) {
SOCaddr_copyaddr(server, server_size, hp->h_addr_list[0],
hp->h_length);
} else {
server_size = 0;
}
hts_dns_resolve2(opt, adr_ip, &server, &error);
} else {
memcpy(&server, &server_data, sizeof(server_data));
server_size = server_data_size;
SOCaddr_copy_SOCaddr(server, server_data);
}
// infos
@@ -615,15 +591,7 @@ int run_launch_ftp(FTPDownloadStruct * pStruct) {
if (soc_dat != INVALID_SOCKET) {
// structure: connexion au domaine internet, port 80 (ou autre)
SOCaddr_initport(server, port_pasv);
// server.sin_port = htons((unsigned short int) port_pasv);
#ifdef _WIN32
if (connect
(soc_dat, (const struct sockaddr FAR *) &server,
server_size) == 0) {
#else
if (connect(soc_dat, (struct sockaddr *) &server, server_size) !=
-1) {
#endif
if (connect(soc_dat, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
strcpybuff(back->info, "retr");
strcpybuff(line, line_retr);
send_line(soc_ctl, line);
@@ -856,33 +824,19 @@ T_SOC get_datasocket(char *to_send, size_t to_send_size) {
to_send[0] = '\0';
if (gethostname(h_loc, 256) == 0) { // host name
SOCaddr server;
int server_size = sizeof(server);
t_hostent *hp_loc;
t_fullhostent buffer;
// effacer structure
memset(&server, 0, sizeof(server));
if ((hp_loc = vxgethostbyname(h_loc, &buffer))) { // notre host
// copie adresse
SOCaddr_copyaddr(server, server_size, hp_loc->h_addr_list[0],
hp_loc->h_length);
if (hts_dns_resolve_nocache(h_loc, &server) != NULL) { // notre host
if ((soc =
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
0)) != INVALID_SOCKET) {
if (bind(soc, (struct sockaddr *) &server, server_size) == 0) {
if (bind(soc, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
SOCaddr server2;
SOClen len;
SOClen len = SOCaddr_capacity(server2);
len = sizeof(server2);
// effacer structure
memset(&server2, 0, sizeof(server2));
if (getsockname(soc, (struct sockaddr *) &server2, &len) == 0) {
if (getsockname(soc, &SOCaddr_sockaddr(server2), &len) == 0) {
// *port=ntohs(server.sin_port); // récupérer port
if (listen(soc, 10) >= 0) { // au pif le 10
if (listen(soc, 1) >= 0) {
#if HTS_INET6==0
unsigned short int a, n1, n2;
@@ -895,7 +849,7 @@ T_SOC get_datasocket(char *to_send, size_t to_send_size) {
char dot[256 + 2];
char *a;
SOCaddr_inetntoa(dot, 256, server2, sizeof(server2));
SOCaddr_inetntoa(dot, 256, server2);
//
dots[0] = '\0';
strncatbuff(dots, dot, 128);
@@ -913,9 +867,9 @@ T_SOC get_datasocket(char *to_send, size_t to_send_size) {
{
char dot[256 + 2];
SOCaddr_inetntoa(dot, 256, server2, len);
SOCaddr_inetntoa(dot, 256, server2);
snprintf(to_send, to_send_size, "EPRT |%c|%s|%d|",
SOCaddr_getproto(server2, len), dot,
SOCaddr_getproto(server2), dot,
SOCaddr_sinport(server2));
}
#endif
@@ -959,7 +913,7 @@ FILE *dd = NULL;
// routines de réception/émission
// 0 = ERROR
int send_line(T_SOC soc, char *data) {
int send_line(T_SOC soc, const char *data) {
char BIGSTK line[1024];
if (_DEBUG_HEAD) {
@@ -1093,7 +1047,7 @@ int check_socket(T_SOC soc) {
tv.tv_sec = 0;
tv.tv_usec = 0;
// poll!
select(soc + 1, &fds, NULL, &fds_e, &tv);
select((int) soc + 1, &fds, NULL, &fds_e, &tv);
if (FD_ISSET(soc, &fds_e)) { // error detected
return -1;
} else if (FD_ISSET(soc, &fds)) {
@@ -1116,7 +1070,7 @@ int check_socket_connect(T_SOC soc) {
tv.tv_sec = 0;
tv.tv_usec = 0;
// poll!
select(soc + 1, NULL, &fds, &fds_e, &tv);
select((int) soc + 1, NULL, &fds, &fds_e, &tv);
if (FD_ISSET(soc, &fds_e)) { // error detected
return -1;
} else if (FD_ISSET(soc, &fds)) {

View File

@@ -68,7 +68,7 @@ int back_launch_ftp(FTPDownloadStruct * params);
#endif
int run_launch_ftp(FTPDownloadStruct * params);
int send_line(T_SOC soc, char *data);
int send_line(T_SOC soc, const char *data);
int get_ftp_line(T_SOC soc, char *line, size_t line_size, int timeout);
T_SOC get_datasocket(char *to_send, size_t to_send_size);
int stop_ftp(lien_back * back);

View File

@@ -36,8 +36,8 @@ Please visit our Website: http://www.httrack.com
#define HTTRACK_GLOBAL_DEFH
// Version (also check external version information)
#define HTTRACK_VERSION "3.48-5"
#define HTTRACK_VERSIONID "3.48.5"
#define HTTRACK_VERSION "3.48-20"
#define HTTRACK_VERSIONID "3.48.20"
#define HTTRACK_AFF_VERSION "3.x"
#define HTTRACK_LIB_VERSION "2.0"
@@ -132,11 +132,6 @@ Please visit our Website: http://www.httrack.com
#endif
// don't spare memory usage by default
#ifndef HTS_SPARE_MEMORY
#define HTS_SPARE_MEMORY 0
#endif
#ifndef BIGSTK
#define BIGSTK
#endif
@@ -206,17 +201,10 @@ Please visit our Website: http://www.httrack.com
#endif
#if HTS_SPARE_MEMORY==0
/* Taille max d'une URL */
#define HTS_URLMAXSIZE 1024
/* Taille max ligne de commande (>=HTS_URLMAXSIZE*2) */
#define HTS_CDLMAXSIZE 1024
#else
/* Taille max d'une URL */
#define HTS_URLMAXSIZE 256
/* Taille max ligne de commande (>=HTS_URLMAXSIZE*2) */
#define HTS_CDLMAXSIZE 1024
#endif
/* Copyright (C) 1998-2014 Xavier Roche and other contributors */
#define HTTRACK_AFF_AUTHORS "[XR&CO'2014]"
@@ -257,8 +245,14 @@ Please visit our Website: http://www.httrack.com
#define HTSEXT_API __declspec(dllimport)
#endif
#else
/* See <http://gcc.gnu.org/wiki/Visibility> */
#if ( ( defined(__GNUC__) && ( __GNUC__ >= 4 ) ) \
|| ( defined(HAVE_VISIBILITY) && HAVE_VISIBILITY ) )
#define HTSEXT_API __attribute__ ((visibility ("default")))
#else
#define HTSEXT_API
#endif
#endif
#ifndef HTS_LONGLONG
#ifdef HTS_NO_64_BIT
@@ -329,11 +323,6 @@ typedef unsigned __int32 T_SOC;
typedef int T_SOC;
#endif
/* Default alignement */
#ifndef HTS_ALIGN
#define HTS_ALIGN (sizeof(void*))
#endif
/* IPV4, IPV6 and various unified structures */
#define HTS_MAXADDRLEN 64
@@ -378,11 +367,7 @@ typedef int T_SOC;
#define LOCAL_SOCKET_ID -2
// taille de chaque buffer (10 sockets 650 ko)
#if HTS_SPARE_MEMORY==0
#define TAILLE_BUFFER 65536
#else
#define TAILLE_BUFFER 8192
#endif
#ifdef HTS_DO_NOT_USE_PTHREAD
#error needs threads support

View File

@@ -42,7 +42,7 @@ Please visit our Website: http://www.httrack.com
#include "htsglobal.h"
#include "htsmd5.h"
#include "htscore.h"
#include "htsinthash.h"
#include "coucal.h"
/* END specific definitions */
/* Specific macros */
@@ -60,40 +60,55 @@ Please visit our Website: http://www.httrack.com
// recherche dans la table selon nom1,nom2 et le no d'enregistrement
/* Key free handler (NOOP) ; addresses are kept */
static void key_freehandler(void *arg, void *value) {
static void key_freehandler(void *arg, coucal_key value) {
}
/* Key strdup (pointer copy) */
static char* key_duphandler(void *arg, const char *name) {
static coucal_key key_duphandler(void *arg, coucal_key_const name) {
union {
const char *roname;
char *name;
coucal_key_const roname;
coucal_key name;
} u;
u.roname = name;
return u.name;
}
/* Key sav hashes are using case-insensitive version */
static inthash_keys key_sav_hashes(void *arg, const char *value) {
static coucal_hashkeys key_sav_hashes(void *arg, coucal_key_const key) {
hash_struct *const hash = (hash_struct*) arg;
convtolower(hash->catbuff, value);
return inthash_hash_value(hash->catbuff);
convtolower(hash->catbuff, (const char*) key);
return coucal_hash_string(hash->catbuff);
}
/* Key sav comparison is case-insensitive */
static int key_sav_equals(void *arg, const char *a, const char *b) {
static int key_sav_equals(void *arg,
coucal_key_const a_,
coucal_key_const b_) {
const char *const a = (const char*) a_;
const char *const b = (const char*) b_;
return strcasecmp(a, b) == 0;
}
static const char* key_sav_debug_print(void *arg,
coucal_key_const a) {
return (const char*) a;
}
static const char* value_sav_debug_print(void *arg, coucal_value_const a) {
return (char*) a.ptr;
}
/* Pseudo-key (lien_url structure) hash function */
static inthash_keys key_adrfil_hashes_generic(void *arg, const char *value_,
static coucal_hashkeys key_adrfil_hashes_generic(void *arg,
coucal_key_const value,
const int former) {
hash_struct *const hash = (hash_struct*) arg;
const lien_url*const lien = (lien_url*) value_;
const lien_url*const lien = (const lien_url*) value;
const char *const adr = !former ? lien->adr : lien->former_adr;
const char *const fil = !former ? lien->fil : lien->former_fil;
const char *const adr_norm = adr != NULL ?
( hash->normalized ? jump_normalized(adr) : jump_identification(adr) )
( hash->normalized ? jump_normalized_const(adr)
: jump_identification_const(adr) )
: NULL;
// copy address
@@ -109,16 +124,18 @@ static inthash_keys key_adrfil_hashes_generic(void *arg, const char *value_,
}
// hash
return inthash_hash_value(hash->normfil);
return coucal_hash_string(hash->normfil);
}
/* Pseudo-key (lien_url structure) comparison function */
static int key_adrfil_equals_generic(void *arg, const char *a_, const char *b_,
static int key_adrfil_equals_generic(void *arg,
coucal_key_const a_,
coucal_key_const b_,
const int former) {
hash_struct *const hash = (hash_struct*) arg;
const int normalized = hash->normalized;
const lien_url*const a = (lien_url*) a_;
const lien_url*const b = (lien_url*) b_;
const lien_url*const a = (const lien_url*) a_;
const lien_url*const b = (const lien_url*) b_;
const char *const a_adr = !former ? a->adr : a->former_adr;
const char *const b_adr = !former ? b->adr : b->former_adr;
const char *const a_fil = !former ? a->fil : a->former_fil;
@@ -133,8 +150,10 @@ static int key_adrfil_equals_generic(void *arg, const char *a_, const char *b_,
assertf(b_fil != NULL);
// skip scheme and authentication to the domain (possibly without www.)
ja = normalized ? jump_normalized(a_adr) : jump_identification(a_adr);
jb = normalized ? jump_normalized(b_adr) : jump_identification(b_adr);
ja = normalized
? jump_normalized_const(a_adr) : jump_identification_const(a_adr);
jb = normalized
? jump_normalized_const(b_adr) : jump_identification_const(b_adr);
assertf(ja != NULL);
assertf(jb != NULL);
if (strcasecmp(ja, jb) != 0) {
@@ -151,42 +170,74 @@ static int key_adrfil_equals_generic(void *arg, const char *a_, const char *b_,
}
}
static const char* key_adrfil_debug_print_(void *arg,
coucal_key_const a_,
const int former) {
hash_struct *const hash = (hash_struct*) arg;
const lien_url*const a = (const lien_url*) a_;
const char *const a_adr = !former ? a->adr : a->former_adr;
const char *const a_fil = !former ? a->fil : a->former_fil;
snprintf(hash->normfil, sizeof(hash->normfil), "%s%s", a_adr, a_fil);
return hash->normfil;
}
static const char* key_adrfil_debug_print(void *arg,
coucal_key_const a_) {
return key_adrfil_debug_print_(arg, a_, 0);
}
static const char* key_former_adrfil_debug_print(void *arg,
coucal_key_const a_) {
return key_adrfil_debug_print_(arg, a_, 1);
}
static const char* value_adrfil_debug_print(void *arg,
coucal_value_const value) {
hash_struct *const hash = (hash_struct*) arg;
snprintf(hash->normfil2, sizeof(hash->normfil2), "%d", (int) value.intg);
return hash->normfil2;
}
/* "adr"/"fil" lien_url structure members hashing function */
static inthash_keys key_adrfil_hashes(void *arg, const char *value_) {
static coucal_hashkeys key_adrfil_hashes(void *arg, coucal_key_const value_) {
return key_adrfil_hashes_generic(arg, value_, 0);
}
/* "adr"/"fil" lien_url structure members comparison function */
static int key_adrfil_equals(void *arg, const char *a, const char *b) {
static int key_adrfil_equals(void *arg,
coucal_key_const a,
coucal_key_const b) {
return key_adrfil_equals_generic(arg, a, b, 0);
}
/* "former_adr"/"former_fil" lien_url structure members hashing function */
static inthash_keys key_former_adrfil_hashes(void *arg, const char *value_) {
static coucal_hashkeys key_former_adrfil_hashes(void *arg, coucal_key_const value_) {
return key_adrfil_hashes_generic(arg, value_, 1);
}
/* "former_adr"/"former_fil" lien_url structure members comparison function */
static int key_former_adrfil_equals(void *arg, const char *a, const char *b) {
static int key_former_adrfil_equals(void *arg,
coucal_key_const a,
coucal_key_const b) {
return key_adrfil_equals_generic(arg, a, b, 1);
}
void hash_init(httrackp *opt, hash_struct * hash, int normalized) {
hash->sav = inthash_new(0);
hash->adrfil = inthash_new(0);
hash->former_adrfil = inthash_new(0);
hash->sav = coucal_new(0);
hash->adrfil = coucal_new(0);
hash->former_adrfil = coucal_new(0);
hash->normalized = normalized;
hts_set_hash_handler(hash->sav, opt);
hts_set_hash_handler(hash->adrfil, opt);
hts_set_hash_handler(hash->former_adrfil, opt);
inthash_set_name(hash->sav, "hash->sav");
inthash_set_name(hash->adrfil, "hash->adrfil");
inthash_set_name(hash->former_adrfil, "hash->former_adrfil");
coucal_set_name(hash->sav, "hash->sav");
coucal_set_name(hash->adrfil, "hash->adrfil");
coucal_set_name(hash->former_adrfil, "hash->former_adrfil");
/* Case-insensitive comparison ; keys are direct char* filenames */
inthash_value_set_key_handler(hash->sav,
coucal_value_set_key_handler(hash->sav,
key_duphandler,
key_freehandler,
key_sav_hashes,
@@ -195,25 +246,39 @@ void hash_init(httrackp *opt, hash_struct * hash, int normalized) {
/* URL-style comparison ; keys are lien_url structure pointers casted
to char* */
inthash_value_set_key_handler(hash->adrfil,
coucal_value_set_key_handler(hash->adrfil,
key_duphandler,
key_freehandler,
key_adrfil_hashes,
key_adrfil_equals,
hash);
inthash_value_set_key_handler(hash->former_adrfil,
coucal_value_set_key_handler(hash->former_adrfil,
key_duphandler,
key_freehandler,
key_former_adrfil_hashes,
key_former_adrfil_equals,
hash);
/* pretty-printing */
coucal_set_print_handler(hash->sav,
key_sav_debug_print,
value_sav_debug_print,
NULL);
coucal_set_print_handler(hash->adrfil,
key_adrfil_debug_print,
value_adrfil_debug_print,
hash);
coucal_set_print_handler(hash->former_adrfil,
key_former_adrfil_debug_print,
value_adrfil_debug_print,
hash);
}
void hash_free(hash_struct *hash) {
if (hash != NULL) {
inthash_delete(&hash->sav);
inthash_delete(&hash->adrfil);
inthash_delete(&hash->former_adrfil);
coucal_delete(&hash->sav);
coucal_delete(&hash->adrfil);
coucal_delete(&hash->former_adrfil);
}
}
@@ -226,7 +291,7 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
/* read */
switch(type) {
case HASH_STRUCT_FILENAME:
if (inthash_read(hash->sav, nom1, &intvalue)) {
if (coucal_read(hash->sav, nom1, &intvalue)) {
return (int) intvalue;
} else {
return -1;
@@ -236,7 +301,7 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
memset(&lien, 0, sizeof(lien));
lien.adr = key_duphandler(NULL, nom1);
lien.fil = key_duphandler(NULL, nom2);
if (inthash_read(hash->adrfil, (char*) &lien, &intvalue)) {
if (coucal_read(hash->adrfil, (char*) &lien, &intvalue)) {
return (int) intvalue;
} else {
return -1;
@@ -246,7 +311,7 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
memset(&lien, 0, sizeof(lien));
lien.former_adr = key_duphandler(NULL, nom1);
lien.former_fil = key_duphandler(NULL, nom2);
if (inthash_read(hash->former_adrfil, (char*) &lien, &intvalue)) {
if (coucal_read(hash->former_adrfil, (char*) &lien, &intvalue)) {
return (int) intvalue;
} else {
return -1;
@@ -260,15 +325,15 @@ int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
}
// enregistrement lien lpos dans les 3 tables hash1..3
void hash_write(hash_struct * hash, int lpos) {
void hash_write(hash_struct * hash, size_t lpos) {
/* first entry: destination filename (lowercased) */
inthash_write(hash->sav, hash->liens[lpos]->sav, lpos);
coucal_write(hash->sav, (*hash->liens)[lpos]->sav, lpos);
/* second entry: URL address and path */
inthash_write(hash->adrfil, (char*) hash->liens[lpos], lpos);
coucal_write(hash->adrfil, (*hash->liens)[lpos], lpos);
/* third entry: URL address and path before redirect */
if (hash->liens[lpos]->former_adr) { // former_adr existe?
inthash_write(hash->former_adrfil, (char*) hash->liens[lpos], lpos);
if ((*hash->liens)[lpos]->former_adr) { // former_adr existe?
coucal_write(hash->former_adrfil, (*hash->liens)[lpos], lpos);
}
}

View File

@@ -55,7 +55,7 @@ void hash_init(httrackp *opt, hash_struct *hash, int normalized);
void hash_free(hash_struct *hash);
int hash_read(const hash_struct * hash, const char *nom1, const char *nom2,
hash_struct_type type);
void hash_write(hash_struct * hash, int lpos);
void hash_write(hash_struct * hash, size_t lpos);
int *hash_calc_chaine(hash_struct * hash, hash_struct_type type, int pos);
unsigned long int hash_cle(const char *nom1, const char *nom2);
#endif

View File

@@ -52,7 +52,7 @@ Please visit our Website: http://www.httrack.com
/* END specific definitions */
#define waitkey if (more) { char s[4]; printf("\nMORE.. q to quit\n"); linput(stdin,s,4); if (strcmp(s,"q")==0) quit=1; else printf("Page %d\n\n",++m); }
void infomsg(char *msg) {
void infomsg(const char *msg) {
int l = 0;
int m = 0;
int more = 0;
@@ -272,7 +272,7 @@ void help_wizard(httrackp * opt) {
if (strnotempty(str)) {
while((a = strchr(str, ' ')))
*a = ':'; // port
if (!strchr(jump_identification(str), ':')) {
if (!strchr(jump_identification_const(str), ':')) {
char str2[256];
printf("\nProxy port (return=8080) :");
@@ -332,7 +332,7 @@ void help_wizard(httrackp * opt) {
printf("\n");
// couper en morceaux
argv[0] = "winhttrack";
argv[0] = strdup("winhttrack");
argv[1] = cmd;
argc++;
while(cmd[i]) {
@@ -364,15 +364,15 @@ void help_wizard(httrackp * opt) {
#undef str
#undef argv
}
int help_query(char *list, int def) {
int help_query(const char *list, int def) {
char s[256];
char *a;
const char *a;
int opt;
int n = 1;
a = list;
while(strnotempty(a)) {
char *b = strchr(a, '|');
const char *b = strchr(a, '|');
if (b) {
char str[256];
@@ -455,7 +455,7 @@ void help_catchurl(const char *dest_path) {
}
// Créer un index.html vide
void make_empty_index(char *str) {
void make_empty_index(const char *str) {
#if 0
if (!fexist(fconcat(str, "index.html"))) {
FILE *fp = fopen(fconcat(str, "index.html"), "wb");
@@ -473,7 +473,7 @@ void make_empty_index(char *str) {
// mini-aide (h: help)
// y
void help(char *app, int more) {
void help(const char *app, int more) {
char info[2048];
infomsg("");
@@ -605,7 +605,7 @@ void help(char *app, int more) {
infomsg
(" %F footer string in Html code (-%F \"Mirrored [from host %s [file %s [at %s]]]\"");
infomsg(" %l preffered language (-%l \"fr, en, jp, *\"");
infomsg(" %a accepted formats (-%l \"text/html,image/png,image/jpeg,image/gif;q=0.9,*/*;q=0.1\"");
infomsg(" %a accepted formats (-%a \"text/html,image/png;q=0.9,*/*;q=0.1\"");
infomsg(" %X additional HTTP header line (-%X \"X-Magic: 42\"");
infomsg("");
infomsg("Log, index, cache");

View File

@@ -43,11 +43,11 @@ Please visit our Website: http://www.httrack.com
typedef struct httrackp httrackp;
#endif
void infomsg(char *msg);
void help(char *app, int more);
void make_empty_index(char *str);
void infomsg(const char *msg);
void help(const char *app, int more);
void make_empty_index(const char *str);
void help_wizard(httrackp * opt);
int help_query(char *list, int def);
int help_query(const char *list, int def);
void help_catchurl(const char *dest_path);
#endif

View File

@@ -40,7 +40,7 @@ Please visit our Website: http://www.httrack.com
#if HTS_MAKE_KEYWORD_INDEX
#include "htshash.h"
#include "htsinthash.h"
#include "coucal.h"
/* Keyword Indexer Parameters */
@@ -103,7 +103,7 @@ Please visit our Website: http://www.httrack.com
/* End of Keyword Indexer Parameters */
int strcpos(char *adr, char c);
int strcpos(const char *adr, char c);
int mystrcmp(const void *_e1, const void *_e2);
// Global variables
@@ -144,7 +144,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
//
//int WordIndexSize = 1024;
inthash WordIndexHash = NULL;
coucal WordIndexHash = NULL;
FILE *tmpfp = NULL;
//
@@ -190,7 +190,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
// Create hash structure
// Hash tables rulez da world!
WordIndexHash = inthash_new(0);
WordIndexHash = coucal_new(0);
if (!WordIndexHash)
return 0;
@@ -252,7 +252,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
/* Store it ? */
if (len >= KEYW_MIN_LEN) {
hts_primindex_words++;
if (inthash_inc(WordIndexHash, keyword)) { /* added new */
if (coucal_inc(WordIndexHash, keyword)) { /* added new */
fprintf(tmpfp, "%s\n", keyword);
}
}
@@ -285,13 +285,13 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
if (strnotempty(line)) {
intptr_t e = 0;
if (inthash_read(WordIndexHash, line, &e)) {
if (coucal_read(WordIndexHash, line, &e)) {
//if (e) {
char BIGSTK savelst[HTS_URLMAXSIZE * 2];
e++; /* 0 means "once" */
if (strncmp((const char *) fslash(catbuff, sizeof(catbuff), (char *) indexpath), filename, strlen(indexpath)) == 0) // couper
if (strncmp((const char *) fslash(catbuff, sizeof(catbuff), (const char *) indexpath), filename, strlen(indexpath)) == 0) // couper
strcpybuff(savelst, filename + strlen(indexpath));
else
strcpybuff(savelst, filename);
@@ -313,7 +313,7 @@ int index_keyword(const char *html_data, LLint size, const char *mime,
tmpfp = NULL;
// Clear hash table
inthash_delete(&WordIndexHash);
coucal_delete(&WordIndexHash);
#endif
return 1;
}
@@ -468,8 +468,8 @@ void index_finish(const char *indexpath, int mode) {
/* Subroutines */
#if HTS_MAKE_KEYWORD_INDEX
int strcpos(char *adr, char c) {
char *apos = strchr(adr, c);
int strcpos(const char *adr, char c) {
const char *apos = strchr(adr, c);
if (apos)
return (int) (apos - adr);
@@ -478,8 +478,8 @@ int strcpos(char *adr, char c) {
}
int mystrcmp(const void *_e1, const void *_e2) {
char **e1 = (char **) _e1;
char **e2 = (char **) _e2;
const char *const*const e1 = (const char *const*) _e1;
const char *const*const e2 = (const char *const*) _e2;
return strcmp(*e1, *e2);
}

View File

@@ -1,363 +0,0 @@
/* ------------------------------------------------------------ */
/*
HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2014 Xavier Roche and other contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Important notes:
- We hereby ask people using this source NOT to use it in purpose of grabbing
emails addresses, or collecting any other private information on persons.
This would disgrace our work, and spoil the many hours we spent on it.
Please visit our Website: http://www.httrack.com
*/
/* ------------------------------------------------------------ */
/* File: hash table system (fast index) */
/* Author: Xavier Roche */
/* ------------------------------------------------------------ */
/**
* Library notes:
* This small hashtable library provides key/value hashtable, with a string
* key, and integer/pointer value (with an associated optional allocator)
* It features O(1) average insertion, O(1) lookup, and O(1) delete.
*
* Implementation notes:
* Implementation is auto-rehashable, and uses cuckoo hashing of size 2**n
* with a MD5 or FNV-1 hash function, with one additional auxiliary hash
* function.
* It also uses a small stash area to handle rare cases of collisions.
* Enumeration of all key/values is possible, deletion is also possible, but
* currently without any auto-shrinking (ie. table will never shrink).
* Overall, two main blocks are allocated: one for the items, and one for
* the keys (pool).
*
* References:
* Cuckoo Hashing http://en.wikipedia.org/wiki/Cuckoo_hashing
* Cuckoo Stash http://research.microsoft.com/pubs/73856/stash-full.9-30.pdf
* FNV http://www.isthe.com/chongo/tech/comp/fnv/
* MD5 http://en.wikipedia.org/wiki/MD5
**/
#ifndef HTSINTHASH_DEFH
#define HTSINTHASH_DEFH
/* Includes */
#ifdef _WIN32
#include <stddef.h>
typedef unsigned __int32 uint32_t;
typedef unsigned __int64 uint64_t;
#elif (defined(SOLARIS) || defined(sun) || defined(HAVE_INTTYPES_H) \
|| defined(BSD) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD_kernel__))
#include <inttypes.h>
#else
#include <stdint.h>
#endif
/** Value. **/
typedef union inthash_value {
/** Integer value. **/
intptr_t intg;
/** Unsigned integer value. **/
uintptr_t uintg;
/** Pointer value. **/
void *ptr;
} inthash_value;
/** NULL Value. **/
#define INTHASH_VALUE_NULL { 0 }
#ifndef HTS_DEF_FWSTRUCT_inthash_item
#define HTS_DEF_FWSTRUCT_inthash_item
typedef struct inthash_item inthash_item;
#endif
/** Hash key (32-bit) **/
typedef uint32_t inthash_key;
/** Pair of hashes **/
typedef struct inthash_keys {
inthash_key hash1;
inthash_key hash2;
} inthash_keys;
/** NULL pair of hashes. **/
#define INTHASH_KEYS_NULL { 0, 0 }
/** Item holding a value. **/
struct inthash_item {
/** Key. **/
char *name;
/** Value. **/
inthash_value value;
/** Hashes of the key. **/
inthash_keys hashes;
};
/** Log level. **/
typedef enum inthash_loglevel {
inthash_log_critical,
inthash_log_warning,
inthash_log_info,
inthash_log_debug,
inthash_log_trace
} inthash_loglevel;
/** Alias for legacy code. **/
typedef inthash_item inthash_chain;
/** Value free handler **/
typedef void (*t_inthash_freehandler)(void *arg, void *value);
/** Name dup handler. **/
typedef char* (*t_inthash_duphandler)(void *arg, const char *name);
/** Hash computation handler. **/
typedef inthash_keys (*t_inthash_hasheshandler)(void *arg, const char *value);
/** Hashtable logging handler. **/
typedef void (*t_inthash_loghandler)(void *arg, inthash_loglevel level,
const char* format, va_list args);
/** Hashtable fatal assertion failure. **/
typedef void (*t_inthash_asserthandler)(void *arg, const char* exp, const char* file, int line);
/**
* Value comparison handler (returns non-zero value if strings are equal).
**/
typedef int (*t_inthash_cmphandler)(void *arg, const char *a, const char *b);
/** Hashtable (opaque structure). **/
#ifndef HTS_DEF_FWSTRUCT_struct_inthash
#define HTS_DEF_FWSTRUCT_struct_inthash
typedef struct struct_inthash struct_inthash, *inthash;
#endif
/** Hashtable enumeration (opaque structure). **/
#ifndef HTS_DEF_FWSTRUCT_struct_inthash_enum
#define HTS_DEF_FWSTRUCT_struct_inthash_enum
typedef struct struct_inthash_enum struct_inthash_enum;
#endif
/** Enumeration. **/
struct struct_inthash_enum {
inthash table;
size_t index;
};
/* Library internal definictions */
#ifdef HTS_INTERNAL_BYTECODE
/**
* Create a new hashtable, with initial bucket size of 'size'.
* If size is 0, use the default minimal bucket size.
* Return a non-NULL pointer upon success.
**/
inthash inthash_new(size_t size);
/**
* Was the hashtable successfully created ?
* Return non-zero value if the hashtable is valid.
**/
int inthash_created(inthash hashtable);
/**
* Delete a hashtable, freeing all entries.
**/
void inthash_delete(inthash * hashtable);
/**
* Return the number of items in the hashtable.
**/
size_t inthash_nitems(inthash hashtable);
/**
* Return the memory size taken by the hashtable.
* (This does not take account of the possible memory taken by values)
**/
size_t inthash_memory_size(inthash hashtable);
/**
* If 'flag' is non-zero, calls inthash_value_set_value_handler() with
* default system free() handler function, otherwise, free the value handlers.
**/
void inthash_value_is_malloc(inthash hashtable, int flag);
/**
* Set handlers for values.
* free: this handler will be called when a value is to be removed from
* the hashtable. if NULL, values won't be free'd.
* arg: opaque custom argument to be used by functions.
* Handler(s) MUST NOT be changed once elements have been added.
**/
void inthash_value_set_value_handler(inthash hashtable,
t_inthash_freehandler free,
void *arg);
/**
* Set handlers for keys.
* dup: handler called to duplicate a key. if NULL, the internal pool is used.
* free: handler called to free a key. if NULL, the internal pool is used.
* hash: hashing handler, called to hash a key. if NULL, the default hash
* function is used.
* equals: comparison handler, returning non-zero value when two keys are
* identical. if NULL, the default comparison function is used.
* arg: opaque custom argument to be used by functions.
* Handler(s) MUST NOT be changed once elements have been added.
**/
void inthash_value_set_key_handler(inthash hashtable,
t_inthash_duphandler dup,
t_inthash_freehandler free,
t_inthash_hasheshandler hash,
t_inthash_cmphandler equals,
void *arg);
/**
* Set assertion failure handler.
* log: handler called upon serious programming error
* fatal: handler called upon serious programming error
**/
void inthash_set_assert_handler(inthash hashtable,
t_inthash_loghandler log,
t_inthash_asserthandler fatal,
void *arg);
/**
* Set the hashtable name, for degugging purpose.
* name: the hashtable name (ASCII or UTF-8)
*/
void inthash_set_name(inthash hashtable, const char *name);
/**
* Get the hashtable name, for degugging purpose.
* Return NULL if no name was defined.
**/
const char* inthash_get_name(inthash hashtable);
/**
* Read an integer entry from the hashtable.
* Return non-zero value upon success and sets intvalue.
**/
int inthash_read(inthash hashtable, const char *name, intptr_t * intvalue);
/**
* Same as inthash_read(), but return 0 is the value was zero.
**/
int inthash_readptr(inthash hashtable, const char *name, intptr_t * intvalue);
/**
* Return non-zero value if the given entry exists.
**/
int inthash_exists(inthash hashtable, const char *name);
/**
* Read an entry from the hashtable.
* Return non-zero value upon success and sets value.
**/
int inthash_read_value(inthash hashtable, const char *name,
inthash_value * value);
/**
* Write an entry to the hashtable.
* Return non-zero value if the entry was added, zero if it was replaced.
**/
int inthash_write_value(inthash hashtable, const char *name,
inthash_value value);
/**
* Read a pointer entry from the hashtable.
* Return non-zero value upon success and sets value.
**/
int inthash_read_pvoid(inthash hashtable, const char *name, void **value);
/**
* Write a pointer entry to the hashtable.
* Return non-zero value if the entry was added, zero if it was replaced.
**/
int inthash_write_pvoid(inthash hashtable, const char *name, void *value);
/**
* Alias to inthash_write_pvoid()
**/
void inthash_add_pvoid(inthash hashtable, const char *name, void *value);
/**
* Write an integer entry to the hashtable.
* Return non-zero value if the entry was added, zero if it was replaced.
**/
int inthash_write(inthash hashtable, const char *name, intptr_t value);
/**
* Alias to inthash_write()
**/
void inthash_add(inthash hashtable, const char *name, intptr_t value);
/**
* Increment an entry value in the hashtable
* (or create a new entry with value 1 if it does not yet exist)
* Return non-zero value if the entry was added, zero if it was changed.
**/
int inthash_inc(inthash hashtable, const char *name);
/**
* Decrement an entry value in the hashtable
* (or create a new entry with value -1 if it does not yet exist)
* Return non-zero value if the entry was added, zero if it was changed.
**/
int inthash_dec(inthash hashtable, const char *name);
/**
* Remove an entry from the hashtable
* Return non-zero value if the entry was removed, zero otherwise.
**/
int inthash_remove(inthash hashtable, const char *name);
/**
* Return a new enumerator.
* Note: deleting entries is safe while enumerating, but adding entries
* lead to undefined enumeration behavior (yet safe).
**/
struct_inthash_enum inthash_enum_new(inthash hashtable);
/**
* Enumerate the next entry.
**/
inthash_item *inthash_enum_next(struct_inthash_enum * e);
/**
* Compute a hash, given a string value.
**/
inthash_keys inthash_hash_value(const char *value);
/**
* Set default global assertion failure handler.
* The handler will be used if no specific handler was defined in the
* hashtable itself.
* log: handler called upon serious error log (opaque argument
* is the hashtable itself)
* fatal: handler called upon serious programming error (opaque argument
* is the hashtable itself)
**/
void inthash_set_global_assert_handler(t_inthash_loghandler log,
t_inthash_asserthandler fatal);
#endif
#endif

View File

@@ -493,8 +493,9 @@ static char *printname(char rname[1024], char name[1024]) {
p = &name[0];
if (*p != '[')
return "";
if (*p != '[') {
return rname; // ""
}
p += 2;
//rname=(char*)calloct(strlen(name)+8,sizeof(char));
p1 = rname;
@@ -504,13 +505,13 @@ static char *printname(char rname[1024], char name[1024]) {
if (*p == ';') {
*p1 = '\0';
strcat(rname, ".class");
return (rname);
return rname;
} else
*p1 = *p;
p1++;
}
p1 -= 3;
*p1 = '\0';
return (rname);
return rname;
}

File diff suppressed because it is too large Load Diff

View File

@@ -50,6 +50,14 @@ typedef struct htsblk htsblk;
#define HTS_DEF_FWSTRUCT_t_dnscache
typedef struct t_dnscache t_dnscache;
#endif
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
#define HTS_DEF_FWSTRUCT_lien_adrfil
typedef struct lien_adrfil lien_adrfil;
#endif
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
typedef struct lien_adrfilsave lien_adrfilsave;
#endif
/* définitions globales */
#include "htsglobal.h"
@@ -97,86 +105,6 @@ MSVC2003INLINEBUG HTS_STATIC char *getHtsOptBuff_(httrackp * opt) {
#define OPT_GET_BUFF(OPT) ( getHtsOptBuff_(OPT) )
#define OPT_GET_BUFF_SIZE(OPT) ( sizeof(opt->state.concat.buff[0]) )
// structure pour paramètres supplémentaires lors de la requête
#ifndef HTS_DEF_FWSTRUCT_htsrequest_proxy
#define HTS_DEF_FWSTRUCT_htsrequest_proxy
typedef struct htsrequest_proxy htsrequest_proxy;
#endif
struct htsrequest_proxy {
int active;
const char* name;
int port;
const char* bindhost; // bind this host
};
#ifndef HTS_DEF_FWSTRUCT_htsrequest
#define HTS_DEF_FWSTRUCT_htsrequest
typedef struct htsrequest htsrequest;
#endif
struct htsrequest {
short int user_agent_send; // user agent (ex: httrack/1.0 [sun])
short int http11; // l'en tête peut (doit) être signé HTTP/1.1 et non HTTP/1.0
short int nokeepalive; // pas de keep-alive
short int range_used; // Range utilisé
short int nocompression; // Pas de compression
short int flush_garbage; // recycled
const char* user_agent;
const char* referer;
const char* from;
const char* lang_iso;
const char* accept;
const char* headers;
htsrequest_proxy proxy; // proxy
};
// structure pour retour d'une connexion/prise d'en tête
#ifndef HTS_DEF_FWSTRUCT_htsblk
#define HTS_DEF_FWSTRUCT_htsblk
typedef struct htsblk htsblk;
#endif
struct htsblk {
int statuscode; // status-code, -1=erreur, 200=OK,201=..etc (cf RFC1945)
short int notmodified; // page ou fichier NON modifié (transféré)
short int is_write; // sortie sur disque (out) ou en mémoire (adr)
short int is_chunk; // mode chunk
short int compressed; // compressé?
short int empty; // vide?
short int keep_alive; // Keep-Alive?
short int keep_alive_trailers; // ..with trailers extension
int keep_alive_t; // KA timeout
int keep_alive_max; // KA number of requests
char *adr; // adresse du bloc de mémoire, NULL=vide
char *headers; // adresse des en têtes si présents
FILE *out; // écriture directe sur disque (si is_write=1)
LLint size; // taille fichier
char msg[80]; // message éventuel si échec ("\0"=non précisé)
char contenttype[64]; // content-type ("text/html" par exemple)
char charset[64]; // charset ("iso-8859-1" par exemple)
char contentencoding[64]; // content-encoding ("gzip" par exemple)
char *location; // on copie dedans éventuellement la véritable 'location'
LLint totalsize; // taille totale à télécharger (-1=inconnue)
short int is_file; // ce n'est pas une socket mais un descripteur de fichier si 1
T_SOC soc; // ID socket
SOCaddr address; // IP address
int address_size; // IP address structure length
FILE *fp; // fichier pour file://
#if HTS_USEOPENSSL
short int ssl; // is this connection a SSL one? (https)
// BIO* ssl_soc; // SSL structure
SSL *ssl_con; // connection structure
#endif
char lastmodified[64]; // Last-Modified
char etag[256]; // Etag
char cdispo[256]; // Content-Disposition coupé
LLint crange; // Content-Range
LLint crange_start; // Content-Range
LLint crange_end; // Content-Range
int debugid; // debug connection
/* */
htsrequest req; // paramètres pour la requête
/*char digest[32+2]; // digest md5 généré par le moteur ("" si non généré) */
};
/* ANCIENNE STURCTURE pour cache 1.0 */
#ifndef HTS_DEF_FWSTRUCT_OLD_t_proxy
#define HTS_DEF_FWSTRUCT_OLD_t_proxy
@@ -220,12 +148,10 @@ struct OLD_htsblk {
typedef struct t_dnscache t_dnscache;
#endif
struct t_dnscache {
struct t_dnscache *n;
int host_length; // 4 normalement - ==0 alors en cours de résolution
char host_addr[HTS_MAXADDRLEN]; // 4 octets (v4), ou 16 octets (v6)
// ou >16 si sockaddr
// ==-1 alors erreur (host n'éxiste pas)
char iadr[1024];
struct t_dnscache *next;
const char *iadr;
size_t host_length; // length ; (4 or 16) ; 0 for error
char host_addr[HTS_MAXADDRLEN];
};
/* Library internal definictions */
@@ -235,7 +161,7 @@ struct t_dnscache {
void hts_init_htsblk(htsblk * r);
// attach specific project log to hachtable logger
void hts_set_hash_handler(inthash hashtable, httrackp *opt);
void hts_set_hash_handler(coucal hashtable, httrackp *opt);
// version
HTSEXT_API const char* hts_version(void);
@@ -249,11 +175,12 @@ LLint check_downloadable_bytes(int rate);
HTSEXT_API int hts_uninit_module(void);
// fonctions principales
T_SOC http_fopen(httrackp * opt, char *adr, char *fil, htsblk * retour);
T_SOC http_fopen(httrackp * opt, const char *adr, const char *fil, htsblk * retour);
T_SOC http_xfopen(httrackp * opt, int mode, int treat, int waitconnect,
char *xsend, char *adr, char *fil, htsblk * retour);
int http_sendhead(httrackp * opt, t_cookie * cookie, int mode, char *xsend,
char *adr, char *fil, char *referer_adr, char *referer_fil,
const char *xsend, const char *adr, const char *fil, htsblk * retour);
int http_sendhead(httrackp * opt, t_cookie * cookie, int mode, const char *xsend,
const char *adr, const char *fil,
const char *referer_adr, const char *referer_fil,
htsblk * retour);
//int newhttp(char* iadr,char* err=NULL);
@@ -263,29 +190,32 @@ HTS_INLINE void deletehttp(htsblk * r);
HTS_INLINE int deleteaddr(htsblk * r);
HTS_INLINE void deletesoc(T_SOC soc);
HTS_INLINE void deletesoc_r(htsblk * r);
htsblk http_location(httrackp * opt, char *adr, char *fil, char *loc);
htsblk http_test(httrackp * opt, char *adr, char *fil, char *loc);
htsblk http_test(httrackp * opt, const char *adr, const char *fil, char *loc);
int check_readinput(htsblk * r);
int check_readinput_t(T_SOC soc, int timeout);
void treathead(t_cookie * cookie, char *adr, char *fil, htsblk * retour,
void treathead(t_cookie * cookie, const char *adr, const char *fil, htsblk * retour,
char *rcvd);
void treatfirstline(htsblk * retour, char *rcvd);
void treatfirstline(htsblk * retour, const char *rcvd);
// sous-fonctions
LLint http_xfread1(htsblk * r, int bufl);
HTS_INLINE t_hostent *hts_gethostbyname2(httrackp * opt, const char *iadr,
void *v_buffer, const char **error);
HTS_INLINE t_hostent *hts_gethostbyname(httrackp * opt, const char *iadr,
void *v_buffer);
HTSEXT_API t_hostent *vxgethostbyname2(const char *const hostname, void *v_buffer, const char **error);
HTSEXT_API t_hostent *vxgethostbyname(const char *const hostname, void *v_buffer);
HTS_INLINE SOCaddr* hts_dns_resolve2(httrackp * opt, const char *iadr,
SOCaddr *const addr,
const char **error);
HTS_INLINE SOCaddr* hts_dns_resolve(httrackp * opt, const char *iadr,
SOCaddr *const addr);
HTSEXT_API SOCaddr* hts_dns_resolve_nocache2(const char *const hostname,
SOCaddr *const addr,
const char **error);
HTSEXT_API SOCaddr* hts_dns_resolve_nocache(const char *const hostname,
SOCaddr *const addr);
HTSEXT_API int check_hostname_dns(const char *const hostname);
int ftp_available(void);
#if HTS_DNSCACHE
void hts_cache_free(t_dnscache *const cache);
t_dnscache *_hts_cache(httrackp * opt);
t_dnscache *hts_cache(httrackp * opt);
#endif
// outils divers
@@ -303,7 +233,7 @@ HTS_INLINE void time_rfc822(char *s, struct tm *A);
HTS_INLINE void time_rfc822_local(char *s, struct tm *A);
HTS_INLINE int sendc(htsblk * r, const char *s);
int finput(int fd, char *s, int max);
int finput(T_SOC fd, char *s, int max);
int binput(char *buff, char *s, int max);
int linput(FILE * fp, char *s, int max);
int linputsoc(T_SOC soc, char *s, int max);
@@ -311,8 +241,8 @@ int linputsoc_t(T_SOC soc, char *s, int max, int timeout);
int linput_trim(FILE * fp, char *s, int max);
int linput_cpp(FILE * fp, char *s, int max);
void rawlinput(FILE * fp, char *s, int max);
char *strstrcase(char *s, char *o);
int ident_url_absolute(const char *url, char *adr, char *fil);
const char *strstrcase(const char *s, const char *o);
int ident_url_absolute(const char *url, lien_adrfil *adrfil);
void fil_simplifie(char *f);
int is_unicode_utf8(const char *buffer, const size_t size);
void map_characters(unsigned char *buffer, unsigned int size,
@@ -320,18 +250,16 @@ void map_characters(unsigned char *buffer, unsigned int size,
int ishtml(httrackp * opt, const char *urlfil);
int ishtml_ext(const char *a);
int ishttperror(int err);
void guess_httptype(httrackp * opt, char *s, const char *fil);
int get_userhttptype(httrackp * opt, char *s, const char *fil);
void give_mimext(char *s, const char *st);
int may_unknown(httrackp * opt, const char *st);
int may_bogus_multiple(httrackp * opt, const char *mime, const char *filename);
int may_unknown2(httrackp * opt, const char *mime, const char *filename);
char *strrchr_limit(const char *s, char c, const char *limit);
char *strstr_limit(const char *s, const char *sub, const char *limit);
HTS_INLINE char *jump_protocol(const char *source);
const char *strrchr_limit(const char *s, char c, const char *limit);
char *jump_protocol(char *source);
const char *jump_protocol_const(const char *source);
void code64(unsigned char *a, int size_a, unsigned char *b, int crlf);
#define copychar(catbuff,a) concat(catbuff,(a),NULL)
@@ -341,7 +269,7 @@ void hts_lowcase(char *s);
void hts_replace(char *s, char from, char to);
int multipleStringMatch(const char *s, const char *match);
void fprintfio(FILE * fp, char *buff, char *prefix);
void fprintfio(FILE * fp, const char *buff, const char *prefix);
#ifdef _WIN32
#else
@@ -384,7 +312,6 @@ extern void *getFunctionPtr(void *handle, const char *fncname);
extern void closeFunctionLib(void *handle);
extern void clearCallbacks(htscallbacks * chain);
extern size_t hts_get_callback_offs(const char *name);
int hts_set_callback(t_hts_htmlcheck_callbacks * callbacks,
const char *name, void *function);
void *hts_get_callback(t_hts_htmlcheck_callbacks * callbacks,
@@ -515,7 +442,7 @@ HTS_STATIC int strfield(const char *f, const char *s) {
return 0;
}
HTS_STATIC int strcmpnocase(char *a, char *b) {
HTS_STATIC int strcmpnocase(const char *a, const char *b) {
while(*a) {
int cmp = hichar(*a) - hichar(*b);
@@ -610,6 +537,16 @@ HTS_STATIC int compare_mime(httrackp * opt, const char *mime, const char *file,
#endif
// returns (size_t) -1 upon error
static HTS_UNUSED size_t off_t_to_size_t(off_t o) {
const size_t so = (size_t) o;
if ((off_t) so == o) {
return so;
} else {
return (size_t) -1;
}
}
/* dirent() compatibility */
#ifdef _WIN32
#define HTS_DIRENT_SIZE 256

View File

@@ -1,4 +1,4 @@
/* ------------------------------------------------------------ */
/*
HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) 1998-2014 Xavier Roche and other contributors
@@ -41,13 +41,15 @@ Please visit our Website: http://www.httrack.com
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "htsmd5.h"
#include "md5.h"
#include "htssafe.h"
int domd5mem(const char *buf, size_t len, char *digest, int asAscii) {
int endian = 1;
unsigned char bindigest[16];
MD5_CTX ctx;
struct MD5Context ctx;
MD5Init(&ctx, *((char *) &endian));
MD5Update(&ctx, (const unsigned char *) buf, (unsigned int) len);
@@ -77,3 +79,25 @@ unsigned long int md5sum32(const char *buff) {
domd5mem(buff, strlen(buff), u.md5digest, 0);
return u.hash;
}
void md5selftest(void) {
static const char str1[] = "The quick brown fox jumps over the lazy dog\n";
static const char str1m[] = "37c4b87edffc5d198ff5a185cee7ee09";
static const char str2[] = "Hello";
static const char str2m[] = "8b1a9953c4611296a827abf8c47804d7";
char digest[64];
#define MDCHECK(VAR, VARMD) do { \
memset(digest, 0xCC, sizeof(digest)); \
domd5mem(VAR, sizeof(VAR) - 1, digest, 1); \
if (strcmp(digest, VARMD) != 0) { \
fprintf(stderr, \
"error: md5 selftest failed: '%s' => '%s' (!= '%s')\n", \
VAR, digest, VARMD); \
assert(! "md5 selftest failed"); \
} \
} while(0)
MDCHECK(str1, str1m);
MDCHECK(str2, str2m);
#undef MDCHECK
fprintf(stderr, "md5 selftest succeeded\n");
}

View File

@@ -42,6 +42,7 @@ Please visit our Website: http://www.httrack.com
#ifdef HTS_INTERNAL_BYTECODE
int domd5mem(const char *buf, size_t len, char *digest, int asAscii);
unsigned long int md5sum32(const char *buff);
void md5selftest(void);
#endif
#endif

View File

@@ -218,17 +218,17 @@ void htspe_init(void) {
/* See CVE-2010-5252 */
#if (defined(_WIN32) && (!defined(_DEBUG)))
{
/* >= Windows Server 2003 (Andy Hewitt) */
const DWORD dwVersion = GetVersion();
const DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
const DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
const int hasSetDllDirectory =
dwMajorVersion >= 6 || ( dwMajorVersion == 5 && dwMinorVersion >= 2 );
/* See KB 2389418
"If this parameter is an empty string (""), the call removes the
current directory from the default DLL search order" */
if (hasSetDllDirectory && !SetDllDirectory("")) {
BOOL (WINAPI*const k32_SetDllDirectoryA)(LPCSTR) =
(BOOL (WINAPI *)(LPCSTR))
GetProcAddress(GetModuleHandle("kernel32.dll"), "SetDllDirectoryA");
if (k32_SetDllDirectoryA != NULL && !k32_SetDllDirectoryA("")) {
/* Do no choke on NT or 98SE with KernelEx NT API (James Blough) */
const DWORD dwVersion = GetVersion();
const DWORD dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
const DWORD dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
if (dwMajorVersion >= 5) {
assertf(!"SetDllDirectory failed");
}

View File

@@ -104,22 +104,21 @@ struct htsmoduleStruct {
httrackp *opt;
/* Internal use - please don't touch */
lien_url **liens;
struct_back *sback;
cache_back *cache;
hash_struct *hashptr;
int numero_passe;
int add_tab_alloc;
/* */
int *lien_tot_;
int *ptr_;
size_t *lien_size_;
char **lien_buffer_;
const char *page_charset_;
/* Internal use - please don't touch */
};
#ifdef __cplusplus
extern "C" {
#endif
/* Used to wrap module initialization */
/* return 1 if init was ok */
typedef int (*t_htsWrapperInit) (char *fn, char *args);
@@ -138,4 +137,8 @@ extern int hts_parse_externals(htsmoduleStruct * str);
extern int V6_is_available;
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -47,15 +47,15 @@ Please visit our Website: http://www.httrack.com
{ /* ajout nom */\
char BIGSTK buff[HTS_URLMAXSIZE*2];\
buff[0]='\0';\
strncatbuff(buff,start_pos,(int) (nom_pos - start_pos));\
url_savename_addstr(save,buff);\
strncatbuff(buff,start_pos,nom_pos - start_pos);\
url_savename_addstr(afs->save, buff);\
}
#define ADD_STANDARD_NAME(shortname) \
{ /* ajout nom */\
char BIGSTK buff[HTS_URLMAXSIZE*2];\
standard_name(buff,dot_pos,nom_pos,fil_complete,(shortname));\
url_savename_addstr(save,buff);\
url_savename_addstr(afs->save, buff);\
}
/* Avoid stupid DOS system folders/file such as 'nul' */
@@ -82,11 +82,11 @@ static const char *hts_tbdev[] = {
HTS_STAT.stat_errors=fspc(opt,NULL,"error"); \
HTS_STAT.stat_warnings=fspc(opt,NULL,"warning"); \
HTS_STAT.stat_infos=fspc(opt,NULL,"info"); \
HTS_STAT.nbk=backlinks_done(sback,liens,lien_tot,ptr); \
HTS_STAT.nbk=backlinks_done(sback,opt->liens,opt->lien_tot,ptr); \
HTS_STAT.nb=back_transferred(HTS_STAT.stat_bytes,sback); \
/* Check */ \
{ \
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count,-1,ptr,lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count,-1,ptr,opt->lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
return -1; \
} \
} \
@@ -139,10 +139,10 @@ static void cleanEndingSpaceOrDot(char *s) {
// forme le nom du fichier à sauver (save) à partir de fil et adr
// système intelligent, qui renomme en cas de besoin (exemple: deux INDEX.HTML et index.html)
int url_savename(char *adr_complete, char *fil_complete, char *save,
char *former_adr, char *former_fil, char *referer_adr,
char *referer_fil, httrackp * opt, lien_url ** liens,
int lien_tot, struct_back * sback, cache_back * cache,
int url_savename(lien_adrfilsave *const afs,
lien_adrfil *const former,
const char *referer_adr, const char *referer_fil,
httrackp * opt, struct_back * sback, cache_back * cache,
hash_struct * hash, int ptr, int numero_passe,
const lien_back * headers) {
char catbuff[CATBUFF_SIZE];
@@ -152,7 +152,10 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
lien_back *const back = sback->lnk;
/* */
char BIGSTK newfil[HTS_URLMAXSIZE * 2]; /* ="" */
char BIGSTK fil[HTS_URLMAXSIZE * 2]; /* ="" */
const char *const adr_complete = afs->af.adr;
const char *const fil_complete = afs->af.fil;
/*char BIGSTK normadr_[HTS_URLMAXSIZE*2]; */
char BIGSTK normadr_[HTS_URLMAXSIZE * 2], normfil_[HTS_URLMAXSIZE * 2];
@@ -161,13 +164,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
static const char *protocol_str[] =
{ "http", "https", "ftp", "file", "unknown" };
int protocol = PROTOCOL_HTTP;
const char *const adr = jump_identification(adr_complete);
char *fil = fil_complete;
const char *const adr = jump_identification_const(adr_complete);
// copy of fil, used for lookups (see urlhack)
const char *normadr = adr;
const char *normfil = fil;
const char *const print_adr = jump_protocol(adr);
char *start_pos = NULL, *nom_pos = NULL, *dot_pos = NULL; // Position nom et point
const char *normfil = fil_complete;
const char *const print_adr = jump_protocol_const(adr);
const char *start_pos = NULL, *nom_pos = NULL, *dot_pos = NULL; // Position nom et point
// pour changement d'extension ou de nom (content-disposition)
int ext_chg = 0, ext_chg_delayed = 0;
@@ -176,8 +178,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
int max_char = 0;
//CLEAR
newfil[0] = ext[0] = '\0';
save[0] = '\0';
fil[0] = ext[0] = '\0';
afs->save[0] = '\0';
/* 8-3 ? */
switch (opt->savename_83) {
@@ -199,7 +201,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
if (opt->urlhack) {
// copy of adr (without protocol), used for lookups (see urlhack)
normadr = adr_normalized(adr, normadr_);
normfil = fil_normalized(fil, normfil_);
normfil = fil_normalized(fil_complete, normfil_);
} else {
if (link_has_authority(adr_complete)) { // https or other protocols : in "http/" subfolder
char *pos = strchr(adr_complete, ':');
@@ -227,8 +229,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// court-circuit pour lien primaire
if (strnotempty(adr) == 0) {
if (strcmp(fil, "primary") == 0) {
strcatbuff(save, "primary.html");
if (strcmp(fil_complete, "primary") == 0) {
strcatbuff(afs->save, "primary.html");
return 0;
}
}
@@ -259,21 +261,21 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// vérifier que le nom n'a pas déja été calculé (si oui le renvoyer tel que)
// vérifier que le nom n'est pas déja pris...
// NOTE: si on cherche /toto/ et que /toto est trouvé on le prend (et réciproquqment) ** // **
if (liens != NULL) {
if (opt->liens != NULL) {
int i;
i = hash_read(hash, normadr, normfil, HASH_STRUCT_ADR_PATH); // recherche table 1 (adr+fil)
if (i >= 0) { // ok, trouvé
strcpybuff(save, liens[i]->sav);
strcpybuff(afs->save, heap(i)->sav);
return 0;
}
i = hash_read(hash, normadr, normfil, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former_adr+former_fil)
i = hash_read(hash, normadr, normfil, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former->adr+former->fil)
if (i >= 0) { // ok, trouvé
// copier location moved!
strcpybuff(adr_complete, liens[i]->adr);
strcpybuff(fil_complete, liens[i]->fil);
strcpybuff(afs->af.adr, heap(i)->adr);
strcpybuff(afs->af.fil, heap(i)->fil);
// et save
strcpybuff(save, liens[i]->sav); // copier (formé à partir du nouveau lien!)
strcpybuff(afs->save, heap(i)->sav); // copier (formé à partir du nouveau lien!)
return 0;
}
// chercher sans / ou avec / dans former
@@ -286,13 +288,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
fil_complete_patche[strlen(fil_complete_patche) - 1] = '\0';
else
strcatbuff(fil_complete_patche, "/");
i = hash_read(hash, normadr, fil_complete_patche, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former_adr+former_fil)
i = hash_read(hash, normadr, fil_complete_patche, HASH_STRUCT_ORIGINAL_ADR_PATH); // recherche table 2 (former->adr+former->fil)
if (i >= 0) {
// écraser fil et adr (pas former_fil?????)
strcpybuff(adr_complete, liens[i]->adr);
strcpybuff(fil_complete, liens[i]->fil);
// écraser fil et adr (pas former->fil?????)
strcpybuff(afs->af.adr, heap(i)->adr);
strcpybuff(afs->af.fil, heap(i)->fil);
// écrire save
strcpybuff(save, liens[i]->sav);
strcpybuff(afs->save, heap(i)->sav);
return 0;
}
}
@@ -303,13 +305,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
{
char *a;
a = strchr(fil, '?');
a = strchr(fil_complete, '?');
if (a != NULL) {
strncatbuff(newfil, fil, (int) (a - fil));
strncatbuff(fil, fil_complete, a - fil_complete);
} else {
strcpybuff(newfil, fil);
strcpybuff(fil, fil_complete);
}
fil = newfil;
}
// decode remaining % (normally not necessary; already done in htsparse.c)
@@ -465,8 +466,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
//
int hihp = opt->state._hts_in_html_parsing;
int has_been_moved = 0;
char BIGSTK curr_adr[HTS_URLMAXSIZE * 2],
curr_fil[HTS_URLMAXSIZE * 2];
lien_adrfil current;
/* Ensure we don't use too many sockets by using a "testing" one
If we have only 1 simultaneous connection authorized, wait for pending download
@@ -475,20 +475,20 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
URLSAVENAME_WAIT_FOR_AVAILABLE_SOCKET();
/* Rock'in */
curr_adr[0] = curr_fil[0] = '\0';
current.adr[0] = current.fil[0] = '\0';
opt->state._hts_in_html_parsing = 2; // test
hts_log_print(opt, LOG_DEBUG, "Testing link type %s%s",
adr_complete, fil_complete);
strcpybuff(curr_adr, adr_complete);
strcpybuff(curr_fil, fil_complete);
strcpybuff(current.adr, adr_complete);
strcpybuff(current.fil, fil_complete);
// ajouter dans le backing le fichier en mode test
// savename: rien car en mode test
if (back_add
(sback, opt, cache, curr_adr, curr_fil, BACK_ADD_TEST,
(sback, opt, cache, current.adr, current.fil, BACK_ADD_TEST,
referer_adr, referer_fil, 1) != -1) {
int b;
b = back_index(opt, sback, curr_adr, curr_fil, BACK_ADD_TEST);
b = back_index(opt, sback, current.adr, current.fil, BACK_ADD_TEST);
if (b >= 0) {
int stop_looping = 0;
int petits_tours = 0;
@@ -500,8 +500,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
back_wait(sback, opt, cache, 0);
}
if (ptr >= 0) {
back_fillmax(sback, opt, cache, liens, ptr, numero_passe,
lien_tot);
back_fillmax(sback, opt, cache, ptr, numero_passe);
}
// on est obligé d'appeler le shell pour le refresh..
// Transfer rate
@@ -512,11 +511,11 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
HTS_STAT.stat_errors = fspc(opt, NULL, "error");
HTS_STAT.stat_warnings = fspc(opt, NULL, "warning");
HTS_STAT.stat_infos = fspc(opt, NULL, "info");
HTS_STAT.nbk = backlinks_done(sback, liens, lien_tot, ptr);
HTS_STAT.nbk = backlinks_done(sback, opt->liens, opt->lien_tot, ptr);
HTS_STAT.nb = back_transferred(HTS_STAT.stat_bytes, sback);
if (!RUN_CALLBACK7
(opt, loop, sback->lnk, sback->count, b, ptr, lien_tot,
(opt, loop, sback->lnk, sback->count, b, ptr, opt->lien_tot,
(int) (time_local() - HTS_STAT.stat_timestart),
&HTS_STAT)) {
return -1;
@@ -527,42 +526,40 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// traitement des 304,303..
if (back[b].status <= 0) {
if (HTTP_IS_REDIRECT(back[b].r.statuscode)) { // agh moved.. un tit tour de plus
if ((petits_tours < 5) && (former_adr) && (former_fil)) { // on va pas tourner en rond non plus!
if ((int) strnotempty(back[b].r.location)) { // location existe!
char BIGSTK mov_url[HTS_URLMAXSIZE * 2],
mov_adr[HTS_URLMAXSIZE * 2],
mov_fil[HTS_URLMAXSIZE * 2];
mov_url[0] = mov_adr[0] = mov_fil[0] = '\0';
if ((petits_tours < 5) && former != NULL) { // on va pas tourner en rond non plus!
if (strnotempty(back[b].r.location)) { // location existe!
char BIGSTK mov_url[HTS_URLMAXSIZE * 2];
lien_adrfil moved;
mov_url[0] = moved.adr[0] = moved.fil[0] = '\0';
//
strcpybuff(mov_url, back[b].r.location); // copier URL
if (ident_url_relatif
(mov_url, curr_adr, curr_fil, mov_adr,
mov_fil) >= 0) {
(mov_url, current.adr, current.fil, &moved) >= 0) {
// si non bouclage sur soi même, ou si test avec GET non testé
if ((strcmp(mov_adr, curr_adr))
|| (strcmp(mov_fil, curr_fil))
if ((strcmp(moved.adr, current.adr))
|| (strcmp(moved.fil, current.fil))
|| (get_test_request == 0)) {
// bouclage?
if ((!strcmp(mov_adr, curr_adr))
&& (!strcmp(mov_fil, curr_fil)))
if ((!strcmp(moved.adr, current.adr))
&& (!strcmp(moved.fil, current.fil)))
get_test_request = 1; // faire requète avec GET
// recopier former_adr/fil?
if ((former_adr) && (former_fil)) {
if (strnotempty(former_adr) == 0) { // Pas déja noté
strcpybuff(former_adr, curr_adr);
strcpybuff(former_fil, curr_fil);
// recopier former->adr/fil?
if (former != NULL) {
if (strnotempty(former->adr) == 0) { // Pas déja noté
strcpybuff(former->adr, current.adr);
strcpybuff(former->fil, current.fil);
}
}
// check explicit forbidden - don't follow 3xx in this case
{
int set_prio_to = 0;
if (hts_acceptlink(opt, ptr, lien_tot, liens, mov_adr, mov_fil, NULL, NULL, &set_prio_to, NULL) == 1) { /* forbidden */
if (hts_acceptlink(opt, ptr, moved.adr, moved.fil, NULL, NULL, &set_prio_to, NULL) == 1) { /* forbidden */
has_been_moved = 1;
back_maydelete(opt, cache, sback, b); // ok
strcpybuff(curr_adr, mov_adr);
strcpybuff(curr_fil, mov_fil);
strcpybuff(current.adr, moved.adr);
strcpybuff(current.fil, moved.fil);
mov_url[0] = '\0';
stop_looping = 1;
}
@@ -573,11 +570,11 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
) { // ftp, ok on arrête
has_been_moved = 1;
back_maydelete(opt, cache, sback, b); // ok
strcpybuff(curr_adr, mov_adr);
strcpybuff(curr_fil, mov_fil);
strcpybuff(current.adr, moved.adr);
strcpybuff(current.fil, moved.fil);
stop_looping = 1;
} else if (*mov_url) {
char *methode;
const char *methode;
if (!get_test_request)
methode = BACK_ADD_TEST; // tester avec HEAD
@@ -585,24 +582,24 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
methode = BACK_ADD_TEST2; // tester avec GET
hts_log_print(opt, LOG_WARNING,
"Loop with HEAD request (during prefetch) at %s%s",
curr_adr, curr_fil);
current.adr, current.fil);
}
// Ajouter
URLSAVENAME_WAIT_FOR_AVAILABLE_SOCKET();
if (back_add(sback, opt, cache, mov_adr, mov_fil, methode, referer_adr, referer_fil, 1) != -1) { // OK
if (back_add(sback, opt, cache, moved.adr, moved.fil, methode, referer_adr, referer_fil, 1) != -1) { // OK
hts_log_print(opt, LOG_DEBUG,
"(during prefetch) %s (%d) to link %s at %s%s",
back[b].r.msg,
back[b].r.statuscode,
back[b].r.location, curr_adr,
curr_fil);
back[b].r.location, current.adr,
current.fil);
// libérer emplacement backing actuel et attendre le prochain
back_maydelete(opt, cache, sback, b);
strcpybuff(curr_adr, mov_adr);
strcpybuff(curr_fil, mov_fil);
strcpybuff(current.adr, moved.adr);
strcpybuff(current.fil, moved.fil);
b =
back_index(opt, sback, curr_adr, curr_fil,
back_index(opt, sback, current.adr, current.fil,
methode);
if (!get_test_request)
has_been_moved = 1; // sinon ne pas forcer has_been_moved car non déplacé
@@ -611,7 +608,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
} else { // sinon on fait rien et on s'en va.. (ftp etc)
hts_log_print(opt, LOG_DEBUG,
"Warning: Savename redirect backing error at %s%s",
mov_adr, mov_fil);
moved.adr, moved.fil);
}
}
} else {
@@ -673,13 +670,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// oops, a été déplacé.. on recalcule en récursif (osons!)
if (has_been_moved) {
// copier adr, fil (optionnel, mais sinon marche pas pour le rip)
strcpybuff(adr_complete, curr_adr);
strcpybuff(fil_complete, curr_fil);
strcpybuff(afs->af.adr, current.adr);
strcpybuff(afs->af.fil, current.fil);
// copier adr, fil
return url_savename(curr_adr, curr_fil, save, NULL, NULL,
referer_adr, referer_fil, opt, liens,
lien_tot, sback, cache, hash, ptr,
return url_savename(afs, NULL,
referer_adr, referer_fil, opt,
sback, cache, hash, ptr,
numero_passe, NULL);
}
// --- --- ---
@@ -749,7 +746,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
}
// Rechercher premier / et dernier .
{
char *a = fil + strlen(fil) - 1;
const char *a = fil + strlen(fil) - 1;
// passer structures
start_pos = fil;
@@ -770,7 +767,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// ajouter nom du site éventuellement en premier
if (opt->savename_type == -1) { // utiliser savename_userdef! (%h%p/%n%q.%t)
const char *a = StringBuff(opt->savename_userdef);
char *b = save;
char *b = afs->save;
/*char *nom_pos=NULL,*dot_pos=NULL; // Position nom et point */
char tok;
@@ -791,7 +788,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
*/
// Construire nom
while((*a) && (((int) (b - save)) < HTS_URLMAXSIZE)) { // parser, et pas trop long..
while((*a) && (((int) (b - afs->save)) < HTS_URLMAXSIZE)) { // parser, et pas trop long..
if (*a == '%') {
int short_ver = 0;
@@ -812,7 +809,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
name[pos][0] = '\0';
}
pos = 0;
while(*a != ']') {
while(*a != '\0' && *a != ']') {
if (pos < 5) {
if (*a == ':') { // next token
c = name[++pos];
@@ -823,7 +820,9 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
}
}
}
a++;
if (*a == ']') {
a++;
}
strcatbuff(name[0], "="); /* param=.. */
c = strchr(fil_complete, '?');
/* parameters exists */
@@ -1046,26 +1045,26 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// adresse url
if (!opt->savename_83) { // noms longs (et pas de .)
strcatbuff(save, final_adr);
strcatbuff(afs->save, final_adr);
} else { // noms 8-3
if (strlen(final_adr) > 4) {
if (strfield(final_adr, "www."))
hts_appendStringUTF8(save, final_adr + 4, max_char);
hts_appendStringUTF8(afs->save, final_adr + 4, max_char);
else
hts_appendStringUTF8(save, final_adr, max_char);
hts_appendStringUTF8(afs->save, final_adr, max_char);
} else
hts_appendStringUTF8(save, final_adr, max_char);
hts_appendStringUTF8(afs->save, final_adr, max_char);
}
/* release */
RELEASE_ADR();
if (*fil != '/')
strcatbuff(save, "/");
strcatbuff(afs->save, "/");
}
}
hts_lowcase(save);
hts_lowcase(afs->save);
/*
// ne sert à rien car a déja été filtré normalement
@@ -1091,42 +1090,42 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
DECLARE_ADR(final_adr);
if (!opt->savename_83) { // noms longs
strcatbuff(save, final_adr);
strcatbuff(save, "/");
strcatbuff(afs->save, final_adr);
strcatbuff(afs->save, "/");
} else { // noms 8-3
if (strlen(final_adr) > 4) {
if (strfield(final_adr, "www."))
hts_appendStringUTF8(save, final_adr + 4, max_char);
hts_appendStringUTF8(afs->save, final_adr + 4, max_char);
else
hts_appendStringUTF8(save, final_adr, max_char);
strcatbuff(save, "/");
hts_appendStringUTF8(afs->save, final_adr, max_char);
strcatbuff(afs->save, "/");
} else {
hts_appendStringUTF8(save, final_adr, max_char);
strcatbuff(save, "/");
hts_appendStringUTF8(afs->save, final_adr, max_char);
strcatbuff(afs->save, "/");
}
}
/* release */
RELEASE_ADR();
} else {
strcatbuff(save, "web/"); // répertoire général
strcatbuff(afs->save, "web/"); // répertoire général
}
}
// si un html à coup sûr
if ((ext_chg != 0) ? (ishtml_ext(ext) == 1) : (ishtml(opt, fil) == 1)) {
if (opt->savename_type % 100 == 2) { // html/
strcatbuff(save, "html/");
strcatbuff(afs->save, "html/");
}
} else {
if ((opt->savename_type % 100 == 1) || (opt->savename_type % 100 == 2)) { // html & images
strcatbuff(save, "images/");
strcatbuff(afs->save, "images/");
}
}
switch (opt->savename_type % 100) {
case 4:
case 5:{ // séparer par types
char *a = fil + strlen(fil) - 1;
const char *a = fil + strlen(fil) - 1;
// passer structures
while((a > fil) && (*a != '/') && (*a != '\\'))
@@ -1137,17 +1136,17 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// html?
if ((ext_chg != 0) ? (ishtml_ext(ext) == 1) : (ishtml(opt, fil) == 1)) {
if (opt->savename_type % 100 == 5)
strcatbuff(save, "html/");
strcatbuff(afs->save, "html/");
} else {
char *a = fil + strlen(fil) - 1;
const char *a = fil + strlen(fil) - 1;
while((a > fil) && (*a != '/') && (*a != '.'))
a--;
if (*a != '.')
strcatbuff(save, "other");
strcatbuff(afs->save, "other");
else
strcatbuff(save, a + 1);
strcatbuff(save, "/");
strcatbuff(afs->save, a + 1);
strcatbuff(afs->save, "/");
}
/*strcatbuff(save,a); */
/* add name */
@@ -1156,8 +1155,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
break;
case 99:{ // 'codé' .. c'est un gadget
size_t i;
int j;
char *a;
size_t j;
const char *a;
char C[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-";
int L;
@@ -1173,19 +1172,19 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
}
srand(s);
j = (int) strlen(save);
j = strlen(afs->save);
for(i = 0; i < 8; i++) {
char c = C[(rand() % L)];
save[i + j] = c;
afs->save[i + j] = c;
}
save[i + j] = '\0';
afs->save[i + j] = '\0';
// ajouter extension
a = fil + strlen(fil) - 1;
while((a > fil) && (*a != '/') && (*a != '.'))
a--;
if (*a == '.') {
strcatbuff(save, a); // ajouter
strcatbuff(afs->save, a); // ajouter
}
}
break;
@@ -1204,10 +1203,10 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
break;
}
hts_lowcase(save);
hts_lowcase(afs->save);
if (save[strlen(save) - 1] == '/')
strcatbuff(save, DEFAULT_HTML); // nommer page par défaut!!
if (afs->save[strlen(afs->save) - 1] == '/')
strcatbuff(afs->save, DEFAULT_HTML); // nommer page par défaut!!
}
// vérifier qu'on ne doit pas forcer l'extension
@@ -1225,23 +1224,23 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// de même en cas de manque d'extension on en place une de manière forcée..
// cela évite les /chez/toto et les /chez/toto/index.html incompatibles
if (opt->savename_type != -1 && opt->savename_delayed != 2) {
char *a = save + strlen(save) - 1;
char *a = afs->save + strlen(afs->save) - 1;
while((a > save) && (*a != '.') && (*a != '/'))
while((a > afs->save) && (*a != '.') && (*a != '/'))
a--;
if (*a != '.') { // agh pas de point
//strcatbuff(save,".none"); // a éviter
strcatbuff(save, ".html"); // préférable!
strcatbuff(afs->save, ".html"); // préférable!
hts_log_print(opt, LOG_DEBUG, "Default HTML type set for %s%s => %s",
adr_complete, fil_complete, save);
adr_complete, fil_complete, afs->save);
}
}
// effacer pass au besoin pour les autentifications
// (plus la peine : masqué au début)
/*
{
char* a=jump_identification(save);
if (a!=save) {
char* a = jump_identification(afs->save);
if (a!=afs->save) {
char BIGSTK tempo[HTS_URLMAXSIZE*2];
char *b;
tempo[0]='\0';
@@ -1258,18 +1257,18 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
*/
// éviter les / au début (cause: N100)
if (save[0] == '/') {
if (afs->save[0] == '/') {
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
strcpybuff(tempo, save + 1);
strcpybuff(save, tempo);
strcpybuff(tempo, afs->save + 1);
strcpybuff(afs->save, tempo);
}
/* Cleanup reserved or forbidden characters. */
{
size_t i;
for(i = 0 ; save[i] != '\0' ; i++) {
unsigned char c = (unsigned char) save[i];
for(i = 0 ; afs->save[i] != '\0' ; i++) {
unsigned char c = (unsigned char) afs->save[i];
if (c < 32 // control
|| c == 127 // unwise
|| c == '~' // unix unwise
@@ -1294,13 +1293,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
)
)
{
save[i] = '_';
afs->save[i] = '_';
}
}
}
// éliminer les // (comme ftp://)
cleanDoubleSlash(save);
cleanDoubleSlash(afs->save);
#if HTS_OVERRIDE_DOS_FOLDERS
/* Replace /foo/nul/bar by /foo/nul_/bar */
@@ -1308,9 +1307,9 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
int i = 0;
while(hts_tbdev[i][0]) {
char *a = save;
const char *a = afs->save;
while((a = strstrcase(a, (char *) hts_tbdev[i]))) {
while((a = strstrcase(a, hts_tbdev[i]))) {
switch ((int) a[strlen(hts_tbdev[i])]) {
case '\0':
case '/':
@@ -1319,10 +1318,10 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
tempo[0] = '\0';
strncatbuff(tempo, save, (int) (a - save) + strlen(hts_tbdev[i]));
strncatbuff(tempo, afs->save, (int) (a - afs->save) + strlen(hts_tbdev[i]));
strcatbuff(tempo, "_");
strcatbuff(tempo, a + strlen(hts_tbdev[i]));
strcpybuff(save, tempo);
strcpybuff(afs->save, tempo);
}
break;
}
@@ -1333,7 +1332,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
}
/* Strip ending . or ' ' forbidden on windoz */
cleanEndingSpaceOrDot(save);
cleanEndingSpaceOrDot(afs->save);
#endif
@@ -1341,8 +1340,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
if (opt->savename_83) {
char BIGSTK n83[HTS_URLMAXSIZE * 2];
long_to_83(opt->savename_83, n83, save);
strcpybuff(save, n83);
long_to_83(opt->savename_83, n83, afs->save);
strcpybuff(afs->save, n83);
}
// enforce stricter ISO9660 compliance (bug reported by Steffo Carlsson)
// Level 1 File names are restricted to 8 characters with a 3 character extension,
@@ -1353,12 +1352,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
if (opt->savename_83 > 0) {
char *a, *last;
for(last = save + strlen(save) - 1;
last != save && *last != '/' && *last != '\\' && *last != '.'; last--) ;
for(last = afs->save + strlen(afs->save) - 1;
last != afs->save && *last != '/' && *last != '\\' && *last != '.'; last--) ;
if (*last != '.') {
last = NULL;
}
for(a = save; *a != '\0'; a++) {
for(a = afs->save; *a != '\0'; a++) {
if (*a >= 'a' && *a <= 'z') {
*a -= 'a' - 'A';
} else if (*a == '.') {
@@ -1375,7 +1374,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
}
/* ensure that there is no ../ (potential vulnerability) */
fil_simplifie(save);
fil_simplifie(afs->save);
/* convert name to UTF-8 ? Note: already done while parsing. */
//if (charset != NULL && charset[0] != '\0') {
@@ -1392,17 +1391,17 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
/* callback */
RUN_CALLBACK5(opt, savename, adr_complete, fil_complete, referer_adr,
referer_fil, save);
referer_fil, afs->save);
hts_log_print(opt, LOG_DEBUG, "engine: save-name: local name: %s%s -> %s",
adr, fil, save);
adr, fil, afs->save);
/* Ensure that the MANDATORY "temporary" extension is set */
if (ext_chg_delayed) {
char *ptr;
char *lastDot = NULL;
for(ptr = save; *ptr != 0; ptr++) {
for(ptr = afs->save; *ptr != 0; ptr++) {
if (*ptr == '.') {
lastDot = ptr;
} else if (*ptr == '/' || *ptr == '\\') {
@@ -1410,8 +1409,8 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
}
}
if (lastDot == NULL) {
strcatbuff(save, "." DELAYED_EXT);
} else if (!IS_DELAYED_EXT(save)) {
strcatbuff(afs->save, "." DELAYED_EXT);
} else if (!IS_DELAYED_EXT(afs->save)) {
strcatbuff(lastDot, "." DELAYED_EXT);
}
}
@@ -1424,12 +1423,12 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
#define MIN_LAST_SEG_RESERVE 12
#define MAX_LAST_SEG_RESERVE 24
#define MAX_SEG_LEN 48
if (hts_stringLengthUTF8(save) +
if (hts_stringLengthUTF8(afs->save) +
hts_stringLengthUTF8(StringBuff(opt->path_html_utf8)) >=
HTS_MAX_PATH_LEN) {
// convert to Unicode (much simpler)
size_t wsaveLen;
hts_UCS4 *const wsave = hts_convertUTF8StringToUCS4(save, strlen(save), &wsaveLen);
hts_UCS4 *const wsave = hts_convertUTF8StringToUCS4(afs->save, strlen(afs->save), &wsaveLen);
if (wsave != NULL) {
const size_t parentLen =
hts_stringLengthUTF8(StringBuff(opt->path_html_utf8));
@@ -1484,7 +1483,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// copy final name and cleanup
saveFinal = hts_convertUCS4StringToUTF8(wsave, j);
if (saveFinal != NULL) {
strcpybuff(save, saveFinal);
strcpybuff(afs->save, saveFinal);
free(saveFinal);
} else {
hts_log_print(opt, LOG_ERROR, "Could not revert to UTF-8: %s%s",
@@ -1494,13 +1493,13 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
// log in debug
hts_log_print(opt, LOG_DEBUG, "Too long filename shortened: %s%s => %s",
adr_complete, fil_complete, save);
adr_complete, fil_complete, afs->save);
} else {
hts_log_print(opt, LOG_ERROR, "Could not read UTF-8: %s", save);
hts_log_print(opt, LOG_ERROR, "Could not read UTF-8: %s", afs->save);
}
// Re-check again ending space or dot after cut (see bug #5)
cleanEndingSpaceOrDot(save);
cleanEndingSpaceOrDot(afs->save);
}
#undef MAX_UTF8_SEQ_CHARS
#undef MIN_LAST_SEG_RESERVE
@@ -1511,11 +1510,11 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
strcpybuff(tempo, StringBuff(opt->path_html_utf8));
strcatbuff(tempo, save);
strcpybuff(save, tempo);
strcatbuff(tempo, afs->save);
strcpybuff(afs->save, tempo);
}
// vérifier que le nom n'est pas déja pris...
if (liens != NULL) {
if (opt->liens != NULL) {
int nom_ok;
do {
@@ -1529,20 +1528,20 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
printf("\nStart search\n");
#endif
i = hash_read(hash, save, NULL, HASH_STRUCT_FILENAME); // lecture type 0 (sav)
i = hash_read(hash, afs->save, NULL, HASH_STRUCT_FILENAME); // lecture type 0 (sav)
if (i >= 0) {
int sameAdr = (strfield2(liens[i]->adr, normadr) != 0);
int sameAdr = (strfield2(heap(i)->adr, normadr) != 0);
int sameFil;
// NO - URL hack is only for stripping // and www.
//if (opt->urlhack != 0)
// sameFil = ( strfield2(liens[i]->fil, normfil) != 0);
// sameFil = ( strfield2(heap(i)->fil, normfil) != 0);
//else
sameFil = (strcmp(liens[i]->fil, normfil) == 0);
sameFil = (strcmp(heap(i)->fil, normfil) == 0);
if (sameAdr && sameFil) { // ok c'est le même lien, adresse déja définie
/* Take the existing name not to screw up with cAsE sEnSiTiViTy of Linux/Unix */
if (strcmp(liens[i]->sav, save) != 0) {
strcpybuff(save, liens[i]->sav);
if (strcmp(heap(i)->sav, afs->save) != 0) {
strcpybuff(afs->save, heap(i)->sav);
}
i = 0;
#if DEBUG_SAVENAME
@@ -1550,7 +1549,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
#endif
} else { // utilisé par un AUTRE, changer de nom
char BIGSTK tempo[HTS_URLMAXSIZE * 2];
char *a = save + strlen(save) - 1;
char *a = afs->save + strlen(afs->save) - 1;
char *b;
int n = 2;
char collisionSeparator = ((opt->savename_83 != 2) ? '-' : '_');
@@ -1558,18 +1557,18 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
tempo[0] = '\0';
#if DEBUG_SAVENAME
printf("\nWRONG CASE UNMATCH : \n%s\n%s, REDEFINE\n", liens[i]->fil,
printf("\nWRONG CASE UNMATCH : \n%s\n%s, REDEFINE\n", heap(i)->fil,
fil_complete);
#endif
nom_ok = 0;
i = 0;
while((a > save) && (*a != '.') && (*a != '\\') && (*a != '/'))
while((a > afs->save) && (*a != '.') && (*a != '\\') && (*a != '/'))
a--;
if (*a == '.')
strncatbuff(tempo, save, (int) (a - save));
strncatbuff(tempo, afs->save, a - afs->save);
else
strcatbuff(tempo, save);
strcatbuff(tempo, afs->save);
// tester la présence d'un -xx (ex: index-2.html -> index-3.html)
b = tempo + strlen(tempo) - 1;
@@ -1600,7 +1599,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
if (*a == '.')
strcatbuff(tempo, a);
strcpybuff(save, tempo);
strcpybuff(afs->save, tempo);
//printf("switched: %s\n",save);
@@ -1618,7 +1617,7 @@ int url_savename(char *adr_complete, char *fil_complete, char *save,
}
/* nom avec md5 urilisé partout */
void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
void standard_name(char *b, const char *dot_pos, const char *nom_pos, const char *fil,
int short_ver) {
char md5[32 + 2];
@@ -1626,9 +1625,9 @@ void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
/* Nom */
if (dot_pos) {
if (!short_ver) // Noms longs
strncatbuff(b, nom_pos, (int) (dot_pos - nom_pos));
strncatbuff(b, nom_pos, (dot_pos - nom_pos));
else
strncatbuff(b, nom_pos, min((int) (dot_pos - nom_pos), 8));
strncatbuff(b, nom_pos, min(dot_pos - nom_pos, 8));
} else {
if (!short_ver) // Noms longs
strcatbuff(b, nom_pos);
@@ -1636,7 +1635,7 @@ void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
strncatbuff(b, nom_pos, 8);
}
/* MD5 - 16 bits */
strncatbuff(b, url_md5(md5, fil_complete), 4);
strncatbuff(b, url_md5(md5, fil), 4);
/* Ext */
if (dot_pos) {
strcatbuff(b, ".");
@@ -1657,11 +1656,11 @@ void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
}
/* Petit md5 */
char *url_md5(char *digest, char *fil_complete) {
char *url_md5(char *digest, const char *fil) {
char *a;
digest[0] = '\0';
a = strchr(fil_complete, '?');
a = strchr(fil, '?');
if (a) {
if (strlen(a)) {
char BIGSTK buff[HTS_URLMAXSIZE * 2];
@@ -1676,7 +1675,7 @@ char *url_md5(char *digest, char *fil_complete) {
}
// interne à url_savename: ajoute une chaîne à une autre avec \ -> /
void url_savename_addstr(char *d, char *s) {
void url_savename_addstr(char *d, const char *s) {
int i = (int) strlen(d);
while(*s) {
@@ -1692,12 +1691,12 @@ void url_savename_addstr(char *d, char *s) {
/* "filename" should be at least 64 bytes. */
void url_savename_refname(const char *adr, const char *fil, char *filename) {
unsigned char bindigest[16];
MD5_CTX ctx;
struct MD5Context ctx;
MD5Init(&ctx, 0);
MD5Update(&ctx, (const unsigned char *) adr, strlen(adr));
MD5Update(&ctx, (const unsigned char *) adr, (int) strlen(adr));
MD5Update(&ctx, (const unsigned char *) ",", 1);
MD5Update(&ctx, (const unsigned char *) fil, strlen(fil));
MD5Update(&ctx, (const unsigned char *) fil, (int) strlen(fil));
MD5Final(bindigest, &ctx);
sprintf(filename,
CACHE_REFNAME "/" "%02x%02x%02x%02x%02x%02x%02x%02x"

View File

@@ -80,18 +80,27 @@ typedef struct hash_struct hash_struct;
#define HTS_DEF_FWSTRUCT_lien_back
typedef struct lien_back lien_back;
#endif
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
#define HTS_DEF_FWSTRUCT_lien_adrfil
typedef struct lien_adrfil lien_adrfil;
#endif
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
typedef struct lien_adrfilsave lien_adrfilsave;
#endif
// note: 'headers' can either be null, or incomplete (only r member filled)
int url_savename(char *adr_complete, char *fil_complete, char *save,
char *former_adr, char *former_fil, char *referer_adr,
char *referer_fil, httrackp * opt, lien_url ** liens,
int lien_tot, struct_back * sback, cache_back * cache,
int url_savename(lien_adrfilsave *const afs,
lien_adrfil *const former,
const char *referer_adr, const char *referer_fil,
httrackp * opt, struct_back * sback, cache_back * cache,
hash_struct * hash, int ptr, int numero_passe,
const lien_back * headers);
void standard_name(char *b, char *dot_pos, char *nom_pos, char *fil_complete,
void standard_name(char *b, const char *dot_pos, const char *nom_pos,
const char *fil_complete,
int short_ver);
void url_savename_addstr(char *d, char *s);
char *url_md5(char *digest_buffer, char *fil_complete);
void url_savename_addstr(char *d, const char *s);
char *url_md5(char *digest_buffer, const char *fil_complete);
void url_savename_refname(const char *adr, const char *fil, char *filename);
char *url_savename_refname_fullpath(httrackp * opt, const char *adr,
const char *fil);

View File

@@ -38,13 +38,17 @@ Please visit our Website: http://www.httrack.com
/* basic net definitions */
#include "htsglobal.h"
#include "htsbasenet.h"
#include "htssafe.h"
#include <string.h>
#include <ctype.h>
#ifdef _WIN32
// pour read
#include <io.h>
// pour FindFirstFile
#include <winbase.h>
typedef USHORT in_port_t;
typedef ADDRESS_FAMILY sa_family_t;
#else
//typedef int T_SOC;
#define INVALID_SOCKET -1
@@ -70,87 +74,16 @@ typedef unsigned long in_addr_t;
#endif
#endif
/*
** ipV4 **
*/
#if HTS_INET6==0
/* Ipv4 structures */
typedef struct in_addr INaddr;
/* This should handle all cases */
#ifndef HTS_DEF_FWSTRUCT_SOCaddr
#define HTS_DEF_FWSTRUCT_SOCaddr
typedef struct SOCaddr SOCaddr;
#ifdef __cplusplus
extern "C" {
#endif
struct SOCaddr {
union {
struct sockaddr_in in;
struct sockaddr sa;
unsigned char v4data[4];
unsigned char v6data[16];
unsigned char pad[128];
} m_addr;
};
/* Ipv4 structure members */
#define SOCaddr_sinaddr(server) ((server).m_addr.in.sin_addr)
#define SOCaddr_sinfamily(server) ((server).m_addr.in.sin_family)
#define SOCaddr_sinport(server) ((server).m_addr.in.sin_port)
/* AF_xx */
#define AFinet AF_INET
/* Set port to sockaddr structure */
#define SOCaddr_initport(server, port) do { \
SOCaddr_sinport(server) = htons((unsigned short int) (port)); \
} while(0)
#define SOCaddr_initany(server, server_len) do { \
SOCaddr_sinfamily(server) = AF_INET; \
memset(&SOCaddr_sinaddr(server), 0, sizeof(struct sockaddr_in)); \
server_len=sizeof(struct sockaddr_in); \
} while(0)
/* Copy sockaddr to another one */
#define SOCaddr_copyaddr(server, server_len, hpaddr, hpsize) do { \
if (hpsize == sizeof(struct sockaddr_in)) { \
server_len=sizeof(struct sockaddr_in); \
SOCaddr_sinfamily(server) = (*(struct sockaddr_in*)(hpaddr)).sin_family; \
SOCaddr_sinport(server) = (*(struct sockaddr_in*)(hpaddr)).sin_port; \
memcpy(&SOCaddr_sinaddr(server), &(*(struct sockaddr_in*)(hpaddr)).sin_addr, sizeof(SOCaddr_sinaddr(server))); \
} else if (hpsize == 4) {\
server_len=sizeof(struct sockaddr_in); \
SOCaddr_sinfamily(server) = AF_INET; \
SOCaddr_sinport(server) = 0; \
memcpy(&SOCaddr_sinaddr(server), (hpaddr), sizeof(SOCaddr_sinaddr(server))); \
} else if ((hpsize > 0) && (hpsize <= sizeof(server))) { \
server_len=hpsize; \
memcpy(&(server), hpaddr, hpsize); \
} else { \
server_len=0; \
} \
} while(0)
/* Get dotted address */
#define SOCaddr_inetntoa(namebuf, namebuflen, ss, sslen) do { \
char* dot = (char*) inet_ntoa(SOCaddr_sinaddr(ss)); \
(namebuf)[0]='\0'; \
if (dot) { \
strcpy(namebuf, dot); \
} \
} while(0)
/* Get protocol ID */
#define SOCaddr_getproto(ss, sslen) ('1')
/*
** ipV6 **
*/
#else
/* Ipv4 structures */
#if HTS_INET6 != 0
typedef struct in6_addr INaddr;
#else
typedef struct in_addr INaddr;
#endif
/* This should handle all cases */
#ifndef HTS_DEF_FWSTRUCT_SOCaddr
@@ -159,117 +92,173 @@ typedef struct SOCaddr SOCaddr;
#endif
struct SOCaddr {
union {
struct sockaddr_in6 in6;
struct sockaddr_in in;
/* Generic version, for network functions such as getnameinfo() */
struct sockaddr sa;
unsigned char v4data[4];
unsigned char v6data[16];
unsigned char pad[128];
/* IPv4 */
struct sockaddr_in in;
#if HTS_INET6 != 0
/* IPv6 */
struct sockaddr_in6 in6;
#endif
} m_addr;
};
/* Ipv4 structure members */
#define SOCaddr_sinaddr(server) ((server).m_addr.in6.sin6_addr)
#define SOCaddr_sinfamily(server) ((server).m_addr.in6.sin6_family)
#define SOCaddr_sinport(server) ((server).m_addr.in6.sin6_port)
#define SOCaddr_sinflowinfo(server) ((server).m_addr.in6.sin6_flowinfo)
/* #define SOCaddr_sinscopeid(a) ((a).m_addr.in6.sin6_scope_id) */
static HTS_INLINE HTS_UNUSED in_port_t* SOCaddr_sinport_(SOCaddr *const addr,
const char *file, const int line) {
assertf_(addr != NULL, file, line);
switch(addr->m_addr.sa.sa_family) {
case AF_INET:
return &addr->m_addr.in.sin_port;
break;
#if HTS_INET6 != 0
case AF_INET6:
return &addr->m_addr.in6.sin6_port;
break;
#endif
default:
assertf_(! "invalid structure", file, line);
return 0;
break;
}
}
static HTS_INLINE HTS_UNUSED socklen_t SOCaddr_size_(const SOCaddr*const addr,
const char *file, const int line) {
assertf_(addr != NULL, file, line);
switch(addr->m_addr.sa.sa_family) {
case AF_INET:
return sizeof(addr->m_addr.in);
break;
#if HTS_INET6 != 0
case AF_INET6:
return sizeof(addr->m_addr.in6);
break;
#endif
default:
return 0;
break;
}
}
static HTS_INLINE HTS_UNUSED void SOCaddr_clear_(SOCaddr*const addr,
const char *file, const int line) {
assertf_(addr != NULL, file, line);
addr->m_addr.sa.sa_family = AF_UNSPEC;
}
/* Ipv4/6 structure members */
#define SOCaddr_sinfamily(server) ((server).m_addr.sa.sa_family)
#define SOCaddr_sinport(server) (*SOCaddr_sinport_(&(server), __FILE__, __LINE__))
#define SOCaddr_size(server) (SOCaddr_size_(&(server), __FILE__, __LINE__))
#define SOCaddr_is_valid(server) (SOCaddr_size_(&(server), __FILE__, __LINE__) != 0 )
#define SOCaddr_clear(server) SOCaddr_clear_(&(server), __FILE__, __LINE__)
#define SOCaddr_sockaddr(server) ((server).m_addr.sa)
#define SOCaddr_capacity(server) sizeof((server).m_addr)
/* AF_xx */
#if HTS_INET6 != 0
#define AFinet AF_INET6
#else
#define AFinet AF_INET
#endif
/* Set port to sockaddr structure */
#define SOCaddr_initport(server, port) do { \
SOCaddr_sinport(server) = htons((unsigned short int) (port)); \
SOCaddr_sinport(server) = htons((in_port_t) (port)); \
} while(0)
#define SOCaddr_initany(server, server_len) do { \
SOCaddr_sinfamily(server) = AF_INET; \
memset(&SOCaddr_sinaddr(server), 0, sizeof(struct sockaddr_in)); \
server_len=sizeof(struct sockaddr_in); \
static HTS_INLINE HTS_UNUSED socklen_t SOCaddr_initany_(SOCaddr*const addr,
const char *file, const int line) {
assertf_(addr != NULL, file, line);
memset(&addr->m_addr.in, 0, sizeof(addr->m_addr.in));
addr->m_addr.in.sin_family = AF_INET;
return SOCaddr_size_(addr, file, line);
}
#define SOCaddr_initany(server) do { \
SOCaddr_initany_(&(server), __FILE__, __LINE__); \
} while(0)
/*
Copy sockaddr to SOCaddr
Note;
The '> sizeof(struct sockaddr_in6)' hack if for the VC6 structure which
lacks the scope id
Copy sockaddr_in/sockaddr_in6/raw IPv4/raw IPv6 to our opaque SOCaddr
*/
static HTS_UNUSED socklen_t SOCaddr_copyaddr_(SOCaddr*const server,
const void *data, const size_t data_size,
const char *file, const int line) {
assertf_(server != NULL, file, line);
assertf_(data != NULL, file, line);
if (data_size == sizeof(struct sockaddr_in)) {
memcpy(&server->m_addr.in, data, sizeof(struct sockaddr_in));
assertf_(server->m_addr.sa.sa_family == AF_INET, file, line);
#if HTS_INET6 != 0
} else if (data_size == sizeof(struct sockaddr_in6)) {
memcpy(&server->m_addr.in6, data, sizeof(struct sockaddr_in6));
assertf_(server->m_addr.sa.sa_family == AF_INET6, file, line);
#endif
} else if (data_size == 4) {
memset(&server->m_addr.in, 0, sizeof(server->m_addr.in));
server->m_addr.in.sin_family = AF_INET;
server->m_addr.in.sin_port = 0;
memcpy(&server->m_addr.in.sin_addr, data, 4);
#if HTS_INET6 != 0
} else if (data_size == 16) {
memset(&server->m_addr.in6, 0, sizeof(server->m_addr.in6));
server->m_addr.in6.sin6_family = AF_INET6;
server->m_addr.in6.sin6_port = 0;
memcpy(&server->m_addr.in6.sin6_addr, data, 16);
#endif
} else {
server->m_addr.in.sin_family = AF_INET;
}
return SOCaddr_size_(server, file, line);
}
#define SOCaddr_copyaddr(server, server_len, hpaddr, hpsize) do { \
if (hpsize == sizeof(struct sockaddr_in6)) { \
server_len=sizeof(struct sockaddr_in6); \
SOCaddr_sinfamily(server) = (*(struct sockaddr_in6*)(hpaddr)).sin6_family; \
SOCaddr_sinport(server) = (*(struct sockaddr_in6*)(hpaddr)).sin6_port; \
SOCaddr_sinflowinfo(server) = (*(struct sockaddr_in6*)(hpaddr)).sin6_flowinfo; \
memcpy(&SOCaddr_sinaddr(server), &(*(struct sockaddr_in6*)(hpaddr)).sin6_addr, sizeof(SOCaddr_sinaddr(server))); \
} else if (hpsize > sizeof(struct sockaddr_in6)) { \
server_len=hpsize; \
SOCaddr_sinport(server) = 0; \
memcpy(&(server), hpaddr, hpsize); \
} else if (hpsize == sizeof(struct sockaddr_in)) { \
server_len=sizeof(struct sockaddr_in); \
(*(struct sockaddr_in*)(&server)).sin_family = AF_INET; \
SOCaddr_sinport(server) = (*(struct sockaddr_in*)(hpaddr)).sin_port; \
memcpy(&(*(struct sockaddr_in*)&(server)).sin_addr, &(*(struct sockaddr_in*)(hpaddr)).sin_addr, sizeof((*(struct sockaddr_in*)(hpaddr)).sin_addr)); \
} else if (hpsize == 4) {\
server_len=sizeof(struct sockaddr_in); \
(*(struct sockaddr_in*)(&server)).sin_family = AF_INET; \
SOCaddr_sinport(server) = 0; \
memcpy(&(*(struct sockaddr_in*)&(server)).sin_addr, hpaddr, 4); \
} else if (hpsize == 16) {\
server_len=sizeof(struct sockaddr_in6); \
SOCaddr_sinfamily(server) = AF_INET6; \
SOCaddr_sinport(server) = 0; \
memcpy(&SOCaddr_sinaddr(server), (hpaddr), 16); \
} else if ((hpsize > 0) && (hpsize <= sizeof(server))) { \
server_len=hpsize; \
memcpy(&(server), hpaddr, hpsize); \
} else { \
server_len=0; \
} \
server_len = (int) SOCaddr_copyaddr_(&(server), hpaddr, hpsize, __FILE__, __LINE__); \
} while(0)
#define SOCaddr_copyaddr2(server, hpaddr, hpsize) do { \
(void) SOCaddr_copyaddr_(&(server), hpaddr, hpsize, __FILE__, __LINE__); \
} while(0)
#define SOCaddr_copy_SOCaddr(dest, src) do { \
SOCaddr_copyaddr_(&(dest), &(src).m_addr.sa, SOCaddr_size(src), __FILE__, __LINE__); \
} while(0)
/* Get dotted address */
#define SOCaddr_inetntoa(namebuf, namebuflen, ss, sslen) do { \
char *pos_; \
(namebuf)[0]='\0'; \
getnameinfo((struct sockaddr *)&(ss), sslen, \
(namebuf), namebuflen, NULL, 0, NI_NUMERICHOST); \
/* remove scope id */ \
pos_ = strrchr(namebuf, '%'); \
if (pos_ != NULL) { \
*pos_ = '\0'; \
} \
} while(0)
static HTS_UNUSED void SOCaddr_inetntoa_(char *namebuf, size_t namebuflen,
SOCaddr *const ss,
const char *file, const int line) {
assertf_(namebuf != NULL, file, line);
assertf_(ss != NULL, file, line);
if (getnameinfo(&ss->m_addr.sa, sizeof(ss->m_addr),
namebuf, namebuflen,
NULL, 0,
NI_NUMERICHOST) == 0) {
/* remove scope id(s) */
char *const pos = strchr(namebuf, '%');
if (pos != NULL) {
*pos = '\0';
}
} else {
namebuf[0] = '\0';
}
}
#define SOCaddr_inetntoa(namebuf, namebuflen, ss) \
SOCaddr_inetntoa_(namebuf, namebuflen, &(ss), __FILE__, __LINE__)
/* Get protocol ID */
#define SOCaddr_getproto(ss, sslen) ((sslen == sizeof(struct sockaddr_in6))?('2'):('1'))
#endif
#define SOCaddr_getproto(ss) ( SOCaddr_size(ss) == sizeof(struct sockaddr_in) ? '1' : '2')
/* Socket length type */
typedef socklen_t SOClen;
/* Buffer structure to copy various hostent structures */
#ifndef HTS_DEF_FWSTRUCT_t_fullhostent
#define HTS_DEF_FWSTRUCT_t_fullhostent
typedef struct t_fullhostent t_fullhostent;
#ifdef __cplusplus
}
#endif
struct t_fullhostent {
t_hostent hp;
char *list[2];
char addr[HTS_MAXADDRLEN]; /* various struct sockaddr structures */
unsigned int addr_maxlen;
};
/* Initialize a t_fullhostent structure */
#define fullhostent_init(h) do { \
memset((h), 0, sizeof(t_fullhostent)); \
(h)->hp.h_addr_list = (char **) & ((h)->list); \
(h)->list[0] = (char *) & ((h)->addr); \
(h)->list[1] = NULL; \
(h)->addr_maxlen = HTS_MAXADDRLEN; \
} while(0)
#endif

View File

@@ -35,7 +35,13 @@ Please visit our Website: http://www.httrack.com
#define HTTRACK_DEFOPT
#include <stdio.h>
#include "htsglobal.h"
#include "htsnet.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Forward definitions */
#ifndef HTS_DEF_FWSTRUCT_t_hts_htmlcheck_callbacks
@@ -199,9 +205,9 @@ typedef struct htsmutex_s htsmutex_s, *htsmutex;
#endif
/* Hashtables */
#ifndef HTS_DEF_FWSTRUCT_struct_inthash
#define HTS_DEF_FWSTRUCT_struct_inthash
typedef struct struct_inthash struct_inthash, *inthash;
#ifndef HTS_DEF_FWSTRUCT_struct_coucal
#define HTS_DEF_FWSTRUCT_struct_coucal
typedef struct struct_coucal struct_coucal, *coucal;
#endif
/* Structure état du miroir */
@@ -245,6 +251,7 @@ struct htsoptstate {
char HTbuff[2048];
unsigned int debug_state;
unsigned int tmpnameid; /* 3.41 */
int is_ended; /* 3.48-14 */
};
/* Library handles */
@@ -274,6 +281,11 @@ typedef enum htsparsejava_flags {
HTSPARSE_NO_AGGRESSIVE = 8 // don't aggressively parse .js or .java
} htsparsejava_flags;
#ifndef HTS_DEF_FWSTRUCT_lien_buffers
#define HTS_DEF_FWSTRUCT_lien_buffers
typedef struct lien_buffers lien_buffers;
#endif
// paramètres httrack (options)
#ifndef HTS_DEF_FWSTRUCT_httrackp
#define HTS_DEF_FWSTRUCT_httrackp
@@ -362,7 +374,9 @@ struct httrackp {
String urllist; // fichier liste de filtres à inclure
htsfilters filters; // contient les pointeurs pour les filtres
hash_struct *hash; // hash structure
lien_url **liens; // liens
lien_url **liens; // links
int lien_tot; // top index of "links" heap (always out-of-range)
lien_buffers *liensbuf; // links buffers
robots_wizard *robotsptr; // robots ptr
String lang_iso; // en, fr ..
String accept; // Accept:
@@ -374,7 +388,7 @@ struct httrackp {
int maxlink; // nombre max de liens
int maxfilter; // nombre max de filtres
//
char *exec; // adresse du nom de l'éxecutable
const char *exec; // adresse du nom de l'éxecutable
//
int quiet; // poser des questions autres que wizard?
int keyboard; // vérifier stdin
@@ -432,4 +446,162 @@ struct hts_stat_struct {
TStamp last_request; // last request issued
};
// structure pour paramètres supplémentaires lors de la requête
#ifndef HTS_DEF_FWSTRUCT_htsrequest_proxy
#define HTS_DEF_FWSTRUCT_htsrequest_proxy
typedef struct htsrequest_proxy htsrequest_proxy;
#endif
struct htsrequest_proxy {
int active;
const char* name;
int port;
const char* bindhost; // bind this host
};
#ifndef HTS_DEF_FWSTRUCT_htsrequest
#define HTS_DEF_FWSTRUCT_htsrequest
typedef struct htsrequest htsrequest;
#endif
struct htsrequest {
short int user_agent_send; // user agent (ex: httrack/1.0 [sun])
short int http11; // l'en tête peut (doit) être signé HTTP/1.1 et non HTTP/1.0
short int nokeepalive; // pas de keep-alive
short int range_used; // Range utilisé
short int nocompression; // Pas de compression
short int flush_garbage; // recycled
const char* user_agent;
const char* referer;
const char* from;
const char* lang_iso;
const char* accept;
const char* headers;
htsrequest_proxy proxy; // proxy
};
// structure pour retour d'une connexion/prise d'en tête
#ifndef HTS_DEF_FWSTRUCT_htsblk
#define HTS_DEF_FWSTRUCT_htsblk
typedef struct htsblk htsblk;
#endif
struct htsblk {
int statuscode; // status-code, -1=erreur, 200=OK,201=..etc (cf RFC1945)
short int notmodified; // page ou fichier NON modifié (transféré)
short int is_write; // sortie sur disque (out) ou en mémoire (adr)
short int is_chunk; // mode chunk
short int compressed; // compressé?
short int empty; // vide?
short int keep_alive; // Keep-Alive?
short int keep_alive_trailers; // ..with trailers extension
int keep_alive_t; // KA timeout
int keep_alive_max; // KA number of requests
char *adr; // adresse du bloc de mémoire, NULL=vide
char *headers; // adresse des en têtes si présents
FILE *out; // écriture directe sur disque (si is_write=1)
LLint size; // taille fichier
char msg[80]; // message éventuel si échec ("\0"=non précisé)
char contenttype[64]; // content-type ("text/html" par exemple)
char charset[64]; // charset ("iso-8859-1" par exemple)
char contentencoding[64]; // content-encoding ("gzip" par exemple)
char *location; // on copie dedans éventuellement la véritable 'location'
LLint totalsize; // taille totale à télécharger (-1=inconnue)
short int is_file; // ce n'est pas une socket mais un descripteur de fichier si 1
T_SOC soc; // ID socket
SOCaddr address; // IP address
int address_size; // IP address structure length (unused internally)
FILE *fp; // fichier pour file://
#if HTS_USEOPENSSL
short int ssl; // is this connection a SSL one? (https)
// BIO* ssl_soc; // SSL structure
SSL *ssl_con; // connection structure
#endif
char lastmodified[64]; // Last-Modified
char etag[256]; // Etag
char cdispo[256]; // Content-Disposition coupé
LLint crange; // Content-Range
LLint crange_start; // Content-Range
LLint crange_end; // Content-Range
int debugid; // debug connection
/* */
htsrequest req; // paramètres pour la requête
/*char digest[32+2]; // digest md5 généré par le moteur ("" si non généré) */
};
// structure d'un lien
#ifndef HTS_DEF_FWSTRUCT_lien_url
#define HTS_DEF_FWSTRUCT_lien_url
typedef struct lien_url lien_url;
#endif
struct lien_url {
char *adr; // adresse
char *fil; // nom du fichier distant
char *sav; // nom à sauver sur disque (avec chemin éventuel)
char *cod; // chemin codebase éventuel si classe java
char *former_adr; // adresse initiale (avant éventuel moved), peut être nulle
char *former_fil; // nom du fichier distant initial (avant éventuel moved), peut être nul
int premier; // pointeur sur le premier lien qui a donné lieu aux autres liens du domaine
int precedent; // pointeur sur le lien qui a donné lieu à ce lien précis
int depth; // profondeur autorisée lien ; >0 forte 0=faible
int pass2; // traiter après les autres, seconde passe. si == -1, lien traité en background
char link_import; // lien importé à la suite d'un moved - ne pas appliquer les règles classiques up/down
//int moved; // pointeur sur moved
int retry; // nombre de retry restants
int testmode; // mode test uniquement, envoyer juste un head!
};
// chargement de fichiers en 'arrière plan'
#ifndef HTS_DEF_FWSTRUCT_lien_back
#define HTS_DEF_FWSTRUCT_lien_back
typedef struct lien_back lien_back;
#endif
struct lien_back {
#if DEBUG_CHECKINT
char magic;
#endif
char url_adr[HTS_URLMAXSIZE * 2]; // adresse
char url_fil[HTS_URLMAXSIZE * 2]; // nom du fichier distant
char url_sav[HTS_URLMAXSIZE * 2]; // nom à sauver sur disque (avec chemin éventuel)
char referer_adr[HTS_URLMAXSIZE * 2]; // adresse host page referer
char referer_fil[HTS_URLMAXSIZE * 2]; // fichier page referer
char location_buffer[HTS_URLMAXSIZE * 2]; // "location" en cas de "moved" (302,..)
char *tmpfile; // nom à sauver temporairement (compressé)
char tmpfile_buffer[HTS_URLMAXSIZE * 2]; // buffer pour le nom à sauver temporairement
char send_too[1024]; // données à envoyer en même temps que le header
int status; // status (-1=non utilisé, 0: prêt, >0: opération en cours)
int locked; // locked (to be used soon)
int testmode; // mode de test
int timeout; // gérer des timeouts? (!=0 : nombre de secondes)
TStamp timeout_refresh; // si oui, time refresh
int rateout; // timeout refresh? (!=0 : taux minimum toléré en octets/s)
TStamp rateout_time; // si oui, date de départ
LLint maxfile_nonhtml; // taille max d'un fichier non html
LLint maxfile_html; // idem pour un ficheir html
htsblk r; // structure htsblk de chaque objet en background
int is_update; // mode update
int head_request; // requète HEAD?
LLint range_req_size; // range utilisé
TStamp ka_time_start; // refresh time for KA
//
int http11; // L'en tête doit être signé HTTP/1.1 et non HTTP/1.0
int is_chunk; // chunk?
char *chunk_adr; // adresse chunk en cours de chargement
LLint chunk_size; // taille chunk en cours de chargement
LLint chunk_blocksize; // taille data declaree par le chunk
LLint compressed_size; // taille compressés (stats uniquement)
//
//int links_index; // to access liens[links_index]
//
char info[256]; // éventuel status pour le ftp
int stop_ftp; // flag stop pour ftp
int finalized; // finalized (optim memory)
int early_add; // was added before link heap saw it
#if DEBUG_CHECKINT
char magic2;
#endif
};
#ifdef __cplusplus
}
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -66,7 +66,7 @@ struct htsmoduleStructExtended {
char ***filters_;
robots_wizard *robots_;
hash_struct *hash_;
int *lien_max_;
//int *lien_max_;
/* Base & codebase */
char *base;
@@ -135,14 +135,13 @@ int hts_mirror_wait_for_next_file(htsmoduleStruct * str,
to be ready for naming, having its header MIME type
If the final URL is to be forbidden, sets 'forbidden_url' to the corresponding value
*/
int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
char *parent_adr, char *parent_fil, char *former_adr,
char *former_fil, int *forbidden_url);
int hts_wait_delayed(htsmoduleStruct * str, lien_adrfilsave *afs,
char *parent_adr, char *parent_fil, lien_adrfil *former,
int *forbidden_url);
/* Context state */
#define ENGINE_DEFINE_CONTEXT_BASE() \
lien_url** const liens HTS_UNUSED = (lien_url**) str->liens; \
httrackp* const opt HTS_UNUSED = (httrackp*) str->opt; \
struct_back* const sback HTS_UNUSED = (struct_back*) str->sback; \
lien_back* const back HTS_UNUSED = sback->lnk; \
@@ -150,28 +149,18 @@ int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
cache_back* const cache HTS_UNUSED = (cache_back*) str->cache; \
hash_struct* const hashptr HTS_UNUSED = (hash_struct*) str->hashptr; \
const int numero_passe HTS_UNUSED = str->numero_passe; \
const int add_tab_alloc HTS_UNUSED = str->add_tab_alloc; \
/* variable */ \
int lien_tot = *str->lien_tot_; \
int ptr = *str->ptr_; \
size_t lien_size = *str->lien_size_; \
char* lien_buffer = *str->lien_buffer_
int ptr = *str->ptr_
#define ENGINE_SET_CONTEXT_BASE() \
lien_tot = *str->lien_tot_; \
ptr = *str->ptr_; \
lien_size = *str->lien_size_; \
lien_buffer = *str->lien_buffer_
ptr = *str->ptr_
#define ENGINE_LOAD_CONTEXT_BASE() \
ENGINE_DEFINE_CONTEXT_BASE()
#define ENGINE_SAVE_CONTEXT_BASE() \
/* Apply changes */ \
* str->lien_tot_ = lien_tot; \
* str->ptr_ = ptr; \
* str->lien_size_ = lien_size; \
* str->lien_buffer_ = lien_buffer
* str->ptr_ = ptr
#define WAIT_FOR_AVAILABLE_SOCKET() do { \
int prev = opt->state._hts_in_html_parsing; \
@@ -186,10 +175,10 @@ int hts_wait_delayed(htsmoduleStruct * str, char *adr, char *fil, char *save,
HTS_STAT.stat_errors=fspc(opt,NULL,"error"); \
HTS_STAT.stat_warnings=fspc(opt,NULL,"warning"); \
HTS_STAT.stat_infos=fspc(opt,NULL,"info"); \
HTS_STAT.nbk=backlinks_done(sback,liens,lien_tot,ptr); \
HTS_STAT.nbk=backlinks_done(sback,opt->liens,opt->lien_tot,ptr); \
HTS_STAT.nb=back_transferred(HTS_STAT.stat_bytes,sback); \
/* Check */ \
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count, -1,ptr,lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
if (!RUN_CALLBACK7(opt, loop, sback->lnk, sback->count, -1,ptr,opt->lien_tot,(int) (time_local()-HTS_STAT.stat_timestart),&HTS_STAT)) { \
return -1; \
} \
} \

View File

@@ -45,7 +45,7 @@ Please visit our Website: http://www.httrack.com
// -- robots --
// fil="" : vérifier si règle déja enregistrée
int checkrobots(robots_wizard * robots, char *adr, char *fil) {
int checkrobots(robots_wizard * robots, const char *adr, const char *fil) {
while(robots) {
if (strfield2(robots->adr, adr)) {
if (fil[0]) {
@@ -74,7 +74,7 @@ int checkrobots(robots_wizard * robots, char *adr, char *fil) {
}
return 0;
}
int checkrobots_set(robots_wizard * robots, char *adr, char *data) {
int checkrobots_set(robots_wizard * robots, const char *adr, const char *data) {
if (((int) strlen(adr)) >= sizeof(robots->adr) - 2)
return 0;
if (((int) strlen(data)) >= sizeof(robots->token) - 2)

View File

@@ -47,9 +47,9 @@ struct robots_wizard {
/* Library internal definictions */
#ifdef HTS_INTERNAL_BYTECODE
int checkrobots(robots_wizard * robots, char *adr, char *fil);
int checkrobots(robots_wizard * robots, const char *adr, const char *fil);
void checkrobots_free(robots_wizard * robots);
int checkrobots_set(robots_wizard * robots, char *adr, char *data);
int checkrobots_set(robots_wizard * robots, const char *adr, const char *data);
#endif
#endif

View File

@@ -33,19 +33,38 @@ Please visit our Website: http://www.httrack.com
#ifndef HTSSAFE_DEFH
#define HTSSAFE_DEFH
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "htsglobal.h"
/**
* Optional user-defined callback upon fatal error.
*/
typedef void (*htsErrorCallback) (const char *msg, const char *file, int line);
/**
* Emergency logging.
* Default is to use libhttrack one.
*/
#ifndef HTSSAFE_ABORT_FUNCTION
HTSEXT_API htsErrorCallback htsCallbackErr;
#define HTSSAFE_ABORT_FUNCTION(A,B,C) do { if (htsCallbackErr != NULL) { htsCallbackErr(A,B,C); } } while(0)
#if (!defined(HTSSAFE_ABORT_FUNCTION) && defined(LIBHTTRACK_EXPORTS))
/** Assert error callback. **/
#ifndef HTS_DEF_FWSTRUCT_htsErrorCallback
#define HTS_DEF_FWSTRUCT_htsErrorCallback
typedef void (*htsErrorCallback) (const char *msg, const char *file, int line);
#ifdef __cplusplus
extern "C" {
#endif
HTSEXT_API htsErrorCallback hts_get_error_callback(void);
#ifdef __cplusplus
}
#endif
#endif
#define HTSSAFE_ABORT_FUNCTION(A,B,C) do { \
htsErrorCallback callback = hts_get_error_callback(); \
if (callback != NULL) { \
callback(A,B,C); \
} \
} while(0)
#endif
/**
@@ -61,7 +80,7 @@ HTSEXT_API htsErrorCallback htsCallbackErr;
/**
* Fatal assertion check.
*/
#define assertf_(exp, file, line) assertf__(exp, #exp, __FILE__, __LINE__)
#define assertf_(exp, file, line) assertf__(exp, #exp, file, line)
/**
* Fatal assertion check.
@@ -74,15 +93,17 @@ static HTS_UNUSED void log_abort_(const char *msg, const char *file, int line) {
}
static HTS_UNUSED void abortf_(const char *exp, const char *file, int line) {
#ifdef HTSSAFE_ABORT_FUNCTION
HTSSAFE_ABORT_FUNCTION(exp, file, line);
#endif
log_abort_(exp, file, line);
abort();
}
/**
* Check wether 'VAR' is of type char[].
* Check whether 'VAR' is of type char[].
*/
#ifdef __GNUC__
#if (defined(__GNUC__) && !defined(__cplusplus))
/* Note: char[] and const char[] are compatible */
#define HTS_IS_CHAR_BUFFER(VAR) ( __builtin_types_compatible_p ( typeof (VAR), char[] ) )
#else
@@ -91,6 +112,17 @@ static HTS_UNUSED void abortf_(const char *exp, const char *file, int line) {
#endif
#define HTS_IS_NOT_CHAR_BUFFER(VAR) ( ! HTS_IS_CHAR_BUFFER(VAR) )
/* Compile-time checks. */
static HTS_UNUSED void htssafe_compile_time_check_(void) {
char array[32];
char *pointer = array;
char check_array[HTS_IS_CHAR_BUFFER(array) ? 1 : -1];
char check_pointer[HTS_IS_CHAR_BUFFER(pointer) ? -1 : 1];
(void) pointer;
(void) check_array;
(void) check_pointer;
}
/**
* Append at most N characters from "B" to "A".
* If "A" is a char[] variable whose size is not sizeof(char*), then the size
@@ -103,6 +135,18 @@ static HTS_UNUSED void abortf_(const char *exp, const char *file, int line) {
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), N, \
"overflow while appending '" #B "' to '"#A"'", __FILE__, __LINE__) )
/**
* Append characters of "B" to "A".
* If "A" is a char[] variable whose size is not sizeof(char*), then the size
* is assumed to be the capacity of this array.
*/
#define strcatbuff(A, B) \
( HTS_IS_NOT_CHAR_BUFFER(A) \
? strcat(A, B) \
: strncat_safe_(A, sizeof(A), B, \
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), (size_t) -1, \
"overflow while appending '" #B "' to '"#A"'", __FILE__, __LINE__) )
/**
* Copy characters from "B" to "A".
* If "A" is a char[] variable whose size is not sizeof(char*), then the size
@@ -115,28 +159,37 @@ static HTS_UNUSED void abortf_(const char *exp, const char *file, int line) {
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), \
"overflow while copying '" #B "' to '"#A"'", __FILE__, __LINE__) )
/* note: "size_t is an unsigned integral type" */
/**
* Append characters of "B" to "A".
* If "A" is a char[] variable whose size is not sizeof(char*), then the size
* is assumed to be the capacity of this array.
*/
#define strcatbuff(A, B) strncatbuff(A, B, (size_t) -1)
/**
* Append characters of "B" to "A", "A" having a maximum capacity of "S".
*/
#define strlcatbuff(A, B, S) \
strncat_safe_(A, S, B, \
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), (size_t) -1, \
"overflow while appending '" #B "' to '"#A"'", __FILE__, __LINE__)
/**
* Copy characters of "B" to "A", "A" having a maximum capacity of "S".
*/
#define strlcpybuff(A, B, S) \
strcpy_safe_(A, S, B, \
HTS_IS_NOT_CHAR_BUFFER(B) ? (size_t) -1 : sizeof(B), \
"overflow while copying '" #B "' to '"#A"'", __FILE__, __LINE__)
/** strnlen replacement (autotools). **/
#if ( ! defined(_WIN32) && ! defined(HAVE_STRNLEN) )
static HTS_UNUSED size_t strnlen(const char *s, size_t maxlen) {
size_t i;
for(i = 0 ; i < maxlen && s[i] != '\0' ; i++) ;
return i;
}
#endif
static HTS_INLINE HTS_UNUSED size_t strlen_safe_(const char *source, const size_t sizeof_source,
const char *file, int line) {
size_t size;
assertf_( source != NULL, file, line );
size = strnlen(source, sizeof_source);
size = sizeof_source != (size_t) -1
? strnlen(source, sizeof_source) : strlen(source);
assertf_( size < sizeof_source, file, line );
return size;
}
@@ -147,6 +200,7 @@ static HTS_INLINE HTS_UNUSED char* strncat_safe_(char *const dest, const size_t
const char *exp, const char *file, int line) {
const size_t source_len = strlen_safe_(source, sizeof_source, file, line);
const size_t dest_len = strlen_safe_(dest, sizeof_dest, file, line);
/* note: "size_t is an unsigned integral type" ((size_t) -1 is positive) */
const size_t source_copy = source_len <= n ? source_len : n;
const size_t dest_final_len = dest_len + source_copy;
assertf__(dest_final_len < sizeof_dest, exp, file, line);

View File

@@ -67,21 +67,21 @@ Please visit our Website: http://www.httrack.com
/* Bypass internal definition protection */
#define HTS_INTERNAL_BYTECODE
#include "htsinthash.h"
#include "coucal.h"
#undef HTS_INTERNAL_BYTECODE
int NewLangStrSz = 1024;
inthash NewLangStr = NULL;
coucal NewLangStr = NULL;
int NewLangStrKeysSz = 1024;
inthash NewLangStrKeys = NULL;
coucal NewLangStrKeys = NULL;
int NewLangListSz = 1024;
inthash NewLangList = NULL;
coucal NewLangList = NULL;
/* Language files */
#include "htsserver.h"
char *gethomedir(void);
const char *gethomedir(void);
int commandRunning = 0;
int commandEndRequested = 0;
int commandEnd = 0;
@@ -92,20 +92,30 @@ int commandReturnSet = 0;
httrackp *global_opt = NULL;
static void (*pingFun)(void*) = NULL;
static void* pingFunArg = NULL;
/* Extern */
extern void webhttrack_main(char *cmd);
extern void webhttrack_lock(void);
extern void webhttrack_release(void);
static int is_image(char *file) {
return ((strstr(file, ".gif") != NULL));
static int is_image(const char *file) {
return strstr(file, ".gif") != NULL
|| strstr(file, ".png") != NULL;
}
static int is_text(char *file) {
static int is_text(const char *file) {
return ((strstr(file, ".txt") != NULL));
}
static int is_html(char *file) {
static int is_html(const char *file) {
return ((strstr(file, ".htm") != NULL));
}
static int is_css(const char *file) {
return ((strstr(file, ".css") != NULL));
}
static int is_js(const char *file) {
return ((strstr(file, ".js") != NULL));
}
static void sig_brpipe(int code) {
/* ignore */
@@ -119,16 +129,16 @@ HTS_UNUSED static int linputsoc_t(T_SOC soc, char *s, int max, int timeout);
HTS_UNUSED static int linput(FILE * fp, char *s, int max);
/* Language files */
HTS_UNUSED static int htslang_load(char *limit_to, char *apppath);
HTS_UNUSED static void conv_printf(char *from, char *to);
HTS_UNUSED static int htslang_load(char *limit_to, const char *apppath);
HTS_UNUSED static void conv_printf(const char *from, char *to);
HTS_UNUSED static void LANG_DELETE(void);
HTS_UNUSED static void LANG_INIT(char *path);
HTS_UNUSED static int LANG_T(char *path, int l);
HTS_UNUSED static void LANG_INIT(const char *path);
HTS_UNUSED static int LANG_T(const char *path, int l);
HTS_UNUSED static int QLANG_T(int l);
HTS_UNUSED static char *LANGSEL(char *name);
HTS_UNUSED static char *LANGINTKEY(char *name);
HTS_UNUSED static int LANG_SEARCH(char *path, char *iso);
HTS_UNUSED static int LANG_LIST(char *path, char *buffer);
HTS_UNUSED static const char *LANGSEL(const char *name);
HTS_UNUSED static const char *LANGINTKEY(const char *name);
HTS_UNUSED static int LANG_SEARCH(const char *path, const char *iso);
HTS_UNUSED static int LANG_LIST(const char *path, char *buffer, size_t size);
// URL Link catcher
@@ -162,16 +172,15 @@ T_SOC smallserver_init_std(int *port_prox, char *adr_prox, int defaultPort) {
// 1- Init the URL catcher
// get hostname. return 1 upon success.
static int gethost(const char *hostname, SOCaddr * server, size_t server_size) {
static int gethost(const char *hostname, SOCaddr * server) {
if (hostname != NULL && *hostname != '\0') {
#if HTS_INET6==0
/* ipV4 resolver */
t_hostent *hp = gethostbyname(hostname);
struct hostent *hp = gethostbyname(hostname);
if (hp != NULL) {
if (hp->h_length) {
SOCaddr_copyaddr(*server, server_size, hp->h_addr_list[0],
hp->h_length);
SOCaddr_copyaddr2(*server, hp->h_addr_list[0], hp->h_length);
return 1;
}
}
@@ -187,7 +196,7 @@ static int gethost(const char *hostname, SOCaddr * server, size_t server_size) {
if (getaddrinfo(hostname, NULL, &hints, &res) == 0) {
if (res) {
if ((res->ai_addr) && (res->ai_addrlen)) {
SOCaddr_copyaddr(*server, server_size, res->ai_addr, res->ai_addrlen);
SOCaddr_copyaddr2(*server, res->ai_addr, res->ai_addrlen);
freeaddrinfo(res);
return 1;
}
@@ -204,7 +213,7 @@ static int gethost(const char *hostname, SOCaddr * server, size_t server_size) {
static int my_getlocalhost(char *h_loc, size_t size) {
SOCaddr addr;
strcpy(h_loc, "localhost");
if (gethost(h_loc, &addr, sizeof(addr)) == 1) {
if (gethost(h_loc, &addr) == 1) {
return 0;
}
// come on ...
@@ -220,7 +229,7 @@ static int my_gethostname(char *h_loc, size_t size) {
h_loc[0] = '\0';
if (gethostname(h_loc, (int) size) == 0) { // host name
SOCaddr addr;
if (gethost(h_loc, &addr, sizeof(addr)) == 1) {
if (gethost(h_loc, &addr) == 1) {
return 0;
} else {
return my_getlocalhost(h_loc, size);
@@ -247,54 +256,16 @@ T_SOC smallserver_init(int *port, char *adr) {
if (my_gethostname(h_loc, 256) == 0) { // host name
SOCaddr server;
int server_size = sizeof(server);
/*t_hostent* hp_loc;
t_fullhostent buffer; */
// effacer structure
memset(&server, 0, sizeof(server));
/*if ( (hp_loc=vxgethostbyname(h_loc, &buffer)) ) */
{
// copie adresse
// NO (bind all)
// SOCaddr_copyaddr(server, server_size, hp_loc->h_addr_list[0], hp_loc->h_length);
SOCaddr_initany(server, server_size);
if ((soc =
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
0)) != INVALID_SOCKET) {
SOCaddr_initport(server, *port);
if (bind(soc, (struct sockaddr *) &server, server_size) == 0) {
/*SOClen len;
SOCaddr server2;
len=sizeof(server2); */
// effacer structure
/*memset(&server2, 0, sizeof(server2));
if (getsockname(soc,(struct sockaddr*) &server2,&len) == 0) {
*port=ntohs(SOCaddr_sinport(server)); // récupérer port */
if (listen(soc, 10) >= 0) { // au pif le 10
// SOCaddr_inetntoa(adr, 128, server2, len);
strcpy(adr, h_loc);
} else {
#ifdef _WIN32
closesocket(soc);
#else
close(soc);
#endif
soc = INVALID_SOCKET;
}
/*} else {
#ifdef _WIN32
closesocket(soc);
#else
close(soc);
#endif
soc=INVALID_SOCKET;
} */
SOCaddr_initany(server);
if ((soc =
(T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM,
0)) != INVALID_SOCKET) {
SOCaddr_initport(server, *port);
if (bind(soc, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) {
if (listen(soc, 10) >= 0) {
// SOCaddr_inetntoa(adr, 128, server2);
strcpy(adr, h_loc);
} else {
#ifdef _WIN32
closesocket(soc);
@@ -303,6 +274,13 @@ T_SOC smallserver_init(int *port, char *adr) {
#endif
soc = INVALID_SOCKET;
}
} else {
#ifdef _WIN32
closesocket(soc);
#else
close(soc);
#endif
soc = INVALID_SOCKET;
}
}
}
@@ -319,16 +297,16 @@ T_SOC smallserver_init(int *port, char *adr) {
// data: 32Kb
typedef struct {
char *name;
const char *name;
int value;
} initIntElt;
typedef struct {
char *name;
char *value;
const char *name;
const char *value;
} initStrElt;
#define SET_ERROR(err) do { \
inthash_write(NewLangList, "error", (intptr_t)strdup(err)); \
coucal_write(NewLangList, "error", (intptr_t)strdup(err)); \
error_redirect = "/server/error.html"; \
} while(0)
@@ -358,10 +336,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
{
char pth[1024];
char *initOn[] = { "parseall", "Cache", "ka",
const char *initOn[] = { "parseall", "Cache", "ka",
"cookies", "parsejava", "testall", "updhack", "urlhack", "index", NULL
};
initIntElt initInt[] = {
const initIntElt initInt[] = {
{"filter", 4},
{"travel", 2},
{"travel2", 1},
@@ -391,18 +369,18 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
char tmp[32];
sprintf(tmp, "%d", initInt[i].value);
inthash_write(NewLangList, initInt[i].name, (intptr_t) strdup(tmp));
coucal_write(NewLangList, initInt[i].name, (intptr_t) strdup(tmp));
}
for(i = 0; initOn[i]; i++) {
inthash_write(NewLangList, initOn[i], (intptr_t) strdup("1")); /* "on" */
coucal_write(NewLangList, initOn[i], (intptr_t) strdup("1")); /* "on" */
}
for(i = 0; initStr[i].name; i++) {
inthash_write(NewLangList, initStr[i].name,
coucal_write(NewLangList, initStr[i].name,
(intptr_t) strdup(initStr[i].value));
}
strcpybuff(pth, gethomedir());
strcatbuff(pth, "/websites");
inthash_write(NewLangList, "path", (intptr_t) strdup(pth));
coucal_write(NewLangList, "path", (intptr_t) strdup(pth));
}
/* Lock */
@@ -415,7 +393,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
char line2[1024];
T_SOC soc_c;
LLint length = 0;
char *error_redirect = NULL;
const char *error_redirect = NULL;
line[0] = '\0';
buffer[0] = '\0';
@@ -441,6 +419,11 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
/* Accept */
while((soc_c = (T_SOC) accept(soc, NULL, NULL)) == INVALID_SOCKET) ;
/* Ping */
if (pingFun != NULL) {
pingFun(pingFunArg);
}
/* Lock */
webhttrack_lock();
@@ -500,15 +483,15 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
char tmp[32];
sprintf(tmp, "%d", commandReturn);
inthash_write(NewLangList, "commandReturn", (intptr_t) strdup(tmp));
inthash_write(NewLangList, "commandReturnMsg",
coucal_write(NewLangList, "commandReturn", (intptr_t) strdup(tmp));
coucal_write(NewLangList, "commandReturnMsg",
(intptr_t) commandReturnMsg);
inthash_write(NewLangList, "commandReturnCmdl",
coucal_write(NewLangList, "commandReturnCmdl",
(intptr_t) commandReturnCmdl);
} else {
inthash_write(NewLangList, "commandReturn", (intptr_t) NULL);
inthash_write(NewLangList, "commandReturnMsg", (intptr_t) NULL);
inthash_write(NewLangList, "commandReturnCmdl", (intptr_t) NULL);
coucal_write(NewLangList, "commandReturn", (intptr_t) NULL);
coucal_write(NewLangList, "commandReturnMsg", (intptr_t) NULL);
coucal_write(NewLangList, "commandReturnCmdl", (intptr_t) NULL);
}
}
@@ -516,8 +499,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
{
intptr_t adr = 0;
if (inthash_readptr(NewLangList, "_sid", &adr)) {
if (inthash_write
if (coucal_readptr(NewLangList, "_sid", &adr)) {
if (coucal_write
(NewLangList, "sid", (intptr_t) strdup((char *) adr))) {
}
}
@@ -530,7 +513,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
strcatbuff(buffer, "&");
while(s && (e = strchr(s, '=')) && (f = strchr(s, '&'))) {
char *ua;
const char *ua;
String sua = STRING_EMPTY;
*e = *f = '\0';
@@ -538,7 +521,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
if (strfield2(ua, "on")) /* hack : "on" == 1 */
ua = "1";
unescapehttp(ua, &sua);
inthash_write(NewLangList, s, (intptr_t) StringAcquire(&sua));
coucal_write(NewLangList, s, (intptr_t) StringAcquire(&sua));
s = f + 1;
}
}
@@ -548,8 +531,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
intptr_t adr = 0;
intptr_t adr2 = 0;
if (inthash_readptr(NewLangList, "sid", &adr)) {
if (inthash_readptr(NewLangList, "_sid", &adr2)) {
if (coucal_readptr(NewLangList, "sid", &adr)) {
if (coucal_readptr(NewLangList, "_sid", &adr2)) {
if (strcmp((char *) adr, (char *) adr2) != 0) {
meth = 0;
}
@@ -562,40 +545,40 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
int doLoad = 0;
intptr_t adr = 0;
if (inthash_readptr(NewLangList, "lang", &adr)) {
if (coucal_readptr(NewLangList, "lang", &adr)) {
int n = 0;
if (sscanf((char *) adr, "%d", &n) == 1 && n > 0
&& n - 1 != LANG_T(path, -1)) {
LANG_T(path, n - 1);
/* make a backup, because the GUI will override it */
inthash_write(NewLangList, "lang_",
coucal_write(NewLangList, "lang_",
(intptr_t) strdup((char *) adr));
}
}
/* Load existing project settings */
if (inthash_readptr(NewLangList, "loadprojname", &adr)) {
if (coucal_readptr(NewLangList, "loadprojname", &adr)) {
char *pname = (char *) adr;
if (*pname) {
inthash_write(NewLangList, "projname", (intptr_t) strdup(pname));
coucal_write(NewLangList, "projname", (intptr_t) strdup(pname));
}
inthash_write(NewLangList, "loadprojname", (intptr_t) NULL);
coucal_write(NewLangList, "loadprojname", (intptr_t) NULL);
doLoad = 1;
} else if (inthash_readptr(NewLangList, "loadprojcateg", &adr)) {
} else if (coucal_readptr(NewLangList, "loadprojcateg", &adr)) {
char *pname = (char *) adr;
if (*pname) {
inthash_write(NewLangList, "projcateg", (intptr_t) strdup(pname));
coucal_write(NewLangList, "projcateg", (intptr_t) strdup(pname));
}
inthash_write(NewLangList, "loadprojcateg", (intptr_t) NULL);
coucal_write(NewLangList, "loadprojcateg", (intptr_t) NULL);
}
/* intial configuration */
{
if (!inthash_read(NewLangList, "conf_file_loaded", NULL)) {
inthash_write(NewLangList, "conf_file_loaded",
if (!coucal_read(NewLangList, "conf_file_loaded", NULL)) {
coucal_write(NewLangList, "conf_file_loaded",
(intptr_t) strdup("true"));
doLoad = 2;
}
@@ -605,8 +588,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
if (!commandRunning) {
intptr_t adrpath = 0, adrprojname = 0;
if (inthash_readptr(NewLangList, "path", &adrpath)
&& inthash_readptr(NewLangList, "projname", &adrprojname)) {
if (coucal_readptr(NewLangList, "path", &adrpath)
&& coucal_readptr(NewLangList, "projname", &adrprojname)) {
StringClear(fspath);
StringCat(fspath, (char *) adrpath);
StringCat(fspath, "/");
@@ -646,7 +629,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
if (pos[0] == '0' && pos[1] == '\0')
*pos = '\0'; /* 0 => empty */
unescapeini(pos, &escline);
inthash_write(NewLangList, line,
coucal_write(NewLangList, line,
(intptr_t) StringAcquire(&escline));
}
}
@@ -662,7 +645,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
intptr_t adr = 0;
int p = 0;
if (inthash_readptr(NewLangList, "command", &adr)) {
if (coucal_readptr(NewLangList, "command", &adr)) {
if (strcmp((char *) adr, "cancel") == 0) {
if (commandRunning) {
if (!commandEndRequested) {
@@ -706,15 +689,15 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
if (!commandRunning) {
intptr_t adrcd = 0;
if (inthash_readptr(NewLangList, "command_do", &adrcd)) {
if (coucal_readptr(NewLangList, "command_do", &adrcd)) {
intptr_t adrw = 0;
if (inthash_readptr(NewLangList, "winprofile", &adrw)) {
if (coucal_readptr(NewLangList, "winprofile", &adrw)) {
/* User general profile */
intptr_t adruserprofile = 0;
if (inthash_readptr
if (coucal_readptr
(NewLangList, "userprofile", &adruserprofile)
&& adruserprofile != 0) {
int count = (int) strlen((char *) adruserprofile);
@@ -806,7 +789,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
} else if (strcmp((char *) adr, "quit") == 0) {
willexit = 1;
}
inthash_write(NewLangList, "command", (intptr_t) NULL);
coucal_write(NewLangList, "command", (intptr_t) NULL);
}
}
@@ -818,7 +801,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
if (url && *++url == '/' && (pos = strchr(url, ' ')) && !(*pos = '\0')) {
char fsfile[1024];
char *file;
const char *file;
FILE *fp;
char *qpos;
@@ -843,12 +826,13 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
virtualpath = 1;
}
/* override */
if (commandRunning) {
if (!is_image(file)) {
if (is_html(file)) {
file = "/server/refresh.html";
}
} else if (commandEnd && !virtualpath && !willexit) {
if (!is_image(file)) {
if (is_html(file)) {
file = "/server/finished.html";
}
}
@@ -859,7 +843,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
} else {
intptr_t adr = 0;
if (inthash_readptr(NewLangList, "projpath", &adr)) {
if (coucal_readptr(NewLangList, "projpath", &adr)) {
sprintf(fsfile, "%s%s", (char *) adr, file + 9);
}
}
@@ -875,12 +859,21 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
char ok_img[] =
"HTTP/1.0 200 OK\r\n" "Connection: close\r\n"
"Server: httrack small server\r\n" "Content-type: image/gif\r\n";
char ok_js[] =
"HTTP/1.0 200 OK\r\n" "Connection: close\r\n"
"Server: httrack small server\r\n" "Content-type: text/javascript\r\n";
char ok_css[] =
"HTTP/1.0 200 OK\r\n" "Connection: close\r\n"
"Server: httrack small server\r\n" "Content-type: text/css\r\n";
char ok_text[] =
"HTTP/1.0 200 OK\r\n" "Connection: close\r\n"
"Server: httrack small server\r\n" "Content-type: text/plain\r\n";
char ok_unknown[] =
"HTTP/1.0 200 OK\r\n" "Connection: close\r\n"
"Server: httrack small server\r\n" "Content-type: application/octet-stream\r\n";
/* register current page */
inthash_write(NewLangList, "thisfile", (intptr_t) strdup(file));
coucal_write(NewLangList, "thisfile", (intptr_t) strdup(file));
/* Force GET for the last request */
if (meth == 2 && willexit) {
@@ -893,10 +886,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
"HTTP/1.0 302 Redirect\r\n" "Connection: close\r\n"
"Server: httrack-small-server\r\n";
intptr_t adr = 0;
char *newfile = file;
const char *newfile = file;
if (inthash_readptr(NewLangList, "redirect", &adr) && adr != 0) {
char *newadr = (char *) adr;
if (coucal_readptr(NewLangList, "redirect", &adr) && adr != 0) {
const char *newadr = (char *) adr;
if (*newadr) {
newfile = newadr;
@@ -911,7 +904,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
StringMemcat(headers, tmp, strlen(tmp));
}
}
inthash_write(NewLangList, "redirect", (intptr_t) NULL);
coucal_write(NewLangList, "redirect", (intptr_t) NULL);
} else if (is_html(file)) {
int outputmode = 0;
@@ -936,13 +929,14 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
&& (n = (pos - str)) && n < 1024) {
char name_[1024 + 2];
char *name = name_;
char *langstr = NULL;
const char *langstr = NULL;
int p;
int format = 0;
int listDefault = 0;
name[0] = '\0';
strncatbuff(name, str, n);
if (strncmp(name, "/*", 2) == 0) {
/* comments */
} else if ((p = strfield(name, "html:"))) {
@@ -971,6 +965,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
}
} else if ((p = strfield(name, "do:"))) {
char *pos2;
char empty[2] = "";
name += p;
format = 1;
@@ -980,7 +975,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
*pos2 = '\0';
pos2++;
} else {
pos2 = "";
pos2 = empty;
}
if (strcmp(name, "output-mode") == 0) {
if (strcmp(pos2, "html") == 0) {
@@ -1014,14 +1009,14 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
} else if (strcmp(name, "if-not-empty") == 0) {
intptr_t adr = 0;
if (!inthash_readptr(NewLangList, pos2, &adr)
if (!coucal_readptr(NewLangList, pos2, &adr)
|| *((char *) adr) == 0) {
outputmode = -1;
}
} else if (strcmp(name, "if-empty") == 0) {
intptr_t adr = 0;
if (inthash_readptr(NewLangList, pos2, &adr)
if (coucal_readptr(NewLangList, pos2, &adr)
&& *((char *) adr) != 0) {
outputmode = -1;
}
@@ -1030,7 +1025,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
} else if (strcmp(name, "loadhash") == 0) {
intptr_t adr = 0;
if (inthash_readptr(NewLangList, "path", &adr)) {
if (coucal_readptr(NewLangList, "path", &adr)) {
char *rpath = (char *) adr;
//find_handle h;
@@ -1043,9 +1038,9 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
const char *profiles = hts_getcategories(rpath, 0);
const char *categ = hts_getcategories(rpath, 1);
inthash_write(NewLangList, "winprofile",
coucal_write(NewLangList, "winprofile",
(intptr_t) profiles);
inthash_write(NewLangList, "wincateg",
coucal_write(NewLangList, "wincateg",
(intptr_t) categ);
}
}
@@ -1057,10 +1052,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
intptr_t adr = 0;
*pos3++ = '\0';
if (inthash_readptr(NewLangList, pos2, &adr)) {
inthash_write(NewLangList, pos3,
if (coucal_readptr(NewLangList, pos2, &adr)) {
coucal_write(NewLangList, pos3,
(intptr_t) strdup((char *) adr));
inthash_write(NewLangList, pos2, (intptr_t) NULL);
coucal_write(NewLangList, pos2, (intptr_t) NULL);
}
}
}
@@ -1070,10 +1065,10 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
if (pos3) {
*pos3++ = '\0';
inthash_write(NewLangList, pos2,
coucal_write(NewLangList, pos2,
(intptr_t) strdup(pos3));
} else {
inthash_write(NewLangList, pos2, (intptr_t) NULL);
coucal_write(NewLangList, pos2, (intptr_t) NULL);
}
}
}
@@ -1094,8 +1089,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
pos2 = strchr(name, ':');
if (pos2 != NULL) {
*pos2 = '\0';
if (inthash_readptr(NewLangList, name, &adr) || ztest) {
char *newadr = (char *) adr;
if (coucal_readptr(NewLangList, name, &adr) || ztest) {
const char *newadr = (char *) adr;
if (!newadr)
newadr = "";
@@ -1154,7 +1149,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
dname[0] = '\0';
strncatbuff(dname, name, n2);
if (inthash_readptr(NewLangList, dname, &adr)) {
if (coucal_readptr(NewLangList, dname, &adr)) {
int n = 0;
if (sscanf((char *) adr, "%d", &n) == 1) {
@@ -1171,15 +1166,15 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
if (langstr == NULL) {
if (strfield2(name, "#iso")) {
langstr = line2;
langstr[0] = '\0';
LANG_LIST(path, langstr);
line2[0] = '\0';
LANG_LIST(path, line2, sizeof(line2));
assertf(strlen(langstr) < sizeof(line2) - 2);
} else {
langstr = LANGSEL(name);
if (langstr == NULL || *langstr == '\0') {
intptr_t adr = 0;
if (inthash_readptr(NewLangList, name, &adr)) {
if (coucal_readptr(NewLangList, name, &adr)) {
char *newadr = (char *) adr;
langstr = newadr;
@@ -1191,7 +1186,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
switch (format) {
case 0:
{
char *a = langstr;
const char *a = langstr;
while(*a) {
if (a[0] == '\\' && isxdigit(a[1])
@@ -1210,6 +1205,8 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
StringCat(output, "&gt;");
} else if (outputmode && a[0] == '&') {
StringCat(output, "&amp;");
} else if (outputmode && a[0] == '\'') {
StringCat(output, "&#39;");
} else if (outputmode == 3 && a[0] == ' ') {
StringCat(output, "%20");
} else if (outputmode >= 2
@@ -1237,7 +1234,7 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
default:
if (*langstr) {
int id = 1;
char *fstr = langstr;
const char *fstr = langstr;
StringClear(tmpbuff);
if (format == 2) {
@@ -1283,6 +1280,9 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
case '&':
StringCat(tmpbuff, "&amp;");
break;
case '\'':
StringCat(tmpbuff, "&#39;");
break;
default:
StringMemcat(tmpbuff, fstr, 1);
break;
@@ -1323,17 +1323,18 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
assert(len == (int) StringLength(output));
}
#endif
} else if (is_text(file)) {
StringMemcat(headers, ok_text, sizeof(ok_text) - 1);
while(!feof(fp)) {
int n = (int) fread(line, 1, sizeof(line) - 2, fp);
if (n > 0) {
StringMemcat(output, line, n);
}
}
} else {
StringMemcat(headers, ok_img, sizeof(ok_img) - 1);
if (is_text(file)) {
StringMemcat(headers, ok_text, sizeof(ok_text) - 1);
} else if (is_js(file)) {
StringMemcat(headers, ok_js, sizeof(ok_js) - 1);
} else if (is_css(file)) {
StringMemcat(headers, ok_css, sizeof(ok_css) - 1);
} else if (is_image(file)) {
StringMemcat(headers, ok_img, sizeof(ok_img) - 1);
} else {
StringMemcat(headers, ok_unknown, sizeof(ok_unknown) - 1);
}
while(!feof(fp)) {
int n = (int) fread(line, 1, sizeof(line) - 2, fp);
@@ -1343,6 +1344,13 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
}
}
fclose(fp);
} else if (strcmp(file, "/ping") == 0
|| strncmp(file, "/ping?", 6) == 0) {
char error_hdr[] =
"HTTP/1.0 200 Pong\r\n" "Server: httrack small server\r\n"
"Content-type: text/html\r\n";
StringCat(headers, error_hdr);
} else {
char error_hdr[] =
"HTTP/1.0 404 Not Found\r\n" "Server: httrack small server\r\n"
@@ -1442,12 +1450,12 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path) {
int htslang_init(void) {
if (NewLangList == NULL) {
NewLangList = inthash_new(0);
inthash_set_name(NewLangList, "NewLangList");
NewLangList = coucal_new(0);
coucal_set_name(NewLangList, "NewLangList");
if (NewLangList == NULL) {
abortLog("Error in lang.h: not enough memory");
} else {
inthash_value_is_malloc(NewLangList, 1);
coucal_value_is_malloc(NewLangList, 1);
}
}
return 1;
@@ -1455,29 +1463,35 @@ int htslang_init(void) {
int htslang_uninit(void) {
if (NewLangList != NULL) {
inthash_delete(&NewLangList);
coucal_delete(&NewLangList);
}
return 1;
}
int smallserver_setkey(char *key, char *value) {
return inthash_write(NewLangList, key, (intptr_t) strdup(value));
void smallserver_setpinghandler(void (*fun)(void*), void*arg) {
pingFun = fun;
pingFunArg = arg;
}
int smallserver_setkeyint(char *key, LLint value) {
int smallserver_setkey(const char *key, const char *value) {
return coucal_write(NewLangList, key, (intptr_t) strdup(value));
}
int smallserver_setkeyint(const char *key, LLint value) {
char tmp[256];
sprintf(tmp, LLintP, value);
return inthash_write(NewLangList, key, (intptr_t) strdup(tmp));
snprintf(tmp, sizeof(tmp), LLintP, value);
return coucal_write(NewLangList, key, (intptr_t) strdup(tmp));
}
int smallserver_setkeyarr(char *key, int id, char *key2, char *value) {
int smallserver_setkeyarr(const char *key, int id, const char *key2, const char *value) {
char tmp[256];
sprintf(tmp, "%s%d%s", key, id, key2);
return inthash_write(NewLangList, tmp, (intptr_t) strdup(value));
snprintf(tmp, sizeof(tmp), "%s%d%s", key, id, key2);
return coucal_write(NewLangList, tmp, (intptr_t) strdup(value));
}
static int htslang_load(char *limit_to, char *path) {
char *hashname;
static int htslang_load(char *limit_to, const char *path) {
const char *hashname;
char catbuff[CATBUFF_SIZE];
//
@@ -1486,21 +1500,21 @@ static int htslang_load(char *limit_to, char *path) {
//
if (!limit_to) {
LANG_DELETE();
NewLangStr = inthash_new(0);
NewLangStrKeys = inthash_new(0);
inthash_set_name(NewLangStr, "NewLangStr");
inthash_set_name(NewLangStrKeys, "NewLangStrKeys");
NewLangStr = coucal_new(0);
NewLangStrKeys = coucal_new(0);
coucal_set_name(NewLangStr, "NewLangStr");
coucal_set_name(NewLangStrKeys, "NewLangStrKeys");
if ((NewLangStr == NULL) || (NewLangStrKeys == NULL)) {
abortLog("Error in lang.h: not enough memory");
} else {
inthash_value_is_malloc(NewLangStr, 1);
inthash_value_is_malloc(NewLangStrKeys, 1);
coucal_value_is_malloc(NewLangStr, 1);
coucal_value_is_malloc(NewLangStrKeys, 1);
}
}
/* Load master file (list of keys and internal keys) */
if (!limit_to) {
char *mname = "lang.def";
const char *mname = "lang.def";
FILE *fp = fopen(fconcat(catbuff, sizeof(catbuff), path, mname), "rb");
if (fp) {
@@ -1511,7 +1525,7 @@ static int htslang_load(char *limit_to, char *path) {
linput_cpp(fp, intkey, 8000);
linput_cpp(fp, key, 8000);
if (strnotempty(intkey) && strnotempty(key)) {
char *test = LANGINTKEY(key);
const char *test = LANGINTKEY(key);
/* Increment for multiple definitions */
if (strnotempty(test)) {
@@ -1527,14 +1541,12 @@ static int htslang_load(char *limit_to, char *path) {
if (!strnotempty(test)) { // éviter doublons
// conv_printf(key,key);
int len;
char *buff;
const size_t len = strlen(intkey);
char *const buff = (char *) malloc(len + 1);
len = (int) strlen(intkey);
buff = (char *) malloc(len + 2);
if (buff) {
strcpybuff(buff, intkey);
inthash_add(NewLangStrKeys, key, (intptr_t) buff);
coucal_add(NewLangStrKeys, key, (intptr_t) buff);
}
}
} // if
@@ -1591,9 +1603,7 @@ static int htslang_load(char *limit_to, char *path) {
linput_cpp(fp, extkey, 8000);
linput_cpp(fp, value, 8000);
if (strnotempty(extkey) && strnotempty(value)) {
int len;
char *buff;
char *intkey;
const char *intkey;
intkey = LANGINTKEY(extkey);
@@ -1601,7 +1611,7 @@ static int htslang_load(char *limit_to, char *path) {
/* Increment for multiple definitions */
{
char *test = LANGSEL(intkey);
const char *test = LANGSEL(intkey);
if (strnotempty(test)) {
if (loops == 0) {
@@ -1629,11 +1639,11 @@ static int htslang_load(char *limit_to, char *path) {
/* Add key */
if (strnotempty(intkey)) {
len = (int) strlen(value);
buff = (char *) malloc(len + 2);
const size_t len = strlen(value);
char *const buff = (char *) malloc(len + 1);
if (buff) {
conv_printf(value, buff);
inthash_add(NewLangStr, intkey, (intptr_t) buff);
coucal_add(NewLangStr, intkey, (intptr_t) buff);
}
}
@@ -1655,7 +1665,7 @@ static int htslang_load(char *limit_to, char *path) {
}
/* NOTE : also contains the "webhttrack" hack */
static void conv_printf(char *from, char *to) {
static void conv_printf(const char *from, char *to) {
int i = 0, j = 0, len;
len = (int) strlen(from);
@@ -1724,12 +1734,12 @@ static void conv_printf(char *from, char *to) {
}
static void LANG_DELETE(void) {
inthash_delete(&NewLangStr);
inthash_delete(&NewLangStrKeys);
coucal_delete(&NewLangStr);
coucal_delete(&NewLangStrKeys);
}
// sélection de la langue
static void LANG_INIT(char *path) {
static void LANG_INIT(const char *path) {
//CWinApp* pApp = AfxGetApp();
//if (pApp) {
/* pApp->GetProfileInt("Language","IntId",0); */
@@ -1737,7 +1747,7 @@ static void LANG_INIT(char *path) {
//}
}
static int LANG_T(char *path, int l) {
static int LANG_T(const char *path, int l) {
if (l >= 0) {
QLANG_T(l);
htslang_load(NULL, path);
@@ -1745,7 +1755,7 @@ static int LANG_T(char *path, int l) {
return QLANG_T(-1); // 0=default (english)
}
static int LANG_SEARCH(char *path, char *iso) {
static int LANG_SEARCH(const char *path, const char *iso) {
char lang_str[1024];
int i = 0;
int curr_lng = LANG_T(path, -1);
@@ -1764,7 +1774,7 @@ static int LANG_SEARCH(char *path, char *iso) {
return found;
}
static int LANG_LIST(char *path, char *buffer) {
static int LANG_LIST(const char *path, char *buffer, size_t buffer_size) {
char lang_str[1024];
int i = 0;
int curr_lng = LANG_T(path, -1);
@@ -1772,12 +1782,12 @@ static int LANG_LIST(char *path, char *buffer) {
buffer[0] = '\0';
do {
QLANG_T(i);
strcpybuff(lang_str, "LANGUAGE_NAME");
strlcpybuff(lang_str, "LANGUAGE_NAME", buffer_size);
htslang_load(lang_str, path);
if (strlen(lang_str) > 0) {
if (buffer[0])
strcatbuff(buffer, "\n");
strcatbuff(buffer, lang_str);
strlcatbuff(buffer, lang_str, buffer_size);
}
i++;
} while(strlen(lang_str) > 0);
@@ -1794,28 +1804,26 @@ static int QLANG_T(int l) {
return lng; // 0=default (english)
}
static char *LANGSEL(char *name) {
intptr_t adr = 0;
if (NewLangStr)
if (!inthash_read(NewLangStr, name, &adr))
adr = 0;
if (adr) {
return (char *) adr;
const char* LANGSEL(const char* name) {
coucal_value value;
if (NewLangStr != NULL
&& coucal_read_value(NewLangStr, name, &value) != 0
&& value.ptr != NULL) {
return (char*) value.ptr;
} else {
return "";
}
return "";
}
static char *LANGINTKEY(char *name) {
intptr_t adr = 0;
if (NewLangStrKeys)
if (!inthash_read(NewLangStrKeys, name, &adr))
adr = 0;
if (adr) {
return (char *) adr;
const char* LANGINTKEY(const char* name) {
coucal_value value;
if (NewLangStrKeys != NULL
&& coucal_read_value(NewLangStrKeys, name, &value) != 0
&& value.ptr != NULL) {
return (char*) value.ptr;
} else {
return "";
}
return "";
}
/* *** Various functions *** */
@@ -1848,7 +1856,7 @@ static int check_readinput(htsblk * r) {
FD_SET(r->soc, &fds);
tv.tv_sec = 0;
tv.tv_usec = 0;
select(r->soc + 1, &fds, NULL, NULL, &tv);
select((int) r->soc + 1, &fds, NULL, NULL, &tv);
if (FD_ISSET(r->soc, &fds))
return 1;
else

View File

@@ -71,11 +71,11 @@ int smallserver(T_SOC soc, char *url, char *method, char *data, char *path);
"\r\n"\
extern int NewLangStrSz;
extern inthash NewLangStr;
extern coucal NewLangStr;
extern int NewLangStrKeysSz;
extern inthash NewLangStrKeys;
extern coucal NewLangStrKeys;
extern int NewLangListSz;
extern inthash NewLangList;
extern coucal NewLangList;
extern httrackp *global_opt;
@@ -91,16 +91,17 @@ extern httrackp *global_opt;
#define min(a,b) ((a)>(b)?(b):(a))
#define max(a,b) ((a)>(b)?(a):(b))
extern int smallserver_setkey(char *key, char *value);
extern int smallserver_setkeyint(char *key, LLint value);
extern int smallserver_setkeyarr(char *key, int id, char *key2, char *value);
extern void smallserver_setpinghandler(void (*fun)(void*), void*arg);
extern int smallserver_setkey(const char *key, const char *value);
extern int smallserver_setkeyint(const char *key, LLint value);
extern int smallserver_setkeyarr(const char *key, int id, const char *key2, const char *value);
int htslang_init(void);
int htslang_uninit(void);
/* Static definitions */
HTS_UNUSED static char *gethomedir(void);
HTS_UNUSED static const char *gethomedir(void);
HTS_UNUSED static int linput_cpp(FILE * fp, char *s, int max);
HTS_UNUSED static int linput_trim(FILE * fp, char *s, int max);
HTS_UNUSED static int fexist(const char *s);
@@ -147,7 +148,7 @@ HTS_UNUSED static int check_readinput_t(T_SOC soc, int timeout) {
FD_SET(soc, &fds);
tv.tv_sec = timeout;
tv.tv_usec = 0;
select(soc + 1, &fds, NULL, NULL, &tv);
select((int) soc + 1, &fds, NULL, NULL, &tv);
if (FD_ISSET(soc, &fds))
return 1;
else
@@ -163,8 +164,8 @@ HTS_UNUSED static int linputsoc_t(T_SOC soc, char *s, int max, int timeout) {
return -1;
}
static char *gethomedir(void) {
char *home = getenv("HOME");
static const char *gethomedir(void) {
const char *home = getenv("HOME");
if (home)
return home;
@@ -228,7 +229,7 @@ static int linput(FILE * fp, char *s, int max) {
}
static int linput_trim(FILE * fp, char *s, int max) {
int rlen = 0;
char *ls = (char *) malloc(max + 2);
char *ls = (char *) malloc(max + 1);
s[0] = '\0';
if (ls) {
@@ -267,11 +268,11 @@ static int ehexh(char c) {
return 0;
}
static int ehex(char *s) {
static int ehex(const char *s) {
return 16 * ehexh(*s) + ehexh(*(s + 1));
}
HTS_UNUSED static void unescapehttp(char *s, String * tempo) {
HTS_UNUSED static void unescapehttp(const char *s, String * tempo) {
size_t i;
for(i = 0; s[i] != '\0'; i++) {

View File

@@ -36,6 +36,7 @@ Please visit our Website: http://www.httrack.com
#include "htsglobal.h"
#include "htsbase.h"
#include "htsthread.h"
#include "httrack-library.h"
#if USE_BEGINTHREAD
#ifdef _WIN32

View File

@@ -91,11 +91,11 @@ static int ehexh(char c) {
return 0;
}
static int ehex(char *s) {
static int ehex(const char *s) {
return 16 * ehexh(*s) + ehexh(*(s + 1));
}
static void unescapehttp(char *s, String * tempo) {
static void unescapehttp(const char *s, String * tempo) {
size_t i;
for(i = 0; s[i] != '\0'; i++) {
@@ -122,12 +122,15 @@ static void unescapehttp(char *s, String * tempo) {
// -1 : erreur
// -2 : protocole non supporté (ftp)
int ident_url_relatif(const char *lien, const char *origin_adr,
const char *origin_fil, char *adr, char *fil) {
const char *origin_fil,
lien_adrfil* const adrfil) {
int ok = 0;
int scheme = 0;
adr[0] = '\0';
fil[0] = '\0'; //effacer buffers
assertf(adrfil != NULL);
adrfil->adr[0] = '\0';
adrfil->fil[0] = '\0'; //effacer buffers
// lien non vide!
if (strnotempty(lien) == 0)
@@ -149,13 +152,13 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
|| (strfield(lien, "file://")) // scheme+//
|| (strncmp(lien, "//", 2) == 0) // // sans scheme (-> default)
) {
if (ident_url_absolute(lien, adr, fil) == -1) {
if (ident_url_absolute(lien, adrfil) == -1) {
ok = -1; // erreur URL
}
} else if (strfield(lien, "ftp://")) {
// Note: ftp:foobar.gif is not valid
if (ftp_available()) { // ftp supporté
if (ident_url_absolute(lien, adr, fil) == -1) {
if (ident_url_absolute(lien, adrfil) == -1) {
ok = -1; // erreur URL
}
} else {
@@ -164,7 +167,7 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
#if HTS_USEOPENSSL
} else if (strfield(lien, "https://")) {
// Note: ftp:foobar.gif is not valid
if (ident_url_absolute(lien, adr, fil) == -1) {
if (ident_url_absolute(lien, adrfil) == -1) {
ok = -1; // erreur URL
}
#endif
@@ -191,30 +194,30 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
/* patch scheme if necessary */
if (strfield(lien, "http:")) {
lien += 5;
strcpybuff(adr, jump_protocol(origin_adr)); // même adresse ; protocole vide (http)
strcpybuff(adrfil->adr, jump_protocol_const(origin_adr)); // même adresse ; protocole vide (http)
} else if (strfield(lien, "https:")) {
lien += 6;
strcpybuff(adr, "https://"); // même adresse forcée en https
strcatbuff(adr, jump_protocol(origin_adr));
strcpybuff(adrfil->adr, "https://"); // même adresse forcée en https
strcatbuff(adrfil->adr, jump_protocol_const(origin_adr));
} else if (strfield(lien, "ftp:")) {
lien += 4;
strcpybuff(adr, "ftp://"); // même adresse forcée en ftp
strcatbuff(adr, jump_protocol(origin_adr));
strcpybuff(adrfil->adr, "ftp://"); // même adresse forcée en ftp
strcatbuff(adrfil->adr, jump_protocol_const(origin_adr));
} else {
strcpybuff(adr, origin_adr); // même adresse ; et même éventuel protocole
strcpybuff(adrfil->adr, origin_adr); // même adresse ; et même éventuel protocole
}
if (*lien != '/') { // sinon c'est un lien absolu
if (*lien == '\0') {
strcpybuff(fil, origin_fil);
strcpybuff(adrfil->fil, origin_fil);
} else if (*lien == '?') { // example: a href="?page=2"
char *a;
strcpybuff(fil, origin_fil);
a = strchr(fil, '?');
strcpybuff(adrfil->fil, origin_fil);
a = strchr(adrfil->fil, '?');
if (a)
*a = '\0';
strcatbuff(fil, lien);
strcatbuff(adrfil->fil, lien);
} else {
const char *a = strchr(origin_fil, '?');
@@ -225,14 +228,14 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
if (*a == '/') { // ok on a un '/'
if ((((int) (a - origin_fil)) + 1 + strlen(lien)) < HTS_URLMAXSIZE) {
// copier chemin
strncpy(fil, origin_fil, ((int) (a - origin_fil)) + 1);
*(fil + ((int) (a - origin_fil)) + 1) = '\0';
strncpy(adrfil->fil, origin_fil, ((int) (a - origin_fil)) + 1);
*(adrfil->fil + ((int) (a - origin_fil)) + 1) = '\0';
// copier chemin relatif
if (((int) strlen(fil) + (int) strlen(lien)) < HTS_URLMAXSIZE) {
strcatbuff(fil, lien + ((*lien == '/') ? 1 : 0));
if (((int) strlen(adrfil->fil) + (int) strlen(lien)) < HTS_URLMAXSIZE) {
strcatbuff(adrfil->fil, lien + ((*lien == '/') ? 1 : 0));
// simplifier url pour les ../
fil_simplifie(fil);
fil_simplifie(adrfil->fil);
} else
ok = -1; // erreur
} else { // erreur
@@ -244,8 +247,8 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
}
} else { // chemin absolu
// copier chemin directement
strcatbuff(fil, lien);
fil_simplifie(fil);
strcatbuff(adrfil->fil, lien);
fil_simplifie(adrfil->fil);
} // *lien!='/'
} else
ok = -1;
@@ -254,7 +257,7 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
// case insensitive pour adresse
{
char *a = jump_identification(adr);
char *a = jump_identification(adrfil->adr);
while(*a) {
if ((*a >= 'A') && (*a <= 'Z'))
@@ -264,8 +267,8 @@ int ident_url_relatif(const char *lien, const char *origin_adr,
}
// IDNA / RFC 3492 (Punycode) handling for HTTP(s)
if (!link_has_authority(adr) || strfield(adr, "https:")) {
char *const a = jump_identification(adr);
if (!link_has_authority(adrfil->adr) || strfield(adrfil->adr, "https:")) {
char *const a = jump_identification(adrfil->adr);
// Non-ASCII characters (theorically forbidden, but browsers are lenient)
if (!hts_isStringAscii(a, strlen(a))) {
char *const idna = hts_convertStringUTF8ToIDNA(a, strlen(a));
@@ -392,7 +395,7 @@ int link_has_authority(const char *lien) {
}
int link_has_authorization(const char *lien) {
const char *adr = jump_protocol(lien);
const char *adr = jump_protocol_const(lien);
const char *firstslash = strchr(adr, '/');
const char *detect = strchr(adr, '@');
@@ -412,14 +415,15 @@ void long_to_83(int mode, char *n83, char *save) {
while(*save) {
char fn83[256], fnl[256];
int i = 0;
size_t i, j;
fn83[0] = fnl[0] = '\0';
while((save[i]) && (save[i] != '/')) {
fnl[i] = save[i];
i++;
for(i = j = 0 ; save[i] && save[i] != '/' ; i++) {
if (j + 1 < sizeof(fnl)) {
fnl[j++] = save[i];
}
}
fnl[i] = '\0';
fnl[j] = '\0';
// conversion
longfile_to_83(mode, fn83, fnl);
strcatbuff(n83, fn83);
@@ -532,21 +536,20 @@ void longfile_to_83(int mode, char *n83, char *save) {
// écrire backblue.gif
/* Note: utf-8 */
int verif_backblue(httrackp * opt, const char *base) {
int *done = &opt->state.verif_backblue_done;
int ret = 0;
//
if (!base) { // init
*done = 0;
opt->state.verif_backblue_done = 0;
return 0;
}
if ((!*done)
if ((!opt->state.verif_backblue_done)
|| (fsize_utf8(fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), base, "backblue.gif")) !=
HTS_DATA_BACK_GIF_LEN)) {
FILE *fp =
filecreate(&opt->state.strc,
fconcat(OPT_GET_BUFF(opt), OPT_GET_BUFF_SIZE(opt), base, "backblue.gif"));
*done = 1;
opt->state.verif_backblue_done = 1;
if (fp) {
if (fwrite(HTS_DATA_BACK_GIF, HTS_DATA_BACK_GIF_LEN, 1, fp) !=
HTS_DATA_BACK_GIF_LEN)
@@ -575,12 +578,12 @@ int verif_backblue(httrackp * opt, const char *base) {
// flag
int verif_external(httrackp * opt, int nb, int test) {
int *status = &opt->state.verif_external_status;
const int flag = 1 << nb;
int *const status = &opt->state.verif_external_status;
if (!test)
status[nb] = 0; // reset
else if (!status[nb]) {
status[nb] = 1;
*status &= ~flag; // reset
else if ((*status & flag) == 0) {
*status |= flag;
return 1;
}
return 0;
@@ -708,19 +711,18 @@ HTS_INLINE int rech_sampletag(const char *adr, const char *s) {
}
// teste si le tag contenu dans from est égal à "tag"
HTS_INLINE int check_tag(char *from, const char *tag) {
char *a = from + 1;
HTS_INLINE int check_tag(const char *from, const char *tag) {
const char *a = from + 1;
int i = 0;
char s[256];
while(is_space(*a))
a++;
while((isalnum((unsigned char) *a) || (*a == '/')) && (i < 250)) {
s[i++] = *a;
a++;
for( ; (isalnum((unsigned char) *a) || (*a == '/')) && i + 1 < sizeof(s) ; i++, a++) {
s[i] = *a;
}
s[i++] = '\0';
return (strfield2(s, tag)); // comparer
s[i] = '\0';
return strfield2(s, tag); // comparer
}
// teste si un fichier dépasse le quota
@@ -746,8 +748,8 @@ int istoobig(httrackp * opt, LLint size, LLint maxhtml, LLint maxnhtml,
static int sortTopIndexFnc(const void *a_, const void *b_) {
int cmp;
topindex_chain **a = (topindex_chain **) a_;
topindex_chain **b = (topindex_chain **) b_;
const topindex_chain *const*const a = (const topindex_chain *const*) a_;
const topindex_chain *const*const b = (const topindex_chain *const*) b_;
/* Category first, then name */
if ((cmp = (*a)->level - (*b)->level) == 0) {
@@ -758,7 +760,117 @@ static int sortTopIndexFnc(const void *a_, const void *b_) {
return cmp;
}
//HTSEXT_API char *hts_getcategory(const char *filename);
typedef struct hts_template_format_buf {
FILE *fp;
char *buffer;
size_t size;
size_t offset;
} hts_template_format_buf;
// note: upstream arg list MUST be NULL-terminated for safety
// returns a negative value upon error
static int hts_template_formatv(hts_template_format_buf *buf,
const char *format, va_list args) {
#undef FPUTC
#undef FPUTS
#define FPUTC(C) do { \
if (buf->fp != NULL) { \
assertf(buf->buffer == NULL); \
if (fputc(C, buf->fp) < 0) { \
return -1; \
} \
} else { \
assertf(buf->buffer != NULL); \
if (buf->offset + 1 < buf->size) { \
buf->buffer[buf->offset++] = (C); \
} else { \
return -1; \
} \
} \
} while(0)
#define FPUTS(S) do { \
size_t i; \
const char *const str_ = (S); \
assertf(str_ != NULL); \
for(i = 0 ; str_[i] != '\0' ; i++) { \
FPUTC(str_[i]); \
} \
} while(0)
if (buf != NULL && format != NULL) {
const char *arg_expanded[32];
size_t i, nbArgs, posArgs;
/* Expand internal code args. */
const char *str;
for(nbArgs = 0 ; ( str = va_arg(args, const char*) ) != NULL ; nbArgs++) {
assertf(nbArgs < sizeof(arg_expanded)/sizeof(arg_expanded[0]));
arg_expanded[nbArgs] = str;
}
/* Expand user-injected format string. */
for(posArgs = 0, i = 0 ; format[i] != '\0' ; i++) {
const unsigned char c = format[i];
if (c == '%') {
const unsigned char cFormat = format[++i];
switch(cFormat) {
case '%':
FPUTC('%');
break;
case 's':
if (posArgs < nbArgs) {
assertf(arg_expanded[posArgs] != NULL);
FPUTS(arg_expanded[posArgs]);
posArgs++;
} else {
FPUTS("???"); /* error (args overflow) */
}
break;
default: /* ignored */
FPUTC('%');
FPUTC(cFormat);
break;
}
} else {
FPUTC(c);
}
}
/* Terminating NULL. */
if (buf->buffer != NULL) {
buf->buffer[buf->offset] = 0;
}
return 1;
} else {
return -1;
}
#undef FPUTC
#undef FPUTS
}
// note: upstream arg list MUST be NULL-terminated for safety
// returns a negative value upon error
int hts_template_format(FILE *const out, const char *format, ...) {
int success;
hts_template_format_buf buf = { NULL, NULL, 0, 0 };
va_list args;
buf.fp = out;
va_start(args, format);
success = hts_template_formatv(&buf, format, args);
va_end(args);
return success;
}
// note: upstream arg list MUST be NULL-terminated for safety
// returns a negative value upon error
int hts_template_format_str(char *buffer, size_t size, const char *format, ...) {
int success;
hts_template_format_buf buf = { NULL, NULL, 0, 0 };
va_list args;
buf.buffer = buffer;
buf.size = size;
va_start(args, format);
success = hts_template_formatv(&buf, format, args);
va_end(args);
return success;
}
/* Note: NOT utf-8 */
HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
@@ -799,9 +911,9 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
verif_backblue(opt, concat(catbuff, sizeof(catbuff), rpath, "/")); // générer gif
// Header
fprintf(fpo, toptemplate_header,
hts_template_format(fpo, toptemplate_header,
"<!-- Mirror and index made by HTTrack Website Copier/"
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->");
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->", /* EOF */ NULL);
/* Find valid project names */
h = hts_findfirst(rpath);
@@ -870,7 +982,7 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
assertf(sortedElts != NULL);
if (sortedElts != NULL) {
int i;
char *category = "";
const char *category = "";
/* Build array */
struct topindex_chain *chain = startchain;
@@ -892,9 +1004,9 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
/* Changed category */
if (strcmp(category, sortedElts[i]->category) != 0) {
category = sortedElts[i]->category;
fprintf(fpo, toptemplate_bodycat, category);
hts_template_format(fpo, toptemplate_bodycat, category, /* EOF */ NULL);
}
fprintf(fpo, toptemplate_body, hname, sortedElts[i]->name);
hts_template_format(fpo, toptemplate_body, hname, sortedElts[i]->name, /* EOF */ NULL);
}
/* Wipe elements */
@@ -912,9 +1024,9 @@ HTSEXT_API int hts_buildtopindex(httrackp * opt, const char *path,
}
// Footer
fprintf(fpo, toptemplate_footer,
hts_template_format(fpo, toptemplate_footer,
"<!-- Mirror and index made by HTTrack Website Copier/"
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->");
HTTRACK_VERSION " " HTTRACK_AFF_AUTHORS " -->", /* EOF */ NULL);
fclose(fpo);
@@ -967,7 +1079,7 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
String profiles = STRING_EMPTY;
char *rpath = path;
find_handle h;
inthash hashCateg = NULL;
coucal hashCateg = NULL;
if (rpath[0]) {
if (rpath[strlen(rpath) - 1] == '/') {
@@ -979,8 +1091,8 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
String iname = STRING_EMPTY;
if (type == 1) {
hashCateg = inthash_new(0);
inthash_set_name(hashCateg, "hashCateg");
hashCateg = coucal_new(0);
coucal_set_name(hashCateg, "hashCateg");
StringCat(categ, "Test category 1");
StringCat(categ, "\r\nTest category 2");
}
@@ -1005,8 +1117,8 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
if (n > 0) {
if (strfield(line2, "category=")) {
if (*(line2 + 9)) {
if (!inthash_read(hashCateg, line2 + 9, NULL)) {
inthash_write(hashCateg, line2 + 9, 0);
if (!coucal_read(hashCateg, line2 + 9, NULL)) {
coucal_write(hashCateg, line2 + 9, 0);
if (StringLength(categ) > 0) {
StringCat(categ, "\r\n");
}
@@ -1034,7 +1146,7 @@ HTSEXT_API char *hts_getcategories(char *path, int type) {
StringFree(iname);
}
if (hashCateg) {
inthash_delete(&hashCateg);
coucal_delete(&hashCateg);
hashCateg = NULL;
}
if (type == 1)

View File

@@ -47,11 +47,20 @@ typedef struct httrackp httrackp;
typedef struct find_handle_struct find_handle_struct;
typedef find_handle_struct *find_handle;
#endif
#ifndef HTS_DEF_FWSTRUCT_lien_adrfil
#define HTS_DEF_FWSTRUCT_lien_adrfil
typedef struct lien_adrfil lien_adrfil;
#endif
#ifndef HTS_DEF_FWSTRUCT_lien_adrfilsave
#define HTS_DEF_FWSTRUCT_lien_adrfilsave
typedef struct lien_adrfilsave lien_adrfilsave;
#endif
/* Library internal definictions */
#ifdef HTS_INTERNAL_BYTECODE
int ident_url_relatif(const char *lien, const char *urladr, const char *urlfil,
char *adr, char *fil);
int ident_url_relatif(const char *lien, const char *origin_adr,
const char *origin_fil,
lien_adrfil* const adrfil);
int lienrelatif(char *s, const char *link, const char *curr);
int link_has_authority(const char *lien);
int link_has_authorization(const char *lien);
@@ -61,6 +70,9 @@ HTS_INLINE int __rech_tageq(const char *adr, const char *s);
HTS_INLINE int __rech_tageqbegdigits(const char *adr, const char *s);
HTS_INLINE int rech_tageq_all(const char *adr, const char *s);
int hts_template_format(FILE *const out, const char *format, ...);
int hts_template_format_str(char *buffer, size_t size, const char *format, ...);
#define rech_tageq(adr,s) \
( \
( (*((adr)-1)=='<') || (is_space(*((adr)-1))) ) ? \
@@ -84,7 +96,7 @@ HTS_INLINE int rech_tageq_all(const char *adr, const char *s);
//HTS_INLINE int rech_tageq(const char* adr,const char* s);
HTS_INLINE int rech_sampletag(const char *adr, const char *s);
HTS_INLINE int rech_endtoken(const char *adr, const char **start);
HTS_INLINE int check_tag(char *from, const char *tag);
HTS_INLINE int check_tag(const char *from, const char *tag);
int verif_backblue(httrackp * opt, const char *base);
int verif_external(httrackp * opt, int nb, int test);

View File

@@ -58,7 +58,7 @@ Please visit our Website: http://www.httrack.com
#include "htsthread.h"
/* External modules */
#include "htsinthash.c"
#include "coucal.c"
#include "htsmd5.c"
#include "md5.c"
@@ -77,6 +77,13 @@ Please visit our Website: http://www.httrack.com
#else
#endif
#undef DEBUG
#if 0
#define DEBUG(A) do { A; } while(0)
#else
#define DEBUG(A) do {} while(0)
#endif
static htsmutex refreshMutex = HTSMUTEX_INIT;
static int help_server(char *dest_path, int defaultPort);
@@ -91,10 +98,59 @@ static void htsweb_sig_brpipe(int code) {
/* ignore */
}
/* Number of background threads */
static int background_threads = 0;
/* Server/client ping handling */
static htsmutex pingMutex = HTSMUTEX_INIT;
static unsigned int pingId = 0;
static unsigned int getPingId(void) {
unsigned int id;
hts_mutexlock(&pingMutex);
id = pingId;
hts_mutexrelease(&pingMutex);
return id;
}
static void ping(void) {
hts_mutexlock(&pingMutex);
pingId++;
hts_mutexrelease(&pingMutex);
}
static void client_ping(void *pP) {
#ifndef _WIN32
/* Timeout to 120s ; normally client pings every 30 second */
static int timeout = 120;
/* Wait for parent to die (legacy browser mode). */
const pid_t ppid = (pid_t) (uintptr_t) pP;
while (!kill(ppid, 0)) {
sleep(1);
}
/* Parent (webhttrack script) is dead: is client pinging ? */
for(;;) {
unsigned int id = getPingId();
sleep(timeout);
if (getPingId() == id) {
break;
}
}
/* Die! */
fprintf(stderr,
"Parent process %d died, and client did not ping for %ds: exiting!\n",
(int) ppid, timeout);
exit(EXIT_FAILURE);
#endif
}
static void pingHandler(void*arg) {
ping();
}
int main(int argc, char *argv[]) {
int i;
int ret = 0;
int defaultPort = 0;
int parentPid = 0;
printf("Initialzing the server..\n");
@@ -120,7 +176,7 @@ int main(int argc, char *argv[]) {
if (argc < 2 || (argc % 2) != 0) {
fprintf(stderr, "** Warning: use the webhttrack frontend if available\n");
fprintf(stderr,
"usage: %s [--port <port>] <path-to-html-root-dir> [key value [key value]..]\n",
"usage: %s [--port <port>] [--ppid parent-pid] <path-to-html-root-dir> [key value [key value]..]\n",
argv[0]);
fprintf(stderr, "example: %s /usr/share/httrack/\n", argv[0]);
return 1;
@@ -178,6 +234,14 @@ int main(int argc, char *argv[]) {
}
smallserver_setkey("HTTRACK_WEB", HTTRACK_WEB);
/* Check version compatibility */
if (hts_sizeof_opt() != sizeof(httrackp)) {
fprintf(stderr,
"** CRITICAL: incompatible current httrack library version %s, expected version %s",
hts_version(), HTTRACK_VERSIONID);
smallserver_setkey("HTTRACK_INCOMPATIBLE_VERSIONID", hts_version());
}
/* protected session-id */
{
char buff[1024];
@@ -192,14 +256,22 @@ int main(int argc, char *argv[]) {
/* set commandline keys */
for(i = 2; i < argc; i += 2) {
if (strcmp(argv[i], "--port") == 0) {
if (strcmp(argv[i], "--port") == 0 && i + 1 < argc) {
if (sscanf(argv[i + 1], "%d", &defaultPort) != 1 || defaultPort < 0
|| defaultPort >= 65535) {
fprintf(stderr, "couldn't set the port number to %s\n", argv[i + 1]);
return -1;
}
} else {
} else if (strcmp(argv[i], "--ppid") == 0 && i + 1 < argc) {
if (sscanf(argv[i + 1], "%u", &parentPid) != 1) {
fprintf(stderr, "couldn't set the parent PID to %s\n", argv[i + 1]);
return -1;
}
} else if (i + 1 < argc) {
smallserver_setkey(argv[i], argv[i + 1]);
} else {
fprintf(stderr, "Error in commandline!\n");
return -1;
}
}
@@ -208,6 +280,13 @@ int main(int argc, char *argv[]) {
signal(SIGPIPE, htsweb_sig_brpipe); // broken pipe (write into non-opened socket)
#endif
/* pinger */
if (parentPid > 0) {
hts_newthread(client_ping, (void *) (uintptr_t) parentPid);
background_threads++; /* Do not wait for this thread! */
smallserver_setpinghandler(pingHandler, NULL);
}
/* launch */
ret = help_server(argv[1], defaultPort);
@@ -238,7 +317,7 @@ static void back_launch_cmd(void *pP) {
commandReturnCmdl = strdup(cmd);
/* split */
argv[0] = "webhttrack";
argv[0] = strdup("webhttrack");
argv[1] = cmd;
argc++;
i = 0;
@@ -264,6 +343,7 @@ static void back_launch_cmd(void *pP) {
/* init */
hts_init();
global_opt = opt = hts_create_opt();
assert(opt->size_httrackp == sizeof(httrackp));
/* run */
commandReturn = webhttrack_runmain(opt, argc, argv);
@@ -283,6 +363,7 @@ static void back_launch_cmd(void *pP) {
/* finished */
commandEnd = 1;
DEBUG(fprintf(stderr, "commandEnd=1\n"));
/* free */
free(cmd);
@@ -292,7 +373,9 @@ static void back_launch_cmd(void *pP) {
void webhttrack_main(char *cmd) {
commandRunning = 1;
DEBUG(fprintf(stderr, "commandRunning=1\n"));
hts_newthread(back_launch_cmd, (void *) strdup(cmd));
background_threads++; /* Do not wait for this thread! */
}
void webhttrack_lock(void) {
@@ -330,8 +413,11 @@ static int webhttrack_runmain(httrackp * opt, int argc, char **argv) {
CHAIN_FUNCTION(opt, sendhead, htsshow_sendheader, NULL);
CHAIN_FUNCTION(opt, receivehead, htsshow_receiveheader, NULL);
/* Rock'in! */
ret = hts_main2(argc, argv, opt);
htsthread_wait_n(1);
/* Wait for pending threads to finish */
htsthread_wait_n(background_threads);
return ret;
}
@@ -395,12 +481,14 @@ void __cdecl htsshow_init(t_hts_callbackarg * carg) {
void __cdecl htsshow_uninit(t_hts_callbackarg * carg) {
}
int __cdecl htsshow_start(t_hts_callbackarg * carg, httrackp * opt) {
DEBUG(fprintf(stderr, "htsshow_start()\n"));
return 1;
}
int __cdecl htsshow_chopt(t_hts_callbackarg * carg, httrackp * opt) {
return htsshow_start(carg, opt);
}
int __cdecl htsshow_end(t_hts_callbackarg * carg, httrackp * opt) {
DEBUG(fprintf(stderr, "htsshow_end()\n"));
return 1;
}
int __cdecl htsshow_preprocesshtml(t_hts_callbackarg * carg, httrackp * opt,

Some files were not shown because too many files have changed in this diff Show More