mirror of
https://github.com/moparisthebest/wget
synced 2024-07-03 16:38:41 -04:00
Steven Schweda's VMS patch.
This commit is contained in:
parent
0a0d73a03f
commit
714ccdcd84
@ -39,7 +39,11 @@ as that of the covered work. */
|
||||
|
||||
#ifndef WINDOWS
|
||||
# include <sys/socket.h>
|
||||
# include <netdb.h>
|
||||
# ifdef __VMS
|
||||
# include "vms_ip.h"
|
||||
# else /* def __VMS */
|
||||
# include <netdb.h>
|
||||
# endif /* def __VMS [else] */
|
||||
# include <netinet/in.h>
|
||||
# ifndef __BEOS__
|
||||
# include <arpa/inet.h>
|
||||
|
@ -400,7 +400,8 @@ write_backup_file (const char *file, downloaded_file_t downloaded_file_return)
|
||||
/* Rather than just writing over the original .html file with the
|
||||
converted version, save the former to *.orig. Note we only do
|
||||
this for files we've _successfully_ downloaded, so we don't
|
||||
clobber .orig files sitting around from previous invocations. */
|
||||
clobber .orig files sitting around from previous invocations.
|
||||
On VMS, use "_orig" instead of ".orig". See "wget.h". */
|
||||
|
||||
/* Construct the backup filename as the original name plus ".orig". */
|
||||
size_t filename_len = strlen (file);
|
||||
@ -422,9 +423,9 @@ write_backup_file (const char *file, downloaded_file_t downloaded_file_return)
|
||||
else /* downloaded_file_return == FILE_DOWNLOADED_NORMALLY */
|
||||
{
|
||||
/* Append ".orig" to the name. */
|
||||
filename_plus_orig_suffix = alloca (filename_len + sizeof (".orig"));
|
||||
filename_plus_orig_suffix = alloca (filename_len + sizeof ("ORIG_SFX"));
|
||||
strcpy (filename_plus_orig_suffix, file);
|
||||
strcpy (filename_plus_orig_suffix + filename_len, ".orig");
|
||||
strcpy (filename_plus_orig_suffix + filename_len, "ORIG_SFX");
|
||||
}
|
||||
|
||||
if (!converted_files)
|
||||
|
@ -887,6 +887,42 @@ ftp_cwd (int csock, const char *dir)
|
||||
return FTPOK;
|
||||
}
|
||||
|
||||
/* Sends DELE command to the FTP server. */
|
||||
uerr_t
|
||||
ftp_dele (int csock, const char *file)
|
||||
{
|
||||
char *request, *respline;
|
||||
int nwritten;
|
||||
uerr_t err;
|
||||
|
||||
/* Send DELE request. */
|
||||
request = ftp_request ("DELE", file);
|
||||
nwritten = fd_write (csock, request, strlen (request), -1.0);
|
||||
if (nwritten < 0)
|
||||
{
|
||||
xfree (request);
|
||||
return WRITEFAILED;
|
||||
}
|
||||
xfree (request);
|
||||
/* Get appropriate response. */
|
||||
err = ftp_response (csock, &respline);
|
||||
if (err != FTPOK)
|
||||
return err; /* Return with early bad status. */
|
||||
|
||||
/* All OK, so far. */
|
||||
if (*respline == '5')
|
||||
{
|
||||
err = FTPNSFOD; /* Permanent Negative Completion. */
|
||||
}
|
||||
else if (*respline != '2') /* Success might be 226 or 250 (or ???). */
|
||||
{
|
||||
err = FTPRERR; /* Not Positive Completion. */
|
||||
}
|
||||
|
||||
xfree (respline); /* Free "respline" storage. */
|
||||
return err; /* Return response-based status code. */
|
||||
}
|
||||
|
||||
/* Sends REST command to the FTP server. */
|
||||
uerr_t
|
||||
ftp_rest (int csock, wgint offset)
|
||||
@ -956,7 +992,7 @@ ftp_retr (int csock, const char *file)
|
||||
/* Sends the LIST command to the server. If FILE is NULL, send just
|
||||
`LIST' (no space). */
|
||||
uerr_t
|
||||
ftp_list (int csock, const char *file)
|
||||
ftp_list (int csock, const char *file, enum stype rs)
|
||||
{
|
||||
char *request, *respline;
|
||||
int nwritten;
|
||||
@ -967,6 +1003,13 @@ ftp_list (int csock, const char *file)
|
||||
const char *list_commands[] = { "LIST -a",
|
||||
"LIST" };
|
||||
|
||||
/* 2008-01-29 SMS. For a VMS FTP server, where "LIST -a" may not
|
||||
fail, but will never do what is desired here, skip directly to the
|
||||
simple "LIST" command (assumed to be the last one in the list).
|
||||
*/
|
||||
if (rs == ST_VMS)
|
||||
i = countof (list_commands)- 1;
|
||||
|
||||
do {
|
||||
/* Send request. */
|
||||
request = ftp_request (list_commands[i], file);
|
||||
|
550
src/ftp-ls.c
550
src/ftp-ls.c
@ -557,27 +557,113 @@ ftp_parse_winnt_ls (const char *file)
|
||||
return dir;
|
||||
}
|
||||
|
||||
/* Converts VMS symbolic permissions to number-style ones, e.g. string
|
||||
RWED,RWE,RE to 755. "D" (delete) is taken to be equal to "W"
|
||||
(write). Inspired by a patch of Stoyan Lekov <lekov@eda.bg>. */
|
||||
static int
|
||||
vmsperms (const char *s)
|
||||
{
|
||||
int perms = 0;
|
||||
|
||||
do
|
||||
|
||||
/* Convert the VMS-style directory listing stored in "file" to a
|
||||
linked list of fileinfo (system-independent) entries. The contents
|
||||
of FILE are considered to be produced by the standard VMS
|
||||
"DIRECTORY [/SIZE [= ALL]] /DATE [/OWNER] [/PROTECTION]" command,
|
||||
more or less. (Different VMS FTP servers may have different headers,
|
||||
and may not supply the same data, but all should be subsets of this.)
|
||||
|
||||
VMS normally provides local (server) time and date information.
|
||||
Define the logical name or environment variable
|
||||
"WGET_TIMEZONE_DIFFERENTIAL" (seconds) to adjust the receiving local
|
||||
times if different from the remote local times.
|
||||
|
||||
2005-02-23 SMS.
|
||||
Added code to eliminate "^" escape characters from ODS5 extended file
|
||||
names. The TCPIP FTP server (V5.4) seems to prefer requests which do
|
||||
not use the escaped names which it provides.
|
||||
*/
|
||||
|
||||
#define VMS_DEFAULT_PROT_FILE 0644
|
||||
#define VMS_DEFAULT_PROT_DIR 0755
|
||||
|
||||
/* 2005-02-23 SMS.
|
||||
eat_carets().
|
||||
|
||||
Delete ODS5 extended file name escape characters ("^") in the
|
||||
original buffer.
|
||||
Note that the current scheme does not handle all EFN cases, but it
|
||||
could be made more complicated.
|
||||
*/
|
||||
|
||||
static void eat_carets( char *str)
|
||||
/* char *str; Source pointer. */
|
||||
{
|
||||
char *strd; /* Destination pointer. */
|
||||
char hdgt;
|
||||
unsigned char uchr;
|
||||
unsigned char prop;
|
||||
|
||||
/* Skip ahead to the first "^", if any. */
|
||||
while ((*str != '\0') && (*str != '^'))
|
||||
str++;
|
||||
|
||||
/* If no caret was found, quit early. */
|
||||
if (*str != '\0')
|
||||
{
|
||||
/* Shift characters leftward as carets are found. */
|
||||
strd = str;
|
||||
while (*str != '\0')
|
||||
{
|
||||
switch (*s) {
|
||||
case ',': perms <<= 3; break;
|
||||
case 'R': perms |= 4; break;
|
||||
case 'W': perms |= 2; break;
|
||||
case 'D': perms |= 2; break;
|
||||
case 'E': perms |= 1; break;
|
||||
default: DEBUGP(("wrong VMS permissons!\n"));
|
||||
uchr = *str;
|
||||
if (uchr == '^')
|
||||
{
|
||||
/* Found a caret. Skip it, and check the next character. */
|
||||
uchr = *(++str);
|
||||
prop = char_prop[ uchr];
|
||||
if (prop& 64)
|
||||
{
|
||||
/* Hex digit. Get char code from this and next hex digit. */
|
||||
if (uchr <= '9')
|
||||
{
|
||||
hdgt = uchr- '0'; /* '0' - '9' -> 0 - 9. */
|
||||
}
|
||||
else
|
||||
{
|
||||
hdgt = ((uchr- 'A')& 7)+ 10; /* [Aa] - [Ff] -> 10 - 15. */
|
||||
}
|
||||
hdgt <<= 4; /* X16. */
|
||||
uchr = *(++str); /* Next char must be hex digit. */
|
||||
if (uchr <= '9')
|
||||
{
|
||||
uchr = hdgt+ uchr- '0';
|
||||
}
|
||||
else
|
||||
{
|
||||
uchr = hdgt+ ((uchr- 'A')& 15)+ 10;
|
||||
}
|
||||
}
|
||||
else if (uchr == '_')
|
||||
{
|
||||
/* Convert escaped "_" to " ". */
|
||||
uchr = ' ';
|
||||
}
|
||||
else if (uchr == '/')
|
||||
{
|
||||
/* Convert escaped "/" (invalid Zip) to "?" (invalid VMS). */
|
||||
/* Note that this is a left-over from Info-ZIP code, and is
|
||||
probably of little value here, except perhaps to avoid
|
||||
directory confusion which an unconverted slash might cause.
|
||||
*/
|
||||
uchr = '?';
|
||||
}
|
||||
/* Else, not a hex digit. Must be a simple escaped character
|
||||
(or Unicode, which is not yet handled here).
|
||||
*/
|
||||
}
|
||||
/* Else, not a caret. Use as-is. */
|
||||
*strd = uchr;
|
||||
|
||||
/* Advance destination and source pointers. */
|
||||
strd++;
|
||||
str++;
|
||||
}
|
||||
while (*++s);
|
||||
return perms;
|
||||
/* Terminate the destination string. */
|
||||
*strd = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -585,20 +671,16 @@ static struct fileinfo *
|
||||
ftp_parse_vms_ls (const char *file)
|
||||
{
|
||||
FILE *fp;
|
||||
/* #### A third copy of more-or-less the same array ? */
|
||||
static const char *months[] = {
|
||||
"JAN", "FEB", "MAR", "APR", "MAY", "JUN",
|
||||
"JUL", "AUG", "SEP", "OCT", "NOV", "DEC"
|
||||
};
|
||||
int i;
|
||||
int year, month, day; /* for time analysis */
|
||||
int hour, min, sec;
|
||||
int dt, i, j, len;
|
||||
int perms;
|
||||
time_t timenow;
|
||||
struct tm timestruct;
|
||||
char date_str[ 32];
|
||||
|
||||
char *line, *tok; /* tokenizer */
|
||||
char *line, *tok; /* tokenizer */
|
||||
struct fileinfo *dir, *l, cur; /* list creation */
|
||||
|
||||
fp = fopen (file, "rb");
|
||||
fp = fopen (file, "r");
|
||||
if (!fp)
|
||||
{
|
||||
logprintf (LOG_NOTQUIET, "%s: %s\n", file, strerror (errno));
|
||||
@ -606,188 +688,334 @@ ftp_parse_vms_ls (const char *file)
|
||||
}
|
||||
dir = l = NULL;
|
||||
|
||||
/* Skip empty line. */
|
||||
line = read_whole_line (fp);
|
||||
xfree_null (line);
|
||||
/* Skip blank lines, Directory heading, and more blank lines. */
|
||||
|
||||
/* Skip "Directory PUB$DEVICE[PUB]" */
|
||||
line = read_whole_line (fp);
|
||||
xfree_null (line);
|
||||
j = 0; /* Expecting initial blank line(s). */
|
||||
while (1)
|
||||
{
|
||||
line = read_whole_line (fp);
|
||||
if (line == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i = clean_line (line);
|
||||
if (i <= 0)
|
||||
{
|
||||
xfree (line); /* Free useless line storage. */
|
||||
continue; /* Blank line. Keep looking. */
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((j == 0) && (line[ i- 1] == ']'))
|
||||
{
|
||||
/* Found Directory heading line. Next non-blank line
|
||||
is significant.
|
||||
*/
|
||||
j = 1;
|
||||
}
|
||||
else if (!strncmp (line, "Total of ", 9))
|
||||
{
|
||||
/* Found "Total of ..." footing line. No valid data
|
||||
will follow (empty directory).
|
||||
*/
|
||||
xfree (line); /* Free useless line storage. */
|
||||
line = NULL; /* Arrange for early exit. */
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
break; /* Must be significant data. */
|
||||
}
|
||||
}
|
||||
xfree (line); /* Free useless line storage. */
|
||||
}
|
||||
}
|
||||
|
||||
/* Skip empty line. */
|
||||
line = read_whole_line (fp);
|
||||
xfree_null (line);
|
||||
/* Read remainder of file until the next blank line or EOF. */
|
||||
|
||||
/* Line loop to end of file: */
|
||||
while ((line = read_whole_line (fp)) != NULL)
|
||||
while (line != NULL)
|
||||
{
|
||||
char *p;
|
||||
i = clean_line (line);
|
||||
if (!i)
|
||||
{
|
||||
xfree (line);
|
||||
break;
|
||||
}
|
||||
|
||||
/* First column: Name. A bit of black magic again. The name my be
|
||||
either ABCD.EXT or ABCD.EXT;NUM and it might be on a separate
|
||||
line. Therefore we will first try to get the complete name
|
||||
until the first space character; if it fails, we assume that the name
|
||||
occupies the whole line. After that we search for the version
|
||||
separator ";", we remove it and check the extension of the file;
|
||||
extension .DIR denotes directory. */
|
||||
/* The first token is the file name. After a long name, other
|
||||
data may be on the following line. A valid directory name ends
|
||||
in ".DIR;1" (any case), although some VMS FTP servers may omit
|
||||
the version number (";1").
|
||||
*/
|
||||
|
||||
tok = strtok(line, " ");
|
||||
if (tok == NULL) tok = line;
|
||||
DEBUGP(("file name: '%s'\n", tok));
|
||||
for (p = tok ; *p && *p != ';' ; p++)
|
||||
;
|
||||
if (*p == ';') *p = '\0';
|
||||
p = tok + strlen(tok) - 4;
|
||||
if (!strcmp(p, ".DIR")) *p = '\0';
|
||||
cur.name = xstrdup(tok);
|
||||
DEBUGP(("Name: '%s'\n", cur.name));
|
||||
DEBUGP(("file name: '%s'\n", tok));
|
||||
|
||||
/* If the name ends on .DIR or .DIR;#, it's a directory. We also set
|
||||
the file size to zero as the listing does tell us only the size in
|
||||
filesystem blocks - for an integrity check (when mirroring, for
|
||||
example) we would need the size in bytes. */
|
||||
|
||||
if (! *p)
|
||||
/* Stripping the version number on a VMS system would be wrong.
|
||||
It may be foolish on a non-VMS system, too, but that's someone
|
||||
else's problem. (Define PRESERVE_VMS_VERSIONS for proper
|
||||
operation on other operating systems.)
|
||||
|
||||
2005-02-23 SMS.
|
||||
ODS5 extended file names may contain escaped semi-colons, so
|
||||
the version number is identified as right-side decimal digits
|
||||
led by a non-escaped semi-colon. It may be absent.
|
||||
*/
|
||||
|
||||
#if (!defined( __VMS) && !defined( PRESERVE_VMS_VERSIONS))
|
||||
for (p = tok+ strlen( tok); (--p > tok) && ISDIGIT( *p); );
|
||||
if ((*p == ';') && (*(p- 1) != '^'))
|
||||
{
|
||||
*p = '\0';
|
||||
}
|
||||
#endif /* (!defined( __VMS) && !defined( PRESERVE_VMS_VERSIONS)) */
|
||||
|
||||
/* 2005-02-23 SMS.
|
||||
Eliminate "^" escape characters from ODS5 extended file name.
|
||||
(A caret is invalid in an ODS2 name, so this is always safe.)
|
||||
*/
|
||||
eat_carets( tok);
|
||||
DEBUGP(("file name-^: '%s'\n", tok));
|
||||
|
||||
/* Differentiate between a directory and any other file. A VMS
|
||||
listing may not include file protections (permissions). Set a
|
||||
default permissions value (according to the file type), which
|
||||
may be overwritten later. Store directory names without the
|
||||
".DIR;1" file type and version number, as the plain name is
|
||||
what will work in a CWD command.
|
||||
*/
|
||||
len = strlen( tok);
|
||||
if (!strncasecmp( (tok+ (len- 4)), ".DIR", 4))
|
||||
{
|
||||
*(tok+ (len -= 4)) = '\0'; /* Discard ".DIR". */
|
||||
cur.type = FT_DIRECTORY;
|
||||
cur.size = 0;
|
||||
DEBUGP(("Directory\n"));
|
||||
cur.perms = VMS_DEFAULT_PROT_DIR;
|
||||
DEBUGP(("Directory (nv)\n"));
|
||||
}
|
||||
else if (!strncasecmp( (tok+ (len- 6)), ".DIR;1", 6))
|
||||
{
|
||||
*(tok+ (len -= 6)) = '\0'; /* Discard ".DIR;1". */
|
||||
cur.type = FT_DIRECTORY;
|
||||
cur.perms = VMS_DEFAULT_PROT_DIR;
|
||||
DEBUGP(("Directory (v)\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
cur.type = FT_PLAINFILE;
|
||||
cur.perms = VMS_DEFAULT_PROT_FILE;
|
||||
DEBUGP(("File\n"));
|
||||
}
|
||||
cur.name = xstrdup(tok);
|
||||
DEBUGP(("Name: '%s'\n", cur.name));
|
||||
|
||||
/* Null the date and time string. */
|
||||
*date_str = '\0';
|
||||
|
||||
/* VMS lacks symbolic links. */
|
||||
cur.linkto = NULL;
|
||||
|
||||
/* VMS reports file sizes in (512-byte) disk blocks, not bytes,
|
||||
hence useless for an integrity check based on byte-count.
|
||||
Set size to unknown.
|
||||
*/
|
||||
cur.size = 0;
|
||||
|
||||
/* Second column, if exists, or the first column of the next line
|
||||
contain file size in blocks. We will skip it. */
|
||||
/* Get token 2, if any. A long name may force all other data onto
|
||||
a second line. If needed, read the second line.
|
||||
*/
|
||||
|
||||
tok = strtok(NULL, " ");
|
||||
if (tok == NULL)
|
||||
{
|
||||
DEBUGP(("Getting additional line\n"));
|
||||
xfree (line);
|
||||
line = read_whole_line (fp);
|
||||
if (!line)
|
||||
{
|
||||
DEBUGP(("empty line read, leaving listing parser\n"));
|
||||
break;
|
||||
}
|
||||
i = clean_line (line);
|
||||
if (!i)
|
||||
{
|
||||
DEBUGP(("confusing VMS listing item, leaving listing parser\n"));
|
||||
DEBUGP(("Getting additional line.\n"));
|
||||
xfree (line);
|
||||
break;
|
||||
line = read_whole_line (fp);
|
||||
if (!line)
|
||||
{
|
||||
DEBUGP(("EOF. Leaving listing parser.\n"));
|
||||
break;
|
||||
}
|
||||
|
||||
/* Second line must begin with " ". Otherwise, it's a first
|
||||
line (and we may be confused).
|
||||
*/
|
||||
if (i <= 0)
|
||||
{
|
||||
/* Blank line. End of significant file listing. */
|
||||
DEBUGP(("Blank line. Leaving listing parser.\n"));
|
||||
xfree (line); /* Free useless line storage. */
|
||||
break;
|
||||
}
|
||||
else if (line[ 0] != ' ')
|
||||
{
|
||||
DEBUGP(("Non-blank in column 1. Must be a new file name?\n"));
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
tok = strtok (line, " ");
|
||||
if (tok == NULL)
|
||||
{
|
||||
/* Unexpected non-empty but apparently blank line. */
|
||||
DEBUGP(("Null token. Leaving listing parser.\n"));
|
||||
xfree (line); /* Free useless line storage. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
tok = strtok(line, " ");
|
||||
}
|
||||
DEBUGP(("second token: '%s'\n", tok));
|
||||
|
||||
/* Third/Second column: Date DD-MMM-YYYY. */
|
||||
/* Analyze tokens. (Order is not significant, except date must
|
||||
precede time.)
|
||||
|
||||
tok = strtok(NULL, "-");
|
||||
if (tok == NULL) continue;
|
||||
DEBUGP(("day: '%s'\n",tok));
|
||||
day = atoi(tok);
|
||||
tok = strtok(NULL, "-");
|
||||
if (!tok)
|
||||
{
|
||||
/* If the server produces garbage like
|
||||
'EA95_0PS.GZ;1 No privilege for attempted operation'
|
||||
the first strtok(NULL, "-") will return everything until the end
|
||||
of the line and only the next strtok() call will return NULL. */
|
||||
DEBUGP(("nonsense in VMS listing, skipping this line\n"));
|
||||
xfree (line);
|
||||
break;
|
||||
}
|
||||
for (i=0; i<12; i++) if (!strcmp(tok,months[i])) break;
|
||||
/* Uknown months are mapped to January */
|
||||
month = i % 12 ;
|
||||
tok = strtok (NULL, " ");
|
||||
if (tok == NULL) continue;
|
||||
year = atoi (tok) - 1900;
|
||||
DEBUGP(("date parsed\n"));
|
||||
Size: ddd or ddd/ddd (where "ddd" is a decimal number)
|
||||
Date: DD-MMM-YYYY
|
||||
Time: HH:MM or HH:MM:SS or HH:MM:SS.CC
|
||||
Owner: [user] or [user,group]
|
||||
Protection: (ppp,ppp,ppp,ppp) (where "ppp" is "RWED" or some
|
||||
subset thereof, for System, Owner, Group, World.
|
||||
|
||||
/* Fourth/Third column: Time hh:mm[:ss] */
|
||||
tok = strtok (NULL, " ");
|
||||
if (tok == NULL) continue;
|
||||
min = sec = 0;
|
||||
p = tok;
|
||||
hour = atoi (p);
|
||||
for (; *p && *p != ':'; ++p)
|
||||
;
|
||||
if (*p)
|
||||
min = atoi (++p);
|
||||
for (; *p && *p != ':'; ++p)
|
||||
;
|
||||
if (*p)
|
||||
sec = atoi (++p);
|
||||
If permission is lacking, info may be replaced by the string:
|
||||
"No privilege for attempted operation".
|
||||
*/
|
||||
while (tok != NULL)
|
||||
{
|
||||
DEBUGP (("Token: >%s<: ", tok));
|
||||
|
||||
DEBUGP(("YYYY/MM/DD HH:MM:SS - %d/%02d/%02d %02d:%02d:%02d\n",
|
||||
year+1900, month, day, hour, min, sec));
|
||||
|
||||
/* Build the time-stamp (copy & paste from above) */
|
||||
timestruct.tm_sec = sec;
|
||||
timestruct.tm_min = min;
|
||||
timestruct.tm_hour = hour;
|
||||
timestruct.tm_mday = day;
|
||||
timestruct.tm_mon = month;
|
||||
timestruct.tm_year = year;
|
||||
timestruct.tm_wday = 0;
|
||||
timestruct.tm_yday = 0;
|
||||
timestruct.tm_isdst = -1;
|
||||
cur.tstamp = mktime (×truct); /* store the time-stamp */
|
||||
if ((strlen( tok) < 12) && (strchr( tok, '-') != NULL))
|
||||
{
|
||||
/* Date. */
|
||||
DEBUGP (("Date.\n"));
|
||||
strcpy( date_str, tok);
|
||||
strcat( date_str, " ");
|
||||
}
|
||||
else if ((strlen( tok) < 12) && (strchr( tok, ':') != NULL))
|
||||
{
|
||||
/* Time. */
|
||||
DEBUGP (("Time. "));
|
||||
strncat( date_str,
|
||||
tok,
|
||||
(sizeof( date_str)- strlen( date_str)- 1));
|
||||
DEBUGP (("Date time: >%s<\n", date_str));
|
||||
}
|
||||
else if (strchr( tok, '[') != NULL)
|
||||
{
|
||||
/* Owner. (Ignore.) */
|
||||
DEBUGP (("Owner.\n"));
|
||||
}
|
||||
else if (strchr( tok, '(') != NULL)
|
||||
{
|
||||
/* Protections (permissions). */
|
||||
perms = 0;
|
||||
j = 0;
|
||||
for (i = 0; i < strlen( tok); i++)
|
||||
{
|
||||
switch (tok[ i])
|
||||
{
|
||||
case '(':
|
||||
break;
|
||||
case ')':
|
||||
break;
|
||||
case ',':
|
||||
if (j == 0)
|
||||
{
|
||||
perms = 0;
|
||||
j = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
perms <<= 3;
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
perms |= 4;
|
||||
break;
|
||||
case 'W':
|
||||
perms |= 2;
|
||||
break;
|
||||
case 'E':
|
||||
perms |= 1;
|
||||
break;
|
||||
case 'D':
|
||||
perms |= 2;
|
||||
break;
|
||||
}
|
||||
}
|
||||
cur.perms = perms;
|
||||
DEBUGP (("Prot. perms = %0o.\n", cur.perms));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Nondescript. Probably size(s), probably in blocks.
|
||||
Could be "No privilege ..." message. (Ignore.)
|
||||
*/
|
||||
DEBUGP (("Ignored (size?).\n"));
|
||||
}
|
||||
|
||||
tok = strtok (NULL, " ");
|
||||
}
|
||||
|
||||
/* Tokens exhausted. Interpret the data, and fill in the
|
||||
structure.
|
||||
*/
|
||||
/* Fill tm timestruct according to date-time string. Fractional
|
||||
seconds are ignored. Default to current time, if conversion
|
||||
fails.
|
||||
*/
|
||||
timenow = time( NULL);
|
||||
localtime_r( &timenow, ×truct);
|
||||
strptime( date_str, "%d-%b-%Y %H:%M:%S", ×truct);
|
||||
|
||||
/* Convert struct tm local time to time_t local time. */
|
||||
timenow = mktime (×truct);
|
||||
/* Offset local time according to environment variable (seconds). */
|
||||
if ((tok = getenv( "WGET_TIMEZONE_DIFFERENTIAL")) != NULL)
|
||||
{
|
||||
dt = atoi( tok);
|
||||
DEBUGP (("Time differential = %d.\n", dt));
|
||||
}
|
||||
else
|
||||
{
|
||||
dt = 0;
|
||||
}
|
||||
|
||||
if (dt >= 0)
|
||||
{
|
||||
timenow += dt;
|
||||
}
|
||||
else
|
||||
{
|
||||
timenow -= (-dt);
|
||||
}
|
||||
cur.tstamp = timenow; /* Store the time-stamp. */
|
||||
DEBUGP(("Timestamp: %ld\n", cur.tstamp));
|
||||
|
||||
/* Skip the fifth column */
|
||||
|
||||
tok = strtok(NULL, " ");
|
||||
if (tok == NULL) continue;
|
||||
|
||||
/* Sixth column: Permissions */
|
||||
|
||||
tok = strtok(NULL, ","); /* Skip the VMS-specific SYSTEM permissons */
|
||||
if (tok == NULL) continue;
|
||||
tok = strtok(NULL, ")");
|
||||
if (tok == NULL)
|
||||
{
|
||||
DEBUGP(("confusing VMS permissions, skipping line\n"));
|
||||
xfree (line);
|
||||
continue;
|
||||
}
|
||||
/* Permissons have the format "RWED,RWED,RE" */
|
||||
cur.perms = vmsperms(tok);
|
||||
DEBUGP(("permissions: %s -> 0%o\n", tok, cur.perms));
|
||||
|
||||
cur.linkto = NULL;
|
||||
|
||||
/* And put everything into the linked list */
|
||||
/* Add the data for this item to the linked list, */
|
||||
if (!dir)
|
||||
{
|
||||
l = dir = xnew (struct fileinfo);
|
||||
l = dir = (struct fileinfo *)xmalloc (sizeof (struct fileinfo));
|
||||
memcpy (l, &cur, sizeof (cur));
|
||||
l->prev = l->next = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
cur.prev = l;
|
||||
l->next = xnew (struct fileinfo);
|
||||
l->next = (struct fileinfo *)xmalloc (sizeof (struct fileinfo));
|
||||
l = l->next;
|
||||
memcpy (l, &cur, sizeof (cur));
|
||||
l->next = NULL;
|
||||
}
|
||||
|
||||
/* Free old line storage. Read a new line. */
|
||||
xfree (line);
|
||||
line = read_whole_line (fp);
|
||||
if (line != NULL)
|
||||
{
|
||||
i = clean_line (line);
|
||||
if (i <= 0)
|
||||
{
|
||||
/* Blank line. End of significant file listing. */
|
||||
xfree (line); /* Free useless line storage. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose (fp);
|
||||
|
342
src/ftp.c
342
src/ftp.c
@ -50,6 +50,11 @@ as that of the covered work. */
|
||||
#include "convert.h" /* for downloaded_file */
|
||||
#include "recur.h" /* for INFINITE_RECURSION */
|
||||
|
||||
#ifdef __VMS
|
||||
# include "vms.h"
|
||||
#endif /* def __VMS */
|
||||
|
||||
|
||||
/* File where the "ls -al" listing will be saved. */
|
||||
#ifdef MSDOS
|
||||
#define LIST_FILENAME "_listing"
|
||||
@ -245,6 +250,7 @@ getftp (struct url *u, wgint *len, wgint restval, ccon *con)
|
||||
bool rest_failed = false;
|
||||
int flags;
|
||||
wgint rd_size;
|
||||
char type_char;
|
||||
|
||||
assert (con != NULL);
|
||||
assert (con->target != NULL);
|
||||
@ -272,7 +278,6 @@ getftp (struct url *u, wgint *len, wgint restval, ccon *con)
|
||||
csock = con->csock;
|
||||
else /* cmd & DO_LOGIN */
|
||||
{
|
||||
char type_char;
|
||||
char *host = con->proxy ? con->proxy->host : u->host;
|
||||
int port = con->proxy ? con->proxy->port : u->port;
|
||||
char *logname = user;
|
||||
@ -404,6 +409,17 @@ Error in server response, closing control connection.\n"));
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* 2004-09-17 SMS.
|
||||
Don't help me out. Please.
|
||||
A reasonably recent VMS FTP server will cope just fine with
|
||||
UNIX file specifications. This code just spoils things.
|
||||
Discarding the device name, for example, is not a wise move.
|
||||
This code was disabled but left in as an example of what not
|
||||
to do.
|
||||
*/
|
||||
|
||||
/* VMS will report something like "PUB$DEVICE:[INITIAL.FOLDER]".
|
||||
Convert it to "/INITIAL/FOLDER" */
|
||||
if (con->rs == ST_VMS)
|
||||
@ -427,6 +443,8 @@ Error in server response, closing control connection.\n"));
|
||||
DEBUGP ((" new = '%s'\n\n", con->id));
|
||||
}
|
||||
}
|
||||
#endif /* 0 */
|
||||
|
||||
if (!opt.server_response)
|
||||
logputs (LOG_VERBOSE, _("done.\n"));
|
||||
|
||||
@ -476,6 +494,11 @@ Error in server response, closing control connection.\n"));
|
||||
logputs (LOG_VERBOSE, _("==> CWD not needed.\n"));
|
||||
else
|
||||
{
|
||||
char *targ;
|
||||
int cwd_count;
|
||||
int cwd_end;
|
||||
int cwd_start;
|
||||
|
||||
char *target = u->dir;
|
||||
|
||||
DEBUGP (("changing working directory\n"));
|
||||
@ -494,11 +517,26 @@ Error in server response, closing control connection.\n"));
|
||||
in "bar", not in "foo/bar", as would be customary
|
||||
elsewhere. */
|
||||
|
||||
/* 2004-09-20 SMS.
|
||||
Why is this wise even on UNIX? It certainly fouls VMS.
|
||||
See below for a more reliable, more universal method.
|
||||
*/
|
||||
|
||||
/* 2008-04-22 MJC.
|
||||
I'm not crazy about it either. I'm informed it's useful
|
||||
for misconfigured servers that have some dirs in the path
|
||||
with +x but -r, but this method is not RFC-conformant. I
|
||||
understand the need to deal with crappy server
|
||||
configurations, but it's far better to use the canonical
|
||||
method first, and fall back to kludges second.
|
||||
*/
|
||||
|
||||
if (target[0] != '/'
|
||||
&& !(con->rs != ST_UNIX
|
||||
&& c_isalpha (target[0])
|
||||
&& target[1] == ':')
|
||||
&& con->rs != ST_OS400)
|
||||
&& (con->rs != ST_OS400)
|
||||
&& (con->rs != ST_VMS))
|
||||
{
|
||||
int idlen = strlen (con->id);
|
||||
char *ntarget, *p;
|
||||
@ -518,6 +556,17 @@ Error in server response, closing control connection.\n"));
|
||||
target = ntarget;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* 2004-09-17 SMS.
|
||||
Don't help me out. Please.
|
||||
A reasonably recent VMS FTP server will cope just fine with
|
||||
UNIX file specifications. This code just spoils things.
|
||||
Discarding the device name, for example, is not a wise
|
||||
move.
|
||||
This code was disabled but left in as an example of what
|
||||
not to do.
|
||||
*/
|
||||
|
||||
/* If the FTP host runs VMS, we will have to convert the absolute
|
||||
directory path in UNIX notation to absolute directory path in
|
||||
VMS notation as VMS FTP servers do not like UNIX notation of
|
||||
@ -543,10 +592,97 @@ Error in server response, closing control connection.\n"));
|
||||
DEBUGP ((" Unix: '%s'\n VMS: '%s'\n", target, ntarget));
|
||||
target = ntarget;
|
||||
}
|
||||
#endif /* 0 */
|
||||
|
||||
/* 2004-09-20 SMS.
|
||||
A relative directory is relative to the initial directory.
|
||||
Thus, what _is_ useful on VMS (and probably elsewhere) is
|
||||
to CWD to the initial directory (ideally, whatever the
|
||||
server reports, _exactly_, NOT badly UNIX-ixed), and then
|
||||
CWD to the (new) relative directory. This should probably
|
||||
be restructured as a function, called once or twice, but
|
||||
I'm lazy enough to take the badly indented loop short-cut
|
||||
for now.
|
||||
*/
|
||||
|
||||
/* Decide on one pass (absolute) or two (relative).
|
||||
The VMS restriction may be relaxed when the squirrely code
|
||||
above is reformed.
|
||||
*/
|
||||
if ((con->rs == ST_VMS) && (target[0] != '/'))
|
||||
{
|
||||
cwd_start = 0;
|
||||
DEBUGP (("Using two-step CWD for relative path.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Go straight to the target. */
|
||||
cwd_start = 1;
|
||||
}
|
||||
|
||||
/* At least one VMS FTP server (TCPware V5.6-2) can switch to
|
||||
a UNIX emulation mode when given a UNIX-like directory
|
||||
specification (like "a/b/c"). If allowed to continue this
|
||||
way, LIST interpretation will be confused, because the
|
||||
system type (SYST response) will not be re-checked, and
|
||||
future UNIX-format directory listings (for multiple URLs or
|
||||
"-r") will be horribly misinterpreted.
|
||||
|
||||
The cheap and nasty work-around is to do a "CWD []" after a
|
||||
UNIX-like directory specification is used. (A single-level
|
||||
directory is harmless.) This puts the TCPware server back
|
||||
into VMS mode, and does no harm on other servers.
|
||||
|
||||
Unlike the rest of this block, this particular behavior
|
||||
_is_ VMS-specific, so it gets its own VMS test.
|
||||
*/
|
||||
if ((con->rs == ST_VMS) && (strchr( target, '/') != NULL))
|
||||
{
|
||||
cwd_end = 3;
|
||||
DEBUGP (("Using extra \"CWD []\" step for VMS server.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
cwd_end = 2;
|
||||
}
|
||||
|
||||
/* 2004-09-20 SMS. */
|
||||
/* Sorry about the deviant indenting. Laziness. */
|
||||
|
||||
for (cwd_count = cwd_start; cwd_count < cwd_end; cwd_count++)
|
||||
{
|
||||
switch (cwd_count)
|
||||
{
|
||||
case 0:
|
||||
/* Step one (optional): Go to the initial directory,
|
||||
exactly as reported by the server.
|
||||
*/
|
||||
targ = con->id;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
/* Step two: Go to the target directory. (Absolute or
|
||||
relative will work now.)
|
||||
*/
|
||||
targ = target;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
/* Step three (optional): "CWD []" to restore server
|
||||
VMS-ness.
|
||||
*/
|
||||
targ = "[]";
|
||||
break;
|
||||
|
||||
default:
|
||||
/* Can't happen. */
|
||||
assert (1);
|
||||
}
|
||||
|
||||
if (!opt.server_response)
|
||||
logprintf (LOG_VERBOSE, "==> CWD %s ... ", escnonprint (target));
|
||||
err = ftp_cwd (csock, target);
|
||||
logprintf (LOG_VERBOSE, "==> CWD (%d) %s ... ",
|
||||
cwd_count, escnonprint (target));
|
||||
err = ftp_cwd (csock, targ);
|
||||
/* FTPRERR, WRITEFAILED, FTPNSFOD */
|
||||
switch (err)
|
||||
{
|
||||
@ -578,7 +714,13 @@ Error in server response, closing control connection.\n"));
|
||||
}
|
||||
if (!opt.server_response)
|
||||
logputs (LOG_VERBOSE, _("done.\n"));
|
||||
}
|
||||
|
||||
} /* for */
|
||||
|
||||
/* 2004-09-20 SMS. */
|
||||
/* End of deviant indenting. */
|
||||
|
||||
} /* else */
|
||||
}
|
||||
else /* do not CWD */
|
||||
logputs (LOG_VERBOSE, _("==> CWD not required.\n"));
|
||||
@ -829,6 +971,10 @@ Error in server response, closing control connection.\n"));
|
||||
fd_close (local_sock);
|
||||
return err;
|
||||
case FTPOK:
|
||||
if (getenv( "FTP_DELETE") != NULL)
|
||||
{
|
||||
err = ftp_dele (csock, u->file);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
abort ();
|
||||
@ -846,7 +992,7 @@ Error in server response, closing control connection.\n"));
|
||||
/* As Maciej W. Rozycki (macro@ds2.pg.gda.pl) says, `LIST'
|
||||
without arguments is better than `LIST .'; confirmed by
|
||||
RFC959. */
|
||||
err = ftp_list (csock, NULL);
|
||||
err = ftp_list (csock, NULL, con->rs);
|
||||
/* FTPRERR, WRITEFAILED */
|
||||
switch (err)
|
||||
{
|
||||
@ -912,17 +1058,86 @@ Error in server response, closing control connection.\n"));
|
||||
}
|
||||
|
||||
/* Open the file -- if output_stream is set, use it instead. */
|
||||
|
||||
/* 2005-04-17 SMS.
|
||||
Note that having the output_stream ("-O") file opened in main()
|
||||
(main.c) rather limits the ability in VMS to open the file
|
||||
differently for ASCII versus binary FTP here. (Of course, doing it
|
||||
there allows a open failure to be detected immediately, without first
|
||||
connecting to the server.)
|
||||
*/
|
||||
if (!output_stream || con->cmd & DO_LIST)
|
||||
{
|
||||
/* On VMS, alter the name as required. */
|
||||
#ifdef __VMS
|
||||
char *targ;
|
||||
|
||||
targ = ods_conform( con->target);
|
||||
if (targ != con->target)
|
||||
{
|
||||
xfree( con->target);
|
||||
con->target = targ;
|
||||
}
|
||||
#endif /* def __VMS */
|
||||
|
||||
mkalldirs (con->target);
|
||||
if (opt.backups)
|
||||
rotate_backups (con->target);
|
||||
|
||||
/* 2005-04-15 SMS.
|
||||
For VMS, define common fopen() optional arguments, and a handy macro
|
||||
for use as a variable "binary" flag.
|
||||
Elsewhere, define a constant "binary" flag.
|
||||
Isn't it nice to have distinct text and binary file types?
|
||||
*/
|
||||
# define BIN_TYPE_TRANSFER (type_char != 'A')
|
||||
#ifdef __VMS
|
||||
# define FOPEN_OPT_ARGS "fop=sqo", "acc", acc_cb, &open_id
|
||||
# define FOPEN_OPT_ARGS_BIN "ctx=bin,stm", "rfm=fix", "mrs=512" FOPEN_OPT_ARGS
|
||||
# define BIN_TYPE_FILE (BIN_TYPE_TRANSFER && (opt.ftp_stmlf == 0))
|
||||
#else /* def __VMS */
|
||||
# define BIN_TYPE_FILE 1
|
||||
#endif /* def __VMS [else] */
|
||||
|
||||
if (restval && !(con->cmd & DO_LIST))
|
||||
fp = fopen (con->target, "ab");
|
||||
{
|
||||
#ifdef __VMS
|
||||
int open_id;
|
||||
|
||||
if (BIN_TYPE_FILE)
|
||||
{
|
||||
open_id = 3;
|
||||
fp = fopen (con->target, "ab", FOPEN_OPT_ARGS_BIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
open_id = 4;
|
||||
fp = fopen (con->target, "a", FOPEN_OPT_ARGS);
|
||||
}
|
||||
#else /* def __VMS */
|
||||
fp = fopen (con->target, "ab");
|
||||
#endif /* def __VMS [else] */
|
||||
}
|
||||
else if (opt.noclobber || opt.always_rest || opt.timestamping || opt.dirstruct
|
||||
|| opt.output_document)
|
||||
fp = fopen (con->target, "wb");
|
||||
{
|
||||
#ifdef __VMS
|
||||
int open_id;
|
||||
|
||||
if (BIN_TYPE_FILE)
|
||||
{
|
||||
open_id = 5;
|
||||
fp = fopen (con->target, "wb", FOPEN_OPT_ARGS_BIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
open_id = 6;
|
||||
fp = fopen (con->target, "w", FOPEN_OPT_ARGS);
|
||||
}
|
||||
#else /* def __VMS */
|
||||
fp = fopen (con->target, "wb");
|
||||
#endif /* def __VMS [else] */
|
||||
}
|
||||
else
|
||||
{
|
||||
fp = fopen_excl (con->target, true);
|
||||
@ -1049,6 +1264,22 @@ Error in server response, closing control connection.\n"));
|
||||
print it out. */
|
||||
if (opt.server_response && (con->cmd & DO_LIST))
|
||||
{
|
||||
/* 2005-02-25 SMS.
|
||||
Much of this work may already have been done, but repeating it should
|
||||
do no damage beyond wasting time.
|
||||
*/
|
||||
/* On VMS, alter the name as required. */
|
||||
#ifdef __VMS
|
||||
char *targ;
|
||||
|
||||
targ = ods_conform( con->target);
|
||||
if (targ != con->target)
|
||||
{
|
||||
xfree( con->target);
|
||||
con->target = targ;
|
||||
}
|
||||
#endif /* def __VMS */
|
||||
|
||||
mkalldirs (con->target);
|
||||
fp = fopen (con->target, "r");
|
||||
if (!fp)
|
||||
@ -1088,8 +1319,21 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con)
|
||||
uerr_t err;
|
||||
struct_stat st;
|
||||
|
||||
if (!con->target)
|
||||
con->target = url_file_name (u);
|
||||
/* Get the target, and set the name for the message accordingly. */
|
||||
if ((f == NULL) && (con->target))
|
||||
{
|
||||
/* Explicit file (like ".listing"). */
|
||||
locf = con->target;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* URL-derived file. Consider "-O file" name. */
|
||||
con->target = url_file_name (u);
|
||||
if (!opt.output_document)
|
||||
locf = con->target;
|
||||
else
|
||||
locf = opt.output_document;
|
||||
}
|
||||
|
||||
if (opt.noclobber && file_exists_p (con->target))
|
||||
{
|
||||
@ -1101,10 +1345,6 @@ ftp_loop_internal (struct url *u, struct fileinfo *f, ccon *con)
|
||||
|
||||
/* Remove it if it's a link. */
|
||||
remove_link (con->target);
|
||||
if (!opt.output_document)
|
||||
locf = con->target;
|
||||
else
|
||||
locf = opt.output_document;
|
||||
|
||||
count = 0;
|
||||
|
||||
@ -1360,7 +1600,8 @@ ftp_retrieve_list (struct url *u, struct fileinfo *f, ccon *con)
|
||||
struct fileinfo *orig;
|
||||
wgint local_size;
|
||||
time_t tml;
|
||||
bool dlthis;
|
||||
bool dlthis; /* Download this (file). */
|
||||
const char *actual_target = NULL;
|
||||
|
||||
/* Increase the depth. */
|
||||
++depth;
|
||||
@ -1529,37 +1770,51 @@ Already have correct symlink %s -> %s\n\n"),
|
||||
break;
|
||||
} /* switch */
|
||||
|
||||
|
||||
/* 2004-12-15 SMS.
|
||||
* Set permissions _before_ setting the times, as setting the
|
||||
* permissions changes the modified-time, at least on VMS.
|
||||
* Also, use the opt.output_document name here, too, as
|
||||
* appropriate. (Do the test once, and save the result.)
|
||||
*/
|
||||
|
||||
/* #### This code repeats in http.c and ftp.c. Move it to a
|
||||
function! */
|
||||
actual_target = NULL;
|
||||
if (opt.output_document)
|
||||
{
|
||||
if (output_stream_regular)
|
||||
actual_target = opt.output_document;
|
||||
}
|
||||
else
|
||||
actual_target = con->target;
|
||||
|
||||
/* If downloading a plain file, set valid (non-zero) permissions. */
|
||||
if (dlthis && (actual_target != NULL) && (f->type == FT_PLAINFILE))
|
||||
{
|
||||
if (f->perms)
|
||||
chmod (actual_target, f->perms);
|
||||
else
|
||||
DEBUGP (("Unrecognized permissions for %s.\n", actual_target));
|
||||
}
|
||||
|
||||
/* Set the time-stamp information to the local file. Symlinks
|
||||
are not to be stamped because it sets the stamp on the
|
||||
original. :( */
|
||||
if (!(f->type == FT_SYMLINK && !opt.retr_symlinks)
|
||||
&& f->tstamp != -1
|
||||
&& dlthis
|
||||
&& file_exists_p (con->target))
|
||||
{
|
||||
/* #### This code repeats in http.c and ftp.c. Move it to a
|
||||
function! */
|
||||
const char *fl = NULL;
|
||||
if (opt.output_document)
|
||||
{
|
||||
if (output_stream_regular)
|
||||
fl = opt.output_document;
|
||||
}
|
||||
else
|
||||
fl = con->target;
|
||||
if (fl)
|
||||
touch (fl, f->tstamp);
|
||||
}
|
||||
else if (f->tstamp == -1)
|
||||
logprintf (LOG_NOTQUIET, _("%s: corrupt time-stamp.\n"), con->target);
|
||||
|
||||
if (f->perms && f->type == FT_PLAINFILE && dlthis)
|
||||
if (actual_target != NULL)
|
||||
{
|
||||
if (opt.preserve_perm)
|
||||
chmod (con->target, f->perms);
|
||||
if (!(f->type == FT_SYMLINK && !opt.retr_symlinks)
|
||||
&& f->tstamp != -1
|
||||
&& dlthis
|
||||
&& file_exists_p (con->target))
|
||||
{
|
||||
touch (actual_target, f->tstamp);
|
||||
}
|
||||
else if (f->tstamp == -1)
|
||||
logprintf (LOG_NOTQUIET, _("%s: corrupt time-stamp.\n"),
|
||||
actual_target);
|
||||
}
|
||||
else
|
||||
DEBUGP (("Unrecognized permissions for %s.\n", con->target));
|
||||
|
||||
xfree (con->target);
|
||||
con->target = old_target;
|
||||
@ -1776,13 +2031,18 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action)
|
||||
logprintf (LOG_VERBOSE, _("No matches on pattern `%s'.\n"),
|
||||
escnonprint (u->file));
|
||||
}
|
||||
else /* GLOB_GETONE or GLOB_GETALL */
|
||||
else if (action == GLOB_GETONE) /* GLOB_GETONE or GLOB_GETALL */
|
||||
{
|
||||
/* Let's try retrieving it anyway. */
|
||||
con->st |= ON_YOUR_OWN;
|
||||
res = ftp_loop_internal (u, NULL, con);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* If action == GLOB_GETALL, and the file list is empty, there's
|
||||
no point in trying to download anything or in complaining about
|
||||
it. (An empty directory should not cause complaints.)
|
||||
*/
|
||||
}
|
||||
freefileinfo (start);
|
||||
if (opt.quota && total_downloaded_bytes > opt.quota)
|
||||
|
@ -58,9 +58,10 @@ uerr_t ftp_epsv (int, ip_address *, int *);
|
||||
#endif
|
||||
uerr_t ftp_type (int, int);
|
||||
uerr_t ftp_cwd (int, const char *);
|
||||
uerr_t ftp_dele (int, const char *);
|
||||
uerr_t ftp_retr (int, const char *);
|
||||
uerr_t ftp_rest (int, wgint);
|
||||
uerr_t ftp_list (int, const char *);
|
||||
uerr_t ftp_list (int, const char *, enum stype);
|
||||
uerr_t ftp_syst (int, enum stype *);
|
||||
uerr_t ftp_pwd (int, char **);
|
||||
uerr_t ftp_size (int, const char *, wgint *);
|
||||
|
@ -41,7 +41,11 @@ as that of the covered work. */
|
||||
# ifndef __BEOS__
|
||||
# include <arpa/inet.h>
|
||||
# endif
|
||||
# include <netdb.h>
|
||||
# ifdef __VMS
|
||||
# include "vms_ip.h"
|
||||
# else /* def __VMS */
|
||||
# include <netdb.h>
|
||||
# endif /* def __VMS [else] */
|
||||
# define SET_H_ERRNO(err) ((void)(h_errno = (err)))
|
||||
#else /* WINDOWS */
|
||||
# define SET_H_ERRNO(err) WSASetLastError (err)
|
||||
|
@ -34,7 +34,11 @@ as that of the covered work. */
|
||||
#ifdef WINDOWS
|
||||
# include <winsock.h>
|
||||
#else
|
||||
# include <netdb.h>
|
||||
# ifdef __VMS
|
||||
# include "vms_ip.h"
|
||||
# else /* def __VMS */
|
||||
# include <netdb.h>
|
||||
# endif /* def __VMS [else] */
|
||||
# include <sys/socket.h>
|
||||
# include <netinet/in.h>
|
||||
#ifndef __BEOS__
|
||||
|
62
src/http.c
62
src/http.c
@ -66,7 +66,11 @@ as that of the covered work. */
|
||||
#include "test.h"
|
||||
#endif
|
||||
|
||||
extern char *version_string;
|
||||
#include "version.h"
|
||||
|
||||
#ifdef __VMS
|
||||
# include "vms.h"
|
||||
#endif /* def __VMS */
|
||||
|
||||
/* Forward decls. */
|
||||
static char *create_authorization_line (const char *, const char *,
|
||||
@ -1333,13 +1337,27 @@ free_hstat (struct http_stat *hs)
|
||||
&& (c_isspace (line[sizeof (string_constant) - 1]) \
|
||||
|| !line[sizeof (string_constant) - 1]))
|
||||
|
||||
#ifdef __VMS
|
||||
#define SET_USER_AGENT(req) do { \
|
||||
if (!opt.useragent) \
|
||||
request_set_header (req, "User-Agent", \
|
||||
aprintf ("Wget/%s", version_string), rel_value); \
|
||||
aprintf ("Wget/%s (VMS %s %s)", \
|
||||
VERSION_STRING, vms_arch(), vms_vers()), \
|
||||
rel_value); \
|
||||
else if (*opt.useragent) \
|
||||
request_set_header (req, "User-Agent", opt.useragent, rel_none); \
|
||||
} while (0)
|
||||
#else /* def __VMS */
|
||||
#define SET_USER_AGENT(req) do { \
|
||||
if (!opt.useragent) \
|
||||
request_set_header (req, "User-Agent", \
|
||||
aprintf ("Wget/%s (%s)", \
|
||||
VERSION_STRING, OS_TYPE), \
|
||||
rel_value); \
|
||||
else if (*opt.useragent) \
|
||||
request_set_header (req, "User-Agent", opt.useragent, rel_none); \
|
||||
} while (0)
|
||||
#endif /* def __VMS [else] */
|
||||
|
||||
/* The flags that allow clobbering the file (opening with "wb").
|
||||
Defined here to avoid repetition later. #### This will require
|
||||
@ -1731,7 +1749,7 @@ gethttp (struct url *u, struct http_stat *hs, int *dt, struct url *proxy)
|
||||
|
||||
if (conn->scheme == SCHEME_HTTPS)
|
||||
{
|
||||
if (!ssl_connect (sock) || !ssl_check_certificate (sock, u->host))
|
||||
if (!ssl_connect_wget (sock) || !ssl_check_certificate (sock, u->host))
|
||||
{
|
||||
fd_close (sock);
|
||||
return CONSSLERR;
|
||||
@ -1852,7 +1870,7 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
|
||||
if (opt.timestamping && !hs->timestamp_checked)
|
||||
{
|
||||
size_t filename_len = strlen (hs->local_file);
|
||||
char *filename_plus_orig_suffix = alloca (filename_len + sizeof (".orig"));
|
||||
char *filename_plus_orig_suffix = alloca (filename_len + sizeof (ORIG_SFX));
|
||||
bool local_dot_orig_file_exists = false;
|
||||
char *local_filename = NULL;
|
||||
struct_stat st;
|
||||
@ -1877,7 +1895,7 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
|
||||
--hniksic */
|
||||
memcpy (filename_plus_orig_suffix, hs->local_file, filename_len);
|
||||
memcpy (filename_plus_orig_suffix + filename_len,
|
||||
".orig", sizeof (".orig"));
|
||||
ORIG_SFX, sizeof (ORIG_SFX));
|
||||
|
||||
/* Try to stat() the .orig file. */
|
||||
if (stat (filename_plus_orig_suffix, &st) == 0)
|
||||
@ -2235,6 +2253,16 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
|
||||
return RETRFINISHED;
|
||||
}
|
||||
|
||||
/* 2005-06-17 SMS.
|
||||
For VMS, define common fopen() optional arguments.
|
||||
*/
|
||||
#ifdef __VMS
|
||||
# define FOPEN_OPT_ARGS "fop=sqo", "acc", acc_cb, &open_id
|
||||
# define FOPEN_BIN_FLAG 3
|
||||
#else /* def __VMS */
|
||||
# define FOPEN_BIN_FLAG 1
|
||||
#endif /* def __VMS [else] */
|
||||
|
||||
/* Open the local file. */
|
||||
if (!output_stream)
|
||||
{
|
||||
@ -2242,9 +2270,27 @@ File `%s' already there; not retrieving.\n\n"), hs->local_file);
|
||||
if (opt.backups)
|
||||
rotate_backups (hs->local_file);
|
||||
if (hs->restval)
|
||||
fp = fopen (hs->local_file, "ab");
|
||||
{
|
||||
#ifdef __VMS
|
||||
int open_id;
|
||||
|
||||
open_id = 21;
|
||||
fp = fopen (hs->local_file, "ab", FOPEN_OPT_ARGS);
|
||||
#else /* def __VMS */
|
||||
fp = fopen (hs->local_file, "ab");
|
||||
#endif /* def __VMS [else] */
|
||||
}
|
||||
else if (ALLOW_CLOBBER)
|
||||
fp = fopen (hs->local_file, "wb");
|
||||
{
|
||||
#ifdef __VMS
|
||||
int open_id;
|
||||
|
||||
open_id = 22;
|
||||
fp = fopen (hs->local_file, "wb", FOPEN_OPT_ARGS);
|
||||
#else /* def __VMS */
|
||||
fp = fopen (hs->local_file, "wb");
|
||||
#endif /* def __VMS [else] */
|
||||
}
|
||||
else
|
||||
{
|
||||
fp = fopen_excl (hs->local_file, true);
|
||||
@ -2718,7 +2764,7 @@ Remote file exists.\n\n"));
|
||||
&& hstat.remote_time && hstat.remote_time[0])
|
||||
{
|
||||
newtmr = http_atotm (hstat.remote_time);
|
||||
if (newtmr != -1)
|
||||
if (newtmr != (time_t)-1)
|
||||
tmr = newtmr;
|
||||
}
|
||||
touch (fl, tmr);
|
||||
|
12
src/init.c
12
src/init.c
@ -160,6 +160,9 @@ static const struct {
|
||||
{ "ftppasswd", &opt.ftp_passwd, cmd_string }, /* deprecated */
|
||||
{ "ftppassword", &opt.ftp_passwd, cmd_string },
|
||||
{ "ftpproxy", &opt.ftp_proxy, cmd_string },
|
||||
#ifdef __VMS
|
||||
{ "ftpstmlf", &opt.ftp_stmlf, cmd_boolean },
|
||||
#endif /* def __VMS */
|
||||
{ "ftpuser", &opt.ftp_user, cmd_string },
|
||||
{ "glob", &opt.ftp_glob, cmd_boolean },
|
||||
{ "header", NULL, cmd_spec_header },
|
||||
@ -393,11 +396,16 @@ wgetrc_file_name (void)
|
||||
return xstrdup (env);
|
||||
}
|
||||
|
||||
/* If that failed, try $HOME/.wgetrc. */
|
||||
/* If that failed, try $HOME/.wgetrc (or equivalent). */
|
||||
|
||||
#ifdef __VMS
|
||||
file = "SYS$LOGIN:.wgetrc";
|
||||
#else /* def __VMS */
|
||||
home = home_dir ();
|
||||
if (home)
|
||||
file = aprintf ("%s/.wgetrc", home);
|
||||
xfree_null (home);
|
||||
#endif /* def __VMS [else] */
|
||||
|
||||
#ifdef WINDOWS
|
||||
/* Under Windows, if we still haven't found .wgetrc, look for the file
|
||||
@ -446,7 +454,7 @@ run_wgetrc (const char *file)
|
||||
int ln;
|
||||
int errcnt = 0;
|
||||
|
||||
fp = fopen (file, "rb");
|
||||
fp = fopen (file, "r");
|
||||
if (!fp)
|
||||
{
|
||||
fprintf (stderr, _("%s: Cannot read %s (%s).\n"), exec_name,
|
||||
|
35
src/log.c
35
src/log.c
@ -43,6 +43,19 @@ as that of the covered work. */
|
||||
#include "utils.h"
|
||||
#include "log.h"
|
||||
|
||||
/* 2005-10-25 SMS.
|
||||
VMS log files are often VFC record format, not stream, so fputs() can
|
||||
produce multiple records, even when there's no newline terminator in
|
||||
the buffer. The result is unsightly output with spurious newlines.
|
||||
Using fprintf() instead of fputs(), along with inhibiting some
|
||||
fflush() activity below, seems to solve the problem.
|
||||
*/
|
||||
#ifdef __VMS
|
||||
# define FPUTS( s, f) fprintf( (f), "%s", (s))
|
||||
#else /* def __VMS */
|
||||
# define FPUTS( s, f) fputs( (s), (f))
|
||||
#endif /* def __VMS [else] */
|
||||
|
||||
/* This file impplement support for "logging". Logging means printing
|
||||
output, plus several additional features:
|
||||
|
||||
@ -307,7 +320,7 @@ logputs (enum log_options o, const char *s)
|
||||
return;
|
||||
CHECK_VERBOSE (o);
|
||||
|
||||
fputs (s, fp);
|
||||
FPUTS (s, fp);
|
||||
if (save_context_p)
|
||||
saved_append (s);
|
||||
if (flush_log_p)
|
||||
@ -397,7 +410,7 @@ log_vprintf_internal (struct logvprintf_state *state, const char *fmt,
|
||||
|
||||
/* Writing succeeded. */
|
||||
saved_append (write_ptr);
|
||||
fputs (write_ptr, fp);
|
||||
FPUTS (write_ptr, fp);
|
||||
if (state->bigmsg)
|
||||
xfree (state->bigmsg);
|
||||
|
||||
@ -416,7 +429,19 @@ logflush (void)
|
||||
{
|
||||
FILE *fp = get_log_fp ();
|
||||
if (fp)
|
||||
fflush (fp);
|
||||
{
|
||||
/* 2005-10-25 SMS.
|
||||
On VMS, flush only for a terminal. See note at FPUTS macro, above.
|
||||
*/
|
||||
#ifdef __VMS
|
||||
if (isatty( fileno( fp)))
|
||||
{
|
||||
fflush (fp);
|
||||
}
|
||||
#else /* def __VMS */
|
||||
fflush (fp);
|
||||
#endif /* def __VMS [else] */
|
||||
}
|
||||
needs_flushing = false;
|
||||
}
|
||||
|
||||
@ -583,13 +608,13 @@ log_dump_context (void)
|
||||
{
|
||||
struct log_ln *ln = log_lines + num;
|
||||
if (ln->content)
|
||||
fputs (ln->content, fp);
|
||||
FPUTS (ln->content, fp);
|
||||
ROT_ADVANCE (num);
|
||||
}
|
||||
while (num != log_line_current);
|
||||
if (trailing_line)
|
||||
if (log_lines[log_line_current].content)
|
||||
fputs (log_lines[log_line_current].content, fp);
|
||||
FPUTS (log_lines[log_line_current].content, fp);
|
||||
fflush (fp);
|
||||
}
|
||||
|
||||
|
68
src/main.c
68
src/main.c
@ -57,6 +57,12 @@ as that of the covered work. */
|
||||
|
||||
#include <getopt.h>
|
||||
|
||||
#ifdef __VMS
|
||||
#include "vms.h"
|
||||
#endif /* __VMS */
|
||||
|
||||
#include "version.h"
|
||||
|
||||
#ifndef PATH_SEPARATOR
|
||||
# define PATH_SEPARATOR '/'
|
||||
#endif
|
||||
@ -167,6 +173,9 @@ static struct cmdline_option option_data[] =
|
||||
{ "force-directories", 'x', OPT_BOOLEAN, "dirstruct", -1 },
|
||||
{ "force-html", 'F', OPT_BOOLEAN, "forcehtml", -1 },
|
||||
{ "ftp-password", 0, OPT_VALUE, "ftppassword", -1 },
|
||||
#ifdef __VMS
|
||||
{ "ftp-stmlf", 0, OPT_BOOLEAN, "ftpstmlf", -1 },
|
||||
#endif /* def __VMS */
|
||||
{ "ftp-user", 0, OPT_VALUE, "ftpuser", -1 },
|
||||
{ "glob", 0, OPT_BOOLEAN, "glob", -1 },
|
||||
{ "header", 0, OPT_VALUE, "header", -1 },
|
||||
@ -568,6 +577,10 @@ HTTPS (SSL/TLS) options:\n"),
|
||||
|
||||
N_("\
|
||||
FTP options:\n"),
|
||||
#ifdef __VMS
|
||||
N_("\
|
||||
--ftp-stmlf Use Stream_LF format for all binary FTP files.\n"),
|
||||
#endif /* def __VMS */
|
||||
N_("\
|
||||
--ftp-user=USER set ftp user to USER.\n"),
|
||||
N_("\
|
||||
@ -594,8 +607,13 @@ Recursive download:\n"),
|
||||
--delete-after delete files locally after downloading them.\n"),
|
||||
N_("\
|
||||
-k, --convert-links make links in downloaded HTML point to local files.\n"),
|
||||
#ifdef __VMS
|
||||
N_("\
|
||||
-K, --backup-converted before converting file X, back up as X_orig.\n"),
|
||||
#else /* def __VMS */
|
||||
N_("\
|
||||
-K, --backup-converted before converting file X, back up as X.orig.\n"),
|
||||
#endif /* def __VMS [else] */
|
||||
N_("\
|
||||
-m, --mirror shortcut for -N -r -l inf --no-remove-listing.\n"),
|
||||
N_("\
|
||||
@ -638,7 +656,7 @@ Recursive accept/reject:\n"),
|
||||
int i;
|
||||
|
||||
printf (_("GNU Wget %s, a non-interactive network retriever.\n"),
|
||||
version_string);
|
||||
VERSION_STRING);
|
||||
print_usage ();
|
||||
|
||||
for (i = 0; i < countof (help); i++)
|
||||
@ -676,7 +694,12 @@ secs_to_human_time (double interval)
|
||||
static void
|
||||
print_version (void)
|
||||
{
|
||||
printf ("GNU Wget %s\n\n", version_string);
|
||||
#ifdef __VMS
|
||||
printf ("GNU Wget %s built on VMS %s %s.\n\n",
|
||||
VERSION_STRING, vms_arch(), vms_vers());
|
||||
#else /* def __VMS */
|
||||
printf ("GNU Wget %s built on %s.\n\n", VERSION_STRING, OS_TYPE);
|
||||
#endif /* def __VMS */
|
||||
/* TRANSLATORS: When available, an actual copyright character
|
||||
(cirle-c) should be used in preference to "(C)". */
|
||||
fputs (_("\
|
||||
@ -939,10 +962,19 @@ Can't timestamp and not clobber old files at the same time.\n"));
|
||||
/* Initialize logging. */
|
||||
log_init (opt.lfilename, append_to_log);
|
||||
|
||||
DEBUGP (("DEBUG output created by Wget %s on %s.\n\n", version_string,
|
||||
OS_TYPE));
|
||||
DEBUGP (("DEBUG output created by Wget %s on %s.\n\n",
|
||||
VERSION_STRING, OS_TYPE));
|
||||
|
||||
/* Open the output filename if necessary. */
|
||||
|
||||
/* 2005-04-17 SMS.
|
||||
Note that having the output_stream ("-O") file opened here for an FTP
|
||||
URL rather than in getftp() (ftp.c) (and the http equivalent) rather
|
||||
limits the ability in VMS to open the file differently for ASCII
|
||||
versus binary FTP there. (Of course, doing it here allows a open
|
||||
failure to be detected immediately, without first connecting to the
|
||||
server.)
|
||||
*/
|
||||
if (opt.output_document)
|
||||
{
|
||||
if (HYPHENP (opt.output_document))
|
||||
@ -950,8 +982,20 @@ Can't timestamp and not clobber old files at the same time.\n"));
|
||||
else
|
||||
{
|
||||
struct_fstat st;
|
||||
|
||||
#ifdef __VMS
|
||||
/* Common fopen() optional arguments:
|
||||
sequential access only, access callback function.
|
||||
*/
|
||||
# define FOPEN_OPT_ARGS , "fop=sqo", "acc", acc_cb, &open_id
|
||||
int open_id = 7;
|
||||
#else /* def __VMS */
|
||||
# define FOPEN_OPT_ARGS
|
||||
#endif /* def __VMS [else] */
|
||||
|
||||
output_stream = fopen (opt.output_document,
|
||||
opt.always_rest ? "ab" : "wb");
|
||||
opt.always_rest ? "ab" : "wb"
|
||||
FOPEN_OPT_ARGS);
|
||||
if (output_stream == NULL)
|
||||
{
|
||||
perror (opt.output_document);
|
||||
@ -962,6 +1006,20 @@ Can't timestamp and not clobber old files at the same time.\n"));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __VMS
|
||||
/* Set global ODS5 flag according to the specified destination (if
|
||||
any), otherwise according to the current default device.
|
||||
*/
|
||||
if (output_stream == NULL)
|
||||
{
|
||||
set_ods5_dest( "SYS$DISK");
|
||||
}
|
||||
else if (output_stream != stdout)
|
||||
{
|
||||
set_ods5_dest( opt.output_document);
|
||||
}
|
||||
#endif /* def __VMS */
|
||||
|
||||
#ifdef WINDOWS
|
||||
ws_startup ();
|
||||
#endif
|
||||
|
17
src/netrc.c
17
src/netrc.c
@ -65,6 +65,21 @@ search_netrc (const char *host, const char **acc, const char **passwd,
|
||||
/* Find ~/.netrc. */
|
||||
if (!processed_netrc)
|
||||
{
|
||||
#ifdef __VMS
|
||||
|
||||
int err;
|
||||
struct_stat buf;
|
||||
char *path = "SYS$LOGIN:.netrc";
|
||||
|
||||
netrc_list = NULL;
|
||||
processed_netrc = 1;
|
||||
|
||||
err = stat (path, &buf);
|
||||
if (err == 0)
|
||||
netrc_list = parse_netrc (path);
|
||||
|
||||
#else /* def __VMS */
|
||||
|
||||
char *home = home_dir ();
|
||||
|
||||
netrc_list = NULL;
|
||||
@ -81,6 +96,8 @@ search_netrc (const char *host, const char **acc, const char **passwd,
|
||||
if (err == 0)
|
||||
netrc_list = parse_netrc (path);
|
||||
}
|
||||
|
||||
#endif /* def __VMS [else] */
|
||||
}
|
||||
/* If nothing to do... */
|
||||
if (!netrc_list)
|
||||
|
@ -383,7 +383,7 @@ static struct transport_implementation openssl_transport = {
|
||||
Returns true on success, false on failure. */
|
||||
|
||||
bool
|
||||
ssl_connect (int fd)
|
||||
ssl_connect_wget (int fd)
|
||||
{
|
||||
SSL *conn;
|
||||
struct openssl_transport_context *ctx;
|
||||
@ -466,7 +466,7 @@ pattern_match (const char *pattern, const char *string)
|
||||
its certificate, corresponds to HOST. (HOST typically comes from
|
||||
the URL and is what the user thinks he's connecting to.)
|
||||
|
||||
This assumes that ssl_connect has successfully finished, i.e. that
|
||||
This assumes that ssl_connect_wget has successfully finished, i.e. that
|
||||
the SSL handshake has been performed and that FD is connected to an
|
||||
SSL handle.
|
||||
|
||||
|
@ -235,7 +235,12 @@ struct options
|
||||
|
||||
bool content_disposition; /* Honor HTTP Content-Disposition header. */
|
||||
bool auth_without_challenge; /* Issue Basic authentication creds without
|
||||
waiting for a challenge. */
|
||||
waiting for a challenge. */
|
||||
|
||||
#ifdef __VMS
|
||||
int ftp_stmlf; /* Force Stream_LF format for binary FTP. */
|
||||
#endif /* def __VMS */
|
||||
|
||||
};
|
||||
|
||||
extern struct options opt;
|
||||
|
85
src/retr.c
85
src/retr.c
@ -141,8 +141,10 @@ limit_bandwidth (wgint bytes, struct ptimer *timer)
|
||||
|
||||
static int
|
||||
write_data (FILE *out, const char *buf, int bufsize, wgint *skip,
|
||||
wgint *written)
|
||||
wgint *written, int flags)
|
||||
{
|
||||
static int cr_pending = 0; /* Found CR in ASCII FTP data. */
|
||||
|
||||
if (!out)
|
||||
return 1;
|
||||
if (*skip > bufsize)
|
||||
@ -159,14 +161,89 @@ write_data (FILE *out, const char *buf, int bufsize, wgint *skip,
|
||||
return 1;
|
||||
}
|
||||
|
||||
fwrite (buf, 1, bufsize, out);
|
||||
*written += bufsize;
|
||||
/* Note: This code assumes that "\n" is the universal line ending
|
||||
character, as on UNIX and VMS. If this is not true, then here's
|
||||
where to change it.
|
||||
*/
|
||||
|
||||
#if 1
|
||||
# define EOL_STRING "\n"
|
||||
#else /* 1 */
|
||||
# define EOL_STRING "\r\n"
|
||||
#endif /* 1 [else] */
|
||||
#define EOL_STRING_LEN (sizeof( EOL_STRING)- 1)
|
||||
|
||||
if (flags & rb_ftp_ascii)
|
||||
{
|
||||
const char *bufend;
|
||||
|
||||
/* ASCII transfer. Put out lines delimited by CRLF. */
|
||||
bufend = buf+ bufsize;
|
||||
while (buf < bufend)
|
||||
{
|
||||
/* If CR, put out any pending CR, then set CR-pending flag. */
|
||||
if (*buf == '\r')
|
||||
{
|
||||
if (cr_pending)
|
||||
{
|
||||
fwrite ("\r", 1, 1, out);
|
||||
*written += 1;
|
||||
}
|
||||
cr_pending = 1;
|
||||
buf++;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cr_pending)
|
||||
{
|
||||
if (*buf == '\n')
|
||||
{
|
||||
/* Found FTP EOL (CRLF). Put out local EOL. */
|
||||
fwrite (EOL_STRING, 1, EOL_STRING_LEN, out);
|
||||
*written += EOL_STRING_LEN;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Normal character. Put out pending CR and it. */
|
||||
fwrite ("\r", 1, 1, out);
|
||||
fwrite (buf, 1, 1, out);
|
||||
*written += 2;
|
||||
}
|
||||
buf++;
|
||||
cr_pending = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Normal character. Put it out. */
|
||||
fwrite (buf, 1, 1, out);
|
||||
*written += 1;
|
||||
buf++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Image transfer. Put out buffer. */
|
||||
fwrite (buf, 1, bufsize, out);
|
||||
*written += bufsize;
|
||||
}
|
||||
|
||||
/* Immediately flush the downloaded data. This should not hinder
|
||||
performance: fast downloads will arrive in large 16K chunks
|
||||
(which stdio would write out immediately anyway), and slow
|
||||
downloads wouldn't be limited by disk speed. */
|
||||
|
||||
/* 2005-04-20 SMS.
|
||||
Perhaps it shouldn't hinder performance, but it sure does, at least
|
||||
on VMS (more than 2X). Rather than speculate on what it should or
|
||||
shouldn't do, it might make more sense to test it. Even better, it
|
||||
might be nice to explain what possible benefit it could offer, as
|
||||
it appears to be a clear invitation to poor performance with no
|
||||
actual justification. (Also, why 16K? Anyone test other values?)
|
||||
*/
|
||||
#ifndef __VMS
|
||||
fflush (out);
|
||||
#endif /* ndef __VMS */
|
||||
return !ferror (out);
|
||||
}
|
||||
|
||||
@ -296,7 +373,7 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos,
|
||||
if (ret > 0)
|
||||
{
|
||||
sum_read += ret;
|
||||
if (!write_data (out, dlbuf, ret, &skip, &sum_written))
|
||||
if (!write_data (out, dlbuf, ret, &skip, &sum_written, flags))
|
||||
{
|
||||
ret = -2;
|
||||
goto out;
|
||||
|
@ -41,7 +41,8 @@ extern bool output_stream_regular;
|
||||
/* Flags for fd_read_body. */
|
||||
enum {
|
||||
rb_read_exactly = 1,
|
||||
rb_skip_startpos = 2
|
||||
rb_skip_startpos = 2,
|
||||
rb_ftp_ascii = 4
|
||||
};
|
||||
|
||||
int fd_read_body (int, FILE *, wgint, wgint, wgint *, wgint *, double *, int);
|
||||
|
@ -33,7 +33,7 @@ as that of the covered work. */
|
||||
#define GEN_SSLFUNC_H
|
||||
|
||||
bool ssl_init (void);
|
||||
bool ssl_connect (int);
|
||||
bool ssl_connect_wget (int);
|
||||
bool ssl_check_certificate (int, const char *);
|
||||
|
||||
#endif /* GEN_SSLFUNC_H */
|
||||
|
31
src/url.c
31
src/url.c
@ -43,6 +43,10 @@ as that of the covered work. */
|
||||
#include "url.h"
|
||||
#include "host.h" /* for is_valid_ipv6_address */
|
||||
|
||||
#ifdef __VMS
|
||||
#include "vms.h"
|
||||
#endif /* def __VMS */
|
||||
|
||||
#ifdef TESTING
|
||||
#include "test.h"
|
||||
#endif
|
||||
@ -1503,11 +1507,30 @@ url_file_name (const struct url *u)
|
||||
|
||||
if ((opt.noclobber || opt.always_rest || opt.timestamping || opt.dirstruct)
|
||||
&& !(file_exists_p (fname) && !file_non_directory_p (fname)))
|
||||
return fname;
|
||||
{
|
||||
unique = fname;
|
||||
}
|
||||
else
|
||||
{
|
||||
unique = unique_name (fname, true);
|
||||
if (unique != fname)
|
||||
xfree (fname);
|
||||
}
|
||||
|
||||
/* On VMS, alter the name as required. */
|
||||
#ifdef __VMS
|
||||
{
|
||||
char *unique2;
|
||||
|
||||
unique2 = ods_conform( unique);
|
||||
if (unique2 != unique)
|
||||
{
|
||||
xfree (unique);
|
||||
unique = unique2;
|
||||
}
|
||||
}
|
||||
#endif /* def __VMS */
|
||||
|
||||
unique = unique_name (fname, true);
|
||||
if (unique != fname)
|
||||
xfree (fname);
|
||||
return unique;
|
||||
}
|
||||
|
||||
|
173
src/utils.c
173
src/utils.c
@ -84,10 +84,95 @@ as that of the covered work. */
|
||||
#include "utils.h"
|
||||
#include "hash.h"
|
||||
|
||||
#ifdef __VMS
|
||||
#include "vms.h"
|
||||
#endif /* def __VMS */
|
||||
|
||||
#ifdef TESTING
|
||||
#include "test.h"
|
||||
#endif
|
||||
|
||||
/* Character property table for (re-)escaping VMS ODS5 extended file
|
||||
names. Note that this table ignores Unicode.
|
||||
|
||||
ODS2 valid characters: 0-9 A-Z a-z $ - _ ~
|
||||
|
||||
ODS5 Invalid characters:
|
||||
C0 control codes (0x00 to 0x1F inclusive)
|
||||
Asterisk (*)
|
||||
Question mark (?)
|
||||
|
||||
ODS5 Invalid characters only in VMS V7.2 (which no one runs, right?):
|
||||
Double quotation marks (")
|
||||
Backslash (\)
|
||||
Colon (:)
|
||||
Left angle bracket (<)
|
||||
Right angle bracket (>)
|
||||
Slash (/)
|
||||
Vertical bar (|)
|
||||
|
||||
Characters escaped by "^":
|
||||
SP ! # % & ' ( ) + , . ; = @ [ ] ^ ` { } ~
|
||||
|
||||
Either "^_" or "^ " is accepted as a space. Period (.) is a special
|
||||
case. Note that un-escaped < and > can also confuse a directory
|
||||
spec.
|
||||
|
||||
Characters put out as ^xx:
|
||||
7F (DEL)
|
||||
80-9F (C1 control characters)
|
||||
A0 (nonbreaking space)
|
||||
FF (Latin small letter y diaeresis)
|
||||
|
||||
Other cases:
|
||||
Unicode: "^Uxxxx", where "xxxx" is four hex digits.
|
||||
|
||||
Property table values:
|
||||
Normal escape: 1
|
||||
Space: 2
|
||||
Dot: 4
|
||||
Hex-hex escape: 8
|
||||
ODS2 normal: 16
|
||||
ODS2 lower case: 32
|
||||
Hex digit: 64
|
||||
*/
|
||||
|
||||
unsigned char char_prop[ 256] = {
|
||||
|
||||
/* NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
/* DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US */
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
|
||||
/* SP ! " # $ % & ' ( ) * + , - . / */
|
||||
2, 1, 0, 1, 16, 1, 1, 1, 1, 1, 0, 1, 1, 16, 4, 0,
|
||||
|
||||
/* 0 1 2 3 4 5 6 7 8 9 : ; < = > ? */
|
||||
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 1, 1, 1, 1, 1,
|
||||
|
||||
/* @ A B C D E F G H I J K L M N O */
|
||||
1, 80, 80, 80, 80, 80, 80, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
|
||||
/* P Q R S T U V W X Y Z [ \ ] ^ _ */
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 1, 0, 1, 1, 16,
|
||||
|
||||
/* ` a b c d e f g h i j k l m n o */
|
||||
1, 96, 96, 96, 96, 96, 96, 32, 32, 32, 32, 32, 32, 32, 32, 32,
|
||||
|
||||
/* p q r s t u v w x y z { | } ~ DEL */
|
||||
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 0, 1, 17, 8,
|
||||
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
||||
8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8
|
||||
};
|
||||
|
||||
/* Utility function: like xstrdup(), but also lowercases S. */
|
||||
|
||||
char *
|
||||
@ -314,6 +399,16 @@ datetime_str (time_t t)
|
||||
/* The Windows versions of the following two functions are defined in
|
||||
mswindows.c. On MSDOS this function should never be called. */
|
||||
|
||||
#ifdef __VMS
|
||||
|
||||
void
|
||||
fork_to_background (void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
#else /* def __VMS */
|
||||
|
||||
#if !defined(WINDOWS) && !defined(MSDOS)
|
||||
void
|
||||
fork_to_background (void)
|
||||
@ -359,6 +454,9 @@ fork_to_background (void)
|
||||
freopen ("/dev/null", "w", stderr);
|
||||
}
|
||||
#endif /* !WINDOWS && !MSDOS */
|
||||
|
||||
#endif /* def __VMS [else] */
|
||||
|
||||
|
||||
/* "Touch" FILE, i.e. make its mtime ("modified time") equal the time
|
||||
specified with TM. The atime ("access time") is set to the current
|
||||
@ -457,6 +555,14 @@ file_size (const char *filename)
|
||||
#endif
|
||||
}
|
||||
|
||||
/* 2005-02-19 SMS.
|
||||
If no UNIQ_SEP is defined (as on VMS), have unique_name() return the
|
||||
original name. With the VMS file systems' versioning, everything
|
||||
should be fine, and appending ".NN" just causes trouble.
|
||||
*/
|
||||
|
||||
#ifdef UNIQ_SEP
|
||||
|
||||
/* stat file names named PREFIX.1, PREFIX.2, etc., until one that
|
||||
doesn't exist is found. Return a freshly allocated copy of the
|
||||
unused file name. */
|
||||
@ -470,7 +576,7 @@ unique_name_1 (const char *prefix)
|
||||
char *template_tail = template + plen;
|
||||
|
||||
memcpy (template, prefix, plen);
|
||||
*template_tail++ = '.';
|
||||
*template_tail++ = UNIQ_SEP;
|
||||
|
||||
do
|
||||
number_to_string (template_tail, count++);
|
||||
@ -485,6 +591,8 @@ unique_name_1 (const char *prefix)
|
||||
If not, FILE.1 is tried, then FILE.2, etc. The first FILE.<number>
|
||||
file name that doesn't exist is returned.
|
||||
|
||||
2005-02-19 SMS. "." is now UNIQ_SEP, and may be different.
|
||||
|
||||
The resulting file is not created, only verified that it didn't
|
||||
exist at the point in time when the function was called.
|
||||
Therefore, where security matters, don't rely that the file created
|
||||
@ -508,6 +616,20 @@ unique_name (const char *file, bool allow_passthrough)
|
||||
return unique_name_1 (file);
|
||||
}
|
||||
|
||||
#else /* def UNIQ_SEP */
|
||||
|
||||
/* Dummy unique_name() for VMS. Return the original name as easily as
|
||||
possible.
|
||||
*/
|
||||
char *
|
||||
unique_name (const char *file, bool allow_passthrough)
|
||||
{
|
||||
/* Return the FILE itself, without modification, irregardful. */
|
||||
return allow_passthrough ? (char *)file : xstrdup (file);
|
||||
}
|
||||
|
||||
#endif /* def UNIQ_SEP [else] */
|
||||
|
||||
/* Create a file based on NAME, except without overwriting an existing
|
||||
file with that name. Providing O_EXCL is correctly implemented,
|
||||
this function does not have the race condition associated with
|
||||
@ -554,12 +676,61 @@ fopen_excl (const char *fname, bool binary)
|
||||
{
|
||||
int fd;
|
||||
#ifdef O_EXCL
|
||||
|
||||
/* 2005-04-14 SMS.
|
||||
VMS lacks O_BINARY, but makes up for it in weird and wonderful ways.
|
||||
It also has file versions which obviate all the O_EXCL effort.
|
||||
O_TRUNC (something of a misnomer) requests a new version.
|
||||
*/
|
||||
# ifdef __VMS
|
||||
/* Common open() optional arguments:
|
||||
sequential access only, access callback function.
|
||||
*/
|
||||
# define OPEN_OPT_ARGS "fop=sqo", "acc", acc_cb, &open_id
|
||||
|
||||
int open_id;
|
||||
int flags = O_WRONLY | O_CREAT | O_TRUNC;
|
||||
|
||||
if (binary > 1)
|
||||
{
|
||||
open_id = 11;
|
||||
fd = open( fname, /* File name. */
|
||||
flags, /* Flags. */
|
||||
0777, /* Mode for default protection. */
|
||||
"ctx=bin,stm", /* Binary, stream access. */
|
||||
"rfm=stmlf", /* Stream_LF. */
|
||||
OPEN_OPT_ARGS); /* Access callback. */
|
||||
}
|
||||
else if (binary)
|
||||
{
|
||||
open_id = 12;
|
||||
fd = open( fname, /* File name. */
|
||||
flags, /* Flags. */
|
||||
0777, /* Mode for default protection. */
|
||||
"ctx=bin,stm", /* Binary, stream access. */
|
||||
"rfm=fix", /* Fixed-length, */
|
||||
"mrs=512", /* 512-byte records. */
|
||||
OPEN_OPT_ARGS); /* Access callback. */
|
||||
}
|
||||
else
|
||||
{
|
||||
open_id = 13;
|
||||
fd = open( fname, /* File name. */
|
||||
flags, /* Flags. */
|
||||
0777, /* Mode for default protection.
|
||||
*/
|
||||
"rfm=stmlf", /* Stream_LF. */
|
||||
OPEN_OPT_ARGS); /* Access callback. */
|
||||
}
|
||||
# else /* def __VMS */
|
||||
int flags = O_WRONLY | O_CREAT | O_EXCL;
|
||||
# ifdef O_BINARY
|
||||
if (binary)
|
||||
flags |= O_BINARY;
|
||||
# endif
|
||||
fd = open (fname, flags, 0666);
|
||||
# endif /* def __VMS [else] */
|
||||
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
return fdopen (fd, binary ? "wb" : "w");
|
||||
|
@ -126,4 +126,6 @@ void stable_sort (void *, size_t, size_t, int (*) (const void *, const void *));
|
||||
|
||||
const char *print_decimal (double);
|
||||
|
||||
extern unsigned char char_prop[];
|
||||
|
||||
#endif /* UTILS_H */
|
||||
|
35
src/version.h
Normal file
35
src/version.h
Normal file
@ -0,0 +1,35 @@
|
||||
/* Program version
|
||||
Copyright (C) 2008 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Wget.
|
||||
|
||||
GNU Wget 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.
|
||||
|
||||
GNU Wget 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 Wget. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permission under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this program, or any covered work, by linking or
|
||||
combining it with the OpenSSL project's OpenSSL library (or a
|
||||
modified version of that library), containing parts covered by the
|
||||
terms of the OpenSSL or SSLeay licenses, the Free Software Foundation
|
||||
grants you additional permission to convey the resulting work.
|
||||
Corresponding Source for a non-source form of such a combination
|
||||
shall include the source code for the parts of OpenSSL used as well
|
||||
as that of the covered work. */
|
||||
|
||||
#ifndef VERSION_H
|
||||
#define VERSION_H
|
||||
|
||||
#define VERSION_STRING "1.11a"
|
||||
|
||||
#endif /* def VERSION_H */
|
32
src/wget.h
32
src/wget.h
@ -155,7 +155,7 @@ as that of the covered work. */
|
||||
#else
|
||||
/* Fall back to using long, which is always available and in most
|
||||
cases large enough. */
|
||||
typedef long off_t;
|
||||
typedef long wgint;
|
||||
# define SIZEOF_WGINT SIZEOF_LONG
|
||||
#endif
|
||||
|
||||
@ -339,4 +339,34 @@ typedef enum
|
||||
AUTHFAILED, QUOTEXC, WRITEFAILED, SSLINITFAILED
|
||||
} uerr_t;
|
||||
|
||||
/* 2005-02-19 SMS.
|
||||
Select an appropriate "orig" suffix and a separator character for
|
||||
adding a unique suffix to a file name.
|
||||
|
||||
A VMS ODS2 file system can not tolerate multiple dots. An ODS5 file
|
||||
system can, but even there not all dots are equal, and heroic effort
|
||||
would be needed to get ".html^.orig" rather than (the less desirable)
|
||||
"^.html.orig". It's more satisfactory always to use "_orig" on VMS
|
||||
(rather than including "vms.h", testing "ods5_dest", and acting
|
||||
accordingly).
|
||||
|
||||
Note that code in various places assumes that this string is five
|
||||
characters long.
|
||||
*/
|
||||
# ifdef __VMS
|
||||
# define ORIG_SFX "_orig"
|
||||
# else /* def __VMS */
|
||||
# define ORIG_SFX ".orig"
|
||||
# endif /* def __VMS [else] */
|
||||
|
||||
/* ".NNN" unique-ifying suffix separator character for unique_name() in
|
||||
url.c (and anywhere else). Note that on VMS, the file system's
|
||||
version numbers solve the problem that unique_name() is designed to
|
||||
handle, obviating this whole exercise. Other systems may specify a
|
||||
character different from "." here, if desired.
|
||||
*/
|
||||
# ifndef __VMS
|
||||
# define UNIQ_SEP '.'
|
||||
# endif /* ndef __VMS */
|
||||
|
||||
#endif /* WGET_H */
|
||||
|
89
vms/COLLECT_DEPS.COM
Normal file
89
vms/COLLECT_DEPS.COM
Normal file
@ -0,0 +1,89 @@
|
||||
$! 12 April 2005. SMS.
|
||||
$!
|
||||
$! Collect all source file dependencies specified by P2,
|
||||
$! and add P3 prefix.
|
||||
$! Convert absolute dependencies to relative from P4.
|
||||
$! P1 = output file specification.
|
||||
$!
|
||||
$! MMS /EXTENDED_SYNTAX can't easily pass a macro invocation for P3, so
|
||||
$! we remove any internal spaces which might have been added to prevent
|
||||
$! immediate evaluation of a macro invocation.
|
||||
$!
|
||||
$ prefix = f$edit( p3, "COLLAPSE")
|
||||
$!
|
||||
$ dev_lose = f$parse( p4, , , "DEVICE", "SYNTAX_ONLY")
|
||||
$ dir_lose = f$parse( p4, , , "DIRECTORY", "SYNTAX_ONLY")
|
||||
$ suffix = ".VMS]"
|
||||
$ suffix_loc = f$locate( suffix, dir_lose)
|
||||
$ if (suffix_loc .lt f$length( dir_lose))
|
||||
$ then
|
||||
$ dev_dir_lose = dev_lose+ dir_lose- suffix
|
||||
$ else
|
||||
$ dev_dir_lose = dev_lose+ dir_lose- "]"
|
||||
$ endif
|
||||
$!
|
||||
$!!! write sys$output " d_d_l: ""''dev_dir_lose'""."
|
||||
$!
|
||||
$! For portability, make the output file record format Stream_LF.
|
||||
$!
|
||||
$ create /fdl = sys$input 'p1'
|
||||
RECORD
|
||||
Carriage_Control carriage_return
|
||||
Format stream_lf
|
||||
$!
|
||||
$ open /read /write /error = end_main deps_out 'p1'
|
||||
$ on error then goto loop_main_end
|
||||
$!
|
||||
$! Include proper-inclusion-check preface.
|
||||
$!
|
||||
$ incl_macro = "INCL_"+ f$parse( p1, , , "NAME", "SYNTAX_ONLY")
|
||||
$ write deps_out "#"
|
||||
$ write deps_out "# Wget for VMS - MMS (or MMK) Source Dependency File."
|
||||
$ write deps_out "#"
|
||||
$ write deps_out ""
|
||||
$ write deps_out -
|
||||
"# This description file is included by other description files. It is"
|
||||
$ write deps_out -
|
||||
"# not intended to be used alone. Verify proper inclusion."
|
||||
$ write deps_out ""
|
||||
$ write deps_out ".IFDEF ''incl_macro'"
|
||||
$ write deps_out ".ELSE"
|
||||
$ write deps_out -
|
||||
"$$$$ THIS DESCRIPTION FILE IS NOT INTENDED TO BE USED THIS WAY."
|
||||
$ write deps_out ".ENDIF"
|
||||
$ write deps_out ""
|
||||
$!
|
||||
$! Actual dependencies from individual dependency files.
|
||||
$!
|
||||
$ loop_main_top:
|
||||
$ file = f$search( p2)
|
||||
$ if (file .eqs. "") then goto loop_main_end
|
||||
$!
|
||||
$ open /read /error = end_subs deps_in 'file'
|
||||
$ loop_subs_top:
|
||||
$ read /error = loop_subs_end deps_in line
|
||||
$ line_reduced = f$edit( line, "COMPRESS, TRIM")
|
||||
$ colon = f$locate( " : ", line_reduced)
|
||||
$ if (colon .ge. f$length( line_reduced)) then goto loop_subs_top
|
||||
$ d_d_l_loc = f$locate( dev_dir_lose, -
|
||||
f$extract( (colon+ 3), 1000, line_reduced))
|
||||
$ if (d_d_l_loc .eq. 0)
|
||||
$ then
|
||||
$ front = f$extract( 0, (colon+ 3), line_reduced)
|
||||
$ back = f$extract( (colon+ 3+ f$length( dev_dir_lose)), -
|
||||
1000, line_reduced)
|
||||
$ line = front+ "[-"+ back
|
||||
$ write deps_out "''prefix'"+ "''line'"
|
||||
$ endif
|
||||
$ goto loop_subs_top
|
||||
$!
|
||||
$ loop_subs_end:
|
||||
$ close deps_in
|
||||
$!
|
||||
$ goto loop_main_top
|
||||
$!
|
||||
$ loop_main_end:
|
||||
$ close deps_out
|
||||
$!
|
||||
$ end_main:
|
||||
$!
|
140
vms/DESCRIP.MMS
Normal file
140
vms/DESCRIP.MMS
Normal file
@ -0,0 +1,140 @@
|
||||
# 29 January 2008. SMS.
|
||||
#
|
||||
# MMS or MMK description file for Wget 1.11.
|
||||
#
|
||||
# The default target, EXE, builds the architecture-specific Wget
|
||||
# executable (and the DECC_VER.EXE diagnostic executable).
|
||||
#
|
||||
# Other targets:
|
||||
#
|
||||
# HELP [.VMS]WGET.HLB help library.
|
||||
#
|
||||
# CLEAN deletes architecture-specific files, but leaves any
|
||||
# individual source dependency files and the help library.
|
||||
#
|
||||
# CLEAN_ALL deletes all generated files, except the main (collected)
|
||||
# source dependency file.
|
||||
#
|
||||
# CLEAN_EXE deletes only the architecture-specific executable.
|
||||
# Handy if all you wish to do is re-link the executable.
|
||||
#
|
||||
|
||||
# Include the source file lists (among other data).
|
||||
|
||||
INCL_DESCRIP_SRC = 1
|
||||
.INCLUDE [-.VMS]descrip_src.mms
|
||||
|
||||
# DECC_VER diagnostic program.
|
||||
DECC_VER_OBJ = [.$(DEST)]DECC_VER.OBJ
|
||||
|
||||
# Executables.
|
||||
|
||||
WGET_EXE = [.$(DEST)]WGET.EXE
|
||||
DECC_VER_EXE = [.$(DEST)]DECC_VER.EXE
|
||||
|
||||
EXE = $(WGET_EXE) $(DECC_VER_EXE)
|
||||
|
||||
# HELP library and source file.
|
||||
|
||||
HLB = [-.VMS]WGET.HLB
|
||||
HLP = [-.VMS]WGET.HLP
|
||||
|
||||
# Link the executables (default target).
|
||||
|
||||
EXE : $(EXE)
|
||||
@ write sys$output ""
|
||||
@ write sys$output " ""$<"" is ready."
|
||||
@ write sys$output ""
|
||||
|
||||
$(WGET_EXE) : $(OBJS) $(MAIN_OPT) $(IP_OPT)
|
||||
define /user_mode odir [.$(DEST)]
|
||||
$(LINK) $(LINKFLAGS) $(MAIN_OPT) /options $(IP_LINK_OPT) -
|
||||
$(SSL_LINK_OPT)
|
||||
|
||||
$(DECC_VER_OBJ) : [-.VMS]DECC_VER.C
|
||||
|
||||
$(DECC_VER_EXE) : $(DECC_VER_OBJ)
|
||||
$(LINK) $(LINKFLAGS) $(MMS$SOURCE)
|
||||
|
||||
# Create the HELP library (HELP target).
|
||||
|
||||
HELP : $(HLB)
|
||||
@ write sys$output ""
|
||||
@ write sys$output " ""$<"" is ready."
|
||||
@ write sys$output ""
|
||||
|
||||
$(HLB) : $(HLP)
|
||||
LIBRARY /CREATE /HELP $@ $<
|
||||
|
||||
# CLEAN target. Delete the [.$(DEST)] directory and everything in it.
|
||||
|
||||
CLEAN :
|
||||
if (f$search( "[.$(DEST)]*.*") .nes. "") then -
|
||||
delete [.$(DEST)]*.*;*
|
||||
if (f$search( "$(DEST).dir") .nes. "") then -
|
||||
set protection = w:d $(DEST).dir;*
|
||||
if (f$search( "$(DEST).dir") .nes. "") then -
|
||||
delete $(DEST).dir;*
|
||||
|
||||
# CLEAN_ALL target. Delete:
|
||||
# The [.$(DEST)] directories and everything in them.
|
||||
# All help-related derived files,
|
||||
# CONFIG.H.
|
||||
# All individual C dependency files.
|
||||
# Also mention:
|
||||
# Comprehensive dependency file.
|
||||
|
||||
CLEAN_ALL :
|
||||
if (f$search( "[.ALPHA*]*.*") .nes. "") then -
|
||||
delete [.ALPHA*]*.*;*
|
||||
if (f$search( "ALPHA*.dir", 1) .nes. "") then -
|
||||
set protection = w:d ALPHA*.dir;*
|
||||
if (f$search( "ALPHA*.dir", 2) .nes. "") then -
|
||||
delete ALPHA*.dir;*
|
||||
if (f$search( "[.IA64*]*.*") .nes. "") then -
|
||||
delete [.IA64*]*.*;*
|
||||
if (f$search( "IA64*.dir", 1) .nes. "") then -
|
||||
set protection = w:d IA64*.dir;*
|
||||
if (f$search( "IA64*.dir", 2) .nes. "") then -
|
||||
delete IA64*.dir;*
|
||||
if (f$search( "[.VAX*]*.*") .nes. "") then -
|
||||
delete [.VAX*]*.*;*
|
||||
if (f$search( "VAX*.dir", 1) .nes. "") then -
|
||||
set protection = w:d VAX*.dir;*
|
||||
if (f$search( "VAX*.dir", 2) .nes. "") then -
|
||||
delete VAX*.dir;*
|
||||
if (f$search( "$(CONFIG_H)") .nes. "") then -
|
||||
delete /log /noconfirm $(CONFIG_H);*
|
||||
if (f$search( "$(HLB)") .nes. "") then -
|
||||
delete /log /noconfirm $(HLB);*
|
||||
if (f$search( "*.MMSD") .nes. "") then -
|
||||
delete *.MMSD;*
|
||||
@ write sys$output ""
|
||||
@ write sys$output "Note: This procedure will not"
|
||||
@ write sys$output " DELETE [.VMS]DESCRIP_DEPS.MMS;*"
|
||||
@ write sys$output -
|
||||
"You may choose to, but a recent version of MMS (V3.5 or newer?) is"
|
||||
@ write sys$output -
|
||||
"needed to regenerate it. (It may also be recovered from the original"
|
||||
@ write sys$output -
|
||||
"distribution kit.) See [.VMS]DESCRIP_MKDEPS.MMS for instructions on"
|
||||
@ write sys$output -
|
||||
"generating [.VMS]DESCRIP_DEPS.MMS."
|
||||
@ write sys$output ""
|
||||
|
||||
# CLEAN_EXE target. Delete the executable in [.$(DEST)].
|
||||
|
||||
CLEAN_EXE :
|
||||
if (f$search( "[.$(DEST)]*.exe") .nes. "") then -
|
||||
delete [.$(DEST)]*.exe;*
|
||||
|
||||
# Include CONFIG.H dependency and rule.
|
||||
|
||||
INCL_CONFIG_SRC = 1
|
||||
.INCLUDE [-.VMS]descrip_config.mms
|
||||
|
||||
# Include generated source dependencies.
|
||||
|
||||
INCL_DESCRIP_DEPS = 1
|
||||
.INCLUDE [-.VMS]descrip_deps.mms
|
||||
|
19
vms/DESCRIP_CONFIG.MMS
Normal file
19
vms/DESCRIP_CONFIG.MMS
Normal file
@ -0,0 +1,19 @@
|
||||
# 28 January 2008. SMS.
|
||||
#
|
||||
# Wget 1.11 for VMS - MMS (or MMK) Config Description File.
|
||||
#
|
||||
|
||||
# This description file is included by other description files. It is
|
||||
# not intended to be used alone. Verify proper inclusion.
|
||||
|
||||
.IFDEF INCL_CONFIG_SRC
|
||||
.ELSE
|
||||
$$$$ THIS DESCRIPTION FILE IS NOT INTENDED TO BE USED THIS WAY.
|
||||
.ENDIF
|
||||
|
||||
|
||||
# Use the VMS "config.h".
|
||||
|
||||
$(CONFIG_H) : [-.vms]config.h_vms
|
||||
backup /log /new_version [-.vms]config.h_vms;0 $(CONFIG_H)
|
||||
|
469
vms/DESCRIP_DEPS.MMS
Normal file
469
vms/DESCRIP_DEPS.MMS
Normal file
@ -0,0 +1,469 @@
|
||||
#
|
||||
# Wget for VMS - MMS (or MMK) Source Dependency File.
|
||||
#
|
||||
|
||||
# This description file is included by other description files. It is
|
||||
# not intended to be used alone. Verify proper inclusion.
|
||||
|
||||
.IFDEF INCL_DESCRIP_DEPS
|
||||
.ELSE
|
||||
$$$$ THIS DESCRIPTION FILE IS NOT INTENDED TO BE USED THIS WAY.
|
||||
.ENDIF
|
||||
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]CMPT.C
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]CMPT.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]CONNECT.C
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]CONNECT.H
|
||||
[.$(DEST)]CONNECT.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]CONVERT.C
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]RECUR.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]PTIMER.H
|
||||
[.$(DEST)]CONVERT.OBJ : [-.SRC]RES.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]COOKIES.C
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]COOKIES.H
|
||||
[.$(DEST)]COOKIES.OBJ : [-.SRC]HTTP.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]FTP-BASIC.C
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]CONNECT.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]FTP.H
|
||||
[.$(DEST)]FTP-BASIC.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]FTP-LS.C
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]FTP.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]FTP-LS.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]FTP-OPIE.C
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]GEN-MD5.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]FTP.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]FTP-OPIE.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]FTP.C
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]FTP.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]FTP.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]CONNECT.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]NETRC.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]FTP.OBJ : [-.SRC]RECUR.H
|
||||
[.$(DEST)]FTP.OBJ : [-.VMS]VMS.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]GEN-MD5.C
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]GEN-MD5.H
|
||||
[.$(DEST)]GEN-MD5.OBJ : [-.SRC]GNU-MD5.H
|
||||
[.$(DEST)]GETOPT.OBJ : [-.SRC]GETOPT.C
|
||||
[.$(DEST)]GETOPT.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]GETOPT.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]GETOPT.OBJ : [-.SRC]GETOPT.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]GNU-MD5.C
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]GNU-MD5.OBJ : [-.SRC]GNU-MD5.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]HASH.C
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]HASH.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]HOST.C
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]HOST.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]HOST.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]HOST.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]HTML-PARSE.C
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]HTML-PARSE.H
|
||||
[.$(DEST)]HTML-PARSE.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]HTML-URL.C
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]HTML-PARSE.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]HTML-URL.OBJ : [-.SRC]RECUR.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]HTTP-NTLM.C
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]HTTP-NTLM.OBJ : [-.SRC]HTTP-NTLM.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]HTTP.C
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]HTTP.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]CONNECT.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]NETRC.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]SSL.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]HTTP-NTLM.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]COOKIES.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]GEN-MD5.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]SPIDER.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.SRC]VERSION.H
|
||||
[.$(DEST)]HTTP.OBJ : [-.VMS]VMS.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]INIT.C
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]INIT.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]INIT.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]NETRC.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]PROGRESS.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]RECUR.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]RES.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]HTTP.H
|
||||
[.$(DEST)]INIT.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]LOG.C
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]LOG.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]MAIN.C
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]INIT.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]RECUR.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]PROGRESS.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]SPIDER.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]HTTP.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]GETOPT.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.VMS]VMS.H
|
||||
[.$(DEST)]MAIN.OBJ : [-.SRC]VERSION.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]NETRC.C
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]NETRC.H
|
||||
[.$(DEST)]NETRC.OBJ : [-.SRC]INIT.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]OPENSSL.C
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]CONNECT.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]OPENSSL.OBJ : [-.SRC]SSL.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]PROGRESS.C
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]PROGRESS.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]PROGRESS.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]PTIMER.C
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]PTIMER.OBJ : [-.SRC]PTIMER.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]RECUR.C
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]RECUR.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]FTP.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]RES.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]RECUR.OBJ : [-.SRC]SPIDER.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]RES.C
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]RES.OBJ : [-.SRC]RES.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]RETR.C
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]RETR.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]PROGRESS.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]RECUR.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]FTP.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]RETR.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]HTTP.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]CONNECT.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]CONVERT.H
|
||||
[.$(DEST)]RETR.OBJ : [-.SRC]PTIMER.H
|
||||
[.$(DEST)]SAFE-CTYPE.OBJ : [-.SRC]SAFE-CTYPE.C
|
||||
[.$(DEST)]SAFE-CTYPE.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]SAFE-CTYPE.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]SAFE-CTYPE.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]SNPRINTF.OBJ : [-.SRC]SNPRINTF.C
|
||||
[.$(DEST)]SNPRINTF.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]SNPRINTF.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]SPIDER.C
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]SPIDER.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]SPIDER.OBJ : [-.SRC]RES.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]URL.C
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]URL.H
|
||||
[.$(DEST)]URL.OBJ : [-.SRC]HOST.H
|
||||
[.$(DEST)]URL.OBJ : [-.VMS]VMS_IP.H
|
||||
[.$(DEST)]URL.OBJ : [-.VMS]VMS.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]UTILS.C
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]UTILS.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]UTILS.OBJ : [-.VMS]VMS.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]XMALLOC.C
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]XMALLOC.OBJ : [-.SRC]HASH.H
|
||||
[.$(DEST)]VMS.OBJ : [-.VMS]VMS.C
|
||||
[.$(DEST)]VMS.OBJ : [-.VMS]VMS.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]CONFIG.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]CONFIG-POST.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]WGET.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]SYSDEP.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]SAFE-CTYPE.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]OPTIONS.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]XMALLOC.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]LOG.H
|
||||
[.$(DEST)]VMS.OBJ : [-.SRC]UTILS.H
|
156
vms/DESCRIP_MKDEPS.MMS
Normal file
156
vms/DESCRIP_MKDEPS.MMS
Normal file
@ -0,0 +1,156 @@
|
||||
# 28 January 2008. SMS.
|
||||
#
|
||||
# Wget 1.11 for VMS - MMS Dependency Description File.
|
||||
#
|
||||
# MMS /EXTENDED_SYNTAX description file to generate a C source
|
||||
# dependencies file. Unsightly errors result when /EXTENDED_SYNTAX
|
||||
# is not specified. Typical usage (from the [...src] directory):
|
||||
#
|
||||
# $ @ [-.VMS]VMS-WGET.COM DEPS [DASHD] [HPSSL|NOSSL] [NOSKIP] [CLEAN|PURGE]
|
||||
#
|
||||
# This description file uses this command procedure:
|
||||
#
|
||||
# [-.VMS]COLLECT_DEPS.COM
|
||||
#
|
||||
# MMK users without MMS will be unable to generate the dependencies file
|
||||
# using this description file, however there should be one supplied in
|
||||
# the kit. If this file has been deleted, users in this predicament
|
||||
# will need to recover it from the original distribution kit.
|
||||
#
|
||||
# Note: This dependency generation scheme assumes that the dependencies
|
||||
# do not depend on host architecture type or other such variables.
|
||||
# Therefore, no "#include" directive in the C source itself should be
|
||||
# conditional on such variables.
|
||||
#
|
||||
# Note: For no apparent reason, Wget code uses "system include"
|
||||
# brackets (<>) for "config.h", so /MMS_DEPENDENCIES =
|
||||
# NOSYSTEM_INCLUDE_FILES is useless here. Thus, we rely on
|
||||
# COLLECT_DEPS.COM to filter out the system includes from the
|
||||
# dependencies.
|
||||
#
|
||||
|
||||
# Required command procedures.
|
||||
|
||||
COMS = [-.VMS]COLLECT_DEPS.COM
|
||||
|
||||
# Include the source file lists (among other data).
|
||||
|
||||
INCL_DESCRIP_SRC = 1
|
||||
.INCLUDE [-.VMS]descrip_src.mms
|
||||
|
||||
# The ultimate product, a comprehensive dependency list.
|
||||
|
||||
DEPS_FILE = [-.VMS]descrip_deps.mms
|
||||
|
||||
# Detect valid qualifier and/or macro options.
|
||||
|
||||
.IF $(FINDSTRING Skip, $(MMSQUALIFIERS)) .eq Skip
|
||||
DELETE_MMSD = 1
|
||||
.ELSIF NOSKIP
|
||||
PURGE_MMSD = 1
|
||||
.ELSE
|
||||
UNK_MMSD = 1
|
||||
.ENDIF
|
||||
|
||||
# Dependency suffixes and rules.
|
||||
#
|
||||
# .FIRST is assumed to be used already, so the MMS qualifier/macro check
|
||||
# is included in each rule (one way or another).
|
||||
|
||||
.SUFFIXES_BEFORE .C .MMSD
|
||||
|
||||
.C.MMSD :
|
||||
.IF UNK_MMSD
|
||||
@ write sys$output -
|
||||
" /SKIP_INTERMEDIATES is expected on the MMS command line."
|
||||
@ write sys$output -
|
||||
" For normal behavior (delete .MMSD files), specify ""/SKIP""."
|
||||
@ write sys$output -
|
||||
" To retain the .MMSD files, specify ""/MACRO = NOSKIP=1""."
|
||||
@ exit %x00000004
|
||||
.ENDIF
|
||||
$(CC) /NOOBJECT -
|
||||
/define = ($(CDEFINES)) -
|
||||
$(CFLAGS_INCL) -
|
||||
$(CFLAGS_LIST) -
|
||||
$(CFLAGS_PREFIX) -
|
||||
$(MMS$SOURCE) -
|
||||
/MMS_DEPENDENCIES = (FILE = $(MMS$TARGET))
|
||||
|
||||
# List of MMS dependency files.
|
||||
# [.$(DEST)]XXX.obj -> XXX
|
||||
|
||||
MODS_SRC = $(FILTER-OUT *], $(PATSUBST *]*.obj, *] *, $(OBJS_SRC)))
|
||||
MODS_VMS = $(FILTER-OUT *], $(PATSUBST *]*.obj, *] [-.vms]*, $(OBJS_VMS)))
|
||||
|
||||
MODS = $(MODS_SRC) $(MODS_VMS)
|
||||
|
||||
# Complete list of C object dependency file names.
|
||||
# XXX -> XXX.mmsd
|
||||
|
||||
DEPS = $(FOREACH NAME, $(MODS), $(NAME).mmsd)
|
||||
|
||||
# Default target is the comprehensive dependency list.
|
||||
|
||||
$(DEPS_FILE) : $(CONFIG_H) $(DEPS) $(COMS)
|
||||
.IF UNK_MMSD
|
||||
@ write sys$output -
|
||||
" /SKIP_INTERMEDIATES is expected on the MMS command line."
|
||||
@ write sys$output -
|
||||
" For normal behavior (delete individual .MMSD files), specify ""/SKIP""."
|
||||
@ write sys$output -
|
||||
" To retain the individual .MMSD files, specify ""/MACRO = NOSKIP=1""."
|
||||
@ exit %x00000004
|
||||
.ENDIF
|
||||
#
|
||||
# Note that the space in P3, which prevents immediate macro
|
||||
# expansion, is removed by COLLECT_DEPS.COM.
|
||||
#
|
||||
@[-.VMS]collect_deps.com -
|
||||
"$(MMS$TARGET)" "[-...]*.mmsd" "[.$ (DEST)]" -
|
||||
$(MMSDESCRIPTION_FILE)
|
||||
@ write sys$output -
|
||||
"Created a new dependency file: $(MMS$TARGET)"
|
||||
.IF DELETE_MMSD
|
||||
@ write sys$output -
|
||||
"Deleting intermediate .MMSD files..."
|
||||
if (f$search( "*.mmsd;*") .nes. "") then -
|
||||
delete /log *.mmsd;*
|
||||
if (f$search( "[-.vms]*.mmsd;*") .nes. "") then -
|
||||
delete /log [-.vms]*.mmsd;*
|
||||
.ELSE
|
||||
@ write sys$output -
|
||||
"Purging intermediate .MMSD files..."
|
||||
purge /log *.mmsd, [-.vms]*.mmsd
|
||||
.ENDIF
|
||||
|
||||
# CLEAN target.
|
||||
|
||||
CLEAN :
|
||||
if (f$search( "$(CONFIG_H)") .nes. "") then -
|
||||
delete /log $(CONFIG_H);*
|
||||
if (f$search( "*.mmsd;*") .nes. "") then -
|
||||
delete /log *.mmsd;*
|
||||
if (f$search( "[-.vms]*.mmsd;*") .nes. "") then -
|
||||
delete /log [-.vms]*.mmsd;*
|
||||
if (f$search( "$(DEPS_FILE);*") .nes. "") then -
|
||||
delete /log $(DEPS_FILE);*
|
||||
|
||||
# PURGE target.
|
||||
|
||||
PURGE :
|
||||
if (f$search( "$(CONFIG_H);-1") .nes. "") then -
|
||||
purge /log $(CONFIG_H)
|
||||
if (f$search( "*.mmsd;*") .nes. "") then -
|
||||
delete /log *.mmsd;*
|
||||
if (f$search( "[-.vms]*.mmsd;*") .nes. "") then -
|
||||
delete /log [-.vms]*.mmsd;*
|
||||
if (f$search( "$(DEPS_FILE);-1") .nes. "") then -
|
||||
purge /log $(DEPS_FILE)
|
||||
|
||||
|
||||
# Include CONFIG.H dependency and rule.
|
||||
|
||||
INCL_CONFIG_SRC = 1
|
||||
.INCLUDE [-.VMS]descrip_config.mms
|
||||
|
259
vms/DESCRIP_SRC.MMS
Normal file
259
vms/DESCRIP_SRC.MMS
Normal file
@ -0,0 +1,259 @@
|
||||
# 29 January 2008. SMS.
|
||||
#
|
||||
# Wget 1.11 for VMS - MMS (or MMK) Source Description File.
|
||||
#
|
||||
|
||||
# This description file is included by other description files. It is
|
||||
# not intended to be used alone. Verify proper inclusion.
|
||||
|
||||
.IFDEF INCL_DESCRIP_SRC
|
||||
.ELSE
|
||||
$$$$ THIS DESCRIPTION FILE IS NOT INTENDED TO BE USED THIS WAY.
|
||||
.ENDIF
|
||||
|
||||
|
||||
# Define MMK architecture macros when using MMS.
|
||||
|
||||
.IFDEF __MMK__ # __MMK__
|
||||
.ELSE # __MMK__
|
||||
ALPHA_X_ALPHA = 1
|
||||
IA64_X_IA64 = 1
|
||||
VAX_X_VAX = 1
|
||||
.IFDEF $(MMS$ARCH_NAME)_X_ALPHA # $(MMS$ARCH_NAME)_X_ALPHA
|
||||
__ALPHA__ = 1
|
||||
.ENDIF # $(MMS$ARCH_NAME)_X_ALPHA
|
||||
.IFDEF $(MMS$ARCH_NAME)_X_IA64 # $(MMS$ARCH_NAME)_X_IA64
|
||||
__IA64__ = 1
|
||||
.ENDIF # $(MMS$ARCH_NAME)_X_IA64
|
||||
.IFDEF $(MMS$ARCH_NAME)_X_VAX # $(MMS$ARCH_NAME)_X_VAX
|
||||
__VAX__ = 1
|
||||
.ENDIF # $(MMS$ARCH_NAME)_X_VAX
|
||||
.ENDIF # __MMK__
|
||||
|
||||
# Analyze architecture-related and option macros.
|
||||
|
||||
.IFDEF __ALPHA__ # __ALPHA__
|
||||
DECC = 1
|
||||
.IFDEF LARGE # LARGE
|
||||
DEST = ALPHAL
|
||||
.ELSE # LARGE
|
||||
DEST = ALPHA
|
||||
.ENDIF # LARGE
|
||||
.ELSE # __ALPHA__
|
||||
.IFDEF __IA64__ # __IA64__
|
||||
DECC = 1
|
||||
.IFDEF LARGE # LARGE
|
||||
DEST = IA64L
|
||||
.ELSE # LARGE
|
||||
DEST = IA64
|
||||
.ENDIF # LARGE
|
||||
.ELSE # __IA64__
|
||||
.IFDEF __VAX__ # __VAX__
|
||||
DEST = VAX
|
||||
.ELSE # __VAX__
|
||||
DEST = UNK
|
||||
UNK_DEST = 1
|
||||
.ENDIF # __VAX__
|
||||
.ENDIF # __IA64__
|
||||
.ENDIF # __ALPHA__
|
||||
|
||||
# Check for option problems.
|
||||
|
||||
.IFDEF __VAX__ # __VAX__
|
||||
.IFDEF LARGE # LARGE
|
||||
LARGE_VAX = 1
|
||||
.ENDIF # LARGE
|
||||
.ENDIF # __VAX__
|
||||
|
||||
# Complain if warranted. Otherwise, show destination directory.
|
||||
# Make the destination directory, if necessary.
|
||||
|
||||
.IFDEF VMS_VERS # VMS_VERS
|
||||
.IFDEF UNK_DEST # UNK_DEST
|
||||
.FIRST
|
||||
@ write sys$output -
|
||||
" Unknown system architecture."
|
||||
.IFDEF __MMK__ # __MMK__
|
||||
@ write sys$output -
|
||||
" MMK on IA64? Try adding ""/MACRO = __IA64__""."
|
||||
.ELSE # __MMK__
|
||||
@ write sys$output -
|
||||
" MMS too old? Try adding ""/MACRO = MMS$ARCH_NAME=ALPHA"","
|
||||
@ write sys$output -
|
||||
" or ""/MACRO = MMS$ARCH_NAME=IA64"", or ""/MACRO = MMS$ARCH_NAME=VAX"","
|
||||
@ write sys$output -
|
||||
" as appropriate. (Or try a newer version of MMS.)"
|
||||
.ENDIF # __MMK__
|
||||
@ write sys$output ""
|
||||
I_WILL_DIE_NOW. /$$$$INVALID$$$$
|
||||
.ELSE # UNK_DEST
|
||||
.IFDEF LARGE_VAX # LARGE_VAX
|
||||
.FIRST
|
||||
@ write sys$output -
|
||||
" Macro ""LARGE"" is invalid on VAX."
|
||||
@ write sys$output ""
|
||||
I_WILL_DIE_NOW. /$$$$INVALID$$$$
|
||||
.ELSE # LARGE_VAX
|
||||
.FIRST
|
||||
@ write sys$output ""
|
||||
@ write sys$output " Destination: "
|
||||
@ write sys$output " "+ -
|
||||
f$extract( 0, (f$length( f$environment( "DEFAULT"))- 1), -
|
||||
f$environment( "DEFAULT")) + ".$(DEST)]"
|
||||
@ write sys$output ""
|
||||
if (f$search( "$(DEST).DIR;1") .eqs. "") then -
|
||||
create /directory [.$(DEST)]
|
||||
.ENDIF # LARGE_VAX
|
||||
.ENDIF # UNK_DEST
|
||||
.ELSE # VMS_VERS
|
||||
.FIRST
|
||||
@ write sys$output -
|
||||
" Use VMS-WGET.COM to define the required MMK or MMS macros."
|
||||
@ write sys$output -
|
||||
" It will then run MMS (or MMK)."
|
||||
@ write sys$output ""
|
||||
I_WILL_DIE_NOW. /$$$$INVALID$$$$
|
||||
.ENDIF # VMS_VERS
|
||||
|
||||
# UTIME prefix quirk.
|
||||
|
||||
.IFDEF __ALPHA__
|
||||
UTNP = , __UTC_UTIME
|
||||
.ENDIF
|
||||
|
||||
.IFDEF __IA64__
|
||||
UTNP = , __UTC_UTIME
|
||||
.ENDIF
|
||||
|
||||
# DEC C and LINK options.
|
||||
|
||||
# Main LINK options file.
|
||||
|
||||
MAIN_OPT = [-.VMS]wget.opt
|
||||
|
||||
### To enable the "-d" command-line debug option, add "ENABLE_DEBUG", as
|
||||
### shown (or in CONFIG.H[_VMS]).
|
||||
|
||||
.IFDEF DASHD
|
||||
BASE_CDEFINES = "HAVE_CONFIG_H", "SYSTEM_WGETRC=""SYSTEM_WGETRC""", \
|
||||
"ENABLE_DEBUG"
|
||||
.ELSE
|
||||
BASE_CDEFINES = "HAVE_CONFIG_H", "SYSTEM_WGETRC=""SYSTEM_WGETRC"""
|
||||
.ENDIF
|
||||
|
||||
.IFDEF MULTINET
|
||||
IP_CDEFINES = , "MULTINET"
|
||||
IP_OPT = [-.VMS]wget_multinet.opt
|
||||
IP_LINK_OPT = , $(IP_OPT) /OPTIONS
|
||||
.ENDIF
|
||||
|
||||
.IFDEF DBG
|
||||
CFLAGS_DBG = /debug /nooptimize
|
||||
LINKFLAGS_DBG = /debug
|
||||
.ENDIF
|
||||
|
||||
.IFDEF LIST
|
||||
CFLAGS_LIST = /list = [.$(DEST)] /show = (all, nomessages)
|
||||
LINKFLAGS_LIST = /map = [.$(DEST)] /cross_reference /full
|
||||
.ENDIF
|
||||
|
||||
.IFDEF LARGE
|
||||
LARGE_CDEFINES = , "_LARGEFILE"
|
||||
.ENDIF
|
||||
|
||||
.IFDEF HPSSL # HPSSL
|
||||
SSL_CDEFINES = , "HAVE_SSL", "ENABLE_NTLM"
|
||||
SSL_LINK_OPT = , [-.VMS]WGET_SSL_HP.OPT /OPTIONS
|
||||
.ELSE # HPSSL
|
||||
.IFDEF SSL # SSL
|
||||
SSL_CDEFINES = , "HAVE_SSL", "ENABLE_NTLM"
|
||||
SSL_LINK_OPT = , [-.VMS]WGET_SSL.OPT /OPTIONS
|
||||
.ELSE # SSL
|
||||
SSL_CDEFINES =
|
||||
SSL_LINK_OPT =
|
||||
.ENDIF # SSL
|
||||
.ENDIF # HPSSL
|
||||
|
||||
VER_CDEFINES = , "OS_TYPE=""VMS $(VMS_VERS)"""
|
||||
|
||||
CDEFINES = $(BASE_CDEFINES) $(IP_CDEFINES) $(LARGE_CDEFINES) \
|
||||
$(SSL_CDEFINES) $(VER_CDEFINES)
|
||||
|
||||
CFLAGS_INCL = /include = ([], [-.vms])
|
||||
|
||||
CFLAGS_PREFIX = /prefix = (all, except = \
|
||||
(getopt, optarg, opterr, optind, optopt, utime $(UTNP)))
|
||||
|
||||
CFLAGS = \
|
||||
$(CFLAGS_DBG) $(CFLAGS_LIST) \
|
||||
/define = ($(CDEFINES)) \
|
||||
$(CFLAGS_INCL) \
|
||||
$(CFLAGS_PREFIX) \
|
||||
/object = $(MMS$TARGET)
|
||||
|
||||
LINKFLAGS = $(LINKFLAGS_DBG) $(LINKFLAGS_LIST) \
|
||||
/executable = $(MMS$TARGET)
|
||||
|
||||
# Object files.
|
||||
|
||||
OBJS_NOSSL_SRC = \
|
||||
[.$(DEST)]cmpt.obj \
|
||||
[.$(DEST)]connect.obj \
|
||||
[.$(DEST)]convert.obj \
|
||||
[.$(DEST)]cookies.obj \
|
||||
[.$(DEST)]ftp.obj \
|
||||
[.$(DEST)]ftp-basic.obj \
|
||||
[.$(DEST)]ftp-ls.obj \
|
||||
[.$(DEST)]ftp-opie.obj \
|
||||
[.$(DEST)]gen-md5.obj \
|
||||
[.$(DEST)]getopt.obj \
|
||||
[.$(DEST)]gnu-md5.obj \
|
||||
[.$(DEST)]hash.obj \
|
||||
[.$(DEST)]host.obj \
|
||||
[.$(DEST)]html-parse.obj \
|
||||
[.$(DEST)]html-url.obj \
|
||||
[.$(DEST)]http.obj \
|
||||
[.$(DEST)]init.obj \
|
||||
[.$(DEST)]log.obj \
|
||||
[.$(DEST)]main.obj \
|
||||
[.$(DEST)]netrc.obj \
|
||||
[.$(DEST)]progress.obj \
|
||||
[.$(DEST)]ptimer.obj \
|
||||
[.$(DEST)]recur.obj \
|
||||
[.$(DEST)]res.obj \
|
||||
[.$(DEST)]retr.obj \
|
||||
[.$(DEST)]safe-ctype.obj \
|
||||
[.$(DEST)]snprintf.obj \
|
||||
[.$(DEST)]spider.obj \
|
||||
[.$(DEST)]url.obj \
|
||||
[.$(DEST)]utils.obj \
|
||||
[.$(DEST)]xmalloc.obj
|
||||
|
||||
OBJS_NOSSL_VMS = \
|
||||
[.$(DEST)]vms.obj
|
||||
|
||||
OBJS_NOSSL = $(OBJS_NOSSL_SRC) $(OBJS_NOSSL_VMS)
|
||||
|
||||
.IFDEF HPSSL # HPSSL
|
||||
OBJS_SSL = \
|
||||
[.$(DEST)]http-ntlm.obj \
|
||||
[.$(DEST)]openssl.obj
|
||||
.ELSE # HPSSL
|
||||
.IFDEF SSL # SSL
|
||||
OBJS_SSL = \
|
||||
[.$(DEST)]http-ntlm.obj \
|
||||
[.$(DEST)]openssl.obj
|
||||
.ELSE # SSL
|
||||
OBJS_SSL =
|
||||
.ENDIF # SSL
|
||||
.ENDIF # HPSSL
|
||||
|
||||
OBJS = $(OBJS_NOSSL) $(OBJS_SSL)
|
||||
|
||||
OBJS_SRC = $(OBJS_NOSSL_SRC) $(OBJS_SSL)
|
||||
OBJS_VMS = $(OBJS_NOSSL_VMS)
|
||||
|
||||
# Configuration header file.
|
||||
|
||||
CONFIG_H = [-.SRC]config.h
|
||||
|
308
vms/VMS-WGET.COM
Normal file
308
vms/VMS-WGET.COM
Normal file
@ -0,0 +1,308 @@
|
||||
$! 16 November 2006. SMS.
|
||||
$!
|
||||
$! Attempt to build Wget 1.10 automatically, using MMK or MMS.
|
||||
$!
|
||||
$! Usage:
|
||||
$!
|
||||
$! @ wget_kit_device:[wget_kit_dir.VMS]VMS-WGET.COM -
|
||||
$! [DASHD] [DBG] [HPSSL|NOSSL] [LARGE] [LIST] [MMS] -
|
||||
$! [CLEAN] [CLEAN_ALL] [CLEAN_EXE] [HELP] [MULTINET]
|
||||
$!
|
||||
$! To enable the "-d" (diagnostics) Wget command-line option, add
|
||||
$! "DASHD" to the command line.
|
||||
$!
|
||||
$! To enable large-file (>2GB) support (non-VAX systems), add "LARGE"
|
||||
$! to the command line.
|
||||
$!
|
||||
$! To build a debug executable, add "DBG" to the command line.
|
||||
$!
|
||||
$! To get compiler listing files, add "LIST" to the command line.
|
||||
$!
|
||||
$! This procedure prefers MMK to MMS.
|
||||
$! To use MMS when both work, add "MMS" to the command line.
|
||||
$!
|
||||
$! To prevent automatic detection and use of OpenSSL, add "NOSSL"
|
||||
$! to the command line. This procedure prefers a generic SSL kit to HP
|
||||
$! SSL. If the generic logical names OPENSSL and SSLLIB are defined,
|
||||
$! they will be used instead of the the HP SSL logical names SSL$INCLUDE
|
||||
$! and SYS$SHARE. To use HP SSL when these generic logical names are
|
||||
$! defined, add "HPSSL" to the command line.
|
||||
$!
|
||||
$! To build the "CLEAN" target (which deletes all object and
|
||||
$! executable files for the current CPU type, add "CLEAN" to the command
|
||||
$! line. Similarly, the "CLEAN_ALL", "CLEAN_EXE" or "HELP" target may be
|
||||
$! specified. For details, see [.VMS]DESCRIP.MMS.
|
||||
$!
|
||||
$! The source code contains some old Multinet-specific code which may
|
||||
$! be useful for building the program with Multinet on old VMS versions
|
||||
$! (probably VMS before V7.x). With more modern VMS and Multinet, there
|
||||
$! should be no need to use any of the old Multinet-specific code. If
|
||||
$! Multinet build problems occur, try adding "MULTINET" to the command
|
||||
$! line. The source code contains no special code for PathWay or
|
||||
$! TCPware IP software (or for the DEC/Compaq/HP UCX or TCPIP software).
|
||||
$!
|
||||
$!
|
||||
$! Special usage for automatic dependency generation (MMS only):
|
||||
$!
|
||||
$! @ wget_kit_device:[wget_kit_dir.VMS]VMS-WGET.COM -
|
||||
$! DEPS [DASHD] [HPSSL|NOSSL] [NOSKIP] [CLEAN|PURGE]
|
||||
$!
|
||||
$! See the [.VMS]DESCRIP_MKDEPS.MMS description file for more
|
||||
$! details. Specifying the CLEAN target here deletes the dependency
|
||||
$! files, not the usual objects and executables.
|
||||
$!
|
||||
$! Note that by default, DESCRIP_MKDEPS.MMS will delete the
|
||||
$! intermediate *.MMSD dependency files, leaving only the comprehensive
|
||||
$! dependency file, DESCRIP_DEPS.MMS. To preserve the intermediate
|
||||
$! files, specify "NOSKIP".
|
||||
$!
|
||||
$! Specifying the PURGE target here deletes the intermediate *.MMSD
|
||||
$! dependency files, and purges the comprehensive dependency file,
|
||||
$! DESCRIP_DEPS.MMS.
|
||||
$!
|
||||
$!----------------------------------------------------------------------
|
||||
$!
|
||||
$! Sense the current default directory.
|
||||
$!
|
||||
$ def_orig = f$environment( "DEFAULT")
|
||||
$!
|
||||
$! Arrange for clean-up.
|
||||
$!
|
||||
$ on error then goto clean_up
|
||||
$ on control_y then goto clean_up
|
||||
$!
|
||||
$! Set default to the kit [.SRC] directory.
|
||||
$!
|
||||
$ proc = f$environment( "PROCEDURE")
|
||||
$ proc_dev_dir = -
|
||||
f$parse( proc, , , "DEVICE")+ f$parse( proc, , , "DIRECTORY")
|
||||
$ set default 'proc_dev_dir'
|
||||
$ set default [-.src]
|
||||
$!
|
||||
$! Sense the VMS version.
|
||||
$!
|
||||
$ VMS_VERS = f$edit( f$getsyi( "version"), "trim")
|
||||
$!
|
||||
$!
|
||||
$! Analyze the command-line parameters.
|
||||
$!
|
||||
$ CMD = ""
|
||||
$ DASHD = ""
|
||||
$ DBG = ""
|
||||
$ DEPS = ""
|
||||
$ HPSSL = ""
|
||||
$ IP = ""
|
||||
$ LARGE = ""
|
||||
$ LIST = ""
|
||||
$ NOSKIP = ""
|
||||
$ NOSSL = ""
|
||||
$ TARGET = ""
|
||||
$!
|
||||
$ I = 0
|
||||
$ p_loop_top:
|
||||
$!
|
||||
$ I = I+ 1
|
||||
$ P = P'I'
|
||||
$ P = f$edit( P, "TRIM, UPCASE")
|
||||
$!
|
||||
$ if (P .eqs. "DASHD")
|
||||
$ then
|
||||
$ DASHD = "DASHD"
|
||||
$ else
|
||||
$ if (P .eqs. "DBG")
|
||||
$ then
|
||||
$ DBG = "DBG"
|
||||
$ else
|
||||
$ if (P .eqs. "DEPS")
|
||||
$ then
|
||||
$ DEPS = "DEPS"
|
||||
$ else
|
||||
$ if (P .eqs. "MMS")
|
||||
$ then
|
||||
$ CMD = "MMS"
|
||||
$ else
|
||||
$ if (P .eqs. "LARGE")
|
||||
$ then
|
||||
$ LARGE = "LARGE"
|
||||
$ else
|
||||
$ if (P .eqs. "LIST")
|
||||
$ then
|
||||
$ LIST = "LIST"
|
||||
$ else
|
||||
$ if (P .eqs. "MULTINET")
|
||||
$ then
|
||||
$ IP = "MULTINET"
|
||||
$ else
|
||||
$ if (P .eqs. "NOSKIP")
|
||||
$ then
|
||||
$ NOSKIP = "NOSKIP"
|
||||
$ else
|
||||
$ if (P .eqs. "NOSSL")
|
||||
$ then
|
||||
$ NOSSL = "NOSSL"
|
||||
$ else
|
||||
$ if (P .eqs. "HPSSL")
|
||||
$ then
|
||||
$ HPSSL = "HPSSL"
|
||||
$ else
|
||||
$ if (P .nes. "")
|
||||
$ then
|
||||
$ TARGET = P
|
||||
$ else
|
||||
$ goto p_loop_bottom
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$ goto p_loop_top
|
||||
$ p_loop_bottom:
|
||||
$!
|
||||
$! Verify MMK, if not intending to use MMS. DEPS rquires MMS.
|
||||
$! Accept a (non-blank) foreign command symbol "MMK", or the presence of
|
||||
$! MMK.EXE on DCL$PATH.
|
||||
$!
|
||||
$ if (DEPS .eqs. "")
|
||||
$ then
|
||||
$ if ((CMD .eqs. "") .and. (DEPS .eqs. ""))
|
||||
$ then
|
||||
$ CMD = "MMS"
|
||||
$ M_ = f$type( MMK)
|
||||
$ if (M_ .eqs. "")
|
||||
$ then
|
||||
$ if (f$search( "DCL$PATH:MMK.EXE") .nes. "") then CMD = "MMK"
|
||||
$ else
|
||||
$ if (f$edit( MMK, "TRIM") .nes. "") then CMD = "MMK"
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$! Set MMK or MMS macros.
|
||||
$!
|
||||
$ MACROS = """""VMS_VERS=''VMS_VERS'"""""
|
||||
$!
|
||||
$ if (DASHD .nes. "")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"''DASHD'=1"""""
|
||||
$ endif
|
||||
$!
|
||||
$ if (DBG .nes. "")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"''DBG'=1"""""
|
||||
$ endif
|
||||
$!
|
||||
$ if (LARGE .nes. "")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"''LARGE'=1"""""
|
||||
$ endif
|
||||
$!
|
||||
$ if (LIST .nes. "")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"''LIST'=1"""""
|
||||
$ endif
|
||||
$!
|
||||
$ if (IP .nes. "")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"''IP'=1"""""
|
||||
$ endif
|
||||
$!
|
||||
$ if (NOSKIP .nes. "")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"''NOSKIP'=1"""""
|
||||
$ endif
|
||||
$!
|
||||
$ NEED_HP_OPENSSL = 0
|
||||
$ if (NOSSL .eqs. "")
|
||||
$ then
|
||||
$ if (HPSSL .nes. "")
|
||||
$ then
|
||||
$ if (f$search( "ssl$include:ssl.h") .nes. "")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"HPSSL=1"""""
|
||||
$ endif
|
||||
$ else
|
||||
$ if (f$search( "openssl:ssl.h") .nes. "")
|
||||
$ then
|
||||
$ if (f$trnlnm( "OPENSSL") .eqs. "SSL$INCLUDE:")
|
||||
$ then
|
||||
$ MACROS = MACROS+ ", """"HPSSL=1"""""
|
||||
$ else
|
||||
$ MACROS = MACROS+ ", """"SSL=1"""""
|
||||
$ endif
|
||||
$ else
|
||||
$ if (f$search( "ssl$include:ssl.h") .nes. "")
|
||||
$ then
|
||||
$ NEED_HP_OPENSSL = 1
|
||||
$ MACROS = MACROS+ ", """"HPSSL=1"""""
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$ endif
|
||||
$!
|
||||
$ if (MACROS .nes. "")
|
||||
$ then
|
||||
$ MACROS = "/MACRO = (''MACROS')"
|
||||
$ endif
|
||||
$!
|
||||
$! Compose the MMK or MMS command with the appropriate options.
|
||||
$!
|
||||
$ if (DEPS .eqs. "")
|
||||
$ then
|
||||
$ X := 'CMD' /DESCRIPTION = [-.vms]descrip.mms 'MACROS' 'TARGET'
|
||||
$ else
|
||||
$ CMD = "MMS"
|
||||
$ if (NOSKIP .eqs. "")
|
||||
$ then
|
||||
$ CMD = CMD+ " /SKIP_INTERMEDIATE"
|
||||
$ endif
|
||||
$ X := 'CMD' /EXTENDED_SYNTAX -
|
||||
/DESCRIPTION = [-.vms]descrip_mkdeps.mms 'MACROS' 'TARGET'
|
||||
$ endif
|
||||
$!
|
||||
$! If using HP SSL, define the logical name OPENSSL.
|
||||
$!
|
||||
$ if (NEED_HP_OPENSSL)
|
||||
$ then
|
||||
$ define openssl ssl$include
|
||||
$ endif
|
||||
$!
|
||||
$! If using any SSL, show the openssl definition.
|
||||
$!
|
||||
$ if (NOSSL .eqs. "")
|
||||
$ then
|
||||
$ lnm = f$trnlnm( "OPENSSL")
|
||||
$ if (lnm .eqs. "")
|
||||
$ then
|
||||
$ lnm = "(none)"
|
||||
$ endif
|
||||
$ write sys$output "OPENSSL = "+ lnm
|
||||
$ endif
|
||||
$!
|
||||
$! Show the MMK or MMS command.
|
||||
$!
|
||||
$ write sys$output X
|
||||
$!
|
||||
$! Run MMK or MMS with the appropriate options.
|
||||
$!
|
||||
$ 'X'
|
||||
$!
|
||||
$ clean_up:
|
||||
$!
|
||||
$! If using HP SSL, deassign the logical name OPENSSL.
|
||||
$!
|
||||
$ if (NEED_HP_OPENSSL)
|
||||
$ then
|
||||
$ deassign openssl
|
||||
$ endif
|
||||
$!
|
||||
$! Restore the original default directory.
|
||||
$!
|
||||
$ set default 'def_orig'
|
||||
$!
|
640
vms/VMS_NOTES.TXT
Normal file
640
vms/VMS_NOTES.TXT
Normal file
@ -0,0 +1,640 @@
|
||||
29 January 2008. SMS.
|
||||
|
||||
Wget 1.11 for VMS (1.11a)
|
||||
=========================
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Disclaimer
|
||||
----------
|
||||
|
||||
No claims of any sort are made herein. The main Wget developers seem
|
||||
indifferent to this effort. Any suggestions for improving the code in
|
||||
the VMS-specific sections are welcome, but low expectations are more
|
||||
realistic than high ones.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This note accompanies a quick VMS port of Wget version 1.10.2, a GNU
|
||||
free network utility to retrieve files from the World Wide Web using
|
||||
HTTP and FTP. The most obvious features seem to work, but many have not
|
||||
been tested.
|
||||
|
||||
Built and tested (slightly) in these environments:
|
||||
|
||||
OpenVMS Alpha V7.3-2, HP C V7.3-009, TCPIP V5.4 - ECO 6
|
||||
|
||||
OpenVMS IA64 V8.3, HP C V7.3-018, TCPIP V5.6.
|
||||
|
||||
OpenVMS VAX V7.3, Compaq C V6.4-005, TCPIP V5.1.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
News
|
||||
----
|
||||
|
||||
Version 1.11a (PRELIMINARY) 2008-01-30
|
||||
---------------------------------------
|
||||
|
||||
- General code update to Wget 1.11.
|
||||
|
||||
- Changed to avoid trying "LIST -a" for a VMS FTP server.
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.10.2c 2006-11-16
|
||||
----------------------------
|
||||
|
||||
- Changed the code which determines the FTP server type to avoid an
|
||||
ACCVIO if no text was returned in response to a "SYST" inquiry.
|
||||
|
||||
- Fixed a command-line parsing problem with the "--ftp-stmlf" option.
|
||||
|
||||
- Fixed an unclosed comment (again?) in FTP-LS.C which could have caused
|
||||
problems with ODS5 extended file names.
|
||||
|
||||
- Changed VMS-WGET.COM to assume that nothing special is now required
|
||||
for use with the MultiNet IP package. For obsolete VMS and/or
|
||||
MultiNet versions where the old MultiNet-specific changes are still
|
||||
needed, specify "MULTINET" on the VMS-WGET.COM command line.
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.10.2b 2004-12-15
|
||||
----------------------------
|
||||
|
||||
- Changed the "-V" version report to include some host type information.
|
||||
|
||||
- Changed the I/O scheme on VMS for progress dots to avoid spurious
|
||||
newline characters when output is directed to a file.
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.10.2a 2004-10-13
|
||||
----------------------------
|
||||
|
||||
- General code update to Wget 1.10.2.
|
||||
|
||||
- Many legitimate FTP CWD operations on a VMS FTP server failed. The
|
||||
typical symptom was "No such directory `perfectly/vaild/directory'."
|
||||
|
||||
- FTP CWD operations on a VMS FTP server now end with a "CWD []". For
|
||||
an FTP URL like "ftp://host/a/b/c/d.e" (and contrary to the RFC), Wget
|
||||
uses a UNIX-like directory specification in its CWD command, here,
|
||||
"CWD a/b/c". This was observed to switch a TCPware FTP server
|
||||
(V5.6-2) into its UNIX emulation mode. Because Wget checks the system
|
||||
type only once at the beginning of a session, the associated change in
|
||||
directory listing format confused the program. The typical symptom
|
||||
was "No such file `-rwx---r-x'." The added "CWD []" command resets
|
||||
the TCPware server to VMS mode, and should be harmless on other VMS
|
||||
FTP servers.
|
||||
|
||||
- VMS-WGET.COM now finds MMK when it's on DCL$PATH as well as when a
|
||||
foreign command symbol "MMK" is defined.
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.10.1a 2004-09-09
|
||||
---------------------------
|
||||
|
||||
- General code update to Wget 1.10.1.
|
||||
|
||||
- VMS-specific files are now in the new [.VMS] directory.
|
||||
|
||||
- Changes to VMS-WGET.COM:
|
||||
- New command-line option, LARGE, enables large-file support on
|
||||
non-VAX systems.
|
||||
- VMS-WGET.COM may now be run from any default directory, not only
|
||||
[.SRC].
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.9.1e 2005-09-09
|
||||
--------------------------
|
||||
|
||||
- The default User-Agent string on VMS now includes the host
|
||||
architecture and VMS version. For example, "Wget/1.9.1e (VMS Alpha
|
||||
V7.3-2)".
|
||||
|
||||
- Fixed a problem on VMS with an ODS5 destination file system when a
|
||||
URL-derived file name contained an invalid character ("?" or "*"). A
|
||||
typical complaint might look like:
|
||||
Cannot write to `www.foraddift.non/aspx/index.asp?sid=463e'
|
||||
(file specification syntax error).
|
||||
Now, "?" is converted to "!", and "*" to "#".
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.9.1d 2005-06-21
|
||||
--------------------------
|
||||
|
||||
- Replaced the remaining instances where ".orig" was appended to a file
|
||||
name. Now (for VMS), "_orig" is used everywhere (except in the
|
||||
documentation).
|
||||
|
||||
- Disabled (for VMS) the code which appended ".nnn" (decimal "nnn") to
|
||||
an output file name to avoid overwriting an existing file. The file
|
||||
name is now used unchanged, and VMS file versioning is expected to
|
||||
prevent overwriting. (The multi-dot file names made this way caused
|
||||
I/O errors on ODS2 file systems.)
|
||||
|
||||
- Changed to do translation of CR-LF line endings to local line endings
|
||||
for ASCII FTP transfers.
|
||||
|
||||
- Changed (on VMS) to use fixed-512 format for binary FTP files. Added
|
||||
the new "--ftp-stmlf" option ("ftpstmlf on" command) to let the user
|
||||
restore the old behavior, where Stream_LF was used for both ASCII and
|
||||
binary.
|
||||
|
||||
- Added (on VMS) a new open callback function which senses (where
|
||||
supported) the process RMS_DEFAULT values for file extend quantity
|
||||
(deq), multi-block count (mbc), and multi-buffer count (mbf), and sets
|
||||
the FAB/RAB parameters accordingly. The default deq is now much
|
||||
larger than before (16384, was none), and the default mbc is now 127
|
||||
(was none), speeding creation of a large output file. Explicitly set
|
||||
RMS_DEFAULT values override built-in defaults.
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.9.1c 2004-12-15
|
||||
--------------------------
|
||||
|
||||
- Added https (SSL) support, changing DESCRIP.MMS and VMS-WGET.COM, and
|
||||
adding WGET_SSL.OPT and WGET_SSL_HP.OPT. Limited testing was done on
|
||||
Alpha, using HP SSL V1.1-B and OpenSSL version 0.9.7e. The build
|
||||
procedure automatically enables SSL support if it can find one of the
|
||||
SSL header files. The details are explained in comments in
|
||||
VMS-WGET.COM, including its new command-line options, HPSSL and NOSSL.
|
||||
|
||||
- Changed CONNECT.C to fix some problems with MultiNet TCP/IP software.
|
||||
|
||||
- A build problem related to header files (netdb.h) when compiled
|
||||
with MultiNet. Typical symptom:
|
||||
|
||||
%CC-E-REDEFSTRUCT, In this declaration, the struct "hostent" is
|
||||
redefined. at line number 178 in module NETDB of text library
|
||||
SYS$COMMON:[SYSLIB]DECC$RTLDEF.TLB;1
|
||||
|
||||
- A run-time problem with an FTP URL. Typical symptom:
|
||||
|
||||
accept: bad address
|
||||
|
||||
- Changed FTP.C to fix various problems with time-stamping ("-N",
|
||||
"--timestamping") when using an FTP URL. Some of the misbehavior was
|
||||
specific to a VMS FTP server, but not all. The typical result was a
|
||||
file with the modification date (and, in some cases, the creation
|
||||
date) left at the date of the download, rather than set to match the
|
||||
date on the server. Some misleading diagnostic messages also have
|
||||
been corrected.
|
||||
|
||||
- Changed FTP-LS.C to fix a typographical error (unclosed comment).
|
||||
|
||||
- Changed NETRC.C to fix a potential build problem on non-VMS systems.
|
||||
Adding some VMS-specific code introduced some improper statement
|
||||
ordering, which may generate complaints (or failure) with some C
|
||||
compilers.
|
||||
|
||||
- Changed VMS.C to fix a problem with the utime() function (supplied
|
||||
with Wget) when the user specified a non-UNIX file name with the Wget
|
||||
"-O" option. Typical symptom:
|
||||
|
||||
utime(home_sms:[sms.wget]t.h): error 0
|
||||
|
||||
As the message might suggest, the file date-time was not being set
|
||||
correctly. With this fix, utime() should work with either a UNIX-like
|
||||
or VMS-like file specification, and it should also set errno properly
|
||||
when it fails, enabling a more informative error message.
|
||||
|
||||
- New MMS/MMK description files and associated command procedures enable
|
||||
automatic source dependency generation. Changed: DESCRIP.MMS and
|
||||
VMS-WGET.COM. New: DESCRIP_DEPS.MMS, DESCRIP_MKDEPS.MMS,
|
||||
DESCRIP_SRC.MMS, COLLECT_DEPS.COM, and MOD_DEP.COM.
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.9.1b 2004-09-28
|
||||
--------------------------
|
||||
|
||||
- Changed CONFIG.H_VMS to fix a build problem with C RTL before VMS
|
||||
V7.3-1 with C Runtime ECO V3.0 on Alpha:
|
||||
%LINK-W-NUDFSYMS, 2 undefined symbols:
|
||||
%LINK-I-UDFSYM, DECC$GXSNPRINTF
|
||||
%LINK-I-UDFSYM, DECC$GXVSNPRINTF
|
||||
[...]
|
||||
|
||||
- Changed VMS.C:
|
||||
|
||||
- Fixed a build problem with C RTL before V7.2:
|
||||
%CC-E-UNDECLARED, In this statement, "DVI$C_ACP_F11V5" is not
|
||||
declared. at line number 262 in file
|
||||
disk:[xxx.WGET-1_9_1A_VMS.SRC]VMS.C;1
|
||||
|
||||
- Fixed a build problem with C RTL before VMS V7.3 with C Runtime ECO
|
||||
2 on Alpha:
|
||||
%CC-I-IMPLICITFUNC, In this statement, the identifier
|
||||
"decc$feature_get_index" is implicitly declared as a function.
|
||||
at line number 155 in file disk:[xxx.WGET-1_9_1A_VMS.SRC]VMS.C;1
|
||||
|
||||
%CC-I-IMPLICITFUNC, In this statement, the identifier
|
||||
"decc$feature_get_value" is implicitly declared as a function.
|
||||
at line number 159 in file disk:[xxx.WGET-1_9_1A_VMS.SRC]VMS.C;1
|
||||
|
||||
%CC-I-IMPLICITFUNC, In this statement, the identifier
|
||||
"decc$feature_set_value" is implicitly declared as a function.
|
||||
at line number 169 in file disk:[xxx.WGET-1_9_1A_VMS.SRC]VMS.C;1
|
||||
|
||||
and the related:
|
||||
|
||||
%LINK-W-NUDFSYMS, 3 undefined symbols:
|
||||
%LINK-I-UDFSYM, DECC$FEATURE_GET_INDEX
|
||||
%LINK-I-UDFSYM, DECC$FEATURE_GET_VALUE
|
||||
%LINK-I-UDFSYM, DECC$FEATURE_SET_VALUE
|
||||
[...]
|
||||
|
||||
- Fixed a build problem with Multinet involving use of both the
|
||||
Multinet-specific and generic netdb.h header files:
|
||||
|
||||
%CC-E-REDEFSTRUCT, In this declaration, the struct "hostent" is
|
||||
redefined. at line number 178 in module NETDB of text library
|
||||
SYS$COMMON:[SYSLIB]DECC$RTLDEF.TLB;1
|
||||
|
||||
- Fixed a typographical error (unclosed comment) which kept the C RTL
|
||||
feature DECC$EFS_CHARSET from being enabled as intended. This
|
||||
caused a run-time problem on non-VAX systems with some ODS5
|
||||
extended file specifications with multiple dots in file names,
|
||||
typically when "-m" ("--mirror"), "-O" ("--output-document"), or
|
||||
"-r" ("--recursive") was used:
|
||||
|
||||
hostname/test/a.B.c: file specification syntax error
|
||||
or
|
||||
test/a.B.c: non-translatable vms error code: 0x186D4
|
||||
rms-f-syn, file specification syntax error
|
||||
|
||||
- Fixed a spurious diagnostic message when doing HTTP and
|
||||
complex FTP transfers:
|
||||
|
||||
utime(). sys$parse() = 00010001.
|
||||
|
||||
- Changed FTP.C to fix a variety of problems encountered when using a
|
||||
VMS FTP server. These problems (not seen in Wget 1.5.3h) were caused
|
||||
mostly by inappropriate code added (in the main Wget development
|
||||
stream) to "help" deal with a VMS FTP server. Removing this code and
|
||||
reforming the procedure used for getting to relative directories seems
|
||||
to have fixed the problems. As before, a single-slash URL
|
||||
("ftp://host/one/two/name.type") will be treated as specifying a
|
||||
relative directory ("one/two"), while a double-slash URL
|
||||
("ftp://host//one/two/name.type") will be treated as specifying an
|
||||
absolute directory ("/one/two"). As usual, the VMS FTP server will
|
||||
attempt to puzzle out whether "/one/two" should really be interpreted
|
||||
as "one:[two]", but it's better equipped to do it than Wget is.
|
||||
|
||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
Version 1.9.1a 2004-04-28
|
||||
--------------------------
|
||||
|
||||
- Changes to VMS-WGET.COM since Wget 1.5.3h:
|
||||
|
||||
- A separate LIST command-line option now controls compiler listing
|
||||
files. The DBG option no longer implies compiler listing files.
|
||||
The LIST option also generates a link map with cross-reference.
|
||||
|
||||
- The DBG option may actually work now.
|
||||
|
||||
- Added support for IA64 architecture.
|
||||
|
||||
- Changes to DESCRIP.MMS since Wget 1.5.3h:
|
||||
|
||||
- Compiler listing files (.LIS) and link maps (.MAP) are now put into
|
||||
the system-specific directory with the corresponding object files
|
||||
(.OBJ), namely, [.SRC.ALPHA], [.SRC.IA64], or [.SRC.VAX].
|
||||
Previously, they were put into the source directory ([.SRC])
|
||||
itself.
|
||||
|
||||
- CLEAN target now deletes any .LIS and .MAP files.
|
||||
|
||||
- New HELP target creates a Wget help library.
|
||||
|
||||
- The OS_TYPE macro is now defined, including the VMS version.
|
||||
|
||||
- No more complaints like "%MMS-W-MBREDEFILL, Illegal attempt to
|
||||
redefine macro 'CFLAGS'" on old versions of MMS.
|
||||
|
||||
- A separate LIST macro now controls compiler listing files. The
|
||||
DBG macro no longer implies compiler listing files.
|
||||
|
||||
- New support for IA64 architecture.
|
||||
|
||||
- Built-in initialization of some DECC$* run-time options on non-VAX
|
||||
systems. Currently this behavior is compiled in, so any changes must
|
||||
be made in the VMS.C source file. These changes have no effect on VAX
|
||||
(or older Alpha) systems where the OS and C run-time support is
|
||||
absent.
|
||||
|
||||
- Command-line case preservation. Wget for VMS enables the following
|
||||
DECC$* run-time option:
|
||||
DECC$ARGV_PARSE_STYLE
|
||||
With extended command parsing enabled ("SET PROCESS
|
||||
/PARSE_STYLE = EXTENDED"), command-line case is preserved. This
|
||||
obviates quoting case-sensitive option switches, URLs, and other
|
||||
parameters.
|
||||
|
||||
- Extended file names on ODS5 file systems. Wget for VMS enables the
|
||||
following DECC$* run-time options:
|
||||
DECC$EFS_CASE_PRESERVE
|
||||
DECC$EFS_CHARSET
|
||||
Thus, if an ODS5 file system is used as the destination for
|
||||
downloaded files, multiple dots will be permitted and case will be
|
||||
preserved in file names. If an ODS2 file system is used, the same
|
||||
character substitutions will be made as in Wget 1.5.3h, namely,
|
||||
"." -> "_" (where needed), "~" -> "-", and "@" -> "$".
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Changes to Source Files
|
||||
-----------------------
|
||||
|
||||
Files new for VMS (all in [.VMS]):
|
||||
|
||||
COLLECT_DEPS.COM Dependency collector for DESCRIP_MKDEPS.MMS.
|
||||
|
||||
config.h_vms VMS-specific CONFIG.H.
|
||||
|
||||
decc_ver.c Diagnostic program to provide build environment
|
||||
information.
|
||||
|
||||
DESCRIP.MMS Main MMK or MMS description ("make") file.
|
||||
|
||||
DESCRIP_CONFIG.MMS CONFIG.H description file.
|
||||
|
||||
DESCRIP_DEPS.MMS Source dependency description file.
|
||||
|
||||
DESCRIP_MKDEPS.MMS Source dependency generator description file.
|
||||
|
||||
DESCRIP_SRC.MMS Source list description file.
|
||||
|
||||
VMS-WGET.COM DCL procedure to build the executable from the
|
||||
source, using MMK or MMS (and DESCRIP*.MMS).
|
||||
|
||||
vms.c Various VMS-specific code: DEC C run-time
|
||||
initialization, ODS2-ODS5 file system
|
||||
detection, ODS2 file name adjustment, file open
|
||||
callback function for better RMS parameters,
|
||||
"utime()" replacement function, and for VMS
|
||||
before V7.0, "getpwuid()" and "localtime_r()".
|
||||
|
||||
vms.h VMS-specific header file. For VMS C RTL before
|
||||
V7.3, replacement for <utime.h>. For VMS C RTL
|
||||
before V7.0, replacement for <pwd.h>.
|
||||
Declarations of replacement data
|
||||
types/structures and function prototypes for
|
||||
vms.c.
|
||||
|
||||
vms_ip.h IP software type-specific "#include"
|
||||
directives. Used by host.c.
|
||||
|
||||
vms_name_fix.sh UNIX shell script to restore file names after
|
||||
storage on an ODS2 file system.
|
||||
|
||||
VMS_NOTES.TXT These notes.
|
||||
|
||||
WGET.HLP Simple help file.
|
||||
|
||||
WGET.OPT LINK options file.
|
||||
|
||||
WGET_MULTINET.OPT LINK options file supplement for Multinet.
|
||||
|
||||
WGET_SSL.OPT LINK options file supplement for OpenSSL.
|
||||
|
||||
WGET_SSL_HP.OPT LINK options file supplement for HP SSL.
|
||||
|
||||
|
||||
Files modified for VMS (all in [.SRC]):
|
||||
|
||||
connect.c Added code for VMS header files.
|
||||
|
||||
convert.c Changed to use "_orig" instead of ".orig" on VMS
|
||||
as the file name suffix used for the "-K"
|
||||
("--backup-converted") option.
|
||||
|
||||
ftp.c Added code for VMS header files.
|
||||
Changed to eliminate a spurious -debug message
|
||||
("Unrecognized permissions for <directory>").
|
||||
Changed to eliminate spurious complaints when
|
||||
recursive downloads hit an empty directory.
|
||||
Changed to fix various problems dealing with a
|
||||
VMS FTP server.
|
||||
Changed to fix various problems with FTP and
|
||||
time-stamping ("-N").
|
||||
Changed to distinguish between ASCII and binary
|
||||
FTP transfers for proper local line endings.
|
||||
Added (for VMS) VMS-specific file open options.
|
||||
|
||||
ftp.h Added ftp_dele() function. (See ftp-basic.c.)
|
||||
Added an argument to ftp_list() for the FTP
|
||||
server type. (See ftp-basic.c.)
|
||||
|
||||
ftp-basic.c Added ftp_dele() function to accomodate a remote
|
||||
delete-after-download option.
|
||||
Changed ftp_list() to avoid trying "LIST -a" for
|
||||
an VMS FTP server.
|
||||
|
||||
ftp-ls.c Changed to open the ".listing" file in text
|
||||
mode, not binary.
|
||||
Changed VMS FTP DIR-parsing code to tolerate
|
||||
more variability (leading blank lines).
|
||||
Added support for the environment variable
|
||||
"WGET_TIMEZONE_DIFFERENTIAL" for file time
|
||||
adjustment (as in Wget 1.5.3h for VMS).
|
||||
|
||||
host.c Added code for VMS header files.
|
||||
|
||||
host.h Added code for VMS header files.
|
||||
|
||||
http.c Added code for VMS header files.
|
||||
Changed to use an OS-specific file name suffix,
|
||||
"_orig" for VMS, rather than a hard-coded
|
||||
".orig".
|
||||
Added (for VMS) VMS-specific file open options.
|
||||
Added (for VMS) host type and OS version info to
|
||||
the default User-Agent string.
|
||||
Changed "ssl_connect()" to "ssl_connect_wget()"
|
||||
to avoid conflict with "SSL_connect()".
|
||||
Added a type cast to remove a
|
||||
%CC-I-QUESTCOMPARE1 compiler complaint.
|
||||
|
||||
init.c Changed (on VMS) to use "SYS$LOGIN:.wgetrc" as
|
||||
the name of the user-specific initialization
|
||||
file (if "WGETRC" is not defined), and
|
||||
"SYSTEM_WGETRC" (expected to be a logical name)
|
||||
as the system-wide initialization file.
|
||||
Changed to open ".wgetrc" in text mode, not
|
||||
binary.
|
||||
Added (for VMS) "--ftp-stmlf" option ("ftpstmlf
|
||||
on" command to force Stream_LF format (instead
|
||||
of fixed-512) for binary FTP output files.
|
||||
|
||||
log.c Changed the I/O scheme on VMS for progress dots
|
||||
to avoid spurious newline characters when output
|
||||
is directed to a file.
|
||||
|
||||
main.c Changed the program identification debug message
|
||||
("built on OS_TYPE" instead of "on OS_TYPE"),
|
||||
and added host information to the "-V" version
|
||||
report.
|
||||
Changed to set ODS5 flag if the download
|
||||
destination is on an ODS5 file system.
|
||||
Added (for VMS) "--ftp-stmlf" option ("ftpstmlf
|
||||
on" command to force Stream_LF format (instead
|
||||
of fixed-512) for binary FTP output files.
|
||||
Adjusted the help message for -K to say "_orig"
|
||||
instead of ".orig". (See convert.c.)
|
||||
|
||||
netrc.c Changed to use "SYS$LOGIN:.netrc" as the name of
|
||||
the user name and password file on VMS.
|
||||
|
||||
openssl.c Changed "ssl_connect()" to "ssl_connect_wget()"
|
||||
to avoid conflict with "SSL_connect()".
|
||||
|
||||
options.h Added (for VMS) "--ftp-stmlf" option ("ftpstmlf
|
||||
on" command to force Stream_LF format (instead
|
||||
of fixed-512) for binary FTP output files.
|
||||
|
||||
retr.c Changed to adjust CR-LF line endings in ASCII
|
||||
FTP data to proper local line endings.
|
||||
Changed to disable (for VMS) a useless fflush()
|
||||
which was slowing file I/O.
|
||||
|
||||
retr.h Changed to accomodate changes for FTP to
|
||||
distinguish between ASCII and binary FTP
|
||||
transfers for proper local ASCII line endings.
|
||||
|
||||
ssl.h Changed "ssl_connect()" to "ssl_connect_wget()"
|
||||
to avoid conflict with "SSL_connect()".
|
||||
|
||||
url.c Added code for VMS header files.
|
||||
Added code to replace unacceptable dots (".")
|
||||
(and other invalid characters) with underscores
|
||||
("_"), tildes ("~") with hyphens ("-"), and at
|
||||
signs ("@") with dollar signs ("$"),
|
||||
respectively, in URL-derived file specifications
|
||||
on ODS2 file systems.
|
||||
|
||||
utils.c Added VMS-specific code to work around the lack
|
||||
of "fork()".
|
||||
Changed to assist ODS2 name reversion.
|
||||
Added (for VMS) VMS-specific file open options.
|
||||
Changed to use a macro, UNIQ_SEP, instead of a
|
||||
hard-coded ".", as the separator character when
|
||||
adding a decimal "nnn" suffix to a file name to
|
||||
make it unique. Not defining UNIQ_SEP, as on
|
||||
VMS, now disables adding the suffix. (See
|
||||
WGET.H.)
|
||||
|
||||
utils.h Added a declaration of the character properties
|
||||
look-up table for use in ftp-ls.c.
|
||||
|
||||
version.h Adapted from version.c. Changed the version
|
||||
string from "1.11" to "1.11a".
|
||||
|
||||
wget.h Added a definition of an OS-specific file name
|
||||
suffix, ORIG_SFX ("_orig", for VMS), to be used
|
||||
instead of a hard-coded ".orig". (See
|
||||
convert.c, http.c.)
|
||||
Added a definition of an OS-specific separator
|
||||
character, UNIQ_SEP, for the decimal "nnn"
|
||||
version number appended to a file name to make
|
||||
it unique. (See utils.c.)
|
||||
Fixed a defective typedef (affecting small-file
|
||||
builds).
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Home source URL
|
||||
---------------
|
||||
|
||||
http://www.gnu.org/directory/wget.html
|
||||
http://ftp.gnu.org/gnu/wget/
|
||||
ftp://ftp.gnu.org/gnu/wget/
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Instructions
|
||||
------------
|
||||
|
||||
Extract the files from the distribution kit. The kit includes
|
||||
objects and executables for Alpha, IA64, and VAX, in the corresponding
|
||||
host-specific subdirectories. These builds were done with options
|
||||
(explained below) "DASHD", "LARGE" (except VAX), and "NOSSL".
|
||||
|
||||
The command procedure VMS-WGET.COM attempts to determine the CPU
|
||||
type, the IP package, and SSL availability. It defines the appropriate
|
||||
macros for MMK or MMS, and then builds the appropriate executable from
|
||||
the source:
|
||||
|
||||
SET DEFAULT [.WGET-1_10_2C_VMS.VMS] ! For convenience.
|
||||
@ VMS-WGET CLEAN ! Deletes all object, list, map, and executable
|
||||
! files for the current CPU type.
|
||||
@ VMS-WGET ! Copies CONFIG.H_VMS to CONFIG.H, compiles the
|
||||
! source files, and links the executable,
|
||||
! WGET.EXE.
|
||||
! Add "DASHD" to this command line to enable the
|
||||
! Wget "-d" command-line option.
|
||||
! Add "DBG" to this command line to build a
|
||||
! debug executable.
|
||||
! Add "LARGE" to enable large-file support on
|
||||
! non-VAX systems.
|
||||
! Add "LIST" if compiler listing and link map
|
||||
! files are desired.
|
||||
! Add "MMS" to use MMS instead of MMK when both
|
||||
! are available.
|
||||
! Add "NOSSL" to inhibit use of any SSL package.
|
||||
! Add "HPSSL" to use the HP SSL package when
|
||||
! OpenSSL (the default choice) is also available.
|
||||
@ VMS-WGET HELP ! Creates a help library. (Optional. See
|
||||
! below.)
|
||||
|
||||
Set the symbol for the foreign command:
|
||||
|
||||
WGET :== $ actual_device:[actual.directory]WGET.EXE
|
||||
|
||||
A very basic VMS HELP file is supplied in [.DOC]WGET.HLP. To be
|
||||
used, it must be added to a HELP library, either an existing library or
|
||||
one just for Wget. As mentioned above, a new Wget help library may be
|
||||
created using the command, "@ VMS-WGET HELP".
|
||||
|
||||
When a new HELP library is created, a logical name "HLP$LIBRARY_n"
|
||||
may be defined to allow the HELP utility to find it. See "HELP HELP
|
||||
/USERLIBRARY" for details.
|
||||
|
||||
Try to read the original documentation to learn how to use Wget. The
|
||||
principal differences in this VMS adaptation are:
|
||||
|
||||
"-b" ("background") has no effect. (It uses "fork()".)
|
||||
|
||||
Excess dots are replaced by underscores in URL-derived file
|
||||
specifications on ODS2 file systems. For example, on a UNIX system, the
|
||||
URL "ftp://ftp.anywhere.org/x.y.z/a.b.c" could produce the local file
|
||||
"ftp.anywhere.org/x.y.z/a.b.c". With this VMS adaptation, the local
|
||||
ODS2 file would be "[.FTP_ANYWHERE_ORG.X_Y_Z]A_B.C". On an ODS5 file
|
||||
system, the file would be [.ftp^.anywhere^.org.x^.y^.z]a^.b.c".
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
The accompanying source kit may suffer from storage on an ODS2 file
|
||||
system, which does not preserve case or allow multiple dots in a file
|
||||
name. Building this kit should work on VMS, but it may be expected to
|
||||
fail on other systems. To use this kit on a non-VMS system, the files
|
||||
may need to be renamed to restore their original mixed-case and/or
|
||||
multi-dot names. The UNIX shell script "vms_name_fix.sh" (or something
|
||||
like it) should do the job.
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
||||
Steven M. Schweda (+1) 651-699-9818 (voice)
|
||||
382 South Warwick Street sms@antinode.org
|
||||
Saint Paul MN 55105-2547
|
||||
|
245
vms/WGET.HLP
Normal file
245
vms/WGET.HLP
Normal file
@ -0,0 +1,245 @@
|
||||
1 WGET
|
||||
GNU Wget 1.11a, a non-interactive network retriever.
|
||||
Usage:
|
||||
WGET :== $ device:[directory]WGET.EXE ! Define foreign command.
|
||||
WGET [OPTION [...]] [URL [...]]
|
||||
|
||||
Mandatory arguments for long options are also mandatory for short options.
|
||||
|
||||
2 Startup
|
||||
-V, --version display the version of Wget and exit.
|
||||
-h, --help print this help.
|
||||
-b, --background go to background after startup. (Ignored on VMS.)
|
||||
-e, --execute=COMMAND execute a `.wgetrc'-style command.
|
||||
|
||||
2 Logging_and_input_file
|
||||
-o, --output-file=FILE log messages to FILE.
|
||||
-a, --append-output=FILE append messages to FILE.
|
||||
-d, --debug print debugging information.
|
||||
-q, --quiet quiet (no output).
|
||||
-v, --verbose be verbose. (This is the default.)
|
||||
-nv, --non-verbose turn off verboseness, without being quiet.
|
||||
-i, --input-file=FILE download URLs found in FILE.
|
||||
-F, --force-html treat input file as HTML.
|
||||
-B, --base=URL prepends URL to relative links in -F -i file.
|
||||
|
||||
2 Download
|
||||
-t, --tries=NUMBER set number of retries to NUMBER
|
||||
(0 unlimits).
|
||||
--retry-connrefused retry even if connection is refused.
|
||||
-O --output-document=FILE write documents to FILE.
|
||||
-nc, --no-clobber skip downloads that would download to
|
||||
existing files.
|
||||
-c, --continue resume getting a partially downloaded file.
|
||||
--progress=TYPE select progress gauge type.
|
||||
-N, --timestamping don't re-retrieve files unless newer than
|
||||
local.
|
||||
-S, --server-response print server response.
|
||||
--spider don't download anything.
|
||||
-T, --timeout=SECONDS set all timeout values to SECONDS.
|
||||
--dns-timeout=SECS set the DNS lookup timeout to SECS.
|
||||
--connect-timeout=SECS set the connect timeout to SECS.
|
||||
--read-timeout=SECS set the read timeout to SECS.
|
||||
-w, --wait=SECONDS wait SECONDS between retrievals.
|
||||
--waitretry=SECS wait 1...SECS between retrieval retries.
|
||||
--random-wait wait from 0...2*WAIT secs between
|
||||
retrievals.
|
||||
--no-proxy explicitly turn off proxy.
|
||||
-Q, --quota=NUMBER set retrieval quota to NUMBER.
|
||||
--bind-address=ADDRESS bind to ADDRESS (hostname or IP) on local
|
||||
host.
|
||||
--limit-rate=RATE limit download rate to RATE.
|
||||
--no-dns-cache disable caching DNS lookups.
|
||||
--restrict-file-names=OS restrict file name chars to ones OS allows.
|
||||
--ignore-case ignore case when matching files/dirs.
|
||||
-4, --inet4-only connect only to IPv4 addresses.
|
||||
-6, --inet6-only connect only to IPv6 addresses.
|
||||
--prefer-family=FAMILY connect first to addresses of specified
|
||||
family, one of IPv6, IPv4, or none.
|
||||
--user=USER set both FTP and HTTP user to USER.
|
||||
--password=PASS set both FTP and HTTP password to PASS.
|
||||
|
||||
2 Directories
|
||||
-nd --no-directories don't create directories.
|
||||
-x, --force-directories force creation of directories.
|
||||
-nH, --no-host-directories don't create host directories.
|
||||
--protocol-directories use protocol name in directories.
|
||||
-P, --directory-prefix=PREFIX save files to PREFIX/...
|
||||
--cut-dirs=NUMBER ignore NUMBER remote directory components.
|
||||
|
||||
2 HTTP_options
|
||||
--http-user=USER set HTTP user to USER.
|
||||
--http-passwd=PASS set HTTP password to PASS.
|
||||
--no-cache disallow server-cached data.
|
||||
-E, --html-extension save HTML documents with ".html" extension.
|
||||
--ignore-length ignore "Content-Length" header field.
|
||||
--header=STRING insert STRING among the headers.
|
||||
--proxy-user=USER set USER as proxy username.
|
||||
--proxy-passwd=PASS set PASS as proxy password.
|
||||
--referer=URL include "Referer: URL" header in HTTP
|
||||
request.
|
||||
--save-headers save the HTTP headers to file.
|
||||
-U, --user-agent=AGENT identify as AGENT instead of Wget/VERSION.
|
||||
--no-http-keep-alive disable HTTP keep-alive (persistent
|
||||
connections).
|
||||
--no-cookies don't use cookies.
|
||||
--load-cookies=FILE load cookies from FILE before session.
|
||||
--save-cookies=FILE save cookies to FILE after session.
|
||||
--keep-session-cookies load and save session (non-permanent)
|
||||
cookies.
|
||||
--post-data=STRING use the POST method; send STRING as the data.
|
||||
--post-file=FILE use the POST method; send contents of FILE.
|
||||
--content-disposition honor the Content-Disposition header when
|
||||
choosing local file names (EXPERIMENTAL).
|
||||
|
||||
2 HTTPS (SSL/TLS) options:
|
||||
--secure-protocol=PR choose secure protocol, PR, one of: auto,
|
||||
SSLv2, SSLv3, and TLSv1.
|
||||
--no-check-certificate don't validate the server's certificate.
|
||||
--certificate=FILE client certificate file.
|
||||
--certificate-type=TYPE client certificate type, PEM or DER.
|
||||
--private-key=FILE private key file.
|
||||
--private-key-type=TYPE private key type, PEM or DER.
|
||||
--ca-certificate=FILE file with the bundle of CA's.
|
||||
--ca-directory=DIR directory where hash list of CA's is stored.
|
||||
--random-file=FILE FILE with random data to seed the SSL PRNG.
|
||||
--egd-file=FILE FILE naming the EGD socket with random data.
|
||||
|
||||
2 FTP_options
|
||||
--ftp-stmlf All binary FTP files use Stream_LF format.
|
||||
--ftp-user=USER set FTP user to USER.
|
||||
--ftp-password=PASS set FTP password to PASS.
|
||||
--no-remove-listing don't remove ".listing" files.
|
||||
--no-glob turn off FTP file name globbing.
|
||||
--no-passive-ftp disable the "passive" transfer mode.
|
||||
--retr-symlinks when recursing, get linked-to files (not
|
||||
dir).
|
||||
--preserve-permissions preserve remote file permissions.
|
||||
|
||||
2 Recursive_retrieval
|
||||
-r, --recursive recursive download.
|
||||
-l, --level=NUMBER maximum recursion depth (inf or 0 for infinite).
|
||||
--delete-after delete files locally after downloading them.
|
||||
-k, --convert-links make links in downloaded HTML point to local
|
||||
files.
|
||||
-K, --backup-converted before converting file X, back up as X_orig.
|
||||
-m, --mirror shortcut for -r -N -l inf --no-remove-listing.
|
||||
-p, --page-requisites get all images, etc. needed by HTML page.
|
||||
--strict-comments turn on strict (SGML) handling of HTML comments.
|
||||
|
||||
2 Recursive_accept-reject
|
||||
-A, --accept=LIST comma-separated list of accepted
|
||||
extensions.
|
||||
-R, --reject=LIST comma-separated list of rejected
|
||||
extensions.
|
||||
-D, --domains=LIST comma-separated list of accepted domains.
|
||||
--exclude-domains=LIST comma-separated list of rejected domains.
|
||||
--follow-ftp follow FTP links from HTML documents.
|
||||
--follow-tags=LIST comma-separated list of followed HTML
|
||||
tags.
|
||||
-G, --ignore-tags=LIST comma-separated list of ignored HTML
|
||||
tags.
|
||||
-H, --span-hosts go to foreign hosts when recursive.
|
||||
-L, --relative follow relative links only.
|
||||
-I, --include-directories=LIST list of allowed directories.
|
||||
-X, --exclude-directories=LIST list of excluded directories.
|
||||
-np, --no-parent don't ascend to the parent directory.
|
||||
|
||||
2 VMS_specifics
|
||||
Wget on VMS systems may behave differently in some ways from Wget on other
|
||||
systems.
|
||||
|
||||
The "-b" or "--background" command-line option is ignored on VMS systems.
|
||||
|
||||
Other differences involve command-line case, restrictions on directory
|
||||
and file names, some FTP behavior, and some RMS default parameters.
|
||||
|
||||
3 Command-line_case
|
||||
On non-VAX systems, Wget for VMS enables the following DECC$* run-time
|
||||
option:
|
||||
DECC$ARGV_PARSE_STYLE
|
||||
|
||||
This way, with extended command parsing enabled ("SET PROCESS
|
||||
/PARSE_STYLE = EXTENDED"), command-line case is preserved, which
|
||||
obviates quoting case-sensitive option switches, URLs, and other
|
||||
parameters.
|
||||
|
||||
3 Directory_and_file_names
|
||||
When the destination for a downloaded file is an ODS2 file system,
|
||||
excessive dots (".") in file names and directory names generated by
|
||||
recursive retrieval (which would be illegal in ODS2 directory or file
|
||||
names) are replaced by underscores ("_"). All tildes ("~") are replaced
|
||||
by hyphens ("-"), and all "at" signs ("@") are replaced by dollar signs
|
||||
("$"). Any other invalid characters are replaced by underscores ("_").
|
||||
Also, case information is lost.
|
||||
|
||||
For example, the command:
|
||||
wget -r "ftp://ftp.xfree86.org/pub/XFree86/3.3.5/binaries/NetBSD-1.3/"
|
||||
|
||||
on a UNIX system, should put files into the directory:
|
||||
./ftp.xfree86.org/pub/XFree86/3.3.5/binaries/NetBSD-1.3/
|
||||
|
||||
while on a VMS ODS2 file system, the directory would be:
|
||||
[.FTP_XFREE86_ORG.PUB.XFREE86.3_3_5.BINARIES.NETBSD-1_3]
|
||||
|
||||
When the destination for a downloaded file is an ODS5 file system, the
|
||||
ODS5-invalid characters "?" and "*" are converted to "!" and "#",
|
||||
respectively.
|
||||
|
||||
On non-VAX systems, Wget for VMS enables the following DECC$* run-time
|
||||
options:
|
||||
DECC$EFS_CHARSET
|
||||
DECC$EFS_CASE_PRESERVE
|
||||
|
||||
This way, when the destination for a downloaded file is an ODS5 file
|
||||
system, multiple dots will be permitted and case will be preserved in
|
||||
directory and file names, so the previous example directory would be:
|
||||
[.ftp^.xfree86^.org.pub.XFree86.3^.3^.5.binaries.NetBSD-1^.3]
|
||||
|
||||
3 FTP_file_date
|
||||
Files downloaded using FTP from some servers may get date-time info in
|
||||
server-local time. Define an environment variable (symbol or logical
|
||||
name) WGET_TIMEZONE_DIFFERENTIAL (a signed time in seconds) to offset
|
||||
these file dates.
|
||||
|
||||
3 FTP_file_format
|
||||
By default, when Wget does a binary (Image) FTP transfer, the
|
||||
destination file is created with fixed-length, 512-byte records. When
|
||||
Wget does an ASCII FTP transfer, the destination file is created with
|
||||
Stream_LF format.
|
||||
|
||||
In Wget versions before 1.10.1, an FTP destination file was always
|
||||
created with Stream_LF format.
|
||||
|
||||
A new command-line option, --ftp-stmlf, forces all FTP destination
|
||||
files to Stream_LF format, as in Wget versions before 1.10.1.
|
||||
|
||||
Add ";type=a" to the end of an FTP URL to specify an ASCII transfer.
|
||||
|
||||
Destination files specified using "-O" ("--output-document") are always
|
||||
created with Stream_LF format.
|
||||
|
||||
3 FTP_file_versions
|
||||
To specify an explicit ";nnn" version number in an FTP URL, escape the
|
||||
";" as "%3B", or, if the (VMS) FTP server will accept it, use a second
|
||||
dot. For example, for "file.type;25" use a URL like:
|
||||
ftp://server/directory/file.type%3B25
|
||||
or:
|
||||
ftp://server/directory/file.type.25
|
||||
|
||||
3 RMS_default_parameters
|
||||
For improved I/O speed, when writing a downloaded file, Wget uses these
|
||||
RMS parameter values by default: BLOCK_COUNT = 127, BUFFER_COUNT = 2,
|
||||
EXTEND_QUANTITY = 16384.
|
||||
|
||||
The user may overide these values by specifying different (non-zero)
|
||||
values for these parameters using the SET RMS_DEFAULT command.
|
||||
|
||||
3 File_attributes
|
||||
As with many C programs which originated on non-VMS systems, Wget may
|
||||
make some assumptions about file attributes which can cause some
|
||||
problems. One example is the "--post-file=FILE" option, which requires
|
||||
that the "FILE" be in Stream_LF format. (In this case, HTTP 1.0
|
||||
requires the length of the request to be known, and the method used to
|
||||
determine the size of the file will fail for Variable-length format
|
||||
files.)
|
32
vms/WGET.OPT
Normal file
32
vms/WGET.OPT
Normal file
@ -0,0 +1,32 @@
|
||||
odir:CMPT.OBJ
|
||||
odir:CONNECT.OBJ
|
||||
odir:CONVERT.OBJ
|
||||
odir:COOKIES.OBJ
|
||||
odir:FTP-BASIC.OBJ
|
||||
odir:FTP-LS.OBJ
|
||||
odir:FTP-OPIE.OBJ
|
||||
odir:FTP.OBJ
|
||||
odir:GEN-MD5.OBJ
|
||||
odir:GETOPT.OBJ
|
||||
odir:GNU-MD5.OBJ
|
||||
odir:HASH.OBJ
|
||||
odir:HOST.OBJ
|
||||
odir:HTML-PARSE.OBJ
|
||||
odir:HTML-URL.OBJ
|
||||
odir:HTTP.OBJ
|
||||
odir:INIT.OBJ
|
||||
odir:LOG.OBJ
|
||||
odir:MAIN.OBJ
|
||||
odir:NETRC.OBJ
|
||||
odir:PTIMER.OBJ
|
||||
odir:PROGRESS.OBJ
|
||||
odir:RECUR.OBJ
|
||||
odir:RES.OBJ
|
||||
odir:RETR.OBJ
|
||||
odir:SAFE-CTYPE.OBJ
|
||||
odir:SNPRINTF.OBJ
|
||||
odir:SPIDER.OBJ
|
||||
odir:URL.OBJ
|
||||
odir:UTILS.OBJ
|
||||
odir:VMS.OBJ
|
||||
odir:XMALLOC.OBJ
|
1
vms/WGET_MULTINET.OPT
Normal file
1
vms/WGET_MULTINET.OPT
Normal file
@ -0,0 +1 @@
|
||||
MULTINET_SOCKET_LIBRARY /SHAREABLE
|
4
vms/WGET_SSL.OPT
Normal file
4
vms/WGET_SSL.OPT
Normal file
@ -0,0 +1,4 @@
|
||||
odir:HTTP-NTLM.OBJ
|
||||
odir:OPENSSL.OBJ
|
||||
SSLLIB:LIBSSL.OLB /LIBRARY
|
||||
SSLLIB:LIBCRYPTO.OLB /LIBRARY
|
4
vms/WGET_SSL_HP.OPT
Normal file
4
vms/WGET_SSL_HP.OPT
Normal file
@ -0,0 +1,4 @@
|
||||
odir:HTTP-NTLM.OBJ
|
||||
odir:OPENSSL.OBJ
|
||||
SYS$SHARE:SSL$LIBSSL_SHR32 /SHARE
|
||||
SYS$SHARE:SSL$LIBCRYPTO_SHR32 /SHARE
|
391
vms/config.h_vms
Normal file
391
vms/config.h_vms
Normal file
@ -0,0 +1,391 @@
|
||||
/* vms/config.h_vms. VMS-specific config.h for Wget 1.11. */
|
||||
/* Hand-edited from Tru64: src/config.h. Generated by configure. */
|
||||
|
||||
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
|
||||
systems. This function is required for `alloca.c' support on those systems.
|
||||
*/
|
||||
/* #undef CRAY_STACKSEG_END */
|
||||
|
||||
/* Define to 1 if using `alloca.c'. */
|
||||
/* #undef C_ALLOCA */
|
||||
|
||||
/* Define if you want the debug output support compiled in. */
|
||||
#define ENABLE_DEBUG 1
|
||||
|
||||
/* Define if you want the HTTP Digest Authorization compiled in. */
|
||||
#define ENABLE_DIGEST 1
|
||||
|
||||
/* Define if IPv6 support is enabled. */
|
||||
#if !defined( __VAX)
|
||||
# define ENABLE_IPV6 1
|
||||
#endif /* !defined( __VAX) */
|
||||
|
||||
/* Define if you want the NTLM authorization support compiled in. */
|
||||
/* #define ENABLE_NTLM 1 */
|
||||
|
||||
/* Define if you want the Opie support for FTP compiled in. */
|
||||
#define ENABLE_OPIE 1
|
||||
|
||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||
/* #define HAVE_ALLOCA 1 */
|
||||
|
||||
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
|
||||
*/
|
||||
/* #define HAVE_ALLOCA_H 1 */
|
||||
|
||||
/* VMS alloca. (_LARGEFILE must be defined before this.) */
|
||||
# include <builtins.h>
|
||||
# define alloca __ALLOCA
|
||||
|
||||
/* Define to use built-in MD5. */
|
||||
#define HAVE_BUILTIN_MD5 1
|
||||
|
||||
/* Define to 1 if you have the `clock_gettime' function. */
|
||||
/* #define HAVE_CLOCK_GETTIME 1 */
|
||||
#if __CRTL_VER >= 70320000
|
||||
# define HAVE_CLOCK_GETTIME 1
|
||||
#endif /* __CRTL_VER >= 70320000 */
|
||||
|
||||
/* Define to 1 if you have the `drand48' function. */
|
||||
#if __CRTL_VER >= 70000000
|
||||
# define HAVE_DRAND48 1
|
||||
#endif /* __CRTL_VER >= 70000000 */
|
||||
|
||||
/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
|
||||
/* #undef HAVE_FSEEKO */
|
||||
#if __CRTL_VER >= 70301000
|
||||
# define HAVE_FSEEKO 1
|
||||
#endif /* __CRTL_VER >= 70301000 */
|
||||
|
||||
/* Define to 1 if you have the `ftello' function. */
|
||||
/* #define HAVE_FTELLO 1 */
|
||||
#if __CRTL_VER >= 70301000
|
||||
# define HAVE_FTELLO 1
|
||||
#endif /* __CRTL_VER >= 70301000 */
|
||||
|
||||
/* Define to 1 if you have the `getaddrinfo' function. */
|
||||
/* #define HAVE_GETADDRINFO 1 */
|
||||
#if __CRTL_VER >= 70300000
|
||||
# define HAVE_GETADDRINFO 1
|
||||
#endif /* __CRTL_VER >= 70300000 */
|
||||
|
||||
/* Define to 1 if you have the `gethostbyname' function. */
|
||||
#define HAVE_GETHOSTBYNAME 1
|
||||
|
||||
/* Define to 1 if you have the `getpagesize' function. */
|
||||
/* #define HAVE_GETPAGESIZE 1 */
|
||||
#if __CRTL_VER >= 70000000
|
||||
# define HAVE_GETPAGESIZE 1
|
||||
#endif /* __CRTL_VER >= 70000000 */
|
||||
|
||||
/* Define to 1 if you have the `gettext' function. */
|
||||
/* #undef HAVE_GETTEXT */
|
||||
|
||||
/* Define to 1 if you have the `inet_ntoa' function. */
|
||||
#define HAVE_INET_NTOA 1
|
||||
|
||||
/* Define to 1 if the system has the type `int64_t'. */
|
||||
#if !defined( __VAX)
|
||||
# define HAVE_INT64_T 1
|
||||
#endif /* !defined( __VAX) */
|
||||
|
||||
/* Define to 1 if the system has the type `intptr_t'. */
|
||||
#define HAVE_INTPTR_T 1
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the `isatty' function. */
|
||||
#define HAVE_ISATTY 1
|
||||
|
||||
/* Define to 1 if you have the `dl' library (-ldl). */
|
||||
/* #undef HAVE_LIBDL */
|
||||
|
||||
/* Define if you have the gnutls library. */
|
||||
/* #undef HAVE_LIBGNUTLS */
|
||||
|
||||
/* Define to 1 if you have the <libintl.h> header file. */
|
||||
/* #undef HAVE_LIBINTL_H */
|
||||
|
||||
/* Define to 1 if you have the `nsl' library (-lnsl). */
|
||||
/* #undef HAVE_LIBNSL */
|
||||
|
||||
/* Define to 1 if you have the `rt' library (-lrt). */
|
||||
/* #undef HAVE_LIBRT */
|
||||
|
||||
/* Define to 1 if you have the `socket' library (-lsocket). */
|
||||
/* #undef HAVE_LIBSOCKET */
|
||||
|
||||
/* Define if you have the ssl library. */
|
||||
/* #undef HAVE_LIBSSL */
|
||||
|
||||
/* Define if we're compiling support for MD5. */
|
||||
#define HAVE_MD5 1
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#define HAVE_MEMORY_H 1
|
||||
|
||||
/* Define to 1 if you have the `memrchr' function. */
|
||||
/* #undef HAVE_MEMRCHR */
|
||||
|
||||
/* Define to 1 if you have a working `mmap' system call. */
|
||||
#define HAVE_MMAP 1
|
||||
|
||||
/* Define if you have the nanosleep function. */
|
||||
/* #define HAVE_NANOSLEEP 1 */
|
||||
#if __CRTL_VER >= 70320000
|
||||
# define HAVE_NANOSLEEP 1
|
||||
#endif /* __CRTL_VER >= 70320000 */
|
||||
|
||||
/* Define this if you want the NLS support. */
|
||||
/* #undef HAVE_NLS */
|
||||
|
||||
/* Define when using OpenSSL MD5. */
|
||||
/* #undef HAVE_OPENSSL_MD5 */
|
||||
|
||||
/* Define to 1 if you have the <pwd.h> header file. */
|
||||
#define HAVE_PWD_H 1
|
||||
|
||||
/* Define to 1 if you have the `sigblock' function. */
|
||||
#define HAVE_SIGBLOCK 1
|
||||
|
||||
/* Define to 1 if you have the `sigsetjmp' function. */
|
||||
#define HAVE_SIGSETJMP 1
|
||||
|
||||
/* Define to 1 if the system has the type `sig_atomic_t'. */
|
||||
#define HAVE_SIG_ATOMIC_T 1
|
||||
|
||||
/* Define to 1 if you have the `snprintf' function. */
|
||||
/* #define HAVE_SNPRINTF 1 */
|
||||
#if (!defined( __VAX)) && (__CRTL_VER >= 70312000)
|
||||
# define HAVE_SNPRINTF 1
|
||||
#endif /* (!defined( __VAX)) && (__CRTL_VER >= 70312000) */
|
||||
|
||||
/* Define if struct sockaddr_in6 has the sin6_scope_id member */
|
||||
/* #define HAVE_SOCKADDR_IN6_SCOPE_ID 1 */
|
||||
|
||||
/* Define when using Solaris MD5. */
|
||||
/* #undef HAVE_SOLARIS_MD5 */
|
||||
|
||||
/* Define to 1 if stdbool.h conforms to C99. */
|
||||
/* #undef HAVE_STDBOOL_H */
|
||||
#if defined(__DECC) && __DECC_VER >= 60400000
|
||||
# define HAVE_STDBOOL_H 1
|
||||
#endif /* defined(__DECC) && __DECC_VER >= 60400000 */
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
/* #define HAVE_STDINT_H 1 */
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the `strcasecmp' function. */
|
||||
/* #define HAVE_STRCASECMP 1 */
|
||||
#if __CRTL_VER >= 70000000
|
||||
# define HAVE_STRCASECMP 1
|
||||
#endif /* __CRTL_VER >= 70000000 */
|
||||
|
||||
/* Define to 1 if you have the `strdup' function. */
|
||||
/* #define HAVE_STRDUP 1 */
|
||||
#if __CRTL_VER >= 70000000
|
||||
# define HAVE_STRDUP 1
|
||||
#endif /* __CRTL_VER >= 70000000 */
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
/* #define HAVE_STRINGS_H 1 */
|
||||
#if __CRTL_VER >= 70000000
|
||||
# define HAVE_STRINGS_H 1
|
||||
#endif /* __CRTL_VER >= 70000000 */
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the `strncasecmp' function. */
|
||||
/* #define HAVE_STRNCASECMP 1 */
|
||||
/* #define HAVE_STRNCASECMP 1 */
|
||||
#if __CRTL_VER >= 70000000
|
||||
# define HAVE_STRNCASECMP 1
|
||||
#endif /* __CRTL_VER >= 70000000 */
|
||||
|
||||
/* Define to 1 if you have the `strptime' function. */
|
||||
#define HAVE_STRPTIME 1
|
||||
|
||||
/* Define to 1 if you have the `strtoll' function. */
|
||||
/* #undef HAVE_STRTOLL */
|
||||
#if !defined(_ANSI_C_SOURCE) && !defined(__VAX)
|
||||
# define HAVE_STRTOLL 1
|
||||
#endif /* !defined(_ANSI_C_SOURCE) && !defined(__VAX) */
|
||||
|
||||
/* Define to 1 if the system has the type `struct sockaddr_in6'. */
|
||||
/* #define HAVE_STRUCT_SOCKADDR_IN6 1 */
|
||||
|
||||
/* Define to 1 if the system has the type `struct sockaddr_storage'. */
|
||||
/* #define HAVE_STRUCT_SOCKADDR_STORAGE 1 */
|
||||
|
||||
/* Define to 1 if the system has the type `struct utimbuf'. */
|
||||
#define HAVE_STRUCT_UTIMBUF 1
|
||||
|
||||
/* Define to 1 if you have the `symlink' function. */
|
||||
/* #define HAVE_SYMLINK 1 */
|
||||
|
||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */
|
||||
#define HAVE_SYS_IOCTL_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/select.h> header file. */
|
||||
/* #define HAVE_SYS_SELECT_H 1 */
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#define HAVE_SYS_TIME_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/utime.h> header file. */
|
||||
/* #undef HAVE_SYS_UTIME_H */
|
||||
|
||||
/* Define to 1 if you have the <termios.h> header file. */
|
||||
/* #define HAVE_TERMIOS_H 1 */
|
||||
|
||||
/* Define to 1 if you have the `timegm' function. */
|
||||
/* #undef HAVE_TIMEGM */
|
||||
|
||||
/* Define to 1 if the system has the type `uint32_t'. */
|
||||
#define HAVE_UINT32_T 1
|
||||
|
||||
/* Define to 1 if the system has the type `uintptr_t'. */
|
||||
#define HAVE_UINTPTR_T 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Define to 1 if you have the `usleep' function. */
|
||||
#define HAVE_USLEEP 1
|
||||
|
||||
/* Define to 1 if you have the <utime.h> header file. */
|
||||
/* #define HAVE_UTIME_H 1 */
|
||||
|
||||
/* Define to 1 if you have the `vasprintf' function. */
|
||||
/* #undef HAVE_VASPRINTF */
|
||||
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#if (!defined( __VAX)) && (__CRTL_VER >= 70312000)
|
||||
# define HAVE_VSNPRINTF 1
|
||||
#endif /* (!defined( __VAX)) && (__CRTL_VER >= 70312000) */
|
||||
|
||||
/* Define if fnmatch.h can be included. */
|
||||
/* #define HAVE_WORKING_FNMATCH_H 1 */
|
||||
|
||||
/* Define to 1 if the system has the type `_Bool'. */
|
||||
#if defined(__DECC) && __DECC_VER >= 60400000
|
||||
# define HAVE__BOOL 1
|
||||
#endif /* defined(__DECC) && __DECC_VER >= 60400000 */
|
||||
|
||||
/* Define to be the name of the operating system. */
|
||||
#ifndef OS_TYPE
|
||||
# define OS_TYPE "VMS"
|
||||
#endif /* OS_TYPE */
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT ""
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME ""
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING ""
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME ""
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION ""
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#define SIZEOF_INT 4
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#define SIZEOF_LONG 4
|
||||
|
||||
/* The size of `long long', as computed by sizeof. */
|
||||
/* #define SIZEOF_LONG_LONG 8 */
|
||||
#ifndef __VAX
|
||||
# define SIZEOF_LONG_LONG 8
|
||||
#endif /* def __VAX */
|
||||
|
||||
/* The size of `off_t', as computed by sizeof. */
|
||||
/* #define SIZEOF_OFF_T 8 */
|
||||
#ifdef __VAX
|
||||
# define SIZEOF_OFF_T 4
|
||||
#else /* def __VAX */
|
||||
# ifdef _LARGEFILE
|
||||
# define SIZEOF_OFF_T 8
|
||||
# else /* def _LARGEFILE */
|
||||
# define SIZEOF_OFF_T 4
|
||||
# endif /* def _LARGEFILE [else] */
|
||||
#endif /* def __VAX [else]*/
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#define SIZEOF_SHORT 2
|
||||
|
||||
/* The size of `void *', as computed by sizeof. */
|
||||
#define SIZEOF_VOID_P 4
|
||||
|
||||
/* If using the C implementation of alloca, define if you know the
|
||||
direction of stack growth for your system; otherwise it will be
|
||||
automatically deduced at runtime.
|
||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||
/* #undef STACK_DIRECTION */
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Define to 1 if your processor stores words with the most significant byte
|
||||
first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
/* #undef WORDS_BIGENDIAN */
|
||||
|
||||
/* Define to 1 if on AIX 3.
|
||||
System headers sometimes define this.
|
||||
We just want to avoid a redefinition error message. */
|
||||
#ifndef _ALL_SOURCE
|
||||
/* # undef _ALL_SOURCE */
|
||||
#endif
|
||||
|
||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||
/* #undef _FILE_OFFSET_BITS */
|
||||
|
||||
/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
|
||||
/* #undef _LARGEFILE_SOURCE */
|
||||
|
||||
/* Define for large files, on AIX-style hosts. */
|
||||
/* #undef _LARGE_FILES */
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
/* #undef const */
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
/* #undef inline */
|
||||
#endif
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
/* #undef pid_t */
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
/* #undef size_t */
|
||||
|
||||
/* Define to int or size_t on systems without socklen_t. */
|
||||
#define socklen_t size_t
|
||||
|
||||
/* Define to empty if the keyword `volatile' does not work. Warning: valid
|
||||
code using `volatile' can become incorrect without. Disable with care. */
|
||||
/* #undef volatile */
|
||||
|
||||
|
||||
#include "config-post.h"
|
||||
|
30
vms/decc_ver.c
Normal file
30
vms/decc_ver.c
Normal file
@ -0,0 +1,30 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main( void)
|
||||
{
|
||||
#ifdef __VMS_VERSION
|
||||
printf( " __VMS_VERSION: >%s<.\n", __VMS_VERSION);
|
||||
#else /* def __VMS_VERSION */
|
||||
printf( " __VMS_VERSION: (undefined)<.\n");
|
||||
#endif /* def __VMS_VERSION [else] */
|
||||
|
||||
#ifdef __VMS_VER
|
||||
printf( " __VMS_VER = %d.\n", __VMS_VER);
|
||||
#else /* def __VMS_VER */
|
||||
printf( " __VMS_VER = (undefined).\n");
|
||||
#endif /* def __VMS_VER [else] */
|
||||
|
||||
#ifdef __DECC_VER
|
||||
printf( " __DECC_VER = %d.\n", __DECC_VER);
|
||||
#else /* def __DECC_VER */
|
||||
printf( " __DECC_VER = (undefined).\n");
|
||||
#endif /* def __DECC_VER */
|
||||
|
||||
#ifdef __CRTL_VER
|
||||
printf( " __CRTL_VER = %d.\n", __CRTL_VER);
|
||||
#else /* def __CRTL_VER */
|
||||
printf( " __CRTL_VER = (undefined).\n");
|
||||
#endif /* def __CRTL_VER */
|
||||
|
||||
return 0;
|
||||
}
|
107
vms/vms.h
Normal file
107
vms/vms.h
Normal file
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Various VMS-specific items.
|
||||
*
|
||||
* Includes:
|
||||
*
|
||||
* Emergency replacement for <utime.h> for VMS CRTL before V7.3.
|
||||
*
|
||||
* Emergency replacement for <pwd.h> for VMS CRTL before V7.0.
|
||||
*
|
||||
* Emergency substitution of stat() for lstat() for VAX and VMS CRTL
|
||||
* before V7.3-1.
|
||||
*
|
||||
* Prototypes for VMS-specific functions:
|
||||
* acc_cb()
|
||||
* utime() (CRTL < V7.3)
|
||||
* ods_conform()
|
||||
* set_ods5_dest()
|
||||
* vms_arch()
|
||||
* vms_vers()
|
||||
*
|
||||
* Global storage:
|
||||
* ods5_dest
|
||||
*/
|
||||
|
||||
#ifndef __VMS_H_INCLUDED
|
||||
#define __VMS_H_INCLUDED
|
||||
|
||||
/* Emergency replacement for <utime.h> for VMS before V7.3. */
|
||||
|
||||
#if __CRTL_VER < 70300000
|
||||
|
||||
#include <types.h>
|
||||
|
||||
/* The "utimbuf" structure is used by "utime()". */
|
||||
struct utimbuf {
|
||||
time_t actime; /* access time */
|
||||
time_t modtime; /* modification time */
|
||||
};
|
||||
|
||||
/* Function prototypes for utime(), */
|
||||
|
||||
int utime( const char *path, const struct utimbuf *times);
|
||||
|
||||
#else /* __CRTL_VER < 70300000 */
|
||||
|
||||
#include <utime.h>
|
||||
|
||||
#endif /* __CRTL_VER < 70300000 */
|
||||
|
||||
|
||||
/* Emergency substitution of stat() for lstat() for VAX and VMS CRTL
|
||||
before V7.3-1.
|
||||
*/
|
||||
#if defined(__VAX) || __CRTL_VER < 70301000
|
||||
|
||||
#define lstat( __p1, __p2) stat( __p1, __p2)
|
||||
|
||||
#endif /* defined(__VAX) || __CRTL_VER < 70301000 */
|
||||
|
||||
|
||||
/* Global storage. */
|
||||
|
||||
/* VMS destination file system type. < 0: unset/unknown
|
||||
= 0: ODS2
|
||||
> 0: ODS5
|
||||
*/
|
||||
|
||||
extern int ods5_dest;
|
||||
|
||||
|
||||
/* Function prototypes. */
|
||||
|
||||
extern int acc_cb();
|
||||
|
||||
char *ods_conform( char *path);
|
||||
|
||||
int set_ods5_dest( char *path);
|
||||
|
||||
char *vms_arch( void);
|
||||
|
||||
char *vms_vers( void);
|
||||
|
||||
/* Emergency replacement for <pwd.h> (for VMS CRTL before V7.0). */
|
||||
|
||||
/* Declare "passwd" structure, if needed. */
|
||||
|
||||
#ifndef HAVE_PWD_H
|
||||
|
||||
struct passwd {
|
||||
char *pw_name;
|
||||
char *pw_passwd;
|
||||
int pw_uid;
|
||||
int pw_gid;
|
||||
short pw_salt;
|
||||
int pw_encrypt;
|
||||
char *pw_age;
|
||||
char *pw_comment;
|
||||
char *pw_gecos;
|
||||
char *pw_dir;
|
||||
char *pw_shell;
|
||||
};
|
||||
|
||||
struct passwd *getpwuid();
|
||||
|
||||
#endif /* HAVE_PWD_H */
|
||||
|
||||
#endif /* __VMS_H_INCLUDED */
|
19
vms/vms_ip.h
Normal file
19
vms/vms_ip.h
Normal file
@ -0,0 +1,19 @@
|
||||
/* VMS-specific "#include" directives for IP. */
|
||||
|
||||
#ifdef MULTINET
|
||||
|
||||
#include "multinet_root:[multinet.include.sys]types.h"
|
||||
#include "multinet_root:[multinet.include]errno.h"
|
||||
#include "multinet_root:[multinet.include]netdb.h"
|
||||
|
||||
#else /* MULTINET */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#if __CRTL_VER < 70000000
|
||||
#define h_errno errno /* Quiets the compiler, but probably ineffective. */
|
||||
#endif /* __CRTL_VER < 70000000 */
|
||||
|
||||
#endif /* MULTINET */
|
51
vms/vms_name_fix.sh
Normal file
51
vms/vms_name_fix.sh
Normal file
@ -0,0 +1,51 @@
|
||||
#!/bin/sh
|
||||
# 13 October 2005. SMS.
|
||||
#
|
||||
# Wget 1.10.2
|
||||
#
|
||||
# Restore original file names after storage on an ODS2 file system.
|
||||
#
|
||||
mv authors AUTHORS
|
||||
mv changelog ChangeLog
|
||||
mv changelog.readme ChangeLog.README
|
||||
mv configure.bat_in configure.bat.in
|
||||
mv copying COPYING
|
||||
mv doc/changelog doc/ChangeLog
|
||||
mv doc/makefile.in doc/Makefile.in
|
||||
mv doc/sample.wgetrc_munged_for_texi_inclusion \
|
||||
doc/sample.wgetrc.munged_for_texi_inclusion
|
||||
mv doc/texi2pod.pl_in doc/texi2pod.pl.in
|
||||
mv install INSTALL
|
||||
mv mailing-list MAILING-LIST
|
||||
mv makefile.in Makefile.in
|
||||
mv news NEWS
|
||||
mv patches PATCHES
|
||||
mv po/makefile.in_in po/Makefile.in.in
|
||||
mv po/potfiles.in po/POTFILES.in
|
||||
mv po/en_gb.po po/en_GB.po
|
||||
mv po/pt_br.po po/pt_BR.po
|
||||
mv po/zh_cn.po po/zh_CN.po
|
||||
mv po/zh_tw.po po/zh_TW.po
|
||||
mv readme README
|
||||
mv readme.checkout README.checkout
|
||||
mv src/changelog src/ChangeLog
|
||||
mv src/config.h_in src/config.h.in
|
||||
mv src/makefile.in src/Makefile.in
|
||||
mv todo TODO
|
||||
mv util/makefile.in util/Makefile.in
|
||||
mv util/readme util/README
|
||||
mv windows/changelog windows/ChangeLog
|
||||
mv windows/config.h_bor windows/config.h.bor
|
||||
mv windows/config.h_mingw windows/config.h.mingw
|
||||
mv windows/config.h_ms windows/config.h.ms
|
||||
mv windows/makefile.doc windows/Makefile.doc
|
||||
mv windows/makefile.in windows/Makefile.in
|
||||
mv windows/makefile.src windows/Makefile.src
|
||||
mv windows/makefile.src_bor windows/Makefile.src.bor
|
||||
mv windows/makefile.src_mingw windows/Makefile.src.mingw
|
||||
mv windows/makefile.top windows/Makefile.top
|
||||
mv windows/makefile.top_bor windows/Makefile.top.bor
|
||||
mv windows/makefile.top_mingw windows/Makefile.top.mingw
|
||||
mv windows/makefile.watcom windows/Makefile.watcom
|
||||
mv windows/readme windows/README
|
||||
#
|
Loading…
Reference in New Issue
Block a user