'r21-2-41-utf-2000-0_17-1'.
+++ /dev/null
-This is ../info/internals.info, produced by makeinfo version 4.0 from
-internals/internals.texi.
-
-INFO-DIR-SECTION XEmacs Editor
-START-INFO-DIR-ENTRY
-* Internals: (internals). XEmacs Internals Manual.
-END-INFO-DIR-ENTRY
-
- Copyright (C) 1992 - 1996 Ben Wing. Copyright (C) 1996, 1997 Sun
-Microsystems. Copyright (C) 1994 - 1998 Free Software Foundation.
-Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
-
- Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be stated in a
-translation approved by the Foundation.
-
- Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
- Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the Free Software
-Foundation instead of in the original English.
-
-\1f
-File: internals.info, Node: Index, Prev: Interface to X Windows, Up: Top
-
-Index
-*****
-
-* Menu:
-
-* Amdahl Corporation: XEmacs.
-* Andreessen, Marc: XEmacs.
-* asynchronous subprocesses: Modules for Interfacing with the Operating System.
-* Baur, Steve: XEmacs.
-* Benson, Eric: Lucid Emacs.
-* bridge, playing: XEmacs From the Outside.
-* Buchholz, Martin: XEmacs.
-* Bufbyte: Character-Related Data Types.
-* Bufpos: Character-Related Data Types.
-* Bytecount: Character-Related Data Types.
-* bytecount_to_charcount: Working With Character and Byte Positions.
-* Bytind: Character-Related Data Types.
-* C vs. Lisp: The Lisp Language.
-* caller-protects (GCPRO rule): Writing Lisp Primitives.
-* case table: Modules for Other Aspects of the Lisp Interpreter and Object System.
-* Charcount: Character-Related Data Types.
-* charcount_to_bytecount: Working With Character and Byte Positions.
-* charptr_emchar: Working With Character and Byte Positions.
-* charptr_n_addr: Working With Character and Byte Positions.
-* closer: Lstream Methods.
-* closure: The XEmacs Object System (Abstractly Speaking).
-* Coding for Mule: Coding for Mule.
-* Common Lisp: The Lisp Language.
-* compact_string_chars: compact_string_chars.
-* conservative garbage collection: GCPROing.
-* copy-on-write: General Coding Rules.
-* critical redisplay sections: Critical Redisplay Sections.
-* DEC_CHARPTR: Working With Character and Byte Positions.
-* Devin, Matthieu: Lucid Emacs.
-* display order of extents: Mathematics of Extent Ordering.
-* dynamic array: Low-Level Modules.
-* dynamic scoping: The Lisp Language.
-* dynamic types: The Lisp Language.
-* Emchar: Character-Related Data Types.
-* Energize: Lucid Emacs.
-* Epoch <1>: XEmacs.
-* Epoch: Lucid Emacs.
-* Extbyte: Character-Related Data Types.
-* Extcount: Character-Related Data Types.
-* extent fragment: Extent Fragments.
-* extent mathematics: Mathematics of Extent Ordering.
-* extent ordering: Mathematics of Extent Ordering.
-* extents, display order: Mathematics of Extent Ordering.
-* external widget: Modules for Interfacing with X Windows.
-* flusher: Lstream Methods.
-* Free Software Foundation: A History of Emacs.
-* frob block: Introduction to Allocation.
-* FSF: A History of Emacs.
-* FSF Emacs <1>: GNU Emacs 20.
-* FSF Emacs: GNU Emacs 19.
-* garbage collection: Garbage Collection.
-* garbage collection protection: Writing Lisp Primitives.
-* garbage collection step by step: Garbage Collection - Step by Step.
-* garbage collection, conservative: GCPROing.
-* garbage collection, invocation: Invocation.
-* garbage_collect_1: garbage_collect_1.
-* gc_sweep: gc_sweep.
-* GNU Emacs 19: GNU Emacs 19.
-* GNU Emacs 20: GNU Emacs 20.
-* Gosling, James <1>: The Lisp Language.
-* Gosling, James: Through Version 18.
-* Great Usenet Renaming: Through Version 18.
-* Hackers (Steven Levy): A History of Emacs.
-* hierarchy of windows: Window Hierarchy.
-* history of Emacs: A History of Emacs.
-* Illinois, University of: XEmacs.
-* INC_CHARPTR: Working With Character and Byte Positions.
-* interactive: Modules for Standard Editing Operations.
-* interning: The XEmacs Object System (Abstractly Speaking).
-* ITS (Incompatible Timesharing System): A History of Emacs.
-* Java: The Lisp Language.
-* Java vs. Lisp: The Lisp Language.
-* Jones, Kyle: XEmacs.
-* Kaplan, Simon: XEmacs.
-* Levy, Steven: A History of Emacs.
-* line start cache: Line Start Cache.
-* Lisp vs. C: The Lisp Language.
-* Lisp vs. Java: The Lisp Language.
-* lstream: Modules for Interfacing with the File System.
-* Lstream_close: Lstream Functions.
-* Lstream_fgetc: Lstream Functions.
-* Lstream_flush: Lstream Functions.
-* Lstream_fputc: Lstream Functions.
-* Lstream_fungetc: Lstream Functions.
-* Lstream_getc: Lstream Functions.
-* Lstream_new: Lstream Functions.
-* Lstream_putc: Lstream Functions.
-* Lstream_read: Lstream Functions.
-* Lstream_reopen: Lstream Functions.
-* Lstream_rewind: Lstream Functions.
-* Lstream_set_buffering: Lstream Functions.
-* Lstream_ungetc: Lstream Functions.
-* Lstream_unread: Lstream Functions.
-* Lstream_write: Lstream Functions.
-* Lucid Emacs: Lucid Emacs.
-* Lucid Inc.: Lucid Emacs.
-* mark and sweep: Garbage Collection.
-* mark method <1>: lrecords.
-* mark method: Modules for Other Aspects of the Lisp Interpreter and Object System.
-* mark_object: mark_object.
-* marker: Lstream Methods.
-* mathematics of extents: Mathematics of Extent Ordering.
-* MAX_EMCHAR_LEN: Working With Character and Byte Positions.
-* merging attempts: XEmacs.
-* MIT: A History of Emacs.
-* Mlynarik, Richard: GNU Emacs 19.
-* MULE merged XEmacs appears: XEmacs.
-* NAS: Modules for Interfacing with the Operating System.
-* native sound: Modules for Interfacing with the Operating System.
-* network connections: Modules for Interfacing with the Operating System.
-* network sound: Modules for Interfacing with the Operating System.
-* Niksic, Hrvoje: XEmacs.
-* pane: Modules for the Basic Displayable Lisp Objects.
-* permanent objects: The XEmacs Object System (Abstractly Speaking).
-* pi, calculating: XEmacs From the Outside.
-* pseudo_closer: Lstream Methods.
-* pure space: Basic Lisp Modules.
-* read syntax: The XEmacs Object System (Abstractly Speaking).
-* read-eval-print: XEmacs From the Outside.
-* reader: Lstream Methods.
-* record type: How Lisp Objects Are Represented in C.
-* Redisplay Piece by Piece: Redisplay Piece by Piece.
-* relocating allocator: Low-Level Modules.
-* rename to XEmacs: XEmacs.
-* rewinder: Lstream Methods.
-* RMS: A History of Emacs.
-* scanner: Modules for Other Aspects of the Lisp Interpreter and Object System.
-* scoping, dynamic: The Lisp Language.
-* seekable_p: Lstream Methods.
-* selections: Modules for Interfacing with X Windows.
-* set_charptr_emchar: Working With Character and Byte Positions.
-* Sexton, Harlan: Lucid Emacs.
-* sound, native: Modules for Interfacing with the Operating System.
-* sound, network: Modules for Interfacing with the Operating System.
-* SPARCWorks: XEmacs.
-* Stallman, Richard: A History of Emacs.
-* subprocesses, asynchronous: Modules for Interfacing with the Operating System.
-* subprocesses, synchronous: Modules for Interfacing with the Operating System.
-* Sun Microsystems: XEmacs.
-* sweep_bit_vectors_1: sweep_bit_vectors_1.
-* sweep_lcrecords_1: sweep_lcrecords_1.
-* sweep_strings: sweep_strings.
-* synchronous subprocesses: Modules for Interfacing with the Operating System.
-* taxes, doing: XEmacs From the Outside.
-* TECO: A History of Emacs.
-* temporary objects: The XEmacs Object System (Abstractly Speaking).
-* Thompson, Chuck: XEmacs.
-* types, dynamic: The Lisp Language.
-* University of Illinois: XEmacs.
-* Win-Emacs: XEmacs.
-* window (in Emacs): Modules for the Basic Displayable Lisp Objects.
-* window hierarchy: Window Hierarchy.
-* window point internals: The Window Object.
-* Wing, Ben: XEmacs.
-* writer: Lstream Methods.
-* XEmacs: XEmacs.
-* XEmacs goes it alone: XEmacs.
-* Zawinski, Jamie: Lucid Emacs.
-
-
+++ /dev/null
-2001-01-17 Martin Buchholz <martin@xemacs.org>
-
- * XEmacs 21.2.41 "Polyhymnia" is released.
-
-2001-01-12 Andy Piper <andy@xemacs.org>
-
- * postinstall.cc (do_postinstall): don't pick up shells if cygwin
- isn't installed.
-
-2001-01-10 Andy Piper <andy@xemacs.org>
-
- * README.xemacs: deleted.
-
- * README: updated.
-
- * tar.cc (tar_gzctell): new function picked up from some internal
- cygnus version of zlib.
-
- * Makefile.in.in (LOCALCFLAGS): use -O2
- (OBJS): reinstate autoload.
-
-2001-01-09 Andy Piper <andy@xemacs.org>
-
- * root.cc (dialog_cmd): backslash root dir.
-
- * desktop.cc (do_desktop): runemacs.exe is the exe to run.
-
- * package-net.el (package-net-batch-convert-index-to-ini): new
- batch command.
-
- * Makefile.in.in (setup.ini): new target. Automatically create.
- (LOCALCFLAGS): use extra_includes.
- (setup.ini): new target.
-
- * regedit.cc (create_xemacs_root): write out the package path.
-
- * reginfo.h (XEMACS_NATIVE_ARCH_NAME): arch dir is i386 not i586
-
-2001-01-08 Martin Buchholz <martin@xemacs.org>
-
- * XEmacs 21.2.40 is released.
-
-2000-12-31 Martin Buchholz <martin@xemacs.org>
-
- * XEmacs 21.2.39 is released.
-
-2000-12-28 Andy Piper <andy@xemacs.org>
-
- * desktop.cc (FROB): add more app paths.
-
-2000-12-24 Fabrice Popineau <Fabrice.Popineau@supelec.fr>
-
- * choose.cc (create_listview): CreateWindowEx() does not take this kind of
- parameter.
-
- * choose.cc (package_sort):
- * hash.cc (rev_len):
- * site.cc (site_sort): must be __cdecl to be called by qsort().
-
- * download.cc:
- * install.cc:
- * nio-file.cc:
- * tar.cc: because of the redefinition of stat to _stat, the
- inclusion of win32 headers has to be delayed.
-
- * win32.h: added some declarations, such as CDECL if
- not defined, #define for functions that are not standard in msvc
- libc (strdup, stat ...)
-
- * concat.h, concat.cc (concat): must be declared CDECL
-
- * desktop.cc: <io.h> is needed.
-
- * dialog.h (NEXT): cast needed, the first parameter of EndDialog() must
- be a HWND.
-
- * diskfull.cc: syntax when declaring GDFS.
-
- * ini.cc: Various `extern "C"' declarations: yylineno, yyerror()
- and fprintf(). Various CDECL declarations: yyerror(), fprintf().
-
- * inilex.l: <stdlib.h> required.
-
- * iniparse.y: use strdup(), require "win32.h" and <string.h>
-
- * install.cc (dialog): syntax when declaring. CreateDialog()
- returns a HWND.
-
- * postinstall.cc: <io.h> and <stdio.h> are needed.
-
- * regedit.cc (find_cygwin_mount): WIN32_NATIVE does not know
- anything about Cygwin stuff.
-
- * setup.mak: new makefile for WIN32_NATIVE.
-
- * splash.cc (load_dialog): GetDlgItem() returns a HWND.
-
- * tar.cc: msvc knows about __int64, but not `long long'.
-
- * win32.h: <winreg.h> is missing for regedit.cc. Also, I ended up
- in including <windows.h> because the files listed there are not
- enough for <wininet.h>.
-
- * desktop.cc:
- * fromcwd.cc:
- * install.cc:
- * postinstall.cc: <unistd.h> does not exist for WIN32_NATIVE
-
- * choose.cc (do_choose):
- * ini.cc (do_ini):
- * nio-ftp.cc (ftp_line): the construct (x ?: y) is not standard.
-
-2000-12-24 Andy Piper <andy@xemacs.org>
-
- * choose.cc (read_installed_db): grok package versions correctly.
-
- * Makefile.in.in: add MINGW define.
-
-2000-12-18 Andy Piper <andy@xemacs.org>
-
- * res.rc: better look and feel.
-
-2000-12-18 Andy Piper <andy@xemacs.org>
-
- * desktop.cc (do_desktop_setup): more app path fiddling.
-
-2000-12-13 Andy Piper <andy@xemacs.org>
-
- * root.cc (dialog_cmd): create the root in the registry if we are successful.
-
- * desktop.cc (find_xemacs_exe_path): new function. Split out from
- find_xemacs_exe ().
- (find_xemacs_exe_name): ditto.
- (do_desktop_setup): setup app paths if we are installing xemacs
- itself.
- (do_desktop): use new functions.
-
- * regedit.cc (create_xemacs_root): fix key name.
- (find_xemacs_root): set isnative whatever the key value.
- (set_app_path): new function. Set path for an app.
-
-2000-12-12 Andy Piper <andy@xemacs.org>
-
- * package-net.el (package-net-convert-index-to-ini): use sensible defaults.
-
-2000-12-12 Andy Piper <andy@xemacs.org>
-
- * reginfo.h: new macros.
-
- * iniparse.y: define xemacs_package.
-
- * ini.h: declare xemacs_package.
-
- * fromcwd.cc (found_file): guess core type from name.
-
- * concat.cc: kill warnings.
- * net.cc: ditto.
-
- * choose.cc (do_choose): pick up core package type chosen.
-
- * Makefile.in.in: make sure we can pick up a mingw zlib.
-
- * desktop.cc: fix desktop icon creation.
-
-2000-11-12 Andy Piper <andy@xemacs.org>
-
- * all: port from cygwin setup.
-
-%%% $Id: ChangeLog,v 1.1.2.9 2001/01/12 16:11:12 andyp Exp $
-$Revision: 1.1.2.9 $
+++ /dev/null
-## Copyright (c) 2000, Red Hat, Inc.
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## A copy of the GNU General Public License can be found at
-## http://www.gnu.org/
-##
-## Written by Christopher Faylor <cgf@redhat.com>
-## Adapted for XEmacs by Andy Piper <andy@xemacs.org>
-##
-## Makefile for Cygwin installer
-
-## For performance and consistency, no built-in rules
-.SUFFIXES:
-.SUFFIXES: .c .cc .h .o
-## ==================== Things "configure" will edit ====================
-
-@SET_MAKE@
-SHELL = /bin/sh
-RM = rm -f
-pwd = /bin/pwd
-
-CC=@CC@
-CPP=@CPP@
-CFLAGS=@CFLAGS@
-CPPFLAGS=@CPPFLAGS@
-LDFLAGS=@LDFLAGS@
-ALLOCA=@ALLOCA@
-LN_S=@LN_S@
-version=@version@
-
-## This will be the name of the generated binary and is set automatically
-## by configure.
-PROGNAME=@PROGNAME@
-INSTALLABLES=setup
-#ifdef USE_GNU_MAKE
-vpath %.c @srcdir@
-vpath %.cc @srcdir@
-vpath %.h @srcdir@
-#else
-VPATH=@srcdir@
-#endif
-
-## ==================== Where To Install Things ====================
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-bindir=@bindir@
-libdir=@libdir@
-srcdir=@srcdir@
-datadir=@datadir@
-instvardir=@instvardir@
-top_srcdir=@top_srcdir@
-archlibdir=@archlibdir@
-configuration=@configuration@
-moduledir=@moduledir@
-sitemoduledir=@sitemoduledir@
-extra_includes=@extra_includes@
-blddir=@blddir@
-
-## ==================== Utility Programs for the Build =================
-
-INSTALL = @install_pp@ @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-SHELL = @SHELL@
-## ========================== Lists of Files ===========================
-
-#define NO_SHORTNAMES
-#define NOT_C_CODE
-#include "../src/config.h"
-
-program_transform_name = @program_transform_name@
-
-CC = @CC@
-CC_FOR_TARGET = $(CC)
-
-## -O3 has problems so fix this locally
-LOCALCFLAGS = $(CFLAGS) -O2 -DMINGW $(extra_includes)
-CXXFLAGS = $(LOCALCFLAGS) -fno-exceptions -nostdinc++ -fno-rtti
-
-WINDRES = windres
-MINGW_INCLUDES = -I. -I$(srcdir)
-MINGW_CXXFLAGS = $(CXXFLAGS) -mno-cygwin $(MINGW_INCLUDES) -mwindows
-MINGW_CFLAGS = $(LOCALCFLAGS) -mno-cygwin $(MINGW_INCLUDES) -mwindows
-MINGW_ZLIB_DIR = /usr/local/lib
-
-PROGS = setup.exe
-XEMACS=${blddir}/src/${PROGNAME}
-
-CONFIG_H = ../src/config.h
-
-OBJS = \
- autoload.o \
- choose.o \
- concat.o \
- desktop.o \
- dialog.o \
- diskfull.o \
- download.o \
- find.o \
- fromcwd.o \
- geturl.o \
- hash.o \
- ini.o \
- inilex.o \
- iniparse.o \
- install.o \
- localdir.o \
- log.o \
- main.o \
- mkdir.o \
- mklink2.o \
- regedit.o \
- msg.o \
- net.o \
- netio.o \
- nio-ie5.o \
- nio-file.o \
- nio-ftp.o \
- nio-http.o \
- other.o \
- postinstall.o \
- res.o \
- root.o \
- simpsock.o \
- site.o \
- source.o \
- splash.o \
- state.o \
- tar.o \
- version.o
-
-.SUFFIXES:
-.NOEXPORT:
-
-.PHONY: all install
-
-all: Makefile $(PROGS)
-
-setup.exe: $(OBJS)
- $(CXX) $(MINGW_CXXFLAGS) -o $@ $(OBJS) \
- -lole32 -lwsock32 -lnetapi32 -ladvapi32 \
- -luuid -lkernel32 -luser32 \
- -L$(MINGW_ZLIB_DIR) -lz -lmingw32
- @chmod a-x $@
-
-setup.ini: setup.exe
- V=`grep '^\$$Revision.*' $(srcdir)/ChangeLog \
- | sed -e 's/\$$Revision:* *//' \
- -e 's/ *$$.*//'` ;\
- $(XEMACS) -batch -vanilla -l ${srcdir}/../lisp/package-net.el \
- -f package-net-batch-convert-index-to-ini . $$V
-
-install:
- @echo; echo "Installing net setup."
- for file in ${INSTALLABLES} ; do \
- (cd .. && $(INSTALL_PROGRAM) netinstall/$${file} ${bindir}/$${file}) ; \
- done
-
-version.c : $(srcdir)/ChangeLog Makefile
- V=`grep '^\$$Revision.*' $(srcdir)/ChangeLog \
- | sed -e 's/\$$Revision:* *//' \
- -e 's/ *$$.*//'` ;\
- echo "char *version = \"$$V\";" > version.tmp ;\
- echo "static char *id = \"\\n%%% setup-version $$V\\n\";" >> version.tmp
- mv version.tmp version.c
-
-%.o: %.rc
- $(WINDRES) --include-dir $(srcdir) -o $@ $<
-
-%.o: %.c
- $(CC) $(MINGW_CFLAGS) -c -o $@ ${srcdir}/$<
-
-%.o: %.cc
- $(CC) $(MINGW_CXXFLAGS) -c -o $@ ${srcdir}/$<
-
-iniparse.c iniparse.h : iniparse.y
- bison -d -o iniparse.c $(srcdir)/iniparse.y
-
-inilex.c : inilex.l iniparse.h
- flex -8 $(srcdir)/inilex.l
- mv lex.yy.c inilex.c
-
-.PHONY: mostlyclean clean distclean realclean extraclean
-
-mostlyclean:
- $(RM) *.o *.i core $(PROGS)
-
-clean: mostlyclean
-
-distclean: clean
- $(RM) GNUmakefile Makefile Makefile.in TAGS
-
-realclean: distclean
-
-extraclean: distclean
- $(RM) *~ \#*
-
-choose.o: choose.cc win32.h dialog.h resource.h state.h ini.h concat.h \
- msg.h log.h find.h reginfo.h
-concat.o: concat.cc
-desktop.o: desktop.cc win32.h resource.h ini.h msg.h state.h concat.h \
- mkdir.h dialog.h version.h port.h
-dialog.o: dialog.cc win32.h dialog.h msg.h log.h
-diskfull.o: diskfull.cc win32.h diskfull.h
-download.o: download.cc win32.h resource.h msg.h ini.h dialog.h \
- concat.h geturl.h state.h mkdir.h log.h
-find.o: find.cc win32.h port.h
-fromcwd.o: fromcwd.cc win32.h ini.h resource.h concat.h state.h \
- dialog.h msg.h find.h version.h port.h
-geturl.o: geturl.cc win32.h dialog.h \
- geturl.h resource.h netio.h msg.h log.h
-hash.o: hash.cc hash.h
-ini.o: ini.cc win32.h ini.h resource.h concat.h state.h geturl.h \
- dialog.h msg.h mkdir.h log.h reginfo.h version.h
-inilex.o: inilex.c win32.h \
- ini.h \
- iniparse.h
-iniparse.o: iniparse.c ini.h \
- iniparse.h \
- port.h
-install.o: install.cc win32.h \
- resource.h ini.h dialog.h concat.h geturl.h mkdir.h state.h tar.h \
- diskfull.h msg.h regedit.h reginfo.h log.h hash.h port.h
-localdir.o: localdir.cc win32.h dialog.h resource.h state.h msg.h \
- concat.h log.h
-log.o: log.cc win32.h resource.h msg.h log.h dialog.h state.h concat.h \
- mkdir.h
-main.o: main.cc win32.h resource.h dialog.h state.h msg.h netio.h \
- find.h log.h port.h
-mkdir.o: mkdir.cc win32.h mkdir.h
-mklink2.o: mklink2.c win32.h /usr/include/w32api/shlobj.h
-msg.o: msg.cc win32.h dialog.h log.h
-net.o: net.cc win32.h dialog.h resource.h state.h msg.h log.h
-netio.o: netio.cc win32.h resource.h state.h msg.h netio.h nio-file.h \
- nio-ie5.h nio-http.h nio-ftp.h dialog.h log.h port.h
-nio-file.o: nio-file.cc win32.h netio.h nio-file.h resource.h msg.h
-nio-ftp.o: nio-ftp.cc win32.h resource.h state.h simpsock.h log.h \
- netio.h nio-ftp.h
-nio-http.o: nio-http.cc win32.h resource.h state.h simpsock.h msg.h \
- netio.h nio-http.h
-nio-ie5.o: nio-ie5.cc win32.h resource.h state.h dialog.h msg.h \
- netio.h nio-ie5.h
-other.o: other.cc win32.h dialog.h resource.h state.h msg.h log.h
-postinstall.o: postinstall.cc win32.h state.h dialog.h find.h concat.h \
- port.h
-regedit.o: regedit.cc win32.h reginfo.h regedit.h msg.h resource.h \
- dialog.h
-root.o: root.cc win32.h dialog.h resource.h state.h msg.h regedit.h \
- reginfo.h concat.h log.h
-simpsock.o: simpsock.cc win32.h simpsock.h msg.h
-site.o: site.cc win32.h dialog.h resource.h state.h geturl.h msg.h \
- concat.h regedit.h reginfo.h log.h port.h
-source.o: source.cc win32.h dialog.h resource.h state.h msg.h log.h
-splash.o: splash.cc win32.h dialog.h resource.h msg.h version.h
-state.o: state.cc state.h
-tar.o: tar.cc win32.h tar.h mkdir.h log.h port.h
-version.o: version.c
+++ /dev/null
-This directory contains the source for the setup program for the XEmacs
-net releases.
-
-For commentary on how to do a release please see `package-net.el'
-
-This code has been adapted from the cygwin net release installer. In
-particular note that the cygwin net release installer is actively
-maintained and therefore we will want to incorporate improvements from
-that. I have therefore tried to use the cygwin way wherever
-possible. I have however cleaned up the code somewhat so that there
-are not billions of warnings.
-
-This program should get built as part of the standard XEmacs
-make. Note however that if you use trhe cygwin build you will need a
-NON CYGWIN VERSION OF ZLIB.
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-#include "win32.h"
-
-typedef struct {
- char *name;
- HINSTANCE handle;
-} DllInfo;
-
-#define DLL(n) static DllInfo n ## _info __asm__ (#n "_info") = { #n, 0}
-
-#define Auto(dll, func, size) \
- __asm__ ("\t.data"); \
- __asm__ ("\t.global\t_" #func "@" #size); \
- __asm__ ("_" #func "@" #size ":"); \
- __asm__ ("\tcall\tautoload_common"); \
- __asm__ ("\t.long\t" #dll "_info"); \
- __asm__ ("\t.ascii\t\"" #func "\\0\"")
-
-DLL (wininet);
-
-Auto (wininet, InternetAttemptConnect, 4);
-Auto (wininet, InternetCloseHandle, 4);
-Auto (wininet, InternetGetLastResponseInfoA, 12);
-Auto (wininet, InternetOpenA, 20);
-Auto (wininet, InternetOpenUrlA, 24);
-Auto (wininet, InternetReadFile, 16);
-Auto (wininet, InternetSetOptionA, 16);
-Auto (wininet, InternetQueryOptionA, 16);
-Auto (wininet, HttpQueryInfoA, 20);
-Auto (wininet, HttpSendRequestA, 20);
-
-typedef struct {
- DllInfo *dll;
- char name[100];
-} AutoEntry;
-
-static void autoload_common () __asm__ ("autoload_common");
-
-static void
-autoload_common (int x)
-{
- int fp, rel;
- unsigned char *proc;
- HINSTANCE h;
- AutoEntry *a;
-
- a = *(AutoEntry **)(&x - 1);
- if (a->dll->handle == 0)
- {
- h = LoadLibrary (a->dll->name);
- a->dll->handle = h;
- }
- fp = (int) GetProcAddress (a->dll->handle, a->name);
- proc = ((unsigned char *)a) - 5;
- rel = fp - (int)(a); /* now it's a relative call */
- *proc++ = 0xe9; /* jump near 32-bit relative */
- *proc++ = rel;
- *proc++ = rel>>8;
- *proc++ = rel>>16;
- *proc++ = rel>>24;
-
- *(int *)(&x-1) = (int)proc-5;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to let the user choose which packages
- to install, and which versions of the package when more than one
- version is provided. The "trust" level serves as an indication as
- to which version should be the default choice. At the moment, all
- we do is compare with previously installed packages to skip any
- that are already installed (by setting the action to ACTION_SAME).
- While the "trust" stuff is supported, it's not really implemented
- yet. We always prefer the "current" option. In the future, this
- file might have a user dialog added to let the user choose to not
- install packages, or to install packages that aren't installed by
- default. */
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "dialog.h"
-#include "resource.h"
-#include "state.h"
-#include "ini.h"
-#include "concat.h"
-#include "msg.h"
-#include "log.h"
-#include "find.h"
-#include "reginfo.h"
-
-#define HMARGIN 10
-#define ROW_MARGIN 5
-#define ICON_MARGIN 4
-
-#define CHECK_SIZE 11
-
-#define TRUST_KEEP 101
-#define TRUST_UNINSTALL 102
-#define TRUST_NONE 103
-
-static int initialized = 0;
-
-static int full_list = 0;
-
-static int scroll_ulc_x, scroll_ulc_y;
-
-static HWND lv, nextbutton;
-static TEXTMETRIC tm;
-static int header_height;
-static HANDLE sysfont;
-static int row_height;
-static HANDLE bm_spin, bm_rtarrow, bm_checkyes, bm_checkno, bm_checkna;
-static HDC bitmap_dc;
-
-static struct {
- char *text;
- int slen;
- int width;
- int x;
-} headers[] = {
- { "Current", 7, 0, 0 },
-#define CURRENT_COL 0
- { "New", 3, 0, 0 },
-#define NEW_COL 1
- { "Src?", 4, 0, 0 },
-#define SRC_COL 2
- { "Package", 7, 0, 0 },
-#define PACKAGE_COL 3
- { 0, 0, 0, 0 }
-};
-#define NUM_COLUMNS (sizeof(headers)/(sizeof(headers[0]))-1)
-
-int *package_indexes, nindexes;
-
-struct ExtraPackageInfo {
- char *installed_file; /* filename of previous "install" file */
- char *installed_ver; /* version part */
- int installed_size; /* ditto, size. */
-
- int in_partial_list;
- int pick;
- int npick;
- int which_is_installed; /* == TRUST* or -1 */
-
- struct {
- int src_avail;
- int trust; /* may be keep or uninstall */
- char *caption; /* ==0 at EOL */
- } chooser[NTRUST+3]; /* one extra for NULL above */
-};
-
-static ExtraPackageInfo *extra;
-
-static void
-paint (HWND hwnd)
-{
- HDC hdc;
- PAINTSTRUCT ps;
- int x, y, i, ii;
-
- hdc = BeginPaint (hwnd, &ps);
-
- SelectObject (hdc, sysfont);
-
- RECT cr;
- GetClientRect (hwnd, &cr);
-
- POINT p;
-
- x = cr.left - scroll_ulc_x;
- y = cr.top - scroll_ulc_y + header_height;
-
-
- for (i=0; headers[i].text; i++)
- {
- TextOut (hdc, x+headers[i].x, 3, headers[i].text, headers[i].slen);
- MoveToEx (hdc, x+headers[i].x, header_height-3, &p);
- LineTo (hdc, x+headers[i].x+headers[i].width, header_height-3);
- }
-
- IntersectClipRect (hdc, cr.left, cr.top+header_height, cr.right, cr.bottom);
-
- for (ii=0; ii<nindexes; ii++)
- {
- i = package_indexes[ii];
- int r = y + ii * row_height;
- int by = r + tm.tmHeight - 11;
- if (extra[i].installed_ver && extra[i].installed_ver[0])
- {
- TextOut (hdc, x+headers[CURRENT_COL].x, r,
- extra[i].installed_ver, strlen (extra[i].installed_ver));
- SelectObject (bitmap_dc, bm_rtarrow);
- BitBlt (hdc, x+headers[CURRENT_COL].x+headers[0].width+ICON_MARGIN/2+HMARGIN/2, by,
- 11, 11, bitmap_dc, 0, 0, SRCCOPY);
- }
-
- char *s = extra[i].chooser[extra[i].pick].caption;
- if (s)
- {
- TextOut (hdc, x+headers[NEW_COL].x + 11 + ICON_MARGIN, r,
- s, strlen (s));
- if (extra[i].npick > 1)
- {
- SelectObject (bitmap_dc, bm_spin);
- BitBlt (hdc, x+headers[NEW_COL].x, by, 11, 11,
- bitmap_dc, 0, 0, SRCCOPY);
- }
- }
-
- HANDLE check_bm = bm_checkna;
- if (extra[i].chooser[extra[i].pick].src_avail)
- {
- if (package[i].srcaction == SRCACTION_NO)
- check_bm = bm_checkno;
- else if (package[i].srcaction == SRCACTION_YES)
- check_bm = bm_checkyes;
- }
- SelectObject (bitmap_dc, check_bm);
- BitBlt (hdc, x+headers[SRC_COL].x, by, 11, 11,
- bitmap_dc, 0, 0, SRCCOPY);
-
- if (package[i].name)
- TextOut (hdc, x+headers[PACKAGE_COL].x, r, package[i].name, strlen(package[i].name));
- }
-
- if (nindexes == 0)
- {
- static char *m = "Nothing to Install/Update";
- TextOut (hdc, HMARGIN, header_height, m, strlen (m));
- }
-
- EndPaint (hwnd, &ps);
-}
-
-static void
-scroll_common (HWND hwnd, int which, int *var, int code)
-{
- SCROLLINFO si;
- si.cbSize = sizeof (si);
- si.fMask = SIF_ALL;
- GetScrollInfo (hwnd, which, &si);
-
- switch (code)
- {
- case SB_THUMBTRACK:
- si.nPos = si.nTrackPos;
- break;
- case SB_THUMBPOSITION:
- break;
- case SB_BOTTOM:
- si.nPos = si.nMax;
- break;
- case SB_TOP:
- si.nPos = 0;
- break;
- case SB_LINEDOWN:
- si.nPos += row_height;
- break;
- case SB_LINEUP:
- si.nPos -= row_height;
- break;
- case SB_PAGEDOWN:
- si.nPos += si.nPage * 9/10;
- break;
- case SB_PAGEUP:
- si.nPos -= si.nPage * 9/10;
- break;
- }
-
- if ((int)si.nPos < 0)
- si.nPos = 0;
- if ((int)(si.nPos + si.nPage) > si.nMax)
- si.nPos = si.nMax - si.nPage;
-
- si.fMask = SIF_POS;
- SetScrollInfo (hwnd, which, &si, TRUE);
-
- int ox = scroll_ulc_x;
- int oy = scroll_ulc_y;
- *var = si.nPos;
-
- RECT cr, sr;
- GetClientRect (hwnd, &cr);
- sr = cr;
- sr.top += header_height;
- ScrollWindow (hwnd, ox - scroll_ulc_x, oy - scroll_ulc_y, &sr, &sr);
- sr.bottom = sr.top;
- sr.top = cr.top;
- ScrollWindow (hwnd, ox - scroll_ulc_x, 0, &sr, &sr);
-}
-
-static LRESULT CALLBACK
-list_vscroll (HWND hwnd, HWND hctl, UINT code, int pos)
-{
- scroll_common (hwnd, SB_VERT, &scroll_ulc_y, code);
- return FALSE;
-}
-
-static LRESULT CALLBACK
-list_hscroll (HWND hwnd, HWND hctl, UINT code, int pos)
-{
- scroll_common (hwnd, SB_HORZ, &scroll_ulc_x, code);
- return FALSE;
-}
-
-static LRESULT CALLBACK
-list_click (HWND hwnd, BOOL dblclk, int x, int y, UINT hitCode)
-{
- int r;
-
- if (nindexes == 0)
- return 0;
-
- if (y < header_height)
- return 0;
- x += scroll_ulc_x;
- y += scroll_ulc_y - header_height;
-
- r = (y + ROW_MARGIN/2) / row_height;
-
- if (r < 0 || r >= npackages)
- return 0;
-
- int p = package_indexes[r];
-
- if (x >= headers[NEW_COL].x - HMARGIN/2 && x <= headers[NEW_COL+1].x - HMARGIN/2)
- {
- extra[p].pick ++;
- if (extra[p].chooser[extra[p].pick].caption == 0)
- extra[p].pick = 0;
- }
-
- if (x >= headers[SRC_COL].x - HMARGIN/2 && x <= headers[SRC_COL+1].x - HMARGIN/2)
- {
- if (extra[p].chooser[extra[p].pick].src_avail)
- package[p].srcaction ^= (SRCACTION_NO^SRCACTION_YES);
- }
-
- RECT rect;
- rect.left = headers[NEW_COL].x - scroll_ulc_x;
- rect.right = headers[SRC_COL+1].x - scroll_ulc_x;
- rect.top = header_height + r * row_height - scroll_ulc_y;
- rect.bottom = rect.top + row_height;
- InvalidateRect (hwnd, &rect, TRUE);
- return FALSE;
-}
-
-static LRESULT CALLBACK
-listview_proc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message) {
- case WM_HSCROLL:
- return HANDLE_WM_HSCROLL (hwnd, wParam, lParam, list_hscroll);
- case WM_VSCROLL:
- return HANDLE_WM_VSCROLL (hwnd, wParam, lParam, list_vscroll);
- case WM_LBUTTONDOWN:
- return HANDLE_WM_LBUTTONDOWN (hwnd, wParam, lParam, list_click);
- case WM_PAINT:
- paint (hwnd);
- return 0;
- default:
- return DefWindowProc (hwnd, message, wParam, lParam);
- }
-}
-
-static void
-register_windows (HINSTANCE hinst)
-{
- WNDCLASSEX wcex;
- static int done = 0;
-
- if (done)
- return;
- done = 1;
-
- memset (&wcex, 0, sizeof (wcex));
- wcex.cbSize = sizeof (WNDCLASSEX);
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = listview_proc;
- wcex.hInstance = hinst;
- wcex.hIcon = LoadIcon (0, IDI_APPLICATION);
- wcex.hCursor = LoadCursor (0, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
- wcex.lpszClassName = "listview";
-
- RegisterClassEx (&wcex);
-}
-
-static void
-note_width (HDC dc, char *string, int addend, int column)
-{
- if (!string)
- return;
- SIZE s;
- GetTextExtentPoint32 (dc, string, strlen (string), &s);
- if (headers[column].width < s.cx + addend)
- headers[column].width = s.cx + addend;
-}
-
-static int
-best_trust (int p, int trust)
-{
- int t;
- for (t=trust; t>=0; t--)
- if (package[p].info[t].install)
- return t;
- for (t=trust+1; t<=NTRUST; t++)
- if (package[p].info[t].install)
- return t;
- if (extra[p].installed_file)
- return TRUST_KEEP;
- return TRUST_NONE;
-}
-
-static void
-default_trust (HWND h, int trust)
-{
- int i, t, c;
-
- for (i=0; i<npackages; i++)
- {
- t = best_trust (i, trust);
- extra[i].pick = 1;
- for (c=0; c<extra[i].npick; c++)
- if (t == extra[i].chooser[c].trust)
- extra[i].pick = c;
- if (install_type == IDC_INSTALL_NATIVE
- && package[i].type == TY_CYGWIN
- ||
- install_type == IDC_INSTALL_CYGWIN
- && package[i].type == TY_NATIVE)
- extra[i].pick = extra[i].npick -1;
- }
- RECT r;
- GetClientRect (h, &r);
- InvalidateRect (h, &r, TRUE);
- if (nextbutton)
- SetFocus (nextbutton);
-}
-
-static void
-set_full_list (HWND h, int isfull)
-{
- int i, j;
- full_list = isfull;
- if (package_indexes == 0)
- package_indexes = (int *) malloc (npackages * sizeof (int));
- for (i=j=0; i<npackages; i++)
- {
- if (isfull || extra[i].in_partial_list)
- package_indexes[j++] = i;
- }
- nindexes = j;
-
- RECT r;
- GetClientRect (h, &r);
- SCROLLINFO si;
- memset (&si, 0, sizeof (si));
- si.cbSize = sizeof (si);
- si.fMask = SIF_ALL;
- si.nMin = 0;
- si.nMax = headers[2].x + headers[2].width + HMARGIN;
- si.nPage = r.right;
- SetScrollInfo (h, SB_HORZ, &si, TRUE);
-
- si.nMax = nindexes * row_height;
- si.nPage = r.bottom - header_height;
- SetScrollInfo (h, SB_VERT, &si, TRUE);
-
- scroll_ulc_x = scroll_ulc_y = 0;
-
- InvalidateRect (h, &r, TRUE);
-
- if (nextbutton)
- SetFocus (nextbutton);
-}
-
-static void
-build_labels ()
-{
- int i;
- for (i=0; i<npackages; i++)
- {
- int c = 0, t;
-
-#define C extra[i].chooser[c]
- if (extra[i].installed_ver)
- {
- C.caption = "Uninstall";
- C.trust = TRUST_UNINSTALL;
- c++;
- C.caption = "Keep";
- C.trust = TRUST_KEEP;
- c++;
- }
-
- for (t=TRUST_PREV; t<NTRUST; t++)
- if (package[i].info[t].install)
- if (t != extra[i].which_is_installed)
- {
- C.caption = package[i].info[t].version;
- if (C.caption == 0 || C.caption[0] == 0)
- C.caption = "0.0";
- C.trust = t;
- if (package[i].info[t].source)
- C.src_avail = 1;
- c++;
- /* we intentionally skip TRUST_PREV */
- if (t != TRUST_PREV || !extra[i].installed_ver)
- extra[i].in_partial_list = 1;
-
- }
-
- if (c == 0)
- {
- C.caption = "N/A";
- C.trust = TRUST_NONE;
- c++;
- }
-
- if (! extra[i].installed_file)
- {
- C.caption = "Skip";
- C.trust = TRUST_NONE;
- c++;
- }
-
- C.caption = 0;
- extra[i].npick = c;
-#undef C
- }
-}
-
-static void
-create_listview (HWND dlg, RECT *r)
-{
- int i, t;
- lv = CreateWindowEx (WS_EX_CLIENTEDGE,
- "listview",
- "listviewwindow",
- WS_CHILD | WS_HSCROLL | WS_VSCROLL | WS_VISIBLE,
- r->left, r->top,
- r->right-r->left+1, r->bottom-r->top+1,
- dlg,
- NULL, // ??? MAKEINTRESOURCE(IDC_CHOOSE_LIST),
- hinstance,
- 0);
- ShowWindow (lv, SW_SHOW);
-
- for (i=0; headers[i].text; i++)
- headers[i].width = 0;
-
- HDC dc = GetDC (lv);
- sysfont = GetStockObject (DEFAULT_GUI_FONT);
- SelectObject (dc, sysfont);
- GetTextMetrics (dc, &tm);
- header_height = tm.tmHeight + 5 + 3;
-
- bitmap_dc = CreateCompatibleDC (dc);
-
- row_height = (tm.tmHeight + tm.tmExternalLeading + ROW_MARGIN);
- int irh = tm.tmExternalLeading + tm.tmDescent + 11 + ROW_MARGIN;
- if (row_height < irh)
- row_height = irh;
-
- for (i=0; headers[i].text; i++)
- note_width (dc, headers[i].text, 0, i);
- for (i=0; i<npackages; i++)
- {
- note_width (dc, extra[i].installed_ver, 0, CURRENT_COL);
- note_width (dc, extra[i].installed_ver, 11+ICON_MARGIN, NEW_COL);
- for (t=0; t<NTRUST; t++)
- note_width (dc, package[i].info[t].version, 11+ICON_MARGIN, NEW_COL);
- note_width (dc, package[i].name, 0, PACKAGE_COL);
- note_width (dc, package[i].sdesc, 0, PACKAGE_COL);
- }
- note_width (dc, "keep", 11+ICON_MARGIN, NEW_COL);
- note_width (dc, "uninstall", 11+ICON_MARGIN, NEW_COL);
-
- headers[CURRENT_COL].x = HMARGIN/2;
- headers[NEW_COL].x = (headers[CURRENT_COL].x + headers[CURRENT_COL].width
- + HMARGIN + 11 + ICON_MARGIN);
- headers[SRC_COL].x = headers[NEW_COL].x + headers[NEW_COL].width + HMARGIN;
- headers[PACKAGE_COL].x = headers[SRC_COL].x + headers[SRC_COL].width + HMARGIN;
-
- set_full_list (lv, full_list);
- default_trust (lv, TRUST_CURR);
-
- ReleaseDC (lv, dc);
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_CHOOSE_PREV:
- default_trust (lv, TRUST_PREV);
- break;
- case IDC_CHOOSE_CURR:
- default_trust (lv, TRUST_CURR);
- break;
- case IDC_CHOOSE_EXP:
- default_trust (lv, TRUST_TEST);
- break;
- case IDC_CHOOSE_FULLPART:
- set_full_list (lv, !full_list);
- break;
-
- case IDOK:
- if (source == IDC_SOURCE_CWD)
- NEXT (IDD_S_INSTALL);
- else
- NEXT (IDD_S_DOWNLOAD);
- break;
-
- case IDC_BACK:
- initialized = 0;
- if (source == IDC_SOURCE_CWD)
- NEXT (IDD_ROOT);
- else
- NEXT (IDD_SITE);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static void
-GetParentRect (HWND parent, HWND child, RECT *r)
-{
- POINT p;
- GetWindowRect (child, r);
- p.x = r->left;
- p.y = r->top;
- ScreenToClient (parent, &p);
- r->left = p.x;
- r->top = p.y;
- p.x = r->right;
- p.y = r->bottom;
- ScreenToClient (parent, &p);
- r->right = p.x;
- r->bottom = p.y;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- HWND frame;
- RECT r;
- switch (message)
- {
- case WM_INITDIALOG:
- nextbutton = GetDlgItem (h, IDOK);
- frame = GetDlgItem (h, IDC_LISTVIEW_POS);
- GetParentRect (h, frame, &r);
- r.top += 2;
- r.bottom -= 2;
- create_listview (h, &r);
-#if 0
- load_dialog (h);
-#endif
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-static char *
-base (char *s)
-{
- if (!s)
- return 0;
- char *rv = s;
- while (*s)
- {
- if ((*s == '/' || *s == ':' || *s == '\\') && s[1])
- rv = s+1;
- s++;
- }
- return rv;
-}
-
-static void
-scan2 (char *path, unsigned int size)
-{
- int i, t;
- for (i=0; i<npackages; i++)
- for (t=0; t<NTRUST; t++)
- if (package[i].info[t].install
- && strcmp (base (package[i].info[t].install), base (path)) == 0
- && package[i].info[t].install_size == (int)size)
- {
- extra[i].installed_file = package[i].info[t].install;
- extra[i].installed_size = size;
- extra[i].which_is_installed = t;
- extra[i].installed_ver = package[i].info[t].version;
- if (!extra[i].installed_ver)
- extra[i].installed_ver = "0";
- }
-}
-
-static void
-scan_downloaded_files ()
-{
- find (".", scan2);
-}
-
-static void
-read_installed_db ()
-{
- int i;
- if (!root_dir)
- return;
-
- char line[1000], pkg[1000], inst[1000], src[1000];
- int instsz, srcsz;
-
- FILE *db = fopen (concat (root_dir, XEMACS_SETUP_DIR, "installed.db", 0), "rt");
- if (!db)
- return;
-
- while (fgets (line, 1000, db))
- {
- src[0] = 0;
- srcsz = 0;
- sscanf (line, "%s %s %d %s %d", pkg, inst, &instsz, src, &srcsz);
-
- for (i=0; i<npackages; i++)
- if (strcmp (package[i].name, pkg) == 0)
- {
- int t;
- extra[i].installed_file = inst;
- extra[i].installed_size = instsz;
-
- for (t=0; t<NTRUST; t++)
- if (package[i].info[t].install
- && strcmp (base (package[i].info[t].install), base (inst)) == 0)
- {
- extra[i].which_is_installed = t;
- extra[i].installed_ver = package[i].info[t].version;
- break;
- }
-
- if (extra[i].installed_ver == 0) /* still */
- {
- char *v, *d;
- for (v=base (inst); *v; v++)
- if (*v == '-' && isdigit(v[1]))
- {
- v++;
- break;
- }
- if (!v)
- v = inst;
- for (d=v; *d; d++)
- if (strncmp (d, ".tar", 4) == 0
- || strncmp (d, "-pkg", 4) == 0)
- {
- *d = 0;
- break;
- }
- if (v[0])
- extra[i].installed_ver = strdup (v);
- else
- extra[i].installed_ver = "0";
- }
- break;
- }
- }
- fclose (db);
-}
-
-int CDECL
-package_sort (const void *va, const void *vb)
-{
- Package *a = (Package *)va;
- Package *b = (Package *)vb;
- return strcmp (a->name, b->name);
-}
-
-void
-do_choose (HINSTANCE h)
-{
- int rv, i;
-
- qsort (package, npackages, sizeof (package[0]), package_sort);
-
- nextbutton = 0;
- bm_spin = LoadImage (h, MAKEINTRESOURCE (IDB_SPIN), IMAGE_BITMAP, 0, 0, 0);
- bm_rtarrow = LoadImage (h, MAKEINTRESOURCE (IDB_RTARROW), IMAGE_BITMAP, 0, 0, 0);
-
- bm_checkyes = LoadImage (h, MAKEINTRESOURCE (IDB_CHECK_YES), IMAGE_BITMAP, 0, 0, 0);
- bm_checkno = LoadImage (h, MAKEINTRESOURCE (IDB_CHECK_NO), IMAGE_BITMAP, 0, 0, 0);
- bm_checkna = LoadImage (h, MAKEINTRESOURCE (IDB_CHECK_NA), IMAGE_BITMAP, 0, 0, 0);
-
- extra = (ExtraPackageInfo *) malloc (npackages * sizeof (ExtraPackageInfo));
- memset (extra, 0, npackages * sizeof (ExtraPackageInfo));
- for (i=0; i<npackages; i++)
- extra[i].which_is_installed = -1;
-
- register_windows (h);
-
- if (source == IDC_SOURCE_DOWNLOAD)
- scan_downloaded_files ();
- else
- read_installed_db ();
- build_labels ();
-
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_CHOOSE), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-
- for (i=0; i<npackages; i++)
- {
- switch (extra[i].chooser[extra[i].pick].trust)
- {
- case TRUST_PREV:
- case TRUST_CURR:
- case TRUST_TEST:
- if (extra[i].installed_file)
- package[i].action = ACTION_UPGRADE;
- else
- package[i].action = ACTION_NEW;
- package[i].trust = extra[i].chooser[extra[i].pick].trust;
- // pick up the actual core package to install
- if (package[i].type == TY_CYGWIN || package[i].type == TY_NATIVE
- && xemacs_package == 0)
- xemacs_package = &package[i];
- break;
-
- case TRUST_UNINSTALL:
- package[i].action = ACTION_UNINSTALL;
- break;
-
- case TRUST_KEEP:
- case TRUST_NONE:
- default:
- package[i].action = ACTION_SAME;
- break;
- }
- }
-
- log (LOG_BABBLE, "Chooser results...");
- for (i=0; i<npackages; i++)
- {
- static char *infos[] = {"prev", "curr", "test"};
- const char *trust = ((package[i].trust == TRUST_PREV) ? "prev"
- : (package[i].trust == TRUST_CURR) ? "curr"
- : (package[i].trust == TRUST_TEST) ? "test"
- : "unknown");
- const char *action = ((package[i].action == ACTION_UNKNOWN) ? "unknown"
- : (package[i].action == ACTION_SAME) ? "same"
- : (package[i].action == ACTION_NEW) ? "new"
- : (package[i].action == ACTION_UPGRADE) ? "upgrade"
- : (package[i].action == ACTION_UNINSTALL) ? "uninstall"
- : (package[i].action == ACTION_ERROR) ? "error"
- : "unknown");
-
- log (LOG_BABBLE, "[%s] action=%s trust=%s src? %s", package[i].name, action, trust,
- package[i].srcaction == SRCACTION_NO ? "no" : "yes");
- for (int t=0; t<NTRUST; t++)
- {
- if (package[i].info[t].install)
- log (LOG_BABBLE, "[%s] ver %s inst %s %d src %s %d",
- infos[t],
- package[i].info[t].version ? package[i].info[t].version : "(none)",
- package[i].info[t].install ? package[i].info[t].install : "(none)",
- package[i].info[t].install_size,
- package[i].info[t].source ? package[i].info[t].source : "(none)",
- package[i].info[t].source_size);
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* See concat.h. Note that we canonicalize the result, this avoids
- multiple slashes being interpreted as UNCs. */
-
-#include "win32.h"
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-char * CDECL
-concat (char *s, ...)
-{
- int len;
- char *rv, *arg;
- va_list v;
-
- if (!s)
- return 0;
-
- len = strlen (s);
-
- va_start (v, s);
- while (1)
- {
- arg = va_arg (v, char *);
- if (arg == 0)
- break;
- len += strlen (arg);
- }
- va_end (v);
-
- rv = (char *) malloc (len+1);
- strcpy (rv, s);
- va_start (v, s);
- while (1)
- {
- arg = va_arg (v, char *);
- if (arg == 0)
- break;
- strcat (rv, arg);
- }
- va_end (v);
-
- /* concat is only used for urls and files, so we can safely
- canonicalize the results */
- char *d;
- for (s=rv; *s; s++)
- if (*s == '\\')
- *s = '/';
- for (s=d=rv; *s; s++)
- {
- *d++ = *s;
- /* special case for URLs */
- if (*s == ':' && s[1] == '/' && s[2] == '/' && s > rv+1)
- {
- *d++ = *++s;
- *d++ = *++s;
- }
- else if (*s == '/')
- while (s[1] == '/')
- s++;
- }
- *d = 0;
-
- return rv;
-}
-
-char *
-backslash (char *s)
-{
- for (char *t = s; *t; t++)
- if (*t == '/')
- *t = '\\';
- return s;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Pass a null-terminated list of strings, and it concatenates them
- into a single string. Warning - it assumes the result is a file
- name or URL, and will canonicalize the result accordingly
- (i.e. replace \ with /, collapse multiple /// to a single /, etc.) */
-
-char * CDECL concat (char *s, ...);
-
-/* convert slashes to backslashes */
-
-char * backslash (char *s);
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to manage all the desktop setup, such
- as start menu, batch files, desktop icons, and shortcuts. Note
- that unlike other do_* functions, this one is called directly from
- install.cc */
-
-
-#include "win32.h"
-#include <shlobj.h>
-
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef WIN32_NATIVE
-#include <unistd.h>
-#endif
-
-#include "resource.h"
-#include "ini.h"
-#include "msg.h"
-#include "state.h"
-#include "concat.h"
-#include "mkdir.h"
-#include "dialog.h"
-#include "version.h"
-#include "reginfo.h"
-#include "regedit.h"
-#include "port.h"
-
-extern "C" {
- void make_link_2 (char *exepath, char *args, char *icon, char *lname);
-};
-
-static OSVERSIONINFO verinfo;
-
-/* Lines starting with '@' are conditionals - include 'N' for NT,
- '5' for Win95, '8' for Win98, '*' for all, like this:
- echo foo
- @N8
- echo NT or 98
- @*
- */
-
-#define COMMAND9XARGS "/E:4096 /c"
-#define COMMAND9XEXE "\\command.com"
-
-static char *iconname;
-static char *batname;
-
-static void
-make_link (char *linkpath, char *title, char *target)
-{
- char argbuf[_MAX_PATH];
- char *fname = concat (linkpath, "/", title, ".lnk", 0);
-
- if (_access (fname, 0) == 0)
- return; /* already exists */
-
- msg ("make_link %s, %s, %s\n", fname, title, target);
-
- mkdir_p (0, fname);
-
- char *exepath, *args;
-
- /* If we are running Win9x, build a command line. */
- if (verinfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- exepath = target;
- args = "";
- }
- else
- {
- char windir[MAX_PATH];
-
- GetWindowsDirectory (windir, sizeof (windir));
- exepath = concat (windir, COMMAND9XEXE, 0);
- sprintf (argbuf, "%s %s", COMMAND9XARGS, target);
- args = argbuf;
- }
-
- msg ("make_link_2 (%s, %s, %s, %s)", exepath, args, iconname, fname);
- make_link_2 (exepath, args, iconname, fname);
-}
-
-static char*
-find_xemacs_exe_path ()
-{
- if (xemacs_package->type == TY_CYGWIN)
- return backslash (concat (root_dir, "/bin/", XEMACS_CYGWIN_ARCH_NAME, 0));
- else
- return backslash (concat (root_dir, "\\XEmacs-",
- xemacs_package->info[xemacs_package->trust].version,
- "\\", XEMACS_NATIVE_ARCH_NAME, 0));
-}
-
-static char*
-find_xemacs_exe_name ()
-{
- if (xemacs_package->type == TY_CYGWIN)
- return backslash (concat ("xemacs-",
- xemacs_package->info[xemacs_package->trust].version,
- ".exe", 0));
- else
- return strdup ("xemacs.exe");
-}
-
-static void
-start_menu (char *title, char *target)
-{
- char path[_MAX_PATH];
- LPITEMIDLIST id;
- int issystem = (root_scope == IDC_ROOT_SYSTEM) ? 1 : 0;
- SHGetSpecialFolderLocation (NULL, issystem ? CSIDL_COMMON_PROGRAMS : CSIDL_PROGRAMS, &id);
- SHGetPathFromIDList (id, path);
-// following lines added because it appears Win95 does not use common programs
-// unless it comes into play when multiple users for Win95 is enabled
- msg("Program directory for program link: %s",path);
- if ( strlen(path) == 0) {
- SHGetSpecialFolderLocation (NULL, CSIDL_PROGRAMS, &id);
- SHGetPathFromIDList (id, path);
- msg("Program directory for program link changed to: %s",path);
- }
-// end of Win95 addition
- strcat (path, "/");
- strcat (path, XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME);
- make_link (path, title, target);
-}
-
-static void
-desktop_icon (char *title, char *target)
-{
- char path[_MAX_PATH];
- LPITEMIDLIST id;
- int issystem = (root_scope == IDC_ROOT_SYSTEM) ? 1 : 0;
- //SHGetSpecialFolderLocation (NULL, issystem ? CSIDL_DESKTOP : CSIDL_COMMON_DESKTOPDIRECTORY, &id);
- SHGetSpecialFolderLocation (NULL, issystem ? CSIDL_COMMON_DESKTOPDIRECTORY : CSIDL_DESKTOPDIRECTORY, &id);
- SHGetPathFromIDList (id, path);
-// following lines added because it appears Win95 does not use common programs
-// unless it comes into play when multiple users for Win95 is enabled
- msg("Desktop directory for desktop link: %s",path);
- if ( strlen(path) == 0) {
- SHGetSpecialFolderLocation (NULL, CSIDL_DESKTOPDIRECTORY, &id);
- SHGetPathFromIDList (id, path);
- msg("Desktop directory for deskop link changed to: %s",path);
- }
-// end of Win95 addition
- make_link (path, title, target);
-}
-
-static int
-uexists (char *path)
-{
- char *f = concat (root_dir, path, 0);
- int a = _access (f, 0);
- free (f);
- if (a == 0)
- return 1;
- return 0;
-}
-
-static void
-make_passwd_group ()
-{
- if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
- {
- int i;
-
- LOOP_PACKAGES
- {
- if (!strcmp (package[i].name, "cygwin"))
- {
- /* mkpasswd and mkgroup are not working on 9x/ME up to 1.1.5-4 */
- char *border_version = canonicalize_version ("1.1.5-4");
- char *inst_version = canonicalize_version (pi.version);
-
- if (strcmp (inst_version, border_version) <= 0)
- return;
-
- break;
- }
- }
- }
-
- if (uexists ("/etc/passwd") && uexists ("/etc/group"))
- return;
-
- char *fname = concat (root_dir, "/etc/postinstall/passwd-grp.bat", 0);
- mkdir_p (0, fname);
-
- FILE *p = fopen (fname, "wb");
- if (!p)
- return;
-
- if (!uexists ("/etc/passwd"))
- fprintf (p, "bin\\mkpasswd -l > etc\\passwd\n");
- if (!uexists ("/etc/group"))
- fprintf (p, "bin\\mkgroup -l > etc\\group\n");
-
- fclose (p);
-}
-
-static void
-save_icon ()
-{
- iconname = backslash (concat (root_dir, XEMACS_RESOURCE_DIR,
- "xemacs.ico", 0));
-
- HRSRC rsrc = FindResource (NULL, "XEMACS.ICON", "FILE");
- if (rsrc == NULL)
- {
- fatal ("FindResource failed");
- }
- HGLOBAL res = LoadResource (NULL, rsrc);
- char *data = (char *) LockResource (res);
- int len = SizeofResource (NULL, rsrc);
-
- FILE *f = fopen (iconname, "wb");
- if (f)
- {
- fwrite (data, 1, len, f);
- fclose (f);
- }
-}
-
-static void
-do_desktop_setup()
-{
- save_icon ();
-
- if (root_menu && batname) {
- start_menu ("XEmacs", batname);
- }
-
- if (root_desktop && batname) {
- desktop_icon ("XEmacs", batname);
- }
-
- // set regkeys for the application
- if (xemacs_package != 0)
- {
- int issystem = (root_scope == IDC_ROOT_SYSTEM ? 1 : 0);
- if (xemacs_package->type == TY_NATIVE)
- {
-#define FROB(exe) set_app_path ((exe), \
- find_xemacs_exe_path (), \
- issystem)
- FROB (find_xemacs_exe_name ());
- FROB ("runemacs.exe");
- FROB ("xemacs.exe");
-#undef FROB
- }
- else if (xemacs_package->type == TY_CYGWIN)
- {
- int junk;
- char* root = find_cygwin_root (&junk);
-#define FROB(exe) set_app_path ((exe), \
- concat (find_xemacs_exe_path (), ";", \
- root, "\\bin;", \
- root, "\\usr\\bin", 0), \
- issystem)
- FROB (find_xemacs_exe_name ());
- FROB ("runemacs.exe");
- FROB ("xemacs.exe");
-#undef FROB
- }
- }
-}
-
-static int da[] = { IDC_ROOT_DESKTOP, 0 };
-static int ma[] = { IDC_ROOT_MENU, 0 };
-
-static void
-check_if_enable_next (HWND h)
-{
- EnableWindow (GetDlgItem (h, IDOK), 1);
-}
-
-static void
-load_dialog (HWND h)
-{
- rbset (h, da, root_desktop);
- rbset (h, ma, root_menu);
- check_if_enable_next (h);
-}
-
-static int check_desktop (char *title, char *target)
-{
- char path[_MAX_PATH];
- LPITEMIDLIST id;
- int issystem = (root_scope == IDC_ROOT_SYSTEM) ? 1 : 0;
- SHGetSpecialFolderLocation (NULL, issystem ? CSIDL_COMMON_DESKTOPDIRECTORY : CSIDL_DESKTOPDIRECTORY, &id);
- SHGetPathFromIDList (id, path);
- // following lines added because it appears Win95 does not use common programs
- // unless it comes into play when multiple users for Win95 is enabled
- msg ("Desktop directory for desktop link: %s",path);
- if (strlen (path) == 0) {
- SHGetSpecialFolderLocation (NULL, CSIDL_DESKTOPDIRECTORY, &id);
- SHGetPathFromIDList (id, path);
- msg ("Desktop directory for deskop link changed to: %s",path);
- }
- // end of Win95 addition
- char *fname = concat (path, "/", title, ".lnk", 0);
-
- if (_access (fname, 0) == 0)
- return 0; /* already exists */
-
- fname = concat (path, "/", title, ".pif", 0); /* check for a pif as well */
-
- if (_access (fname, 0) == 0)
- return 0; /* already exists */
-
- return IDC_ROOT_DESKTOP;
-}
-
-static int check_startmenu (char *title, char *target)
-{
- char path[_MAX_PATH];
- LPITEMIDLIST id;
- int issystem = (root_scope == IDC_ROOT_SYSTEM) ? 1 : 0;
- SHGetSpecialFolderLocation (NULL, issystem ? CSIDL_COMMON_PROGRAMS : CSIDL_PROGRAMS, &id);
- SHGetPathFromIDList (id, path);
- // following lines added because it appears Win95 does not use common programs
- // unless it comes into play when multiple users for Win95 is enabled
- msg ("Program directory for program link: %s",path);
- if (strlen (path) == 0) {
- SHGetSpecialFolderLocation (NULL, CSIDL_PROGRAMS, &id);
- SHGetPathFromIDList (id, path);
- msg ("Program directory for program link changed to: %s",path);
- }
- // end of Win95 addition
- strcat (path, "/");
- strcat (path, XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME);
- char *fname = concat (path, "/", title, ".lnk", 0);
-
- if (_access (fname, 0) == 0)
- return 0; /* already exists */
-
- fname = concat (path, "/", title, ".pif", 0); /* check for a pif as well */
-
- if (_access (fname, 0) == 0)
- return 0; /* already exists */
-
- return IDC_ROOT_MENU;
-}
-
-static void
-save_dialog (HWND h)
-{
- root_desktop= rbget (h, da);
- root_menu = rbget (h, ma);
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_ROOT_DESKTOP:
- case IDC_ROOT_MENU:
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDOK:
- save_dialog (h);
- do_desktop_setup();
- NEXT (IDD_S_POSTINSTALL);
- break;
-
- case IDC_BACK:
- save_dialog (h);
- NEXT (IDD_CHOOSE);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-void
-do_desktop (HINSTANCE h)
-{
- CoInitialize (NULL);
-
- verinfo.dwOSVersionInfoSize = sizeof (verinfo);
- GetVersionEx (&verinfo);
- batname = 0;
-
- if (xemacs_package != 0 && xemacs_package->type != TY_GENERIC)
- {
- batname = concat (find_xemacs_exe_path (), "\\",
-#if 0
- find_xemacs_exe_name (),
-#else
- "runemacs.exe",
-#endif
- 0);
- root_desktop = check_desktop ("XEmacs", batname);
- root_menu = check_startmenu ("XEmacs", batname);
- }
- else
- {
- root_desktop = 0;
- root_menu = 0;
- }
-
- int rv = 0;
-
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_DESKTOP), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to provide common functionality for
- all the dialogs in the program. */
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "dialog.h"
-#include "msg.h"
-#include "log.h"
-
-char *
-eget (HWND h, int id, char *var)
-{
- char tmp[4000];
- if (var)
- {
- free (var);
- var = 0;
- }
- if (GetDlgItemText (h, id, tmp, sizeof (tmp)) > 0)
- {
- var = (char *) malloc (strlen (tmp)+1);
- strcpy (var, tmp);
- }
- return var;
-}
-
-int
-eget (HWND h, int id)
-{
- BOOL s;
- int r = GetDlgItemInt (h, id, &s, TRUE);
- return r;
-}
-
-void
-eset (HWND h, int id, char *val)
-{
- SetDlgItemText (h, id, val);
-}
-
-void
-eset (HWND h, int id, int val)
-{
- SetDlgItemInt (h, id, (UINT)val, TRUE);
-}
-
-int
-rbget (HWND h, int *ids)
-{
- int i;
- for (i=0; ids[i]; i++)
- if (IsDlgButtonChecked (h, ids[i]) == BST_CHECKED)
- return ids[i];
- return 0;
-}
-
-void
-rbset (HWND h, int *ids, int id)
-{
- int i;
- for (i=0; ids[i]; i++)
- CheckDlgButton (h, ids[i], id==ids[i] ? BST_CHECKED : BST_UNCHECKED);
-}
-
-void
-fatal (char *m)
-{
- DWORD e = GetLastError ();
- char *buf;
- FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- 0,
- e,
- 0,
- (CHAR *)&buf,
- 0,
- 0);
- MessageBox (0, buf, m, 0);
- exit_setup (1);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* global instance for the application; set in main.cc */
-extern HINSTANCE hinstance;
-
-/* used by main.cc to select the next do_* function */
-extern int next_dialog;
-
-/* either "nothing to do" or "setup complete" or something like that */
-extern int exit_msg;
-
-#define D(x) void x(HINSTANCE _h)
-
-/* prototypes for all the do_* functions (most called by main.cc) */
-
-D(do_choose);
-D(do_desktop);
-D(do_download);
-D(do_fromcwd);
-D(do_ini);
-D(do_install);
-D(do_local_dir);
-D(do_net);
-D(do_other);
-D(do_postinstall);
-D(do_root);
-D(do_site);
-D(do_source);
-D(do_splash);
-
-#undef D
-
-/* end this dialog and select the next. Pass 0 to exit the program */
-#define NEXT(id) EndDialog((HWND)h, 0), next_dialog = id
-
-/* Get the value of an EditText control. Pass the previously stored
- value and it will free the memory if needed. */
-
-char *eget (HWND h, int id, char *var);
-
-/* Same, but convert the value to an integer */
-
-int eget (HWND h, int id);
-
-/* Set the EditText control to the given string or integer */
-
-void eset (HWND h, int id, char *var);
-void eset (HWND h, int id, int var);
-
-/* RadioButtons. ids is a null-terminated list of IDs. Get
- returns the selected ID (or zero), pass an ID to set */
-
-int rbget (HWND h, int *ids);
-void rbset (HWND h, int *ids, int id);
-
-/* *This* version of fatal (compare with msg.h) uses GetLastError() to
- format a suitable error message. Similar to perror() */
-
-void fatal (char *msg);
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to hide the mess needed just to figure
- out how full a given disk is. There is an old API that can't
- handle disks bigger than 2G, and a new API that isn't always
- available. */
-
-#include "win32.h"
-#include "diskfull.h"
-
-typedef BOOL (WINAPI * GDFS)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER,
- PULARGE_INTEGER);
-
-int
-diskfull (char *path)
-{
- GDFS gdfs = 0;
-
- HINSTANCE k = LoadLibrary ("KERNEL32.DLL");
- if (k)
- {
- gdfs = (GDFS) GetProcAddress (k, "GetDiskFreeSpaceExA");
-
- if (gdfs)
- {
- ULARGE_INTEGER avail, total, free;
- if (gdfs (path, &avail, &total, &free))
- {
- int perc = avail.QuadPart * 100 / total.QuadPart;
- return 100-perc;
- }
- }
- }
-
- char root[4];
- if (path[1] != ':')
- return 0;
-
- root[0] = path[0];
- root[1] = ':';
- root[2] = '\\';
- root[3] = 0;
-
- DWORD junk, free_clusters, total_clusters;
-
- if (GetDiskFreeSpace (root, &junk, &junk, &free_clusters, &total_clusters))
- {
- int perc = free_clusters * 100 / total_clusters;
- return 100-perc;
- }
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* returns 0..100 (percent) */
-int diskfull (char *path);
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to download all the files we need to
- do the installation. */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "win32.h"
-
-#include "resource.h"
-#include "msg.h"
-#include "ini.h"
-#include "dialog.h"
-#include "concat.h"
-#include "geturl.h"
-#include "state.h"
-#include "mkdir.h"
-#include "log.h"
-
-#define pi (package[i].info[package[i].trust])
-
-static int
-download_one (char *name, int expected_size)
-{
- char *local = name;
-
- struct stat s;
- if (stat (local, &s) >= 0)
- if (s.st_size == expected_size)
- return 0;
-
- mkdir_p (0, local);
-
- if (get_url_to_file (concat (MIRROR_SITE, "/", name, 0),
- concat (local, ".tmp", 0),
- expected_size))
- {
- note (IDS_DOWNLOAD_FAILED, name);
- return 1;
- }
- else
- {
- stat (concat (local, ".tmp", 0), &s);
- if (s.st_size == expected_size)
- {
- log (0, "Downloaded %s", local);
- rename (concat (local, ".tmp", 0), local);
- }
- else
- {
- log (0, "Download %s wrong size (%d actual vs %d expected)",
- local, s.st_size, expected_size);
- note (IDS_DOWNLOAD_SHORT, local, s.st_size, expected_size);
- return 1;
- }
- }
-
- return 0;
-}
-
-void
-do_download (HINSTANCE h)
-{
- int i;
- int errors = 0;
-
- for (i=0; i<npackages; i++)
- if (package[i].action == ACTION_NEW || package[i].action == ACTION_UPGRADE)
- {
- int e = download_one (pi.install, pi.install_size);
- if (package[i].srcaction == SRCACTION_YES && pi.source)
- e += download_one (pi.source, pi.source_size);
- errors += e;
- if (e)
- package[i].action = ACTION_ERROR;
- }
-
- dismiss_url_status_dialog ();
-
- if (errors)
- {
- if (yesno (IDS_DOWNLOAD_INCOMPLETE) == IDYES)
- {
- next_dialog = IDD_SITE;
- return;
- }
- }
-
- if (source == IDC_SOURCE_DOWNLOAD)
- {
- if (errors)
- exit_msg = IDS_DOWNLOAD_INCOMPLETE;
- else
- exit_msg = IDS_DOWNLOAD_COMPLETE;
- next_dialog = 0;
- }
- else
- next_dialog = IDD_S_INSTALL;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to doa recursive find on a given
- directory, calling a given function for each file found. */
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "port.h"
-
-static void (*for_each)(char *, unsigned int);
-static char dir[_MAX_PATH], *found_part;
-
-static int
-find_sub ()
-{
- WIN32_FIND_DATA wfd;
- HANDLE h;
- char *end = dir + strlen (dir);
- int rv = 0;
-
- *end++ = '/';
- strcpy (end, "*");
-
- h = FindFirstFile (dir, &wfd);
-
- if (h == INVALID_HANDLE_VALUE)
- return 0;
-
- do {
- if (strcmp (wfd.cFileName, ".") == 0
- || strcmp (wfd.cFileName, "..") == 0)
- continue;
-
- strcpy (end, wfd.cFileName);
-
- if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- find_sub ();
- else
- {
- for_each (found_part, wfd.nFileSizeLow);
- rv ++;
- }
-
- } while (FindNextFile (h, &wfd));
-
- FindClose (h);
- return rv;
-}
-
-int
-find (char *starting_dir, void (*_for_each)(char *, unsigned int))
-{
- strcpy (dir, starting_dir);
- for_each = _for_each;
- found_part = dir + strlen (dir) + 1;
-
- return find_sub ();
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The for_each function is called once for each file found in the
- starting_dir or any subdir (recursively), passing the relative path
- (i.e. it doesn't include "starting_dir") and the size of the file
- (bytes). find() returns the number of files found. Directories
- are scanned but not included in the "found" files. */
-
-extern int find (char *starting_dir, void (*for_each)(char *, unsigned int));
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to handle the case where we're
- installing from files that already exist in the current directory.
- If a setup.ini file is present, we set the mirror site to "." and
- pretend we're installing from the `internet' ;-) else we have to
- find all the .tar.gz files, deduce their versions, and try to
- compare versions in the case where the current directory contains
- multiple versions of any given package. We do *not* try to compare
- versions with already installed packages; we always choose a
- package in the current directory over one that's already installed
- (otherwise, why would you have asked to install it?). Note
- that we search recursively. */
-
-#include "win32.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <io.h>
-#include <ctype.h>
-#ifndef WIN32_NATIVE
-#include <unistd.h>
-#endif
-
-#include "ini.h"
-#include "resource.h"
-#include "concat.h"
-#include "state.h"
-#include "dialog.h"
-#include "msg.h"
-#include "find.h"
-#include "version.h"
-
-#include "port.h"
-
-static int
-is_test_version (char *v)
-{
- int i;
- for (i=0; v[i] && isdigit (v[i]); i++) ;
- return (i >= 6) ? 1 : 0;
-}
-
-char *
-canonicalize_version (char *v)
-{
- static char nv[3][100];
- static int idx = 0;
- char *np, *dp;
- int i;
-
- idx = (idx+1) % 3;
- np = nv[idx];
-
- while (*v)
- {
- if (isdigit (*v))
- {
- for (dp=v; *dp && isdigit (*dp); dp++) ;
- for (i=dp-v; i<12; i++)
- *np++ = '0';
- while (v < dp)
- *np++ = *v++;
- }
- else
- *np++ = *v++;
- }
- *np++ = 0;
- return nv[idx];
-}
-
-static void
-found_file (char *path, unsigned int fsize)
-{
- char base[_MAX_PATH], *ver;
-
- int l = strlen (path);
-
- if (strcmp (path + l - 7, ".tar.gz") != 0)
- return;
- if (strstr (path, "-src."))
- return;
- if (strstr (path, "-patch."))
- return;
-
- char *sl = strrchr (path, '/');
- if (sl)
- sl ++;
- else
- sl = path;
- strcpy (base, sl);
- base[strlen (base) - 7] = 0; /* remove .tar.gz */
- for (ver=base; *ver; ver++)
- if ((*ver == '-' || *ver == '_') && isdigit (ver[1]))
- {
- *ver++ = 0;
- break;
- }
-
- Package *p = 0;
- int i;
-
- for (i=0; i<npackages; i++)
- if (strcmp (package[i].name, base) == 0)
- {
- p = package + i;
- break;
- }
- if (p == 0)
- p = new_package (strdup (base));
-
- int trust = is_test_version (ver) ? TRUST_TEST : TRUST_CURR;
- if (!*ver)
- trust = TRUST_PREV;
-
- /* See if this version is older than what we have */
- if (p->info[trust].version)
- {
- char *ov = canonicalize_version (p->info[trust].version);
- char *nv = canonicalize_version (ver);
- if (strcmp (ov, nv) > 0)
- return;
- }
-
- l = strlen (base);
- if (l >= 5 && strcmp (base + l - 5, "win32") == 0)
- p->type = TY_NATIVE;
- if (l >= 8 && strcmp (base + l - 8, "cygwin32") == 0)
- p->type = TY_CYGWIN;
-
- p->info[trust].version = strdup (ver);
- p->info[trust].install = strdup (path);
- p->info[trust].install_size = fsize;
-}
-
-void
-do_fromcwd (HINSTANCE h)
-{
- if (_access ("./setup.ini", 0) == 0)
- {
- mirror_site = ".";
- next_dialog = IDD_S_LOAD_INI;
- return;
- }
-
- next_dialog = IDD_CHOOSE;
-
- find (".", found_file);
-
- // Now see about source tarballs
- int i, t;
- Package *p;
- char srcpath[_MAX_PATH];
- for (i=0; i<npackages; i++)
- {
- p = package+i;
- for (t=TRUST_PREV; t<=TRUST_TEST; t++)
- if (p->info[t].install)
- {
- strcpy (srcpath, p->info[t].install);
- strcpy (srcpath + strlen (srcpath) - 7, "-src.tar.gz");
- msg ("looking for %s", srcpath);
-
- WIN32_FIND_DATA wfd;
- HANDLE h = FindFirstFile (srcpath, &wfd);
- if (h != INVALID_HANDLE_VALUE)
- {
- msg("-- got it");
- FindClose (h);
- p->info[t].source = strdup (srcpath);
- p->info[t].source_size = wfd.nFileSizeLow;
- }
- }
- }
-
- return;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to act as a pretty interface to
- netio.cc. We add a progress dialog and some convenience functions
- (like collect to string or file */
-
-#include "win32.h"
-#include "commctrl.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "dialog.h"
-#include "geturl.h"
-#include "resource.h"
-#include "netio.h"
-#include "msg.h"
-#include "log.h"
-
-static int is_showing = 0;
-static HWND gw_dialog = 0;
-static HWND gw_url = 0;
-static HWND gw_rate = 0;
-static HWND gw_progress = 0;
-static HANDLE init_event;
-static int max_bytes = 0;
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
- case IDCANCEL:
- exit_setup (0);
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- gw_dialog = h;
- gw_url = GetDlgItem (h, IDC_DLS_URL);
- gw_rate = GetDlgItem (h, IDC_DLS_RATE);
- gw_progress = GetDlgItem (h, IDC_DLS_PROGRESS);
- SetEvent (init_event);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-static DWORD WINAPI
-dialog (void *)
-{
- MSG m;
- HWND gw_dialog = CreateDialog (hinstance, MAKEINTRESOURCE (IDD_DLSTATUS),
- 0, dialog_proc);
- ShowWindow (gw_dialog, SW_SHOWNORMAL);
- UpdateWindow (gw_dialog);
- while (GetMessage (&m, 0, 0, 0) > 0) {
- TranslateMessage (&m);
- DispatchMessage (&m);
- }
- return FALSE;
-}
-
-static DWORD start_tics;
-
-static void
-init_dialog (char *url, int length)
-{
- if (gw_dialog == 0)
- {
- DWORD tid;
- HANDLE thread;
- init_event = CreateEvent (0, 0, 0, 0);
- thread = CreateThread (0, 0, dialog, 0, 0, &tid);
- WaitForSingleObject (init_event, 1000);
- CloseHandle (init_event);
- SendMessage (gw_progress, PBM_SETRANGE, 0, MAKELPARAM (0, 100));
- is_showing = 0;
- }
- char *sl=url, *cp;
- for (cp=url; *cp; cp++)
- if (*cp == '/' || *cp == '\\' || *cp == ':')
- sl = cp+1;
- max_bytes = length;
- SetWindowText (gw_url, sl);
- SetWindowText (gw_rate, "Connecting...");
- SendMessage (gw_progress, PBM_SETPOS, (WPARAM) 0, 0);
- ShowWindow (gw_progress, (length > 0) ? SW_SHOW : SW_HIDE);
- ShowWindow (gw_dialog, SW_SHOWNORMAL);
- if (!is_showing)
- {
- SetForegroundWindow (gw_dialog);
- is_showing = 1;
- }
- start_tics = GetTickCount ();
-}
-
-
-static void
-progress (int bytes)
-{
- static char buf[100];
- int kbps;
- static DWORD last_tics = 0;
- DWORD tics = GetTickCount ();
- if (tics == start_tics) // to prevent division by zero
- return;
- if (tics < last_tics + 200) // to prevent flickering updates
- return;
- last_tics = tics;
-
- kbps = bytes / (tics - start_tics);
- ShowWindow (gw_progress, (max_bytes > 0) ? SW_SHOW : SW_HIDE);
- if (max_bytes > 100)
- {
- int perc = bytes / (max_bytes / 100);
- SendMessage (gw_progress, PBM_SETPOS, (WPARAM) perc, 0);
- sprintf (buf, "%3d %% (%dk/%dk) %d kb/s\n",
- perc, bytes/1000, max_bytes/1000, kbps);
- }
- else
- sprintf (buf, "%d %d kb/s\n", bytes, kbps);
-
- SetWindowText (gw_rate, buf);
-}
-
-struct GUBuf {
- GUBuf *next;
- int count;
- char buf[2000];
-};
-
-char *
-get_url_to_string (char *_url)
-{
- log (LOG_BABBLE, "get_url_to_string %s", _url);
- init_dialog (_url, 0);
- NetIO *n = NetIO::open (_url);
- if (!n || !n->ok ())
- {
- delete n;
- log (LOG_BABBLE, "get_url_to_string failed!");
- return 0;
- }
-
- if (n->file_size)
- max_bytes = n->file_size;
-
- GUBuf *bufs = 0;
- GUBuf **nextp = &bufs;
- int total_bytes = 1; /* for the NUL */
- progress (0);
- while (1)
- {
- GUBuf *b = new GUBuf;
- *nextp = b;
- b->next = 0;
- nextp = &(b->next);
-
- b->count = n->read (b->buf, sizeof (b->buf));
- if (b->count <= 0)
- break;
- total_bytes += b->count;
- progress (total_bytes);
- }
-
- char *rv = (char *) malloc (total_bytes);
- char *rvp = rv;
- while (bufs && bufs->count > 0)
- {
- GUBuf *tmp = bufs->next;
- memcpy (rvp, bufs->buf, bufs->count);
- rvp += bufs->count;
- delete bufs;
- bufs = tmp;
- }
- *rvp = 0;
- return rv;
-}
-
-int
-get_url_to_file (char *_url, char *_filename, int expected_length)
-{
- log (LOG_BABBLE, "get_url_to_file %s %s", _url, _filename);
- init_dialog (_url, expected_length);
-
- remove (_filename); /* but ignore errors */
-
- NetIO *n = NetIO::open (_url);
- if (!n || !n->ok ())
- {
- delete n;
- log (LOG_BABBLE, "get_url_to_file failed!");
- return 1;
- }
-
- FILE *f = fopen (_filename, "wb");
- if (!f)
- {
- char *err = strerror (errno);
- if (!err)
- err = "(unknown error)";
- fatal (IDS_ERR_OPEN_WRITE, _filename, err);
- }
-
- if (n->file_size)
- max_bytes = n->file_size;
-
- int total_bytes = 0;
- progress (0);
- while (1)
- {
- char buf[8192];
- int count;
- count = n->read (buf, sizeof (buf));
- if (count <= 0)
- break;
- fwrite (buf, 1, count, f);
- total_bytes += count;
- progress (total_bytes);
- }
-
- fclose (f);
-
- return 0;
-}
-
-void
-dismiss_url_status_dialog ()
-{
- ShowWindow (gw_dialog, SW_HIDE);
- is_showing = 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Download files from the Internet. These pop up a progress dialog;
- don't forget to dismiss it when you're done downloading for a while */
-
-char *get_url_to_string (char *_url);
-int get_url_to_file (char *_url, char *_filename, int expected_size);
-void dismiss_url_status_dialog ();
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Simple hash class for install.cc */
-
-#include "win32.h"
-#include <stdlib.h>
-#include <string.h>
-
-#include "hash.h"
-
-class hash_internals {
-public:
- char **keys;
- int numkeys;
- int maxkeys;
- int prev_index;
-};
-
-hash::hash ()
-{
- h = new hash_internals;
- h->numkeys = 0;
- h->maxkeys = 10;
- h->keys = (char **) malloc (h->maxkeys * sizeof (char *));
- h->prev_index = 0;
-}
-
-hash::~hash ()
-{
- free (h->keys);
- free (h);
-}
-
-
-void
-hash::add (char *string)
-{
- int i;
- for (i=0; i<h->numkeys; i++)
- if (strcmp (h->keys[i], string) == 0)
- return;
- if (h->numkeys >= h->maxkeys)
- {
- h->maxkeys += 10;
- h->keys = (char **) realloc (h->keys, h->maxkeys * sizeof (char *));
- }
-
- h->keys[h->numkeys] = _strdup (string);
- h->numkeys ++;
-}
-
-
-int
-hash::has (char *string)
-{
- int i;
- for (i=0; i<h->numkeys; i++)
- if (strcmp (h->keys[i], string) == 0)
- return 1;
- return 0;
-}
-
-char *
-hash::enumerate (char *prev)
-{
- if (prev == 0)
- h->prev_index = -1;
- h->prev_index ++;
- if (h->prev_index >= h->numkeys)
- return 0;
- return h->keys[h->prev_index];
-}
-
-static int CDECL
-rev_len (const void *va, const void *vb)
-{
- char *a = *(char **)va;
- char *b = *(char **)vb;
- return strcmp (b, a);
-}
-
-void
-hash::reverse_sort ()
-{
- qsort (h->keys, h->numkeys, sizeof (h->keys[0]), rev_len);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Simple hash class for install.cc */
-
-class hash_internals;
-
-class hash {
- hash_internals *h;
- public:
- hash ();
- ~hash ();
-
- void add (char *string);
- int has (char *string);
-
- /* specialty for install.cc */
- void add_subdirs (char *path);
- void reverse_sort ();
-
- char *enumerate (char *prev=0);
-};
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to get and parse the setup.ini file
- from the mirror site. A few support routines for the bison and
- flex parsers are provided also. We check to see if this setup.ini
- is older than the one we used last time, and if so, warn the user. */
-
-#include "win32.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "ini.h"
-#include "resource.h"
-#include "concat.h"
-#include "state.h"
-#include "geturl.h"
-#include "dialog.h"
-#include "msg.h"
-#include "mkdir.h"
-#include "log.h"
-#include "reginfo.h"
-#include "version.h"
-
-unsigned int setup_timestamp = 0;
-char *setup_version = 0;
-
-extern "C" int yyparse ();
-/*extern int yydebug;*/
-
-static char *error_buf = 0;
-static int error_count = 0;
-
-void
-do_ini (HINSTANCE h)
-{
- char *ini_file = get_url_to_string (concat (MIRROR_SITE, "/setup.ini", 0));
- dismiss_url_status_dialog ();
-
- if (!ini_file)
- {
- note (IDS_SETUPINI_MISSING, MIRROR_SITE);
- next_dialog = IDD_SITE;
- return;
- }
-
- package = 0;
- npackages = 0;
- setup_timestamp = 0;
- setup_version = 0;
-
- ini_init (ini_file);
-
- setup_timestamp = 0;
- /*yydebug = 1;*/
-
- if (yyparse () || error_count > 0)
- {
- if (error_count == 1)
- MessageBox (0, error_buf, "Parse Error", 0);
- else
- MessageBox (0, error_buf, "Parse Errors", 0);
- }
- else
- {
- /* save known-good setup.ini locally */
- FILE *inif = fopen ("setup.ini", "wb");
- if (inif)
- {
- fwrite (ini_file, 1, strlen (ini_file), inif);
- fclose (inif);
- }
- }
-
- if (root_dir)
- {
- mkdir_p (1, concat (root_dir, XEMACS_SETUP_DIR, 0));
-
- unsigned int old_timestamp = 0;
- FILE *ots = fopen (concat (root_dir, XEMACS_SETUP_DIR, "timestamp", 0), "rt");
- if (ots)
- {
- fscanf (ots, "%u", &old_timestamp);
- fclose (ots);
- if (old_timestamp && setup_timestamp
- && (old_timestamp > setup_timestamp))
- {
- int yn = yesno (IDS_OLD_SETUPINI);
- if (yn == IDNO)
- exit_setup (1);
- }
- }
- if (setup_timestamp)
- {
- FILE *nts = fopen (concat (root_dir, XEMACS_SETUP_DIR, "timestamp", 0), "wt");
- if (nts)
- {
- fprintf (nts, "%u", setup_timestamp);
- fclose (nts);
- }
- }
- }
-
- msg ("setup_version is %s, our_version is %s", setup_version? setup_version : "(null)", version);
- if (setup_version)
- {
- char *ini_version = canonicalize_version (setup_version);
- char *our_version = canonicalize_version (version);
- if (strcmp (our_version, ini_version) < 0)
- note (IDS_OLD_SETUP_VERSION, version, setup_version);
- }
-
- next_dialog = IDD_CHOOSE;
-}
-
-extern "C" int yylineno;
-
-extern "C" int CDECL yyerror (char *s, ...)
-{
- char buf[1000];
- int len;
- sprintf (buf, "setup.ini line %d: ", yylineno);
- va_list args;
- va_start (args, s);
- vsprintf (buf + strlen (buf), s, args);
- OutputDebugString (buf);
- if (error_buf)
- {
- strcat (error_buf, "\n");
- len = strlen (error_buf) + strlen (buf) + 5;
- error_buf = (char *) realloc (error_buf, len);
- strcat (error_buf, buf);
- }
- else
- {
- len = strlen (buf) + 5;
- error_buf = (char *) malloc (len);
- strcpy (error_buf, buf);
- }
- error_count++;
- return 0;
-}
-
-extern "C" int CDECL fprintf (FILE *f, const char *s, ...);
-
-static char stderrbuf[1000];
-
-int CDECL
-fprintf (FILE *f, const char *fmt, ...)
-{
- char buf[1000];
- int rv;
- va_list args;
- va_start (args, fmt);
- if (f == stderr)
- {
- rv = vsprintf (buf, fmt, args);
- strcat (stderrbuf, buf);
- if (char *nl = strchr (stderrbuf, '\n'))
- {
- *nl = 0;
- /*OutputDebugString (stderrbuf);*/
- MessageBox (0, buf, "XEmacs Setup", 0);
- stderrbuf[0] = 0;
- }
-
- }
- else
- {
- rv = vfprintf (f, fmt, args);
- }
- return rv;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* When setup.ini is parsed, the information is stored according to
- the declarations here. ini.cc (via inilex and iniparse)
- initializes these structures. choose.cc sets the action and trust
- fields. download.cc downloads any needed files for selected
- packages (the chosen "install" field). install.cc installs
- selected packages. */
-
-#define YYSTYPE char *
-
-/* lowest number must be most trusted, highest least trusted */
-#define TRUST_PREV 0
-#define TRUST_CURR 1
-#define TRUST_TEST 2
-#define NTRUST 3
-#define TRUST_UNKNOWN 3 /* intentionally not in NTRUST */
-
-#define TY_GENERIC 0
-#define TY_CYGWIN 1
-#define TY_NATIVE 2
-
-#define ACTION_UNKNOWN 0
-#define ACTION_SAME 1
-#define ACTION_NEW 2
-#define ACTION_UPGRADE 3
-#define ACTION_UNINSTALL 4
-#define ACTION_ERROR 5
-
-#define SRCACTION_NO 0
-#define SRCACTION_YES 1
-
-typedef struct {
- char *name; /* package name, like "cygwin" */
- char *sdesc; /* short description (replaces "name" if provided) */
- char *ldesc; /* long description (multi-line) */
- int action; /* ACTION_* - only NEW and UPGRADE get installed */
- int srcaction;/* SRCACTION_ */
- int trust; /* TRUST_* (selects among info[] below) */
- int type; /* TY_GENERIC, TY_CYGWIN or TY_NATIVE. */
-
- struct {
- char *version; /* version part of filename */
- char *install; /* file name to install */
- int install_size; /* in bytes */
- char *source; /* sources for installed binaries */
- int source_size; /* in bytes */
- } info[NTRUST+1]; /* +1 for TRUST_UNKNOWN */
-} Package;
-
-extern Package *package;
-extern Package *xemacs_package;
-
-extern int npackages;
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-Package *new_package (char *name);
-void ini_init (char *string);
-
-#define pi (package[i].info[package[i].trust])
-
-#define LOOP_PACKAGES \
- for (i=0; i<npackages; i++) \
- if ((package[i].action == ACTION_NEW \
- || package[i].action == ACTION_UPGRADE) \
- && pi.install)
-
-#ifdef __cplusplus
-}
-#endif
+++ /dev/null
-/* A lexical scanner generated by flex */
-
-/* Scanner skeleton version:
- * $Header: /usr/CVSroot/XEmacs/xemacs/netinstall/Attic/inilex.c,v 1.1.2.3 2000/12/27 09:35:04 andyp Exp $
- */
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-
-#include <stdio.h>
-
-
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
-#endif
-
-
-#ifdef __cplusplus
-
-#include <stdlib.h>
-#include <unistd.h>
-
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else /* ! __cplusplus */
-
-#if __STDC__
-
-#define YY_USE_PROTOS
-#define YY_USE_CONST
-
-#endif /* __STDC__ */
-#endif /* ! __cplusplus */
-
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index. If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition. This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN yy_start = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state. The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START ((yy_start - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#define YY_BUF_SIZE 16384
-
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-
-extern int yyleng;
-extern FILE *yyin, *yyout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
- } \
- while ( 0 )
-
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
-
-struct yy_buffer_state
- {
- FILE *yy_input_file;
-
- char *yy_ch_buf; /* input buffer */
- char *yy_buf_pos; /* current position in input buffer */
-
- /* Size of input buffer in bytes, not including room for EOB
- * characters.
- */
- yy_size_t yy_buf_size;
-
- /* Number of characters read into yy_ch_buf, not including EOB
- * characters.
- */
- int yy_n_chars;
-
- /* Whether we "own" the buffer - i.e., we know we created it,
- * and can realloc() it to grow it, and should free() it to
- * delete it.
- */
- int yy_is_our_buffer;
-
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
- /* Whether we're considered to be at the beginning of a line.
- * If so, '^' rules will be active on the next match, otherwise
- * not.
- */
- int yy_at_bol;
-
- /* Whether to try to fill the input buffer when we reach the
- * end of it.
- */
- int yy_fill_buffer;
-
- int yy_buffer_status;
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
- /* When an EOF's been seen but there's still some text to process
- * then we mark the buffer as YY_EOF_PENDING, to indicate that we
- * shouldn't try reading from the input source any more. We might
- * still have a bunch of tokens to match, though, because of
- * possible backing-up.
- *
- * When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
- */
-#define YY_BUFFER_EOF_PENDING 2
- };
-
-static YY_BUFFER_STATE yy_current_buffer = 0;
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- */
-#define YY_CURRENT_BUFFER yy_current_buffer
-
-
-/* yy_hold_char holds the character lost when yytext is formed. */
-static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-
-
-int yyleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1; /* whether we need to initialize */
-static int yy_start = 0; /* start state number */
-
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin. A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void yyrestart YY_PROTO(( FILE *input_file ));
-
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
-
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
-
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
-static void yy_flex_free YY_PROTO(( void * ));
-
-#define yy_new_buffer yy_create_buffer
-
-#define yy_set_interactive(is_interactive) \
- { \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
- }
-
-#define yy_set_bol(at_bol) \
- { \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_at_bol = at_bol; \
- }
-
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
-
-
-#define YY_USES_REJECT
-
-#define yywrap() 1
-#define YY_SKIP_YYWRAP
-typedef unsigned char YY_CHAR;
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
-typedef int yy_state_type;
-extern int yylineno;
-int yylineno = 1;
-extern char *yytext;
-#define yytext_ptr yytext
-
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
- */
-#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
- yyleng = (int) (yy_cp - yy_bp); \
- yy_hold_char = *yy_cp; \
- *yy_cp = '\0'; \
- yy_c_buf_p = yy_cp;
-
-#define YY_NUM_RULES 21
-#define YY_END_OF_BUFFER 22
-static yyconst short int yy_acclist[188] =
- { 0,
- 22, 20, 21, 17, 20, 21, 19, 21, 20, 21,
- 20, 21, 16, 20, 21, 20, 21, 16, 20, 21,
- 16, 20, 21, 16, 20, 21, 16, 20, 21, 16,
- 20, 21, 16, 20, 21, 16, 20, 21, 16, 20,
- 21, 16, 20, 21, 16, 20, 21, 16, 20, 21,
- 17, 1, 18, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 10, 16, 16, 16, 16, 16, 16, 16,
- 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 13,
-
- 15, 16, 16, 16, 16, 16, 6, 16, 16, 16,
- 16, 16, 16, 6, 10, 16, 11, 15, 14, 15,
- 12, 15, 16, 9, 8, 16, 16, 16, 16, 9,
- 10, 8, 10, 16, 16, 16, 16, 16, 16, 7,
- 16, 16, 16, 16, 7, 10, 16, 5, 16, 16,
- 4, 5, 10, 16, 16, 4, 10, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 3, 16,
- 3, 10, 16, 16, 2, 2, 10
- } ;
-
-static yyconst short int yy_accept[167] =
- { 0,
- 1, 1, 1, 2, 4, 7, 9, 11, 13, 16,
- 18, 21, 24, 27, 30, 33, 36, 39, 42, 45,
- 48, 51, 52, 52, 53, 53, 54, 55, 55, 55,
- 55, 55, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 72, 72, 72, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 86, 86,
- 86, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 100, 102, 102, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
-
- 113, 114, 116, 117, 119, 121, 123, 124, 125, 126,
- 127, 128, 129, 130, 132, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 147, 148, 149,
- 150, 151, 152, 154, 155, 156, 158, 159, 160, 161,
- 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
- 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
- 183, 184, 185, 186, 188, 188
- } ;
-
-static yyconst int yy_ec[256] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
- 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 4, 5, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 6, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 8, 1, 1,
- 1, 1, 1, 1, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 9, 1, 10, 1, 7, 1, 11, 7, 12, 13,
-
- 14, 7, 7, 7, 15, 7, 7, 16, 17, 18,
- 19, 20, 7, 21, 22, 23, 24, 25, 7, 26,
- 27, 7, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1
- } ;
-
-static yyconst int yy_meta[28] =
- { 0,
- 1, 1, 1, 1, 1, 2, 2, 3, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2
- } ;
-
-static yyconst short int yy_base[171] =
- { 0,
- 0, 27, 264, 265, 261, 265, 258, 258, 0, 43,
- 242, 246, 45, 231, 243, 248, 52, 48, 54, 57,
- 61, 253, 250, 265, 250, 265, 0, 242, 61, 62,
- 66, 64, 229, 236, 235, 225, 223, 226, 224, 236,
- 265, 69, 72, 75, 71, 73, 82, 74, 265, 82,
- 86, 90, 83, 220, 220, 219, 216, 218, 224, 215,
- 90, 93, 99, 100, 91, 102, 101, 101, 226, 104,
- 107, 224, 222, 221, 212, 219, 222, 214, 117, 119,
- 124, 118, 125, 220, 126, 217, 265, 216, 215, 208,
- 215, 214, 215, 206, 265, 200, 127, 210, 209, 112,
-
- 131, 265, 132, 265, 265, 265, 200, 265, 265, 119,
- 207, 196, 138, 265, 265, 139, 205, 140, 204, 196,
- 196, 265, 201, 200, 141, 145, 265, 199, 265, 189,
- 184, 265, 265, 144, 142, 265, 190, 181, 152, 147,
- 180, 186, 149, 157, 177, 180, 159, 160, 187, 179,
- 162, 166, 179, 178, 168, 175, 161, 265, 167, 265,
- 172, 170, 265, 265, 265, 187, 190, 175, 117, 192
- } ;
-
-static yyconst short int yy_def[171] =
- { 0,
- 165, 165, 165, 165, 165, 165, 166, 167, 168, 169,
- 168, 168, 168, 168, 168, 170, 170, 170, 170, 170,
- 170, 165, 166, 165, 167, 165, 168, 169, 169, 169,
- 169, 169, 168, 168, 168, 168, 168, 168, 168, 170,
- 165, 170, 170, 170, 170, 170, 170, 170, 165, 169,
- 169, 169, 169, 168, 168, 168, 168, 168, 168, 168,
- 170, 170, 170, 170, 170, 170, 170, 169, 169, 169,
- 169, 168, 168, 168, 168, 168, 168, 168, 170, 170,
- 170, 170, 170, 170, 170, 169, 165, 169, 169, 168,
- 168, 168, 168, 168, 165, 168, 170, 170, 170, 170,
-
- 170, 165, 170, 165, 165, 165, 168, 165, 165, 168,
- 168, 168, 170, 165, 165, 170, 170, 170, 168, 168,
- 168, 165, 168, 170, 170, 170, 165, 170, 165, 168,
- 168, 165, 165, 170, 170, 165, 168, 168, 170, 170,
- 168, 168, 170, 170, 168, 168, 170, 170, 168, 168,
- 170, 170, 168, 168, 170, 170, 168, 165, 170, 165,
- 168, 170, 165, 165, 0, 165, 165, 165, 165, 165
- } ;
-
-static yyconst short int yy_nxt[293] =
- { 0,
- 4, 5, 6, 7, 8, 9, 9, 4, 10, 4,
- 9, 9, 9, 9, 11, 12, 9, 9, 9, 9,
- 9, 13, 14, 9, 15, 9, 9, 4, 5, 6,
- 7, 8, 16, 16, 4, 10, 4, 16, 16, 16,
- 16, 17, 18, 16, 16, 16, 16, 16, 19, 20,
- 16, 21, 16, 16, 29, 41, 30, 35, 36, 41,
- 43, 41, 31, 37, 41, 32, 44, 45, 41, 42,
- 49, 49, 46, 49, 48, 49, 41, 53, 41, 41,
- 41, 41, 41, 47, 50, 62, 52, 51, 63, 41,
- 61, 49, 49, 64, 67, 49, 65, 41, 41, 49,
-
- 41, 66, 68, 70, 71, 69, 41, 41, 41, 41,
- 49, 83, 79, 49, 80, 84, 49, 116, 28, 41,
- 81, 86, 85, 82, 41, 41, 41, 97, 88, 89,
- 98, 41, 41, 41, 41, 99, 101, 100, 41, 41,
- 103, 120, 113, 121, 117, 41, 41, 41, 41, 41,
- 118, 41, 41, 124, 41, 134, 41, 128, 135, 41,
- 139, 125, 140, 126, 41, 143, 41, 41, 144, 41,
- 147, 148, 155, 41, 41, 41, 27, 164, 152, 163,
- 161, 151, 160, 156, 159, 158, 162, 23, 23, 23,
- 25, 25, 25, 40, 40, 157, 154, 153, 150, 149,
-
- 146, 145, 142, 141, 138, 137, 136, 133, 132, 131,
- 130, 129, 127, 123, 122, 119, 115, 114, 112, 111,
- 110, 109, 108, 107, 106, 105, 104, 102, 96, 95,
- 94, 93, 92, 91, 90, 87, 78, 77, 76, 75,
- 74, 73, 72, 41, 60, 59, 58, 57, 56, 55,
- 54, 49, 26, 24, 22, 41, 39, 38, 34, 33,
- 26, 24, 22, 165, 3, 165, 165, 165, 165, 165,
- 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
- 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
- 165, 165
-
- } ;
-
-static yyconst short int yy_chk[293] =
- { 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 10, 18, 10, 13, 13, 17,
- 18, 19, 10, 13, 20, 10, 19, 19, 21, 17,
- 29, 30, 19, 32, 21, 31, 42, 32, 45, 43,
- 46, 48, 44, 20, 29, 43, 31, 30, 44, 47,
- 42, 50, 53, 45, 48, 51, 46, 61, 65, 52,
-
- 62, 47, 50, 52, 53, 51, 63, 64, 67, 66,
- 68, 65, 61, 70, 62, 66, 71, 100, 169, 100,
- 63, 68, 67, 64, 79, 82, 80, 79, 70, 71,
- 80, 81, 83, 85, 97, 81, 83, 82, 101, 103,
- 85, 110, 97, 110, 101, 113, 116, 118, 125, 135,
- 103, 134, 126, 113, 140, 125, 143, 118, 126, 139,
- 134, 116, 135, 116, 144, 139, 147, 148, 140, 151,
- 143, 144, 151, 152, 159, 155, 168, 162, 148, 161,
- 157, 147, 156, 152, 155, 154, 159, 166, 166, 166,
- 167, 167, 167, 170, 170, 153, 150, 149, 146, 145,
-
- 142, 141, 138, 137, 131, 130, 128, 124, 123, 121,
- 120, 119, 117, 112, 111, 107, 99, 98, 96, 94,
- 93, 92, 91, 90, 89, 88, 86, 84, 78, 77,
- 76, 75, 74, 73, 72, 69, 60, 59, 58, 57,
- 56, 55, 54, 40, 39, 38, 37, 36, 35, 34,
- 33, 28, 25, 23, 22, 16, 15, 14, 12, 11,
- 8, 7, 5, 3, 165, 165, 165, 165, 165, 165,
- 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
- 165, 165, 165, 165, 165, 165, 165, 165, 165, 165,
- 165, 165
-
- } ;
-
-static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
-static char *yy_full_match;
-static int yy_lp;
-#define REJECT \
-{ \
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
-yy_cp = yy_full_match; /* restore poss. backed-over text */ \
-++yy_lp; \
-goto find_rule; \
-}
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-char *yytext;
-#line 1 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-#define INITIAL 0
-#line 2 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* tokenize the setup.ini files. We parse a string which we've
- previously downloaded. The program must call ini_init() to specify
- that string. */
-
-#include "win32.h"
-#include <string.h>
-#include <stdlib.h>
-
-#include "ini.h"
-#include "iniparse.h"
-
-#define YY_INPUT(buf,result,max_size) { result = ini_getchar(buf, max_size); }
-
-static int ini_getchar(char *buf, int max_size);
-static void ignore_line ();
-
-/*%option debug */
-#define YY_NEVER_INTERACTIVE 1
-#line 546 "lex.yy.c"
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
-#else
-extern int yywrap YY_PROTO(( void ));
-#endif
-#endif
-
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
-#endif
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
-#endif
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
-#else
-static int input YY_PROTO(( void ));
-#endif
-#endif
-
-#if YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
-
-#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
-#endif
-
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#if __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
-#endif
-
-/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
- if ( yy_current_buffer->yy_is_interactive ) \
- { \
- int c = '*', n; \
- for ( n = 0; n < max_size && \
- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
- buf[n] = (char) c; \
- if ( c == '\n' ) \
- buf[n++] = (char) c; \
- if ( c == EOF && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" ); \
- result = n; \
- } \
- else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
- && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" );
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
-
-/* Code executed at the beginning of each rule, after yytext and yyleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
- if ( yyleng > 0 ) \
- yy_current_buffer->yy_at_bol = \
- (yytext[yyleng - 1] == '\n'); \
- YY_USER_ACTION
-
-YY_DECL
- {
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
-
-#line 42 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-
-
-#line 699 "lex.yy.c"
-
- if ( yy_init )
- {
- yy_init = 0;
-
-#ifdef YY_USER_INIT
- YY_USER_INIT;
-#endif
-
- if ( ! yy_start )
- yy_start = 1; /* first start state */
-
- if ( ! yyin )
- yyin = stdin;
-
- if ( ! yyout )
- yyout = stdout;
-
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( yyin, YY_BUF_SIZE );
-
- yy_load_buffer_state();
- }
-
- while ( 1 ) /* loops until end-of-file is reached */
- {
- yy_cp = yy_c_buf_p;
-
- /* Support of yytext. */
- *yy_cp = yy_hold_char;
-
- /* yy_bp points to the position in yy_ch_buf of the start of
- * the current run.
- */
- yy_bp = yy_cp;
-
- yy_current_state = yy_start;
- yy_current_state += YY_AT_BOL();
- yy_state_ptr = yy_state_buf;
- *yy_state_ptr++ = yy_current_state;
-yy_match:
- do
- {
- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 166 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- *yy_state_ptr++ = yy_current_state;
- ++yy_cp;
- }
- while ( yy_base[yy_current_state] != 265 );
-
-yy_find_action:
- yy_current_state = *--yy_state_ptr;
- yy_lp = yy_accept[yy_current_state];
-find_rule: /* we branch to this label when backing up */
- for ( ; ; ) /* until we find what rule we matched */
- {
- if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
- {
- yy_act = yy_acclist[yy_lp];
- {
- yy_full_match = yy_cp;
- break;
- }
- }
- --yy_cp;
- yy_current_state = *--yy_state_ptr;
- yy_lp = yy_accept[yy_current_state];
- }
-
- YY_DO_BEFORE_ACTION;
-
- if ( yy_act != YY_END_OF_BUFFER )
- {
- int yyl;
- for ( yyl = 0; yyl < yyleng; ++yyl )
- if ( yytext[yyl] == '\n' )
- ++yylineno;
- }
-
-do_action: /* This label is used only to access EOF actions. */
-
-
- switch ( yy_act )
- { /* beginning of action switch */
-case 1:
-YY_RULE_SETUP
-#line 44 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-{ yylval = strdup (yytext+1);
- yylval[strlen (yylval)-1] = 0;
- return STRING; }
- YY_BREAK
-case 2:
-YY_RULE_SETUP
-#line 48 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return SETUP_TIMESTAMP;
- YY_BREAK
-case 3:
-YY_RULE_SETUP
-#line 49 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return SETUP_VERSION;
- YY_BREAK
-case 4:
-YY_RULE_SETUP
-#line 50 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return VERSION;
- YY_BREAK
-case 5:
-YY_RULE_SETUP
-#line 51 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return INSTALL;
- YY_BREAK
-case 6:
-YY_RULE_SETUP
-#line 52 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return TYPE;
- YY_BREAK
-case 7:
-YY_RULE_SETUP
-#line 53 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return SOURCE;
- YY_BREAK
-case 8:
-YY_RULE_SETUP
-#line 54 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return SDESC;
- YY_BREAK
-case 9:
-YY_RULE_SETUP
-#line 55 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return LDESC;
- YY_BREAK
-case 10:
-YY_RULE_SETUP
-#line 57 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-ignore_line ();
- YY_BREAK
-case 11:
-YY_RULE_SETUP
-#line 59 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return T_CURR;
- YY_BREAK
-case 12:
-YY_RULE_SETUP
-#line 60 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return T_TEST;
- YY_BREAK
-case 13:
-YY_RULE_SETUP
-#line 61 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return T_TEST;
- YY_BREAK
-case 14:
-YY_RULE_SETUP
-#line 62 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return T_PREV;
- YY_BREAK
-case 15:
-YY_RULE_SETUP
-#line 63 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-return T_UNKNOWN;
- YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 65 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-{ yylval = strdup (yytext);
- return STRING; }
- YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 68 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-/* do nothing */
- YY_BREAK
-case 18:
-YY_RULE_SETUP
-#line 70 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-/* ignore comments */
- YY_BREAK
-case 19:
-YY_RULE_SETUP
-#line 72 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-{ return yytext[0]; }
- YY_BREAK
-case 20:
-YY_RULE_SETUP
-#line 73 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-{ return yytext[0]; }
- YY_BREAK
-case 21:
-YY_RULE_SETUP
-#line 75 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-ECHO;
- YY_BREAK
-#line 899 "lex.yy.c"
- case YY_STATE_EOF(INITIAL):
- yyterminate();
-
- case YY_END_OF_BUFFER:
- {
- /* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
-
- /* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
-
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
- {
- /* We're scanning a new file or input source. It's
- * possible that this happened because the user
- * just pointed yyin at a new source and called
- * yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
- * globals. Here is the right place to do so, because
- * this is the first action (other than possibly a
- * back-up) that will match for the new input source.
- */
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = yyin;
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
- }
-
- /* Note that here we test for yy_c_buf_p "<=" to the position
- * of the first EOB in the buffer, since yy_c_buf_p will
- * already have been incremented past the NUL character
- * (since all states make transitions on EOB to the
- * end-of-buffer state). Contrast this with the test
- * in input().
- */
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
- { /* This was really a NUL. */
- yy_state_type yy_next_state;
-
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state();
-
- /* Okay, we're now positioned to make the NUL
- * transition. We couldn't have
- * yy_get_previous_state() go ahead and do it
- * for us because it doesn't know how to deal
- * with the possibility of jamming (and we don't
- * want to build jamming into it because then it
- * will run more slowly).
- */
-
- yy_next_state = yy_try_NUL_trans( yy_current_state );
-
- yy_bp = yytext_ptr + YY_MORE_ADJ;
-
- if ( yy_next_state )
- {
- /* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
- yy_current_state = yy_next_state;
- goto yy_match;
- }
-
- else
- {
- yy_cp = yy_c_buf_p;
- goto yy_find_action;
- }
- }
-
- else switch ( yy_get_next_buffer() )
- {
- case EOB_ACT_END_OF_FILE:
- {
- yy_did_buffer_switch_on_eof = 0;
-
- if ( yywrap() )
- {
- /* Note: because we've taken care in
- * yy_get_next_buffer() to have set up
- * yytext, we can now set up
- * yy_c_buf_p so that if some total
- * hoser (like flex itself) wants to
- * call the scanner after we return the
- * YY_NULL, it'll still work - another
- * YY_NULL will get returned.
- */
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
-
- yy_act = YY_STATE_EOF(YY_START);
- goto do_action;
- }
-
- else
- {
- if ( ! yy_did_buffer_switch_on_eof )
- YY_NEW_FILE;
- }
- break;
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
-
- yy_current_state = yy_get_previous_state();
-
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
- goto yy_match;
-
- case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[yy_n_chars];
-
- yy_current_state = yy_get_previous_state();
-
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
- goto yy_find_action;
- }
- break;
- }
-
- default:
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--no action found" );
- } /* end of action switch */
- } /* end of scanning one token */
- } /* end of yylex */
-
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- * EOB_ACT_LAST_MATCH -
- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- * EOB_ACT_END_OF_FILE - end of file
- */
-
-static int yy_get_next_buffer()
- {
- register char *dest = yy_current_buffer->yy_ch_buf;
- register char *source = yytext_ptr;
- register int number_to_move, i;
- int ret_val;
-
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
- YY_FATAL_ERROR(
- "fatal flex scanner internal error--end of buffer missed" );
-
- if ( yy_current_buffer->yy_fill_buffer == 0 )
- { /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
- {
- /* We matched a singled characater, the EOB, so
- * treat this as a final EOF.
- */
- return EOB_ACT_END_OF_FILE;
- }
-
- else
- {
- /* We matched some text prior to the EOB, first
- * process it.
- */
- return EOB_ACT_LAST_MATCH;
- }
- }
-
- /* Try to read more data. */
-
- /* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
-
- for ( i = 0; i < number_to_move; ++i )
- *(dest++) = *(source++);
-
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
- /* don't do the read, it's not guaranteed to return an EOF,
- * just force an EOF
- */
- yy_n_chars = 0;
-
- else
- {
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
-
- while ( num_to_read <= 0 )
- { /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
- YY_FATAL_ERROR(
-"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
-
- int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
-
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = yy_current_buffer->yy_buf_size -
- number_to_move - 1;
-#endif
- }
-
- if ( num_to_read > YY_READ_BUF_SIZE )
- num_to_read = YY_READ_BUF_SIZE;
-
- /* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- yy_n_chars, num_to_read );
- }
-
- if ( yy_n_chars == 0 )
- {
- if ( number_to_move == YY_MORE_ADJ )
- {
- ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( yyin );
- }
-
- else
- {
- ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
- YY_BUFFER_EOF_PENDING;
- }
- }
-
- else
- ret_val = EOB_ACT_CONTINUE_SCAN;
-
- yy_n_chars += number_to_move;
- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
-
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
-
- return ret_val;
- }
-
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-static yy_state_type yy_get_previous_state()
- {
- register yy_state_type yy_current_state;
- register char *yy_cp;
-
- yy_current_state = yy_start;
- yy_current_state += YY_AT_BOL();
- yy_state_ptr = yy_state_buf;
- *yy_state_ptr++ = yy_current_state;
-
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
- {
- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 166 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- *yy_state_ptr++ = yy_current_state;
- }
-
- return yy_current_state;
- }
-
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- * next_state = yy_try_NUL_trans( current_state );
- */
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
- {
- register int yy_is_jam;
-
- register YY_CHAR yy_c = 1;
- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
- {
- yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 166 )
- yy_c = yy_meta[(unsigned int) yy_c];
- }
- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- *yy_state_ptr++ = yy_current_state;
- yy_is_jam = (yy_current_state == 165);
-
- return yy_is_jam ? 0 : yy_current_state;
- }
-
-
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
- {
- register char *yy_cp = yy_c_buf_p;
-
- /* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- { /* need to shift things up to make room */
- /* +2 for EOB chars. */
- register int number_to_move = yy_n_chars + 2;
- register char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
- register char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
-
- while ( source > yy_current_buffer->yy_ch_buf )
- *--dest = *--source;
-
- yy_cp += (int) (dest - source);
- yy_bp += (int) (dest - source);
- yy_n_chars = yy_current_buffer->yy_buf_size;
-
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
- YY_FATAL_ERROR( "flex scanner push-back overflow" );
- }
-
- *--yy_cp = (char) c;
-
- if ( c == '\n' )
- --yylineno;
-
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-#endif /* ifndef YY_NO_UNPUT */
-
-
-#ifdef __cplusplus
-static int yyinput()
-#else
-static int input()
-#endif
- {
- int c;
-
- *yy_c_buf_p = yy_hold_char;
-
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
- {
- /* yy_c_buf_p now points to the character we want to return.
- * If this occurs *before* the EOB characters, then it's a
- * valid NUL; if not, then we've hit the end of the buffer.
- */
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
- /* This was really a NUL. */
- *yy_c_buf_p = '\0';
-
- else
- { /* need more input */
- yytext_ptr = yy_c_buf_p;
- ++yy_c_buf_p;
-
- switch ( yy_get_next_buffer() )
- {
- case EOB_ACT_END_OF_FILE:
- {
- if ( yywrap() )
- {
- yy_c_buf_p =
- yytext_ptr + YY_MORE_ADJ;
- return EOF;
- }
-
- if ( ! yy_did_buffer_switch_on_eof )
- YY_NEW_FILE;
-#ifdef __cplusplus
- return yyinput();
-#else
- return input();
-#endif
- }
-
- case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
- break;
-
- case EOB_ACT_LAST_MATCH:
-#ifdef __cplusplus
- YY_FATAL_ERROR(
- "unexpected last match in yyinput()" );
-#else
- YY_FATAL_ERROR(
- "unexpected last match in input()" );
-#endif
- }
- }
- }
-
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
-
- yy_current_buffer->yy_at_bol = (c == '\n');
- if ( yy_current_buffer->yy_at_bol )
- ++yylineno;
-
- return c;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
-
- yy_init_buffer( yy_current_buffer, input_file );
- yy_load_buffer_state();
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
- {
- if ( yy_current_buffer == new_buffer )
- return;
-
- if ( yy_current_buffer )
- {
- /* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = yy_n_chars;
- }
-
- yy_current_buffer = new_buffer;
- yy_load_buffer_state();
-
- /* We don't actually know whether we did this switch during
- * EOF (yywrap()) processing, but the only time this flag
- * is looked at is after yywrap() is called, so it's safe
- * to go ahead and always set it.
- */
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
- {
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- yyin = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
-
-
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
- {
- YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_buf_size = size;
-
- /* yy_ch_buf has to be 2 characters longer than the size given because
- * we need to put in 2 end-of-buffer characters.
- */
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
-
- b->yy_is_our_buffer = 1;
-
- yy_init_buffer( b, file );
-
- return b;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
- {
- if ( ! b )
- return;
-
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
-
- if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
-
- yy_flex_free( (void *) b );
- }
-
-
-#ifndef YY_ALWAYS_INTERACTIVE
-#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
-#endif
-#endif
-
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
-
-
- {
- yy_flush_buffer( b );
-
- b->yy_input_file = file;
- b->yy_fill_buffer = 1;
-
-#if YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
-
- {
- b->yy_n_chars = 0;
-
- /* We always need two end-of-buffer characters. The first causes
- * a transition to the end-of-buffer state. The second causes
- * a jam in that state.
- */
- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
- b->yy_buf_pos = &b->yy_ch_buf[0];
-
- b->yy_at_bol = 1;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- if ( b == yy_current_buffer )
- yy_load_buffer_state();
- }
-
-
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
- {
- YY_BUFFER_STATE b;
-
- if ( size < 2 ||
- base[size-2] != YY_END_OF_BUFFER_CHAR ||
- base[size-1] != YY_END_OF_BUFFER_CHAR )
- /* They forgot to leave room for the EOB's. */
- return 0;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
- if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
-
- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
- b->yy_buf_pos = b->yy_ch_buf = base;
- b->yy_is_our_buffer = 0;
- b->yy_input_file = 0;
- b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
- b->yy_at_bol = 1;
- b->yy_fill_buffer = 0;
- b->yy_buffer_status = YY_BUFFER_NEW;
-
- yy_switch_to_buffer( b );
-
- return b;
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *str )
-#else
-YY_BUFFER_STATE yy_scan_string( str )
-yyconst char *str;
-#endif
- {
- int len;
- for ( len = 0; str[len]; ++len )
- ;
-
- return yy_scan_bytes( str, len );
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
- {
- YY_BUFFER_STATE b;
- char *buf;
- yy_size_t n;
- int i;
-
- /* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
- if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
-
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
-
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
-
- b = yy_scan_buffer( buf, n );
- if ( ! b )
- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
-
- /* It's okay to grow etc. this buffer, and we should throw it
- * away when we're done.
- */
- b->yy_is_our_buffer = 1;
-
- return b;
- }
-#endif
-
-
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
- {
- yy_size_t new_size;
-
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
-
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
-
- else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
-
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
- }
-
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
-
- BEGIN(new_state);
- }
-#endif
-
-
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state()
- {
- if ( --yy_start_stack_ptr < 0 )
- YY_FATAL_ERROR( "start-condition stack underflow" );
-
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
-
-
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state()
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
-#else
-static void yy_fatal_error( msg )
-char msg[];
-#endif
- {
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
- }
-
-
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
- } \
- while ( 0 )
-
-
-/* Internal utility routines. */
-
-#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
- {
- register int i;
- for ( i = 0; i < n; ++i )
- s1[i] = s2[i];
- }
-#endif
-
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
- return (void *) malloc( size );
- }
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
- /* The cast to (char *) in the following accommodates both
- * implementations that use char* generic pointers, and those
- * that use void* generic pointers. It works with the latter
- * because both ANSI C and C++ allow castless assignment from
- * any pointer type to void*, and deal with argument conversions
- * as though doing an assignment.
- */
- return (void *) realloc( (char *) ptr, size );
- }
-
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
-
-#if YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
-#line 75 "/windows/build/xemacs/xemacs/netinstall/inilex.l"
-
-
-static char *input_string = 0;
-static char *end_input_string;
-
-void
-ini_init(char *string)
-{
- input_string = string;
- end_input_string = input_string + strlen(input_string);
-}
-
-static int
-ini_getchar(char *buf, int max_size)
-{
- if (input_string)
- {
- int avail = end_input_string - input_string;
- if (avail == 0)
- {
- input_string = end_input_string = 0;
- return 0;
- }
- if (avail > max_size)
- avail = max_size;
- memcpy(buf, input_string, avail);
- input_string += avail;
- return avail;
- }
- else
- return 0;
-}
-
-static void
-ignore_line ()
-{
- char c;
- while (c = input ())
- {
- if (c == EOF)
- return;
- if (c == '\n')
- return;
- }
-}
+++ /dev/null
-%{
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* tokenize the setup.ini files. We parse a string which we've
- previously downloaded. The program must call ini_init() to specify
- that string. */
-
-#include "win32.h"
-#include <string.h>
-#include <stdlib.h>
-
-#include "ini.h"
-#include "iniparse.h"
-
-#define YY_INPUT(buf,result,max_size) { result = ini_getchar(buf, max_size); }
-
-static int ini_getchar(char *buf, int max_size);
-static void ignore_line ();
-
-%}
-
-/*%option debug */
-%option noyywrap
-%option yylineno
-%option never-interactive
-
-STR [a-zA-Z0-9_./-]+
-
-%%
-
-\"[^"]*\" { yylval = strdup (yytext+1);
- yylval[strlen (yylval)-1] = 0;
- return STRING; }
-
-"setup-timestamp:" return SETUP_TIMESTAMP;
-"setup-version:" return SETUP_VERSION;
-"version:" return VERSION;
-"install:" return INSTALL;
-"type:" return TYPE;
-"source:" return SOURCE;
-"sdesc:" return SDESC;
-"ldesc:" return LDESC;
-
-^{STR}":" ignore_line ();
-
-"[curr]" return T_CURR;
-"[test]" return T_TEST;
-"[exp]" return T_TEST;
-"[prev]" return T_PREV;
-"["{STR}"]" return T_UNKNOWN;
-
-{STR} { yylval = strdup (yytext);
- return STRING; }
-
-[ \t\r]+ /* do nothing */
-
-"#".*\n /* ignore comments */
-
-\n { return yytext[0]; }
-. { return yytext[0]; }
-
-%%
-
-static char *input_string = 0;
-static char *end_input_string;
-
-void
-ini_init(char *string)
-{
- input_string = string;
- end_input_string = input_string + strlen(input_string);
-}
-
-static int
-ini_getchar(char *buf, int max_size)
-{
- if (input_string)
- {
- int avail = end_input_string - input_string;
- if (avail == 0)
- {
- input_string = end_input_string = 0;
- return 0;
- }
- if (avail > max_size)
- avail = max_size;
- memcpy(buf, input_string, avail);
- input_string += avail;
- return avail;
- }
- else
- return 0;
-}
-
-static void
-ignore_line ()
-{
- char c;
- while (c = input ())
- {
- if (c == EOF)
- return;
- if (c == '\n')
- return;
- }
-}
+++ /dev/null
-
-/* A Bison parser, made from /windows/build/xemacs/xemacs/netinstall/iniparse.y
- by GNU Bison version 1.28 */
-
-#define YYBISON 1 /* Identify Bison output. */
-
-#define STRING 257
-#define SETUP_TIMESTAMP 258
-#define SETUP_VERSION 259
-#define VERSION 260
-#define INSTALL 261
-#define SOURCE 262
-#define SDESC 263
-#define LDESC 264
-#define TYPE 265
-#define T_PREV 266
-#define T_CURR 267
-#define T_TEST 268
-#define T_UNKNOWN 269
-
-#line 1 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Parse the setup.ini files. inilex.l provides the tokens for this. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "win32.h"
-
-#include "ini.h"
-#include "iniparse.h"
-
-#include "port.h"
-
-#define YYERROR_VERBOSE 1
-/*#define YYDEBUG 1*/
-
-static Package *cp;
-static int trust;
-extern unsigned int setup_timestamp;
-extern char *setup_version;
-extern int yylineno;
-extern int CDECL yyerror (char *s, ...);
-
-#define cpt (cp->info+trust)
-
-#ifndef YYSTYPE
-#define YYSTYPE int
-#endif
-#include <stdio.h>
-
-#ifndef __cplusplus
-#ifndef __STDC__
-#define const
-#endif
-#endif
-
-
-
-#define YYFINAL 47
-#define YYFLAG -32768
-#define YYNTBASE 18
-
-#define YYTRANSLATE(x) ((unsigned)(x) <= 269 ? yytranslate[x] : 27)
-
-static const char yytranslate[] = { 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 16,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 17, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15
-};
-
-#if YYDEBUG != 0
-static const short yyprhs[] = { 0,
- 0, 3, 6, 7, 11, 15, 17, 18, 22, 25,
- 26, 27, 33, 37, 39, 42, 45, 48, 52, 56,
- 59, 61, 63, 65, 67, 68
-};
-
-static const short yyrhs[] = { 19,
- 22, 0, 20, 19, 0, 0, 4, 3, 16, 0,
- 5, 3, 16, 0, 16, 0, 0, 1, 21, 16,
- 0, 23, 22, 0, 0, 0, 17, 3, 16, 24,
- 25, 0, 26, 16, 25, 0, 26, 0, 6, 3,
- 0, 9, 3, 0, 10, 3, 0, 7, 3, 3,
- 0, 8, 3, 3, 0, 11, 3, 0, 12, 0,
- 13, 0, 14, 0, 15, 0, 0, 1, 16, 0
-};
-
-#endif
-
-#if YYDEBUG != 0
-static const short yyrline[] = { 0,
- 50, 54, 55, 59, 60, 61, 62, 63, 66, 67,
- 71, 73, 76, 77, 81, 82, 83, 84, 86, 88,
- 94, 95, 96, 97, 98, 99
-};
-#endif
-
-
-#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
-
-static const char * const yytname[] = { "$","error","$undefined.","STRING",
-"SETUP_TIMESTAMP","SETUP_VERSION","VERSION","INSTALL","SOURCE","SDESC","LDESC",
-"TYPE","T_PREV","T_CURR","T_TEST","T_UNKNOWN","'\\n'","'@'","whole_file","setup_headers",
-"setup_header","@1","packages","package","@2","lines","simple_line", NULL
-};
-#endif
-
-static const short yyr1[] = { 0,
- 18, 19, 19, 20, 20, 20, 21, 20, 22, 22,
- 24, 23, 25, 25, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26
-};
-
-static const short yyr2[] = { 0,
- 2, 2, 0, 3, 3, 1, 0, 3, 2, 0,
- 0, 5, 3, 1, 2, 2, 2, 3, 3, 2,
- 1, 1, 1, 1, 0, 2
-};
-
-static const short yydefact[] = { 0,
- 7, 0, 0, 6, 10, 0, 0, 0, 0, 0,
- 1, 10, 2, 8, 4, 5, 0, 9, 11, 0,
- 0, 0, 0, 0, 0, 0, 0, 21, 22, 23,
- 24, 12, 14, 26, 15, 0, 0, 16, 17, 20,
- 0, 18, 19, 13, 0, 0, 0
-};
-
-static const short yydefgoto[] = { 45,
- 5, 6, 7, 11, 12, 20, 32, 33
-};
-
-static const short yypact[] = { 18,
--32768, -1, 1,-32768, -14, 18, -11, 4, 5, 21,
--32768, -14,-32768,-32768,-32768,-32768, 9,-32768,-32768, 0,
- 10, 24, 25, 26, 27, 28, 29,-32768,-32768,-32768,
--32768,-32768, 17,-32768,-32768, 33, 34,-32768,-32768,-32768,
- 0,-32768,-32768,-32768, 38, 39,-32768
-};
-
-static const short yypgoto[] = {-32768,
- 35,-32768,-32768, 30,-32768,-32768, 2,-32768
-};
-
-
-#define YYLAST 43
-
-
-static const short yytable[] = { -25,
- 21, 8, 10, 9, 14, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, -25, -25, -3, 1, 15,
- 16, 2, 3, 17, 19, 34, 35, 36, 37, 38,
- 39, 40, 41, 4, -3, 42, 43, 46, 47, 0,
- 13, 18, 44
-};
-
-static const short yycheck[] = { 0,
- 1, 3, 17, 3, 16, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 0, 1, 16,
- 16, 4, 5, 3, 16, 16, 3, 3, 3, 3,
- 3, 3, 16, 16, 17, 3, 3, 0, 0, -1,
- 6, 12, 41
-};
-/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
-#line 3 "/usr/share/bison.simple"
-/* This file comes from bison-1.28. */
-
-/* Skeleton output parser for bison,
- Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-/* As a special exception, when this file is copied by Bison into a
- Bison output file, you may use that output file without restriction.
- This special exception was added by the Free Software Foundation
- in version 1.24 of Bison. */
-
-/* This is the parser code that is written into each bison parser
- when the %semantic_parser declaration is not specified in the grammar.
- It was written by Richard Stallman by simplifying the hairy parser
- used when %semantic_parser is specified. */
-
-#ifndef YYSTACK_USE_ALLOCA
-#ifdef alloca
-#define YYSTACK_USE_ALLOCA
-#else /* alloca not defined */
-#ifdef __GNUC__
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#else /* not GNU C. */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
-#define YYSTACK_USE_ALLOCA
-#include <alloca.h>
-#else /* not sparc */
-/* We think this test detects Watcom and Microsoft C. */
-/* This used to test MSDOS, but that is a bad idea
- since that symbol is in the user namespace. */
-#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
-#if 0 /* No need for malloc.h, which pollutes the namespace;
- instead, just don't use alloca. */
-#include <malloc.h>
-#endif
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-/* I don't know what this was needed for, but it pollutes the namespace.
- So I turned it off. rms, 2 May 1997. */
-/* #include <malloc.h> */
- #pragma alloca
-#define YYSTACK_USE_ALLOCA
-#else /* not MSDOS, or __TURBOC__, or _AIX */
-#if 0
-#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
- and on HPUX 10. Eventually we can turn this on. */
-#define YYSTACK_USE_ALLOCA
-#define alloca __builtin_alloca
-#endif /* __hpux */
-#endif
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc */
-#endif /* not GNU C */
-#endif /* alloca not defined */
-#endif /* YYSTACK_USE_ALLOCA not defined */
-
-#ifdef YYSTACK_USE_ALLOCA
-#define YYSTACK_ALLOC alloca
-#else
-#define YYSTACK_ALLOC malloc
-#endif
-
-/* Note: there must be only one dollar sign in this file.
- It is replaced by the list of actions, each action
- as one case of the switch. */
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY -2
-#define YYEOF 0
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrlab1
-/* Like YYERROR except do call yyerror.
- This remains here temporarily to ease the
- transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
-#define YYFAIL goto yyerrlab
-#define YYRECOVERING() (!!yyerrstatus)
-#define YYBACKUP(token, value) \
-do \
- if (yychar == YYEMPTY && yylen == 1) \
- { yychar = (token), yylval = (value); \
- yychar1 = YYTRANSLATE (yychar); \
- YYPOPSTACK; \
- goto yybackup; \
- } \
- else \
- { yyerror ("syntax error: cannot back up"); YYERROR; } \
-while (0)
-
-#define YYTERROR 1
-#define YYERRCODE 256
-
-#ifndef YYPURE
-#define YYLEX yylex()
-#endif
-
-#ifdef YYPURE
-#ifdef YYLSP_NEEDED
-#ifdef YYLEX_PARAM
-#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
-#else
-#define YYLEX yylex(&yylval, &yylloc)
-#endif
-#else /* not YYLSP_NEEDED */
-#ifdef YYLEX_PARAM
-#define YYLEX yylex(&yylval, YYLEX_PARAM)
-#else
-#define YYLEX yylex(&yylval)
-#endif
-#endif /* not YYLSP_NEEDED */
-#endif
-
-/* If nonreentrant, generate the variables here */
-
-#ifndef YYPURE
-
-int yychar; /* the lookahead symbol */
-YYSTYPE yylval; /* the semantic value of the */
- /* lookahead symbol */
-
-#ifdef YYLSP_NEEDED
-YYLTYPE yylloc; /* location data for the lookahead */
- /* symbol */
-#endif
-
-int yynerrs; /* number of parse errors so far */
-#endif /* not YYPURE */
-
-#if YYDEBUG != 0
-int yydebug; /* nonzero means print parse trace */
-/* Since this is uninitialized, it does not stop multiple parsers
- from coexisting. */
-#endif
-
-/* YYINITDEPTH indicates the initial size of the parser's stacks */
-
-#ifndef YYINITDEPTH
-#define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH is the maximum size the stacks can grow to
- (effective only if the built-in stack extension method is used). */
-
-#if YYMAXDEPTH == 0
-#undef YYMAXDEPTH
-#endif
-
-#ifndef YYMAXDEPTH
-#define YYMAXDEPTH 10000
-#endif
-\f
-/* Define __yy_memcpy. Note that the size argument
- should be passed with type unsigned int, because that is what the non-GCC
- definitions require. With GCC, __builtin_memcpy takes an arg
- of type size_t, but it can handle unsigned int. */
-
-#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
-#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
-#else /* not GNU C or C++ */
-#ifndef __cplusplus
-
-/* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
-static void
-__yy_memcpy (to, from, count)
- char *to;
- char *from;
- unsigned int count;
-{
- register char *f = from;
- register char *t = to;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
-#else /* __cplusplus */
-
-/* This is the most reliable way to avoid incompatibilities
- in available built-in functions on various systems. */
-static void
-__yy_memcpy (char *to, char *from, unsigned int count)
-{
- register char *t = to;
- register char *f = from;
- register int i = count;
-
- while (i-- > 0)
- *t++ = *f++;
-}
-
-#endif
-#endif
-\f
-#line 217 "/usr/share/bison.simple"
-
-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
- into yyparse. The argument should have type void *.
- It should actually point to an object.
- Grammar actions can access the variable by casting it
- to the proper pointer type. */
-
-#ifdef YYPARSE_PARAM
-#ifdef __cplusplus
-#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* not __cplusplus */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
-#endif /* not __cplusplus */
-#else /* not YYPARSE_PARAM */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* not YYPARSE_PARAM */
-
-/* Prevent warning if -Wstrict-prototypes. */
-#ifdef __GNUC__
-#ifdef YYPARSE_PARAM
-int yyparse (void *);
-#else
-int yyparse (void);
-#endif
-#endif
-
-int
-yyparse(YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
-{
- register int yystate;
- register int yyn;
- register short *yyssp;
- register YYSTYPE *yyvsp;
- int yyerrstatus; /* number of tokens to shift before error messages enabled */
- int yychar1 = 0; /* lookahead token as an internal (translated) token number */
-
- short yyssa[YYINITDEPTH]; /* the state stack */
- YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
-
- short *yyss = yyssa; /* refer to the stacks thru separate pointers */
- YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
-
-#ifdef YYLSP_NEEDED
- YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
- YYLTYPE *yyls = yylsa;
- YYLTYPE *yylsp;
-
-#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
-#else
-#define YYPOPSTACK (yyvsp--, yyssp--)
-#endif
-
- int yystacksize = YYINITDEPTH;
- int yyfree_stacks = 0;
-
-#ifdef YYPURE
- int yychar;
- YYSTYPE yylval;
- int yynerrs;
-#ifdef YYLSP_NEEDED
- YYLTYPE yylloc;
-#endif
-#endif
-
- YYSTYPE yyval; /* the variable used to return */
- /* semantic values from the action */
- /* routines */
-
- int yylen;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Starting parse\n");
-#endif
-
- yystate = 0;
- yyerrstatus = 0;
- yynerrs = 0;
- yychar = YYEMPTY; /* Cause a token to be read. */
-
- /* Initialize stack pointers.
- Waste one element of value and location stack
- so that they stay on the same level as the state stack.
- The wasted elements are never initialized. */
-
- yyssp = yyss - 1;
- yyvsp = yyvs;
-#ifdef YYLSP_NEEDED
- yylsp = yyls;
-#endif
-
-/* Push a new state, which is found in yystate . */
-/* In all cases, when you get here, the value and location stacks
- have just been pushed. so pushing a state here evens the stacks. */
-yynewstate:
-
- *++yyssp = yystate;
-
- if (yyssp >= yyss + yystacksize - 1)
- {
- /* Give user a chance to reallocate the stack */
- /* Use copies of these so that the &'s don't force the real ones into memory. */
- YYSTYPE *yyvs1 = yyvs;
- short *yyss1 = yyss;
-#ifdef YYLSP_NEEDED
- YYLTYPE *yyls1 = yyls;
-#endif
-
- /* Get the current used size of the three stacks, in elements. */
- int size = yyssp - yyss + 1;
-
-#ifdef yyoverflow
- /* Each stack pointer address is followed by the size of
- the data in use in that stack, in bytes. */
-#ifdef YYLSP_NEEDED
- /* This used to be a conditional around just the two extra args,
- but that might be undefined if yyoverflow is a macro. */
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yyls1, size * sizeof (*yylsp),
- &yystacksize);
-#else
- yyoverflow("parser stack overflow",
- &yyss1, size * sizeof (*yyssp),
- &yyvs1, size * sizeof (*yyvsp),
- &yystacksize);
-#endif
-
- yyss = yyss1; yyvs = yyvs1;
-#ifdef YYLSP_NEEDED
- yyls = yyls1;
-#endif
-#else /* no yyoverflow */
- /* Extend the stack our own way. */
- if (yystacksize >= YYMAXDEPTH)
- {
- yyerror("parser stack overflow");
- if (yyfree_stacks)
- {
- free (yyss);
- free (yyvs);
-#ifdef YYLSP_NEEDED
- free (yyls);
-#endif
- }
- return 2;
- }
- yystacksize *= 2;
- if (yystacksize > YYMAXDEPTH)
- yystacksize = YYMAXDEPTH;
-#ifndef YYSTACK_USE_ALLOCA
- yyfree_stacks = 1;
-#endif
- yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
- __yy_memcpy ((char *)yyss, (char *)yyss1,
- size * (unsigned int) sizeof (*yyssp));
- yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
- __yy_memcpy ((char *)yyvs, (char *)yyvs1,
- size * (unsigned int) sizeof (*yyvsp));
-#ifdef YYLSP_NEEDED
- yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
- __yy_memcpy ((char *)yyls, (char *)yyls1,
- size * (unsigned int) sizeof (*yylsp));
-#endif
-#endif /* no yyoverflow */
-
- yyssp = yyss + size - 1;
- yyvsp = yyvs + size - 1;
-#ifdef YYLSP_NEEDED
- yylsp = yyls + size - 1;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Stack size increased to %d\n", yystacksize);
-#endif
-
- if (yyssp >= yyss + yystacksize - 1)
- YYABORT;
- }
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Entering state %d\n", yystate);
-#endif
-
- goto yybackup;
- yybackup:
-
-/* Do appropriate processing given the current state. */
-/* Read a lookahead token if we need one and don't already have one. */
-/* yyresume: */
-
- /* First try to decide what to do without reference to lookahead token. */
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yydefault;
-
- /* Not known => get a lookahead token if don't already have one. */
-
- /* yychar is either YYEMPTY or YYEOF
- or a valid token in external form. */
-
- if (yychar == YYEMPTY)
- {
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Reading a token: ");
-#endif
- yychar = YYLEX;
- }
-
- /* Convert token to internal form (in yychar1) for indexing tables with */
-
- if (yychar <= 0) /* This means end of input. */
- {
- yychar1 = 0;
- yychar = YYEOF; /* Don't call YYLEX any more */
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Now at end of input.\n");
-#endif
- }
- else
- {
- yychar1 = YYTRANSLATE(yychar);
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
- /* Give the individual parser a way to print the precise meaning
- of a token, for further debugging info. */
-#ifdef YYPRINT
- YYPRINT (stderr, yychar, yylval);
-#endif
- fprintf (stderr, ")\n");
- }
-#endif
- }
-
- yyn += yychar1;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
- goto yydefault;
-
- yyn = yytable[yyn];
-
- /* yyn is what to do for this token type in this state.
- Negative => reduce, -yyn is rule number.
- Positive => shift, yyn is new state.
- New state is final state => don't bother to shift,
- just return success.
- 0, or most negative number => error. */
-
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrlab;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrlab;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
- /* Shift the lookahead token. */
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
-#endif
-
- /* Discard the token being shifted unless it is eof. */
- if (yychar != YYEOF)
- yychar = YYEMPTY;
-
- *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
-#endif
-
- /* count tokens shifted since error; after three, turn off error status. */
- if (yyerrstatus) yyerrstatus--;
-
- yystate = yyn;
- goto yynewstate;
-
-/* Do the default action for the current state. */
-yydefault:
-
- yyn = yydefact[yystate];
- if (yyn == 0)
- goto yyerrlab;
-
-/* Do a reduction. yyn is the number of a rule to reduce with. */
-yyreduce:
- yylen = yyr2[yyn];
- if (yylen > 0)
- yyval = yyvsp[1-yylen]; /* implement default value of the action */
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- int i;
-
- fprintf (stderr, "Reducing via rule %d (line %d), ",
- yyn, yyrline[yyn]);
-
- /* Print the symbols being reduced, and their result. */
- for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
- fprintf (stderr, "%s ", yytname[yyrhs[i]]);
- fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
- }
-#endif
-
-
- switch (yyn) {
-
-case 4:
-#line 59 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ setup_timestamp = strtoul (yyvsp[-1], 0, 0); ;
- break;}
-case 5:
-#line 60 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ setup_version = strdup (yyvsp[-1]); ;
- break;}
-case 7:
-#line 62 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ yyerror ("unrecognized line in setup.ini headers (do you have the latest setup?)"); ;
- break;}
-case 11:
-#line 71 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ new_package(yyvsp[-1]); ;
- break;}
-case 15:
-#line 81 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ cpt->version = yyvsp[0]; ;
- break;}
-case 16:
-#line 82 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ cp->sdesc = yyvsp[0]; ;
- break;}
-case 17:
-#line 83 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ cp->ldesc = yyvsp[0]; ;
- break;}
-case 18:
-#line 84 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ cpt->install = yyvsp[-1];
- cpt->install_size = atoi(yyvsp[0]); ;
- break;}
-case 19:
-#line 86 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ cpt->source = yyvsp[-1];
- cpt->source_size = atoi(yyvsp[0]); ;
- break;}
-case 20:
-#line 88 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ if (!strcmp (yyvsp[0], "cygwin"))
- cp->type = TY_CYGWIN;
- else if (!strcmp (yyvsp[0], "native"))
- cp->type = TY_NATIVE;
- else
- cp->type = TY_GENERIC; ;
- break;}
-case 21:
-#line 94 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ trust = TRUST_PREV; ;
- break;}
-case 22:
-#line 95 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ trust = TRUST_CURR; ;
- break;}
-case 23:
-#line 96 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ trust = TRUST_TEST; ;
- break;}
-case 24:
-#line 97 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ trust = TRUST_UNKNOWN; ;
- break;}
-case 26:
-#line 99 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-{ yylineno --;
- yyerror ("unrecognized line in package %s (do you have the latest setup?)", cp->name);
- yylineno ++;
- ;
- break;}
-}
- /* the action file gets copied in in place of this dollarsign */
-#line 543 "/usr/share/bison.simple"
-\f
- yyvsp -= yylen;
- yyssp -= yylen;
-#ifdef YYLSP_NEEDED
- yylsp -= yylen;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "state stack now");
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
- *++yyvsp = yyval;
-
-#ifdef YYLSP_NEEDED
- yylsp++;
- if (yylen == 0)
- {
- yylsp->first_line = yylloc.first_line;
- yylsp->first_column = yylloc.first_column;
- yylsp->last_line = (yylsp-1)->last_line;
- yylsp->last_column = (yylsp-1)->last_column;
- yylsp->text = 0;
- }
- else
- {
- yylsp->last_line = (yylsp+yylen-1)->last_line;
- yylsp->last_column = (yylsp+yylen-1)->last_column;
- }
-#endif
-
- /* Now "shift" the result of the reduction.
- Determine what state that goes to,
- based on the state we popped back to
- and the rule number reduced by. */
-
- yyn = yyr1[yyn];
-
- yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
- if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
- yystate = yytable[yystate];
- else
- yystate = yydefgoto[yyn - YYNTBASE];
-
- goto yynewstate;
-
-yyerrlab: /* here on detecting error */
-
- if (! yyerrstatus)
- /* If not already recovering from an error, report this error. */
- {
- ++yynerrs;
-
-#ifdef YYERROR_VERBOSE
- yyn = yypact[yystate];
-
- if (yyn > YYFLAG && yyn < YYLAST)
- {
- int size = 0;
- char *msg;
- int x, count;
-
- count = 0;
- /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
- for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- size += strlen(yytname[x]) + 15, count++;
- msg = (char *) malloc(size + 15);
- if (msg != 0)
- {
- strcpy(msg, "parse error");
-
- if (count < 5)
- {
- count = 0;
- for (x = (yyn < 0 ? -yyn : 0);
- x < (sizeof(yytname) / sizeof(char *)); x++)
- if (yycheck[x + yyn] == x)
- {
- strcat(msg, count == 0 ? ", expecting `" : " or `");
- strcat(msg, yytname[x]);
- strcat(msg, "'");
- count++;
- }
- }
- yyerror(msg);
- free(msg);
- }
- else
- yyerror ("parse error; also virtual memory exceeded");
- }
- else
-#endif /* YYERROR_VERBOSE */
- yyerror("parse error");
- }
-
- goto yyerrlab1;
-yyerrlab1: /* here on error raised explicitly by an action */
-
- if (yyerrstatus == 3)
- {
- /* if just tried and failed to reuse lookahead token after an error, discard it. */
-
- /* return failure if at end of input */
- if (yychar == YYEOF)
- YYABORT;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
-#endif
-
- yychar = YYEMPTY;
- }
-
- /* Else will try to reuse lookahead token
- after shifting the error token. */
-
- yyerrstatus = 3; /* Each real token shifted decrements this */
-
- goto yyerrhandle;
-
-yyerrdefault: /* current state does not do anything special for the error token. */
-
-#if 0
- /* This is wrong; only states that explicitly want error tokens
- should shift them. */
- yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
- if (yyn) goto yydefault;
-#endif
-
-yyerrpop: /* pop the current state because it cannot handle the error token */
-
- if (yyssp == yyss) YYABORT;
- yyvsp--;
- yystate = *--yyssp;
-#ifdef YYLSP_NEEDED
- yylsp--;
-#endif
-
-#if YYDEBUG != 0
- if (yydebug)
- {
- short *ssp1 = yyss - 1;
- fprintf (stderr, "Error: state stack now");
- while (ssp1 != yyssp)
- fprintf (stderr, " %d", *++ssp1);
- fprintf (stderr, "\n");
- }
-#endif
-
-yyerrhandle:
-
- yyn = yypact[yystate];
- if (yyn == YYFLAG)
- goto yyerrdefault;
-
- yyn += YYTERROR;
- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
- goto yyerrdefault;
-
- yyn = yytable[yyn];
- if (yyn < 0)
- {
- if (yyn == YYFLAG)
- goto yyerrpop;
- yyn = -yyn;
- goto yyreduce;
- }
- else if (yyn == 0)
- goto yyerrpop;
-
- if (yyn == YYFINAL)
- YYACCEPT;
-
-#if YYDEBUG != 0
- if (yydebug)
- fprintf(stderr, "Shifting error token, ");
-#endif
-
- *++yyvsp = yylval;
-#ifdef YYLSP_NEEDED
- *++yylsp = yylloc;
-#endif
-
- yystate = yyn;
- goto yynewstate;
-
- yyacceptlab:
- /* YYACCEPT comes here. */
- if (yyfree_stacks)
- {
- free (yyss);
- free (yyvs);
-#ifdef YYLSP_NEEDED
- free (yyls);
-#endif
- }
- return 0;
-
- yyabortlab:
- /* YYABORT comes here. */
- if (yyfree_stacks)
- {
- free (yyss);
- free (yyvs);
-#ifdef YYLSP_NEEDED
- free (yyls);
-#endif
- }
- return 1;
-}
-#line 105 "/windows/build/xemacs/xemacs/netinstall/iniparse.y"
-
-
-Package *package = 0;
-Package *xemacs_package = 0;
-int npackages = 0;
-static int maxpackages = 0;
-
-Package *
-new_package (char *name)
-{
- if (package == 0)
- maxpackages = npackages = 0;
- if (npackages >= maxpackages)
- {
- maxpackages += 10;
- if (package)
- package = (Package *) realloc (package, maxpackages * sizeof (Package));
- else
- package = (Package *) malloc (maxpackages * sizeof (Package));
- }
- cp = package + npackages;
- npackages ++;
-
- memset (cp, 0, sizeof (Package));
- cp->name = name;
-
- trust = TRUST_CURR;
-
- return cp;
-}
+++ /dev/null
-#ifndef YYSTYPE
-#define YYSTYPE int
-#endif
-#define STRING 257
-#define SETUP_TIMESTAMP 258
-#define SETUP_VERSION 259
-#define VERSION 260
-#define INSTALL 261
-#define SOURCE 262
-#define SDESC 263
-#define LDESC 264
-#define TYPE 265
-#define T_PREV 266
-#define T_CURR 267
-#define T_TEST 268
-#define T_UNKNOWN 269
-
-
-extern YYSTYPE yylval;
+++ /dev/null
-%{
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Parse the setup.ini files. inilex.l provides the tokens for this. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "win32.h"
-
-#include "ini.h"
-#include "iniparse.h"
-
-#include "port.h"
-
-#define YYERROR_VERBOSE 1
-/*#define YYDEBUG 1*/
-
-static Package *cp;
-static int trust;
-extern unsigned int setup_timestamp;
-extern char *setup_version;
-extern int yylineno;
-extern int CDECL yyerror (char *s, ...);
-
-#define cpt (cp->info+trust)
-
-%}
-
-%token STRING
-%token SETUP_TIMESTAMP SETUP_VERSION VERSION INSTALL SOURCE SDESC LDESC TYPE
-%token T_PREV T_CURR T_TEST T_UNKNOWN
-
-%%
-
-whole_file
- : setup_headers packages
- ;
-
-setup_headers
- : setup_header setup_headers
- | /* empty */
- ;
-
-setup_header
- : SETUP_TIMESTAMP STRING '\n' { setup_timestamp = strtoul ($2, 0, 0); }
- | SETUP_VERSION STRING '\n' { setup_version = strdup ($2); }
- | '\n'
- | error { yyerror ("unrecognized line in setup.ini headers (do you have the latest setup?)"); } '\n'
- ;
-
-packages
- : package packages
- | /* empty */
- ;
-
-package
- : '@' STRING '\n' { new_package($2); }
- lines
- ;
-
-lines
- : simple_line '\n' lines
- | simple_line
- ;
-
-simple_line
- : VERSION STRING { cpt->version = $2; }
- | SDESC STRING { cp->sdesc = $2; }
- | LDESC STRING { cp->ldesc = $2; }
- | INSTALL STRING STRING { cpt->install = $2;
- cpt->install_size = atoi($3); }
- | SOURCE STRING STRING { cpt->source = $2;
- cpt->source_size = atoi($3); }
- | TYPE STRING { if (!strcmp ($2, "cygwin"))
- cp->type = TY_CYGWIN;
- else if (!strcmp ($2, "native"))
- cp->type = TY_NATIVE;
- else
- cp->type = TY_GENERIC; }
- | T_PREV { trust = TRUST_PREV; }
- | T_CURR { trust = TRUST_CURR; }
- | T_TEST { trust = TRUST_TEST; }
- | T_UNKNOWN { trust = TRUST_UNKNOWN; }
- | /* empty */
- | error '\n' { yylineno --;
- yyerror ("unrecognized line in package %s (do you have the latest setup?)", cp->name);
- yylineno ++;
- }
- ;
-
-%%
-
-Package *package = 0;
-Package *xemacs_package = 0;
-int npackages = 0;
-static int maxpackages = 0;
-
-Package *
-new_package (char *name)
-{
- if (package == 0)
- maxpackages = npackages = 0;
- if (npackages >= maxpackages)
- {
- maxpackages += 10;
- if (package)
- package = (Package *) realloc (package, maxpackages * sizeof (Package));
- else
- package = (Package *) malloc (maxpackages * sizeof (Package));
- }
- cp = package + npackages;
- npackages ++;
-
- memset (cp, 0, sizeof (Package));
- cp->name = name;
-
- trust = TRUST_CURR;
-
- return cp;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to intall all the packages selected in
- the install list (in ini.h). Note that we use a separate thread to
- maintain the progress dialog, so we avoid the complexity of
- handling two tasks in one thread. We also create or update all the
- files in /etc/setup and create the mount points. */
-
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef WIN32_NATIVE
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <zlib.h>
-
-#include "win32.h"
-#include "commctrl.h"
-
-#include "resource.h"
-#include "ini.h"
-#include "dialog.h"
-#include "concat.h"
-#include "geturl.h"
-#include "mkdir.h"
-#include "state.h"
-#include "tar.h"
-#include "diskfull.h"
-#include "msg.h"
-#include "regedit.h"
-#include "reginfo.h"
-#include "log.h"
-#include "hash.h"
-
-#include "port.h"
-
-static HWND ins_dialog = 0;
-static HWND ins_action = 0;
-static HWND ins_pkgname = 0;
-static HWND ins_filename = 0;
-static HWND ins_pprogress = 0;
-static HWND ins_iprogress = 0;
-static HWND ins_diskfull = 0;
-static HANDLE init_event;
-
-static int total_bytes = 0;
-static int total_bytes_sofar = 0;
-static int package_bytes = 0;
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
- case IDCANCEL:
- exit_setup (1);
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- ins_dialog = h;
- ins_action = GetDlgItem (h, IDC_INS_ACTION);
- ins_pkgname = GetDlgItem (h, IDC_INS_PKG);
- ins_filename = GetDlgItem (h, IDC_INS_FILE);
- ins_pprogress = GetDlgItem (h, IDC_INS_PPROGRESS);
- ins_iprogress = GetDlgItem (h, IDC_INS_IPROGRESS);
- ins_diskfull = GetDlgItem (h, IDC_INS_DISKFULL);
- SetEvent (init_event);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-static DWORD WINAPI
-dialog (void *)
-{
- MSG m;
- HWND new_dialog = CreateDialog (hinstance, MAKEINTRESOURCE (IDD_INSTATUS),
- 0, dialog_proc);
- if (new_dialog == 0)
- fatal ("create dialog");
- ShowWindow (new_dialog, SW_SHOWNORMAL);
- UpdateWindow (new_dialog);
- while (GetMessage (&m, 0, 0, 0) > 0) {
- TranslateMessage (&m);
- DispatchMessage (&m);
- }
- return FALSE;
-}
-
-static void
-init_dialog ()
-{
- if (ins_dialog == 0)
- {
- DWORD tid;
- HANDLE thread;
- init_event = CreateEvent (0, 0, 0, 0);
- thread = CreateThread (0, 0, dialog, 0, 0, &tid);
- WaitForSingleObject (init_event, 10000);
- CloseHandle (init_event);
- SendMessage (ins_pprogress, PBM_SETRANGE, 0, MAKELPARAM (0, 100));
- SendMessage (ins_iprogress, PBM_SETRANGE, 0, MAKELPARAM (0, 100));
- SendMessage (ins_diskfull, PBM_SETRANGE, 0, MAKELPARAM (0, 100));
- }
-
- SetWindowText (ins_pkgname, "");
- SetWindowText (ins_filename, "");
- SendMessage (ins_pprogress, PBM_SETPOS, (WPARAM) 0, 0);
- SendMessage (ins_iprogress, PBM_SETPOS, (WPARAM) 0, 0);
- SendMessage (ins_diskfull, PBM_SETPOS, (WPARAM) 0, 0);
- ShowWindow (ins_dialog, SW_SHOWNORMAL);
- SetForegroundWindow (ins_dialog);
-}
-
-static void
-progress (int bytes)
-{
- int perc;
-
- if (package_bytes > 100)
- {
- perc = bytes / (package_bytes / 100);
- SendMessage (ins_pprogress, PBM_SETPOS, (WPARAM) perc, 0);
- }
-
- if (total_bytes > 100)
- {
- perc = (total_bytes_sofar + bytes) / (total_bytes / 100);
- SendMessage (ins_iprogress, PBM_SETPOS, (WPARAM) perc, 0);
- }
-}
-
-static void
-badrename (char *o, char *n)
-{
- char *err = strerror (errno);
- if (!err)
- err = "(unknown error)";
- note (IDS_ERR_RENAME, o, n, err);
-}
-
-static char *standard_dirs[] = {
- 0
-};
-
-void
-hash::add_subdirs (char *path)
-{
- char *nonp, *pp;
- for (nonp = path; *nonp == '\\' || *nonp == '/'; nonp++);
- for (pp = path + strlen(path) - 1; pp>nonp; pp--)
- if (*pp == '/' || *pp == '\\')
- {
- int i, s=0;
- char c = *pp;
- *pp = 0;
- for (i=0; standard_dirs[i]; i++)
- if (strcmp (standard_dirs[i]+1, path) == 0)
- {
- s = 1;
- break;
- }
- if (s == 0)
- add (path);
- *pp = c;
- }
-}
-
-char *
-map_filename (char *fn, int type)
-{
- char *dest_file;
- while (*fn == '/' || *fn == '\\')
- fn++;
- if (type == TY_GENERIC)
- dest_file = concat (root_dir, XEMACS_PACKAGE_DIR, fn, 0);
- else // TY_CYGWIN | TY_NATIVE
- dest_file = concat (root_dir, "/", fn, 0);
- return dest_file;
-}
-
-static int
-exists (char *file)
-{
- if (_access (file, 0) == 0)
- return 1;
- return 0;
-}
-
-
-static int num_installs, num_uninstalls;
-
-static void
-uninstall_one (char *name, int action, int type)
-{
- hash dirs;
- char line[_MAX_PATH];
- char* fname = (type == TY_GENERIC ?
- concat (root_dir, XEMACS_PACKAGE_DIR, "pkginfo/MANIFEST.",
- name, 0) :
- concat (root_dir, XEMACS_SETUP_DIR, "MANIFEST.", name, 0));
-
- FILE* lst = fopen (fname, "rb");
-
- if (lst)
- {
- SetWindowText (ins_pkgname, name);
- SetWindowText (ins_action, "Uninstalling...");
- if (action == ACTION_UPGRADE)
- log (0, "Uninstalling old %s", name);
- else
- log (0, "Uninstalling %s", name);
-
- while (fgets (line, sizeof (line), lst))
- {
- if (line[strlen(line)-1] == '\n')
- line[strlen(line)-1] = 0;
-
- dirs.add_subdirs (line);
-
- char *d = map_filename (line, type);
- DWORD dw = GetFileAttributes (d);
- if (dw != 0xffffffff && !(dw & FILE_ATTRIBUTE_DIRECTORY))
- {
- log (LOG_BABBLE, "unlink %s", d);
- DeleteFile (d);
- }
- }
- fclose (lst);
-
- remove (fname);
-
- dirs.reverse_sort ();
- char *subdir = 0;
- while ((subdir = dirs.enumerate (subdir)) != 0)
- {
- char *d = map_filename (subdir, type);
- if (RemoveDirectory (d))
- log (LOG_BABBLE, "rmdir %s", d);
- }
- num_uninstalls ++;
- }
-}
-
-
-static int
-install_one (char *name, char *file, int file_size, int action, int type)
-{
- int errors = 0;
- char *local = file, *cp, *fn, *base;
-
- base = local;
- for (cp=local; *cp; cp++)
- if (*cp == '/' || *cp == '\\' || *cp == ':')
- base = cp+1;
- SetWindowText (ins_pkgname, base);
-
- if (!exists (local) && exists (base))
- local = base;
- if (!exists (local))
- {
- note (IDS_ERR_OPEN_READ, local, "No such file");
- return 1;
- }
-
- char* fname = (type == TY_GENERIC ?
- concat (root_dir, XEMACS_PACKAGE_DIR, "pkginfo/MANIFEST.",
- name, 0) :
- concat (root_dir, XEMACS_SETUP_DIR, "MANIFEST.", name, 0));
-
- FILE* lst = fopen (fname, "wb");
-
- package_bytes = file_size;
-
- switch (action)
- {
- case ACTION_NEW:
- SetWindowText (ins_action, "Installing...");
- break;
- case ACTION_UPGRADE:
- SetWindowText (ins_action, "Upgrading...");
- break;
- }
-
- log (0, "Installing %s", local);
- tar_open (local);
- while ((fn = tar_next_file ()))
- {
- char *dest_file;
-
- if (lst)
- fprintf (lst, "%s\n", fn);
-
- dest_file = map_filename (fn, type);
-
- SetWindowText (ins_filename, dest_file);
- log (LOG_BABBLE, "Installing file %s", dest_file);
- if (tar_read_file (dest_file) != 0)
- {
- log (0, "Unable to install file %s", dest_file);
- errors ++;
- }
-
- progress (tar_ftell ());
- num_installs ++;
- }
- tar_close ();
-
- total_bytes_sofar += file_size;
- progress (0);
-
- int df = diskfull (root_dir);
- SendMessage (ins_diskfull, PBM_SETPOS, (WPARAM) df, 0);
-
- if (lst)
- fclose (lst);
-
- return errors;
-}
-
-void
-do_install (HINSTANCE h)
-{
- int i;
- int errors = 0;
-
- num_installs = 0, num_uninstalls = 0;
-
- next_dialog = IDD_DESKTOP;
-
- mkdir_p (1, root_dir);
-
- for (i=0; standard_dirs[i]; i++)
- {
- char *p = concat (root_dir, standard_dirs[i], 0);
- mkdir_p (1, p);
- free (p);
- }
-
- dismiss_url_status_dialog ();
-
- init_dialog ();
-
- total_bytes = 0;
- total_bytes_sofar = 0;
-
- int df = diskfull (root_dir);
- SendMessage (ins_diskfull, PBM_SETPOS, (WPARAM) df, 0);
-
- LOOP_PACKAGES
- {
- total_bytes += pi.install_size;
- }
-
- for (i=0; i<npackages; i++)
- {
- if (package[i].action == ACTION_UNINSTALL
- || (package[i].action == ACTION_UPGRADE && pi.install))
- {
- uninstall_one (package[i].name, package[i].action,
- package[i].type);
- uninstall_one (concat (package[i].name, "-src", 0), package[i].action,
- package[i].type);
- }
-
- if ((package[i].action == ACTION_NEW
- || package[i].action == ACTION_UPGRADE)
- && pi.install)
- {
- int e = install_one (package[i].name, pi.install, pi.install_size, package[i].action,
- package[i].type);
- if (package[i].srcaction == SRCACTION_YES && pi.source)
- e += install_one (concat (package[i].name, "-src", 0), pi.source, pi.source_size,
- package[i].action, package[i].type);
- if (e)
- {
- package[i].action = ACTION_ERROR;
- errors++;
- }
- }
- } // end of big package loop
-
- ShowWindow (ins_dialog, SW_HIDE);
-
- char *odbn = concat (root_dir, XEMACS_SETUP_DIR, "installed.db", 0);
- char *ndbn = concat (root_dir, XEMACS_SETUP_DIR, "installed.db.new", 0);
- char *sdbn = concat (root_dir, XEMACS_SETUP_DIR, "installed.db.old", 0);
-
- mkdir_p (0, ndbn);
-
- FILE *odb = fopen (odbn, "rt");
- FILE *ndb = fopen (ndbn, "wb");
-
- if (!ndb)
- {
- char *err = strerror (errno);
- if (!err)
- err = "(unknown error)";
- fatal (IDS_ERR_OPEN_WRITE, ndb, err);
- }
-
- if (odb)
- {
- char line[1000], pkg[1000];
- int printit;
- while (fgets (line, 1000, odb))
- {
- printit = 1;
- sscanf (line, "%s", pkg);
- for (i=0; i<npackages; i++)
- {
- if (strcmp (pkg, package[i].name) == 0)
- switch (package[i].action)
- {
- case ACTION_NEW:
- case ACTION_UPGRADE:
- case ACTION_UNINSTALL:
- printit = 0;
- break;
- }
- }
- if (printit)
- fputs (line, ndb);
- }
-
- }
-
- LOOP_PACKAGES
- {
- if (package[i].srcaction == SRCACTION_YES)
- fprintf (ndb, "%s %s %d %s %d\n", package[i].name,
- pi.install, pi.install_size,
- pi.source, pi.source_size);
- else
- fprintf (ndb, "%s %s %d\n", package[i].name,
- pi.install, pi.install_size);
- }
-
- if (odb)
- fclose (odb);
- fclose (ndb);
-
- remove (sdbn);
- if (odb && rename (odbn, sdbn))
- badrename (odbn, sdbn);
-
- remove (odbn);
- if (rename (ndbn, odbn))
- badrename (ndbn, odbn);
-
- if (num_installs == 0 && num_uninstalls == 0)
- {
- exit_msg = IDS_NOTHING_INSTALLED;
- return;
- }
- if (num_installs == 0)
- {
- exit_msg = IDS_UNINSTALL_COMPLETE;
- return;
- }
-
- if (errors)
- exit_msg = IDS_INSTALL_INCOMPLETE;
- else
- exit_msg = IDS_INSTALL_COMPLETE;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by Andrej Borsenkow <Andrej.Borsenkow@mow.siemens.ru>
- * based on work and suggestions of DJ Delorie
- *
- */
-
-/* The purpose of this file is to ask the user where they want the
- root of the installation to be, and to ask whether the user prefers
- text or binary mounts. */
-
-#include "win32.h"
-#include <shlobj.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "dialog.h"
-#include "resource.h"
-#include "state.h"
-#include "msg.h"
-#include "concat.h"
-#include "log.h"
-
-static void
-check_if_enable_next (HWND h)
-{
- EnableWindow (GetDlgItem (h, IDOK), local_dir != 0);
-}
-
-static void
-load_dialog (HWND h)
-{
- eset (h, IDC_LOCAL_DIR, local_dir);
- check_if_enable_next (h);
-}
-
-static void
-save_dialog (HWND h)
-{
- local_dir = eget (h, IDC_LOCAL_DIR, local_dir);
-}
-
-
-static int CALLBACK
-browse_cb (HWND h, UINT m, LPARAM lp, LPARAM data)
-{
- switch (m)
- {
- case BFFM_INITIALIZED:
- if (local_dir)
- SendMessage (h, BFFM_SETSELECTION, TRUE, (LPARAM)local_dir);
- break;
- }
- return 0;
-}
-
-static void
-browse (HWND h)
-{
- BROWSEINFO bi;
- CHAR name[MAX_PATH];
- LPITEMIDLIST pidl;
- memset (&bi, 0, sizeof (bi));
- bi.hwndOwner = h;
- bi.pszDisplayName = name;
- bi.lpszTitle = "Select download directory";
- bi.ulFlags = BIF_RETURNONLYFSDIRS;
- bi.lpfn = browse_cb;
- pidl = SHBrowseForFolder (&bi);
- if (pidl)
- {
- if (SHGetPathFromIDList (pidl, name))
- eset (h, IDC_LOCAL_DIR, name);
- }
-}
-
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_LOCAL_DIR:
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDC_LOCAL_DIR_BROWSE:
- browse (h);
- break;
-
- case IDOK:
- save_dialog (h);
- if (SetCurrentDirectoryA (local_dir))
- {
- switch (source)
- {
- case IDC_SOURCE_DOWNLOAD:
- NEXT (IDD_NET);
- break;
- case IDC_SOURCE_NETINST:
- case IDC_SOURCE_CWD:
- NEXT (IDD_ROOT);
- break;
- default:
- NEXT (0);
- break;
- }
- }
- else
- note (IDS_ERR_CHDIR, local_dir);
-
- break;
-
- case IDC_BACK:
- save_dialog (h);
- NEXT (IDD_SOURCE);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-extern char cwd[_MAX_PATH];
-
-void
-do_local_dir (HINSTANCE h)
-{
- int rv = 0;
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_LOCAL_DIR), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-
- log (0, "Selected local directory: %s", local_dir);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@redhat.com>
- *
- */
-
-/* The purpose of this file is to centralize all the logging functions. */
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <time.h>
-
-#include "resource.h"
-#include "msg.h"
-#include "log.h"
-#include "dialog.h"
-#include "state.h"
-#include "concat.h"
-#include "mkdir.h"
-
-struct LogEnt {
- LogEnt *next;
- int flags;
- time_t when;
- char msg[1];
-};
-
-static LogEnt *first_logent = 0;
-static LogEnt **next_logent = &first_logent;
-
-void
-log (int flags, char *fmt, ...)
-{
- char buf[1000];
- va_list args;
- va_start (args, fmt);
- vsprintf (buf, fmt, args);
-
- LogEnt *l = (LogEnt *) malloc (sizeof (LogEnt) + strlen (buf) + 20);
- l->next = 0;
- l->flags = flags;
- time (&(l->when));
- *next_logent = l;
- next_logent = &(l->next);
-
- char *b = l->msg;
- if (flags & LOG_TIMESTAMP)
- {
- struct tm *tm = localtime (&(l->when));
- strftime (b, 1000, "%Y/%m/%d %H:%M:%S ", tm);
- b += strlen (b);
- }
-
- strcpy (b, buf);
- msg ("LOG: %d %s", l->flags, l->msg);
-}
-
-void
-log_save (int babble, char *filename, int append)
-{
- static int been_here = 0;
- if (been_here)
- return;
- been_here = 1;
-
- mkdir_p (0, filename);
-
- FILE *f = fopen (filename, append ? "at" : "wt");
- if (!f)
- {
- fatal (IDS_NOLOGFILE, filename);
- return;
- }
-
- LogEnt *l;
-
- for (l=first_logent; l; l=l->next)
- {
- if (babble || !(l->flags & LOG_BABBLE))
- {
- fputs (l->msg, f);
- if (l->msg[strlen(l->msg)-1] != '\n')
- fputc ('\n', f);
- }
- }
-
- fclose (f);
- been_here = 0;
-}
-
-void
-exit_setup (int exit_code)
-{
- static int been_here = 0;
- if (been_here)
- ExitProcess (1);
- been_here = 1;
-
- if (exit_msg)
- note (exit_msg);
-
- log (LOG_TIMESTAMP, "Ending cygwin install");
-
- if (source == IDC_SOURCE_DOWNLOAD || !root_dir)
- {
- log_save (LOG_BABBLE, "setup.log.full", 0);
- log_save (0, "setup.log", 1);
- }
- else
- {
- log_save (LOG_BABBLE, concat (root_dir, "/setup.log.full", 0), 0);
- log_save (0, concat (root_dir, "/setup.log", 0), 1);
- }
-
- ExitProcess (exit_code);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@redhat.com>
- *
- */
-
-/* This is for "printf"-like logging. Messages are stored in memory
- until they're written out. "babble" means the message is just idle
- babbling; it can be ignored for shorter logs. */
-
-#define LOG_BABBLE 1
-#define LOG_TIMESTAMP 2
-
-void log (int flags, char *fmt, ...);
-
-/* Here, "babble" means to write out the babble also. If "append" is
- nonzero, the log is appended to any existing file. */
-
-void log_save (int babble, char *filename, int append);
-
-/* This is the only legal way to exit. It writes out all the logs and things */
-
-void exit_setup (int exit_code);
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* OK, here's how this works. Each of the steps needed for install -
- dialogs, downloads, installs - are in their own files and have some
- "do_*" function (prototype in dialog.h) and a resource id (IDD_* or
- IDD_S_* in resource.h) for that step. Each step is responsible for
- selecting the next step! See the NEXT macro in dialog.h. Note
- that the IDD_S_* ids are fake; those are for steps that don't
- really have a controlling dialog (some have progress dialogs, but
- those don't count, although they could). Replace the IDD_S_* with
- IDD_* if you create a real dialog for those steps. */
-
-#include "win32.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "resource.h"
-#include "dialog.h"
-#include "state.h"
-#include "msg.h"
-#include "netio.h"
-#include "find.h"
-#include "log.h"
-
-#include "port.h"
-
-void netio_test (char *);
-
-int next_dialog;
-int exit_msg = 0;
-
-HINSTANCE hinstance;
-
-int WINAPI
-WinMain (HINSTANCE h,
- HINSTANCE hPrevInstance,
- LPSTR command_line,
- int cmd_show)
-{
- hinstance = h;
-
- next_dialog = IDD_SPLASH;
-
- log (LOG_TIMESTAMP, "Starting XEmacs install");
-
- char cwd[_MAX_PATH];
- GetCurrentDirectory (sizeof (cwd), cwd);
- local_dir = strdup (cwd);
- log (0, "Current Directory: %s", cwd);
-
- while (next_dialog)
- {
- switch (next_dialog)
- {
- case IDD_SPLASH: do_splash (h); break;
- case IDD_SOURCE: do_source (h); break;
- case IDD_LOCAL_DIR: do_local_dir (h); break;
- case IDD_ROOT: do_root (h); break;
- case IDD_NET: do_net (h); break;
- case IDD_SITE: do_site (h); break;
- case IDD_OTHER_URL: do_other (h); break;
- case IDD_S_LOAD_INI: do_ini (h); break;
- case IDD_S_FROM_CWD: do_fromcwd (h); break;
- case IDD_CHOOSE: do_choose (h); break;
- case IDD_S_DOWNLOAD: do_download (h); break;
- case IDD_S_INSTALL: do_install (h); break;
- case IDD_DESKTOP: do_desktop (h); break;
- case IDD_S_POSTINSTALL: do_postinstall (h); break;
-
- default:
- next_dialog = 0;
- break;
- }
- }
-
- exit_setup (0);
-
- return EXIT_SUCCESS;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* see mkdir.h */
-
-#include "win32.h"
-#include <stdio.h>
-#include "mkdir.h"
-
-int
-mkdir_p (int isadir, char *path)
-{
- char saved_char, *slash = 0;
- char *c;
- DWORD d, gse;
-
- d = GetFileAttributes (path);
- if (d != 0xffffffff && d & FILE_ATTRIBUTE_DIRECTORY)
- return 0;
-
- if (isadir)
- {
- if (CreateDirectory (path, 0))
- return 0;
- gse = GetLastError ();
- if (gse != ERROR_PATH_NOT_FOUND && gse != ERROR_FILE_NOT_FOUND)
- {
- if (gse == ERROR_ALREADY_EXISTS)
- {
- fprintf (stderr, "warning: deleting \"%s\" so I can make a directory there\n",
- path);
- if (DeleteFileA (path))
- return mkdir_p (isadir, path);
- }
- return 1;
- }
- }
-
- for (c=path; *c; c++)
- {
- if (*c == ':')
- slash = 0;
- if (*c == '/' || *c == '\\')
- slash = c;
- }
-
- if (!slash)
- return 0;
-
- saved_char = *slash;
- *slash = 0;
- if (mkdir_p (1, path))
- {
- *slash = saved_char;
- return 1;
- }
- *slash = saved_char;
-
- if (!isadir)
- return 0;
-
- return mkdir_p (isadir, path);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Create a directory, and any needed parent directories. If "isadir"
- is non-zero, "path" is the name of a directory. If "isadir" is
- zero, "path" is the name of a *file* that we need a directory
- for. */
-
-extern int mkdir_p (int isadir, char *path);
+++ /dev/null
-#include "win32.h"
-#include "shlobj.h"
-
-/* This part of the code must be in C because the C++ interface to COM
-doesn't work. */
-
-void
-make_link_2 (char *exepath, char *args, char *icon, char *lname)
-{
- IShellLink *sl;
- IPersistFile *pf;
- WCHAR widepath [_MAX_PATH];
-
- CoCreateInstance (&CLSID_ShellLink, NULL,
- CLSCTX_INPROC_SERVER, &IID_IShellLink, (LPVOID *) & sl);
- sl->lpVtbl->QueryInterface (sl, &IID_IPersistFile, (void **) &pf);
-
- sl->lpVtbl->SetPath (sl, exepath);
- sl->lpVtbl->SetArguments (sl, args);
- sl->lpVtbl->SetIconLocation (sl, icon, 0);
-
- MultiByteToWideChar (CP_ACP, 0, lname, -1, widepath, _MAX_PATH);
- pf->lpVtbl->Save (pf, widepath, TRUE);
-
- pf->lpVtbl->Release (pf);
- sl->lpVtbl->Release (sl);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to centralize all the message
- functions. */
-
-static char *cvsid = "\n%%% $Id: msg.cc,v 1.1.2.1 2000/12/11 22:01:36 andyp Exp $\n";
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdarg.h>
-#include "dialog.h"
-#include "log.h"
-
-void
-msg (char *fmt, ...)
-{
- char buf[1000];
- va_list args;
- va_start (args, fmt);
- vsprintf (buf, fmt, args);
- OutputDebugString (buf);
-}
-
-static int
-mbox (char *name, int type, int id, va_list args)
-{
- char buf[1000], fmt[1000];
-
- if (LoadString (hinstance, id, fmt, sizeof (fmt)) <= 0)
- ExitProcess (0);
-
- vsprintf (buf, fmt, args);
- log (0, "mbox %s: %s", name, buf);
- return MessageBox (0, buf, "XEmacs Setup", type | MB_TOPMOST);
-}
-
-void
-note (int id, ...)
-{
- va_list args;
- va_start (args, id);
- mbox ("note", 0, id, args);
-}
-
-void
-fatal (int id, ...)
-{
- va_list args;
- va_start (args, id);
- mbox ("fatal", 0, id, args);
- exit_setup (1);
-}
-
-int
-yesno (int id, ...)
-{
- va_list args;
- va_start (args, id);
- return mbox ("yesno", MB_YESNO, id, args);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* This is for "printf"-like debugging. Messages go to
- OutputDebugString, which can be seen while debugging under GDB or
- via a debug message monitor. */
-
-void msg(char *fmt, ...);
-
-/* This pops up a dialog with text from the string table ("id"), which
- is interpreted like printf. The program exits when the user
- presses OK. */
-
-void fatal (int id, ...);
-
-/* Similar, but the program continues when the user presses OK */
-
-void note (int id, ...);
-
-/* returns IDYES or IDNO, otherwise same as note() */
-int yesno (int id, ...);
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to get the network configuration
- information from the user. */
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include "dialog.h"
-#include "resource.h"
-#include "state.h"
-#include "msg.h"
-#include "log.h"
-
-static int rb[] = { IDC_NET_IE5, IDC_NET_DIRECT, IDC_NET_PROXY, 0 };
-
-static void
-check_if_enable_next (HWND h)
-{
- int e = 0, p = 0, pu = 0;
- if (net_method == IDC_NET_IE5)
- pu = 1;
- if (net_method == IDC_NET_IE5 || net_method == IDC_NET_DIRECT)
- e = 1;
- else if (net_method == IDC_NET_PROXY)
- {
- p = pu = 1;
- if (net_proxy_host && net_proxy_port)
- e = 1;
- }
- EnableWindow (GetDlgItem (h, IDOK), e);
- EnableWindow (GetDlgItem (h, IDC_PROXY_HOST), p);
- EnableWindow (GetDlgItem (h, IDC_PROXY_PORT), p);
-}
-
-static void
-load_dialog (HWND h)
-{
- rbset (h, rb, net_method);
- eset (h, IDC_PROXY_HOST, net_proxy_host);
- if (net_proxy_port == 0)
- net_proxy_port = 80;
- eset (h, IDC_PROXY_PORT, net_proxy_port);
- check_if_enable_next (h);
-}
-
-static void
-save_dialog (HWND h)
-{
- net_method = rbget (h, rb);
- net_proxy_host = eget (h, IDC_PROXY_HOST, net_proxy_host);
- net_proxy_port = eget (h, IDC_PROXY_PORT);
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_NET_IE5:
- case IDC_NET_DIRECT:
- case IDC_NET_PROXY:
- case IDC_PROXY_HOST:
- case IDC_PROXY_PORT:
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDOK:
- save_dialog (h);
- switch (source)
- {
- case IDC_SOURCE_NETINST:
- case IDC_SOURCE_DOWNLOAD:
- NEXT (IDD_SITE);
- break;
- case IDC_SOURCE_CWD:
- NEXT (0);
- break;
- default:
- msg ("source is default? %d\n", source);
- NEXT (0);
- }
- break;
-
- case IDC_BACK:
- save_dialog (h);
- switch (source)
- {
- case IDC_SOURCE_DOWNLOAD:
- NEXT (IDD_LOCAL_DIR);
- break;
- case IDC_SOURCE_NETINST:
- case IDC_SOURCE_CWD:
- NEXT (IDD_ROOT);
- break;
- }
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-void
-do_net (HINSTANCE h)
-{
- int rv = 0;
-
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_NET), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-
- log (0, "net: %s",
- (net_method == IDC_NET_IE5) ? "IE5" :
- (net_method == IDC_NET_DIRECT) ? "Direct" : "Proxy");
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to coordinate the various access
- methods known to setup. To add a new method, create a pair of
- nio-*.[ch] files and add the logic to NetIO::open here */
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "resource.h"
-#include "state.h"
-#include "msg.h"
-#include "netio.h"
-#include "nio-file.h"
-#include "nio-ie5.h"
-#include "nio-http.h"
-#include "nio-ftp.h"
-#include "dialog.h"
-#include "log.h"
-
-#include "port.h"
-
-NetIO::NetIO (char *Purl)
-{
- set_url (Purl);
-}
-
-NetIO::~NetIO ()
-{
- if (url)
- free (url);
- if (proto)
- free (proto);
- if (host)
- free (host);
- if (path)
- free (path);
-}
-
-void
-NetIO::set_url (char *Purl)
-{
- char *bp, *ep, c;
-
- file_size = 0;
- url = _strdup (Purl);
- proto = 0;
- host = 0;
- port = 0;
- path = 0;
-
- bp = url;
- ep = strstr (bp, "://");
- if (!ep)
- {
- path = url;
- return;
- }
-
- *ep = 0;
- proto = _strdup (bp);
- *ep = ':';
- bp = ep+3;
-
- ep = bp + strcspn (bp, ":/");
- c = *ep;
- *ep = 0;
- host = _strdup (bp);
- *ep = c;
-
- if (*ep == ':')
- {
- port = atoi (ep+1);
- ep = strchr (ep, '/');
- }
-
- if (*ep)
- path = _strdup (ep);
-}
-
-int
-NetIO::ok ()
-{
- return 0;
-}
-
-int
-NetIO::read (char *buf, int nbytes)
-{
- return 0;
-}
-
-NetIO *
-NetIO::open (char *url)
-{
- NetIO *rv = 0;
- enum {http, ftp, file} proto;
- if (strncmp (url, "http://", 7) == 0)
- proto = http;
- else if (strncmp (url, "ftp://", 6) == 0)
- proto = ftp;
- else
- proto = file;
-
- if (proto == file)
- rv = new NetIO_File (url);
- else if (net_method == IDC_NET_IE5)
- rv = new NetIO_IE5 (url);
- else if (net_method == IDC_NET_PROXY)
- rv = new NetIO_HTTP (url);
- else if (net_method == IDC_NET_DIRECT)
- {
- switch (proto)
- {
- case http:
- rv = new NetIO_HTTP (url);
- break;
- case ftp:
- rv = new NetIO_FTP (url);
- break;
- }
- }
-
- if (!rv->ok ())
- {
- delete rv;
- return 0;
- }
-
- return rv;
-}
-
-
-static char **user, **passwd;
-static int loading = 0;
-
-static void
-check_if_enable_ok (HWND h)
-{
- int e = 0;
- if (*user && *passwd)
- e = 1;
- EnableWindow (GetDlgItem (h, IDOK), e);
-}
-
-static void
-load_dialog (HWND h)
-{
- loading = 1;
- eset (h, IDC_NET_USER, *user);
- eset (h, IDC_NET_PASSWD, *passwd);
- check_if_enable_ok (h);
- loading = 0;
-}
-
-static void
-save_dialog (HWND h)
-{
- *user = eget (h, IDC_NET_USER, *user);
- *passwd = eget (h, IDC_NET_PASSWD, *passwd);
-}
-
-static BOOL
-auth_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_NET_USER:
- case IDC_NET_PASSWD:
- if (code == EN_CHANGE && !loading)
- {
- save_dialog (h);
- check_if_enable_ok (h);
- }
- break;
-
- case IDOK:
- save_dialog (h);
- EndDialog (h, 0);
- break;
-
- case IDCANCEL:
- EndDialog (h, 1);
- exit_setup (1);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-auth_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, auth_cmd);
- }
- return FALSE;
-}
-
-static int
-auth_common (HINSTANCE h, int id)
-{
- return DialogBox (h, MAKEINTRESOURCE (id), 0, auth_proc);
-}
-
-int
-NetIO::get_auth ()
-{
- user = &net_user;
- passwd = &net_passwd;
- return auth_common (hinstance, IDD_NET_AUTH);
-}
-
-int
-NetIO::get_proxy_auth ()
-{
- user = &net_proxy_user;
- passwd = &net_proxy_passwd;
- return auth_common (hinstance, IDD_PROXY_AUTH);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* This is the parent class for all the access methods known to setup
- (i.e. ways to download files from the internet or other sources */
-
-class NetIO {
-protected:
- NetIO (char *url);
- void set_url (char *url);
-
-public:
- /* if nonzero, this is the estimated total file size */
- int file_size;
- /* broken down url FYI */
- char *url;
- char *proto;
- char *host;
- int port;
- char *path;
- virtual ~NetIO ();
-
- /* The user calls this function to create a suitable accessor for
- the given URL. It uses the network setup state in state.h. If
- anything fails, either the return values is NULL or the returned
- object is !ok() */
- static NetIO * open (char *url);
-
- /* If !ok() that means the transfer isn't happening. */
- virtual int ok ();
-
- /* Read `nbytes' bytes from the file. Returns zero when the file
- is complete. */
- virtual int read (char *buf, int nbytes);
-
- /* Helper functions for http/ftp protocols. Both return nonzero for
- "cancel", zero for "ok". They set net_proxy_user, etc, in
- state.h */
- int get_auth ();
- int get_proxy_auth ();
-};
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to manage access to files stored on the
- local disk (i.e. "downloading" setup.ini). Called from netio.cc */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include "win32.h"
-#include "netio.h"
-#include "nio-file.h"
-#include "resource.h"
-#include "msg.h"
-
-NetIO_File::NetIO_File (char *Purl)
- : NetIO (Purl)
-{
- struct stat s;
- fd = fopen (path, "rb");
- if (fd)
- {
- stat (path, &s);
- file_size = s.st_size;
- }
- else
- {
- char *err = strerror (errno);
- if (!err)
- err = "(unknown error)";
- note (IDS_ERR_OPEN_READ, path, err);
- }
-}
-
-NetIO_File::~NetIO_File ()
-{
- if (fd)
- fclose ((FILE *)fd);
-}
-
-int
-NetIO_File::ok ()
-{
- return fd ? 1 : 0;
-}
-
-int
-NetIO_File::read (char *buf, int nbytes)
-{
- return fread (buf, 1, nbytes, (FILE *)fd);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* see nio-file.cc */
-
-class NetIO_File : public NetIO {
-public:
- NetIO_File (char *url);
- void *fd;
- ~NetIO_File ();
- virtual int ok ();
- virtual int read (char *buf, int nbytes);
-};
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* This file is responsible for implementing all direct FTP protocol
- channels. It is intentionally simplistic. */
-
-#include "win32.h"
-#include "winsock.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "resource.h"
-#include "state.h"
-#include "simpsock.h"
-#include "log.h"
-
-#include "netio.h"
-#include "nio-ftp.h"
-
-static SimpleSocket *cmd = 0;
-static char *cmd_host = 0;
-static int cmd_port = 0;
-
-static char *last_line;
-
-static int
-ftp_line (SimpleSocket *s)
-{
- do {
- last_line = s->gets ();
- log (LOG_BABBLE, "ftp > %s", last_line);
- } while (last_line && (!isdigit (last_line[0]) || last_line[3] != ' '));
- return atoi (last_line ? last_line : "0");
-}
-
-NetIO_FTP::NetIO_FTP (char *Purl)
- : NetIO (Purl)
-{
- s = 0;
- int code;
-
- if (port == 0)
- port = 21;
-
- if (cmd_host && strcmp (host, cmd_host) != 0 || port != cmd_port)
- {
- if (cmd)
- cmd->printf ("QUIT\r\n");
- delete cmd;
- free (cmd_host);
- cmd = 0;
- cmd_host = 0;
- }
-
- if (cmd == 0)
- {
- SimpleSocket *c = new SimpleSocket (host, port);
- code = ftp_line (c);
- c->printf ("USER anonymous\r\n");
- code = ftp_line (c);
- if (code == 331)
- {
- c->printf ("PASS cygwin-setup@\r\n");
- code = ftp_line (c);
- }
-
- if (code < 200 || code >= 300)
- {
- delete c;
- return;
- }
-
- cmd = c;
- cmd_host = _strdup (host);
- cmd_port = port;
-
- cmd->printf ("TYPE I\r\n");
- code = ftp_line (cmd);
- }
-
- cmd->printf ("PASV\r\n");
- do {
- code = ftp_line (cmd);
- } while (code == 226); /* previous RETR */
- if (code != 227)
- return;
-
- char *paren = strchr (last_line, '(');
- if (!paren)
- return;
-
- int i1, i2, i3, i4, p1, p2;
- sscanf (paren+1, "%d,%d,%d,%d,%d,%d", &i1, &i2, &i3, &i4, &p1, &p2);
- char tmp[20];
- sprintf (tmp, "%d.%d.%d.%d", i1, i2, i3, i4);
- s = new SimpleSocket (tmp, p1*256 + p2);
-
- cmd->printf ("RETR %s\r\n", path);
- code = ftp_line (cmd);
- if (code != 150)
- {
- delete s;
- s = 0;
- return;
- }
-}
-
-NetIO_FTP::~NetIO_FTP ()
-{
- if (s)
- delete s;
-}
-
-int
-NetIO_FTP::ok ()
-{
- if (s)
- return 1;
- return 0;
-}
-
-int
-NetIO_FTP::read (char *buf, int nbytes)
-{
- if (!s)
- return 0;
- return s->read (buf, nbytes);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Direct FTP (without proxy) */
-
-class SimpleSocket;
-
-class NetIO_FTP : public NetIO {
- SimpleSocket *s;
-
-public:
- NetIO_FTP (char *url);
- virtual ~NetIO_FTP ();
-
- /* If !ok() that means the transfer isn't happening. */
- virtual int ok ();
-
- /* Read `nbytes' bytes from the file. Returns zero when the file
- is complete. */
- virtual int read (char *buf, int nbytes);
-};
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* This file is responsible for implementing all direct HTTP protocol
- channels. It is intentionally simplistic. */
-
-#include "win32.h"
-#include "winsock.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "resource.h"
-#include "state.h"
-#include "simpsock.h"
-#include "msg.h"
-
-#include "netio.h"
-#include "nio-http.h"
-
-static char six2pr[64] = {
- 'A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z',
- '0','1','2','3','4','5','6','7','8','9','+','/'
-};
-
-static char *
-base64_encode (char *username, char *password)
-{
- unsigned char *ep;
- char *rp;
- static char *rv = 0;
- if (rv)
- free (rv);
- rv = (char *) malloc (2 * (strlen (username) + strlen (password)) + 5);
-
- char *up = (char *) malloc (strlen (username) + strlen (password) + 6);
- strcpy (up, username);
- strcat (up, ":");
- strcat (up, password);
- ep = (unsigned char *)up + strlen (up);
- *ep++ = 0;
- *ep++ = 0;
- *ep++ = 0;
-
- char block[4];
-
- rp = rv;
-
- for (ep = (unsigned char *)up; *ep; ep += 3)
- {
- block[0] = six2pr[ep[0] >> 2];
- block[1] = six2pr[((ep[0] << 4) & 0x30) | ((ep[1] >> 4) & 0x0f)];
- block[2] = six2pr[((ep[1] << 2) & 0x3c) | ((ep[2] >> 6) & 0x03)];
- block[3] = six2pr[ep[2] & 0x3f];
-
- if (ep[1] == 0)
- block[2] = block[3] = '=';
- if (ep[2] == 0)
- block[3] = '=';
- memcpy (rp, block, 4);
- rp += 4;
- }
- *rp = 0;
-
- free (up);
-
- return rv;
-}
-
-NetIO_HTTP::NetIO_HTTP (char *Purl)
- : NetIO (Purl)
-{
- retry_get:
- if (port == 0)
- port = 80;
-
- if (net_method == IDC_NET_PROXY)
- s = new SimpleSocket (net_proxy_host, net_proxy_port);
- else
- s = new SimpleSocket (host, port);
-
- if (!s->ok())
- {
- s = 0;
- return;
- }
-
- if (net_method == IDC_NET_PROXY)
- s->printf ("GET %s HTTP/1.0\r\n", url);
- else
- s->printf ("GET %s HTTP/1.0\r\n", path);
- s->printf ("Host: %s:%d\r\n", host, port);
-
- if (net_user && net_passwd)
- s->printf ("Authorization: Basic %s\r\n",
- base64_encode (net_user, net_passwd));
-
- if (net_proxy_user && net_proxy_passwd)
- s->printf ("Proxy-Authorization: Basic %s\r\n",
- base64_encode (net_proxy_user, net_proxy_passwd));
-
- s->printf ("\r\n");
-
- char *l = s->gets ();
- int code;
- sscanf (l, "%*s %d", &code);
- if (code >= 300 && code < 400)
- {
- do {
- l = s->gets ();
- if (_strnicmp (l, "Location:", 9) == 0)
- {
- char *u = l + 9;
- while (*u == ' ' || *u == '\t')
- u++;
- set_url (u);
- delete s;
- goto retry_get;
- }
- } while (*l);
- }
- if (code == 401) /* authorization required */
- {
- get_auth ();
- delete s;
- goto retry_get;
- }
- if (code == 407) /* proxy authorization required */
- {
- get_proxy_auth ();
- delete s;
- goto retry_get;
- }
- if (code >= 300)
- {
- delete s;
- s = 0;
- return;
- }
- do {
- l = s->gets ();
- if (_strnicmp (l, "Content-Length:", 15) == 0)
- sscanf (l, "%*s %d", &file_size);
- } while (*l);
-}
-
-NetIO_HTTP::~NetIO_HTTP ()
-{
- if (s)
- delete s;
-}
-
-int
-NetIO_HTTP::ok ()
-{
- if (s)
- return 1;
- return 0;
-}
-
-int
-NetIO_HTTP::read (char *buf, int nbytes)
-{
- return s->read (buf, nbytes);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Direct HTTP (with or without proxy) */
-
-class SimpleSocket;
-
-class NetIO_HTTP : public NetIO {
- SimpleSocket *s;
-
-public:
- NetIO_HTTP (char *url);
- virtual ~NetIO_HTTP ();
-
- /* If !ok() that means the transfer isn't happening. */
- virtual int ok ();
-
- /* Read `nbytes' bytes from the file. Returns zero when the file
- is complete. */
- virtual int read (char *buf, int nbytes);
-};
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to manage internet downloads using the
- Internet Explorer version 5 DLLs. To use this method, the user
- must already have installed and configured IE5. This module is
- called from netio.cc, which is called from geturl.cc */
-
-static char *cvsid = "\n%%% $Id: nio-ie5.cc,v 1.1.2.1 2000/12/11 22:01:41 andyp Exp $\n";
-
-#include "win32.h"
-
-#include "resource.h"
-#include "state.h"
-#include "dialog.h"
-#include "msg.h"
-#include "netio.h"
-#include "nio-ie5.h"
-
-static HINTERNET internet = 0;
-
-NetIO_IE5::NetIO_IE5 (char *_url)
- : NetIO (_url)
-{
- int resend = 0;
-
- if (internet == 0)
- {
- HINSTANCE h = LoadLibrary ("wininet.dll");
- if (!h)
- {
- note (IDS_WININET);
- connection = 0;
- return;
- }
- InternetAttemptConnect (0);
- internet = InternetOpen ("Cygwin Setup", INTERNET_OPEN_TYPE_PRECONFIG,
- NULL, NULL, 0);
- }
-
- DWORD flags =
- INTERNET_FLAG_DONT_CACHE |
- INTERNET_FLAG_KEEP_CONNECTION |
- INTERNET_FLAG_PRAGMA_NOCACHE |
- INTERNET_FLAG_RELOAD |
- INTERNET_FLAG_EXISTING_CONNECT |
- INTERNET_FLAG_PASSIVE;
-
- connection = InternetOpenUrl (internet, url, NULL, 0, flags, 0);
-
- try_again:
-
- if (net_user && net_passwd)
- {
- InternetSetOption (connection, INTERNET_OPTION_USERNAME,
- net_user, strlen (net_user));
- InternetSetOption (connection, INTERNET_OPTION_PASSWORD,
- net_passwd, strlen (net_passwd));
- }
-
- if (net_proxy_user && net_proxy_passwd)
- {
- InternetSetOption (connection, INTERNET_OPTION_PROXY_USERNAME,
- net_proxy_user, strlen (net_proxy_user));
- InternetSetOption (connection, INTERNET_OPTION_PROXY_PASSWORD,
- net_proxy_passwd, strlen (net_proxy_passwd));
- }
-
- if (resend)
- if (!HttpSendRequest (connection, 0, 0, 0, 0))
- connection = 0;
-
- if (!connection)
- {
- if (GetLastError () == ERROR_INTERNET_EXTENDED_ERROR)
- {
- char buf[2000];
- DWORD e, l=sizeof (buf);
- InternetGetLastResponseInfo (&e, buf, &l);
- MessageBox (0, buf, "Internet Error", 0);
- }
- }
-
- DWORD type, type_s;
- type_s = sizeof (type);
- InternetQueryOption (connection, INTERNET_OPTION_HANDLE_TYPE,
- &type, &type_s);
-
- switch (type)
- {
- case INTERNET_HANDLE_TYPE_HTTP_REQUEST:
- case INTERNET_HANDLE_TYPE_CONNECT_HTTP:
- type_s = sizeof (DWORD);
- if (HttpQueryInfo (connection,
- HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
- &type, &type_s, NULL))
- {
- if (type == 401) /* authorization required */
- {
- flush_io();
- get_auth ();
- resend = 1;
- goto try_again;
- }
- else if (type == 407) /* proxy authorization required */
- {
- flush_io();
- get_proxy_auth ();
- resend = 1;
- goto try_again;
- }
- else if (type >= 300)
- {
- connection = 0;
- return;
- }
- }
- }
-}
-
-void
-NetIO_IE5::flush_io ()
-{
- DWORD actual = 0;
- char buf[1024];
- do {
- InternetReadFile (connection, buf, 1024, &actual);
- } while (actual > 0);
-}
-
-NetIO_IE5::~NetIO_IE5 ()
-{
- if (connection)
- InternetCloseHandle (connection);
-}
-
-int
-NetIO_IE5::ok ()
-{
- return (connection == NULL) ? 0 : 1;
-}
-
-int
-NetIO_IE5::read (char *buf, int nbytes)
-{
- DWORD actual;
- if (InternetReadFile (connection, buf, nbytes, &actual))
- return actual;
- return -1;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* see nio-ie5.cc */
-
-class NetIO_IE5 : public NetIO {
- HINTERNET connection;
-public:
- NetIO_IE5 (char *url);
- ~NetIO_IE5 ();
- virtual int ok ();
- virtual int read (char *buf, int nbytes);
- void flush_io();
-};
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* This handles the "other URL" option from the mirror site
- selection. */
-
-#include "win32.h"
-#include <shlobj.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "dialog.h"
-#include "resource.h"
-#include "state.h"
-#include "msg.h"
-#include "log.h"
-
-/* private shared function, from site.cc */
-void save_site_url (void);
-
-static void
-check_if_enable_next (HWND h)
-{
- EnableWindow (GetDlgItem (h, IDOK), other_url ? 1 : 0);
-}
-
-static void
-load_dialog (HWND h)
-{
- eset (h, IDC_OTHER_URL, other_url);
- check_if_enable_next (h);
-}
-
-static void
-save_dialog (HWND h)
-{
- other_url = eget (h, IDC_OTHER_URL, other_url);
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_OTHER_URL:
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDOK:
- save_dialog (h);
- save_site_url ();
- NEXT (IDD_S_LOAD_INI);
- break;
-
- case IDC_BACK:
- save_dialog (h);
- NEXT (IDD_SITE);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-void
-do_other (HINSTANCE h)
-{
- int rv = 0;
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_OTHER_URL), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-
- log (0, "site: %s", other_url);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* I prefer building a cygwin version of setup for debugging, as I
- find that gdb can debug those programs (and the exceptions they
- cause) better. This file handles the slight differences between
- cygwin and mingw. */
-
-#if defined(__CYGWIN__) || defined (__CYGWIN32__)
-
-#define _MAX_PATH MAX_PATH
-
-#define _access access
-#define _strdup strdup
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to run all the post-install scripts
- in their various forms. */
-
-#include "win32.h"
-
-#include <io.h>
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef WIN32_NATIVE
-#include <unistd.h>
-#endif
-
-#include "state.h"
-#include "dialog.h"
-#include "find.h"
-#include "concat.h"
-#include "regedit.h"
-#include "reginfo.h"
-#include "resource.h"
-#include "port.h"
-
-static char *sh = 0;
-static char *cmd = 0;
-static OSVERSIONINFO verinfo;
-
-static void
-run (char *shscript, char *args, char *file)
-{
- BOOL b;
- char cmdline [_MAX_PATH];
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
-
- sprintf (cmdline, "%s %s %s", shscript, args, file);
- memset (&pi, 0, sizeof (pi));
- memset (&si, 0, sizeof (si));
- si.cb = sizeof (si);
- si.lpTitle = "XEmacs Setup Post-Install Script";
- si.dwFlags = STARTF_USEPOSITION;
-
- b = CreateProcess (0, cmdline, 0, 0, 0,
- CREATE_NEW_CONSOLE, 0, root_dir, &si, &pi);
-
- if (b)
- WaitForSingleObject (pi.hProcess, INFINITE);
-}
-
-static void
-each (char *fname, unsigned int size)
-{
- char *ext = strrchr (fname, '.');
- if (!ext)
- return;
-
- if (sh && strcmp (ext, ".sh") == 0)
- {
- char *f2 = concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, 0);
- run (sh, "-c", f2);
- free (f2);
- }
- else if (cmd && strcmp (ext, ".bat") == 0)
- {
- char *f2 = backslash (concat (root_dir, XEMACS_SETUP_DIR, "postinstall/",
- fname, 0));
- run (cmd, "/c", f2);
- free (f2);
- }
- else
- return;
-
- rename (concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, 0),
- concat (root_dir, XEMACS_SETUP_DIR, "postinstall/", fname, ".done", 0));
-}
-
-static char *shells [] = {
- "/bin/sh.exe",
- "/usr/bin/sh.exe",
- "/bin/bash.exe",
- "/usr/bin/bash.exe",
- 0
-};
-
-void
-do_postinstall (HINSTANCE h)
-{
- int issystem;
- next_dialog = 0;
- char* cygroot = find_cygwin_root (&issystem);
- int i;
-
- sh = 0;
-
- if (cygroot)
- {
- for (i=0; shells[i]; i++)
- {
- sh = backslash (concat (cygroot, shells[i], 0));
- if (_access (sh, 0) == 0)
- break;
- free (sh);
- sh = 0;
- }
- }
-
- char old_path[_MAX_PATH];
- GetEnvironmentVariable ("PATH", old_path, sizeof (old_path));
-#if 0
- SetEnvironmentVariable ("PATH",
- backslash (concat (root_dir, "/bin;",
- root_dir, "/usr/bin;",
- old_path, 0)));
-
- SetEnvironmentVariable ("CYGWINROOT", root_dir);
-#endif
- SetCurrentDirectory (root_dir);
-
- verinfo.dwOSVersionInfoSize = sizeof (verinfo);
- GetVersionEx (&verinfo);
-
- switch (verinfo.dwPlatformId)
- {
- case VER_PLATFORM_WIN32_NT:
- cmd = "cmd.exe";
- break;
- case VER_PLATFORM_WIN32_WINDOWS:
- cmd = "command.com";
- break;
- default:
- cmd = "command.com";
- break;
- }
-
- find (concat (root_dir, XEMACS_SETUP_DIR, "postinstall", 0), each);
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Manipulate the registry for XEmacs. */
-
-#include "win32.h"
-
-#include <stdio.h>
-#if defined(CYGWIN) || defined(MINGW)
-#include <cygwin/version.h>
-#include <sys/mount.h>
-#endif
-
-#include "reginfo.h"
-#include "regedit.h"
-#include "msg.h"
-#include "resource.h"
-#include "dialog.h"
-
-static char *
-find_cygwin_mount (HKEY rkey, int *istext)
-{
- char buf[1000];
- char *retval = 0;
- HKEY key;
- DWORD retvallen = 0;
- DWORD flags = 0;
- DWORD type;
-
-#if defined(CYGWIN) || defined(MINGW)
- sprintf (buf, "Software\\%s\\%s\\%s\\/",
- CYGWIN_INFO_CYGNUS_REGISTRY_NAME,
- CYGWIN_INFO_CYGWIN_REGISTRY_NAME,
- CYGWIN_INFO_CYGWIN_MOUNT_REGISTRY_NAME);
-
- if (RegOpenKeyEx (rkey, buf, 0, KEY_READ, &key) != ERROR_SUCCESS)
- return 0;
-
- if (RegQueryValueEx (key, "native", 0, &type, 0, &retvallen)
- == ERROR_SUCCESS)
- {
- retval = new char[retvallen+1];
- if (RegQueryValueEx (key, "native", 0, &type, (BYTE *)retval, &retvallen)
- != ERROR_SUCCESS)
- {
- delete retval;
- retval = 0;
- }
- }
-
- retvallen = sizeof (flags);
- RegQueryValueEx (key, "flags", 0, &type, (BYTE *)&flags, &retvallen);
-
- RegCloseKey (key);
-
- if (retval)
- *istext = (flags & MOUNT_BINARY) ? 0 : 1;
- return retval;
-#else
- return 0;
-#endif
-}
-
-static char *
-find_xemacs_root (HKEY rkey, int* isnative)
-{
- char buf[1000];
- char *retval = 0;
- HKEY key;
- DWORD retvallen = 0;
- DWORD type;
- DWORD itype;
-
- sprintf (buf, "Software\\%s\\%s",
- XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME,
- XEMACS_INFO_XEMACS_REGISTRY_NAME);
-
- if (RegOpenKeyEx (rkey, buf, 0, KEY_READ, &key) != ERROR_SUCCESS)
- return 0;
-
- if (RegQueryValueEx (key, XEMACS_INFO_XEMACS_ROOT_KEY,
- 0, &type, 0, &retvallen) == ERROR_SUCCESS)
- {
- retval = new char[retvallen+1];
- if (RegQueryValueEx (key, XEMACS_INFO_XEMACS_ROOT_KEY,
- 0, &type, (BYTE *)retval, &retvallen)
- != ERROR_SUCCESS)
- {
- delete retval;
- retval = 0;
- }
- }
-
- retvallen = sizeof (itype);
- RegQueryValueEx (key, XEMACS_INFO_XEMACS_ROOT_TYPE,
- 0, &type, (BYTE *)&itype, &retvallen);
-
- if (itype == 1)
- *isnative = 1;
- else
- *isnative = 0;
-
- RegCloseKey (key);
-
- return retval;
-}
-
-char *
-find_root_location (int *issystem, int *isnative)
-{
- char *rv;
- if ((rv = find_xemacs_root (HKEY_CURRENT_USER, isnative)))
- {
- *issystem = 0;
- return rv;
- }
- else if ((rv = find_xemacs_root (HKEY_LOCAL_MACHINE, isnative)))
- {
- *issystem = 1;
- return rv;
- }
- return 0;
-}
-
-char *
-find_cygwin_root (int *issystem)
-{
- char *rv;
- int istext;
- if ((rv = find_cygwin_mount (HKEY_CURRENT_USER, &istext)))
- {
- *issystem = 0;
- return rv;
- }
- else if ((rv = find_cygwin_mount (HKEY_LOCAL_MACHINE, &istext)))
- {
- *issystem = 1;
- return rv;
- }
- return 0;
-}
-
-void
-create_xemacs_root (char *path, int issystem, int isnative)
-{
- char buf[1000];
- HKEY key;
- DWORD disposition;
- DWORD itype = isnative ? 1 : 0;
-
- remove_xemacs_root ();
-
- sprintf (buf, "Software\\%s\\%s",
- XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME,
- XEMACS_INFO_XEMACS_REGISTRY_NAME);
-
- HKEY kr = issystem ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
- if (RegCreateKeyEx (kr, buf, 0, "XEmacs", 0, KEY_ALL_ACCESS,
- 0, &key, &disposition) != ERROR_SUCCESS)
- fatal ("create_xemacs_root");
-
- RegSetValueEx (key, XEMACS_INFO_XEMACS_ROOT_KEY,
- 0, REG_SZ, (BYTE *)path, strlen (path)+1);
- RegSetValueEx (key, XEMACS_INFO_XEMACS_ROOT_TYPE,
- 0, REG_DWORD, (BYTE *)&itype, sizeof (itype));
- // write out the package path
- sprintf (buf, "~\\.xemacs;%s\\site-packages;%s\\xemacs-packages",
- path, path);
- RegSetValueEx (key, XEMACS_INFO_XEMACS_PACKAGE_KEY,
- 0, REG_SZ, (BYTE *)buf, strlen (buf)+1);
-}
-
-void
-set_app_path (char *exe, char* path, int issystem)
-{
- char buf[1000];
- HKEY key;
- DWORD disposition;
-
- sprintf (buf, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\%s",
- exe);
-
- HKEY kr = issystem ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER;
- RegDeleteKey (kr, buf);
-
- if (RegCreateKeyEx (kr, buf, 0, "XEmacs", 0, KEY_ALL_ACCESS,
- 0, &key, &disposition) != ERROR_SUCCESS)
- fatal ("set_app_path");
-
- RegSetValueEx (key, "Path",
- 0, REG_SZ, (BYTE *)path, strlen (path)+1);
-}
-
-static void
-remove1 (HKEY rkey)
-{
- char buf[1000];
-
- sprintf (buf, "Software\\%s\\%s",
- XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME,
- XEMACS_INFO_XEMACS_REGISTRY_NAME);
-
- RegDeleteKey (rkey, buf);
-}
-
-void
-remove_xemacs_root ()
-{
- remove1 (HKEY_LOCAL_MACHINE);
- remove1 (HKEY_CURRENT_USER);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Finds the existing root point, or returns NULL. */
-
-char * find_root_location (int *issystem, int *isnative);
-char * find_cygwin_root (int *issystem);
-
-/* Similar to the mount and umount functions, but simplified */
-
-void create_xemacs_root (char *posix, int issystem, int isnative);
-void remove_xemacs_root ();
-void set_app_path (char *exe, char* path, int issystem);
-
+++ /dev/null
-/* reginfo.h -- XEmacs version numbers and accompanying documentation.
-
-Copyright (C) 2000 Andy Piper. */
-
-#define XEMACS_INFO_XEMACS_ORG_REGISTRY_NAME "GNU"
-#define XEMACS_INFO_XEMACS_REGISTRY_NAME "XEmacs"
-/* Keys */
-#define XEMACS_INFO_XEMACS_ROOT_KEY "emacs_dir"
-#define XEMACS_INFO_XEMACS_ROOT_TYPE "install_type"
-#define XEMACS_INFO_XEMACS_PACKAGE_KEY "EMACSPACKAGEPATH"
-#define XEMACS_INFO_XEMACS_VERSION_KEY "version"
-
-#define XEMACS_DEFAULT_ROOT "\\Program Files\\XEmacs"
-#define XEMACS_CYGWIN_DEFAULT_ROOT "\\usr\\local"
-
-#define XEMACS_SETUP_DIR \
- ((char*)(install_type == IDC_INSTALL_NATIVE ? "\\setup\\" : "/lib/xemacs/setup/"))
-#define XEMACS_RESOURCE_DIR \
- ((char*)(install_type == IDC_INSTALL_NATIVE ? "\\" : "/lib/xemacs/"))
-#define XEMACS_PACKAGE_DIR \
- ((char*)(install_type == IDC_INSTALL_NATIVE ? "\\xemacs-packages\\" \
- : "/lib/xemacs/xemacs-packages/"))
-#define XEMACS_NATIVE_ARCH_NAME "i386-pc-win32"
-#define XEMACS_CYGWIN_ARCH_NAME "i686-pc-cygwin32"
-
-/*
- * Installation hierarchy is:
- * C:\Program Files\XEmacs
- * \xemacs-packages
- * \etc
- * \info
- * \lib-src
- * \lisp
- * \man
- * \pkginfo
- * \site-packages
- * \mule-packages
- * \XEmacs-21.2
- * \i386-pc-win32
- * \etc
- * \info
- * \lisp
- * Or:
- * /usr/local/lib
- * /xemacs/xemacs-packages
- * /xemacs/site-packages
- * /xemacs/mule-packages
- * /xemacs-21.2
- * /i686-pc-cygwin32
- * /etc
- * /info
- * /lisp
- * /usr/local/bin/i686-pc-cygwin32
- */
-
-
+++ /dev/null
-//Microsoft Developer Studio generated resource script.\r
-//\r
-#include "resource.h"\r
-\r
-#define APSTUDIO_READONLY_SYMBOLS\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Generated from the TEXTINCLUDE 2 resource.\r
-//\r
-#define APSTUDIO_HIDDEN_SYMBOLS\r
-#include "windows.h"\r
-#undef APSTUDIO_HIDDEN_SYMBOLS\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-#undef APSTUDIO_READONLY_SYMBOLS\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// English (U.S.) resources\r
-\r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r
-#ifdef _WIN32\r
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
-#pragma code_page(1252)\r
-#endif //_WIN32\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Dialog\r
-//\r
-\r
-IDD_SOURCE DIALOG DISCARDABLE 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,176,45,15,WS_DISABLED\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "Setup will use the following installation method.",\r
- IDC_STATIC,112,11,170,17\r
- LTEXT "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
- 32,166,17\r
- CONTROL "Download from the Internet",IDC_SOURCE_DOWNLOAD,"Button",\r
- BS_AUTORADIOBUTTON,127,102,152,10\r
- CONTROL "Install from the Internet",IDC_SOURCE_NETINST,"Button",\r
- BS_AUTORADIOBUTTON,127,121,87,10\r
- CONTROL "Install from Local Directory",IDC_SOURCE_CWD,"Button",\r
- BS_AUTORADIOBUTTON,127,140,104,10\r
- GROUPBOX "Installation method",IDC_STATIC,113,84,188,77\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_LOCAL_DIR DIALOG DISCARDABLE 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "Local package directory"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,176,45,15,WS_DISABLED\r
- PUSHBUTTON "< Back",IDC_BACK,154,176,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- EDITTEXT IDC_LOCAL_DIR,120,138,122,12,ES_AUTOHSCROLL\r
- PUSHBUTTON "Browse...",IDC_LOCAL_DIR_BROWSE,252,137,38,14\r
- LTEXT "Setup will use the following folder to install XEmacs and / or packages from.",\r
- IDC_STATIC,112,10,170,17\r
- LTEXT "To select a different folder, click Browse and select another folder.",\r
- IDC_STATIC,112,36,170,18\r
- LTEXT "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
- 63,166,17\r
- GROUPBOX "Local Package Directory",IDC_STATIC,112,126,186,31\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_ROOT DIALOG DISCARDABLE 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,176,45,15\r
- PUSHBUTTON "< Back",IDC_BACK,154,176,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- EDITTEXT IDC_ROOT_DIR,120,138,122,12,ES_AUTOHSCROLL\r
- PUSHBUTTON "Browse...",IDC_ROOT_BROWSE,252,137,38,14\r
- LTEXT "Setup will use the following folder in which to install XEmacs and / or packages.",\r
- IDC_STATIC,112,10,170,17\r
- LTEXT "To select a different folder, click Browse and select another folder.",\r
- IDC_STATIC,112,35,170,18\r
- LTEXT "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
- 63,166,17\r
- GROUPBOX "Installation Root Directory",IDC_STATIC,112,126,186,31\r
- CONTROL "All",IDC_ROOT_SYSTEM,"Button",BS_AUTORADIOBUTTON | \r
- WS_GROUP,177,110,25,8\r
- CONTROL "Just Me",IDC_ROOT_USER,"Button",BS_AUTORADIOBUTTON,220,\r
- 110,50,8\r
- LTEXT "Installation Type :",IDC_STATIC,112,95,60,8\r
- LTEXT "Install For :",IDC_STATIC,112,110,43,8\r
- CONTROL "Native",IDC_INSTALL_NATIVE,"Button",BS_AUTORADIOBUTTON,\r
- 177,93,37,10\r
- CONTROL "Cygwin",IDC_INSTALL_CYGWIN,"Button",BS_AUTORADIOBUTTON,\r
- 220,93,39,10\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_SITE DIALOG DISCARDABLE 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,176,45,15\r
- PUSHBUTTON "< Back",IDC_BACK,154,176,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "Select Download Site",IDC_STATIC,113,11,135,11\r
- LISTBOX IDC_URL_LIST,121,24,179,136,LBS_NOINTEGRALHEIGHT | \r
- WS_VSCROLL | WS_HSCROLL | WS_TABSTOP\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_OTHER_URL DIALOG DISCARDABLE 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,176,45,15\r
- PUSHBUTTON "< Back",IDC_BACK,154,176,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- EDITTEXT IDC_OTHER_URL,120,138,170,12,ES_AUTOHSCROLL\r
- LTEXT "Setup will use the following URL to install XEmacs and / or packages from.",\r
- IDC_STATIC,112,10,170,17\r
- LTEXT "To select a different URL, edit the text.",IDC_STATIC,\r
- 112,36,170,18\r
- LTEXT "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
- 58,166,17\r
- GROUPBOX "Select URL to download from",IDC_STATIC,112,126,186,31\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_NET DIALOGEX 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,176,45,15\r
- PUSHBUTTON "< Back",IDC_BACK,154,176,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "Setup will use the following connection method.",\r
- IDC_STATIC,112,11,170,17\r
- LTEXT "To exit setup click Cancel at any time.",IDC_STATIC,112,\r
- 32,166,17\r
- CONTROL "Use IE5 Settings",IDC_NET_IE5,"Button",\r
- BS_AUTORADIOBUTTON,128,93,69,10\r
- CONTROL "Direct Connection",IDC_NET_DIRECT,"Button",\r
- BS_AUTORADIOBUTTON,128,109,73,10\r
- CONTROL "Use HTTP/FTP Proxy:",IDC_NET_PROXY,"Button",\r
- BS_AUTORADIOBUTTON,128,124,88,10\r
- EDITTEXT IDC_PROXY_HOST,128,141,80,12,ES_AUTOHSCROLL | \r
- WS_DISABLED\r
- LTEXT "Proxy",IDC_STATIC,10,55,50,15,SS_CENTERIMAGE,\r
- WS_EX_RIGHT\r
- LTEXT "Port",IDC_STATIC,229,139,20,15,SS_CENTERIMAGE,\r
- WS_EX_RIGHT\r
- EDITTEXT IDC_PROXY_PORT,257,141,30,12,ES_AUTOHSCROLL | \r
- WS_DISABLED\r
- GROUPBOX "Installation method",IDC_STATIC,113,78,188,83\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_DLSTATUS DIALOG DISCARDABLE 0, 0, 215, 95\r
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | \r
- WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- PUSHBUTTON "Cancel",IDCANCEL,165,75,45,15\r
- LTEXT "Downloading...",IDC_STATIC,55,15,135,8\r
- LTEXT "(URL)",IDC_DLS_URL,55,30,150,8\r
- LTEXT "(RATE)",IDC_DLS_RATE,55,45,155,8\r
- CONTROL "Progress1",IDC_DLS_PROGRESS,"msctls_progress32",\r
- PBS_SMOOTH | WS_BORDER,55,60,155,10\r
- ICON IDI_XEMACS,IDC_STATIC,5,5,20,20\r
-END\r
-\r
-IDD_INSTATUS DIALOG DISCARDABLE 0, 0, 215, 95\r
-STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE | \r
- WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- PUSHBUTTON "Cancel",IDCANCEL,165,75,45,15\r
- LTEXT "Installing...",IDC_INS_ACTION,55,5,135,8\r
- LTEXT "(PKG)",IDC_INS_PKG,55,15,150,8\r
- LTEXT "(FILE)",IDC_INS_FILE,55,25,155,8\r
- CONTROL "Progress1",IDC_INS_DISKFULL,"msctls_progress32",\r
- PBS_SMOOTH | WS_BORDER,55,60,155,10\r
- ICON IDI_XEMACS,IDC_STATIC,5,5,20,20\r
- CONTROL "Progress1",IDC_INS_IPROGRESS,"msctls_progress32",\r
- PBS_SMOOTH | WS_BORDER,55,50,155,10\r
- CONTROL "Progress1",IDC_INS_PPROGRESS,"msctls_progress32",\r
- PBS_SMOOTH | WS_BORDER,55,40,155,10\r
- RTEXT "Package",IDC_STATIC,5,40,45,8\r
- RTEXT "Total",IDC_STATIC,10,50,40,8\r
- RTEXT "Disk",IDC_STATIC,5,60,45,8\r
-END\r
-\r
-IDD_PROXY_AUTH DIALOG DISCARDABLE 0, 0, 215, 95\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- ICON IDI_XEMACS,IDC_STATIC,5,5,20,20\r
- EDITTEXT IDC_NET_USER,65,28,145,12,ES_AUTOHSCROLL\r
- LTEXT "Proxy User ID",IDC_STATIC,5,28,55,15,SS_CENTERIMAGE,\r
- WS_EX_RIGHT\r
- EDITTEXT IDC_NET_PASSWD,65,43,145,12,ES_PASSWORD | ES_AUTOHSCROLL\r
- LTEXT "Password",IDC_STATIC,10,43,50,15,SS_CENTERIMAGE,\r
- WS_EX_RIGHT\r
- LTEXT "Proxy Authorization Required",IDC_STATIC,65,10,145,10\r
- DEFPUSHBUTTON "OK",IDOK,100,75,45,15,WS_DISABLED\r
- PUSHBUTTON "Cancel",IDCANCEL,165,75,45,15\r
-END\r
-\r
-IDD_NET_AUTH DIALOG DISCARDABLE 0, 0, 215, 95\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- ICON IDI_XEMACS,IDC_STATIC,5,5,20,20\r
- EDITTEXT IDC_NET_USER,65,28,145,12,ES_AUTOHSCROLL\r
- LTEXT "User ID",IDC_STATIC,5,28,55,15,SS_CENTERIMAGE,\r
- WS_EX_RIGHT\r
- EDITTEXT IDC_NET_PASSWD,65,43,145,12,ES_PASSWORD | ES_AUTOHSCROLL\r
- LTEXT "Password",IDC_STATIC,10,43,50,15,SS_CENTERIMAGE,\r
- WS_EX_RIGHT\r
- LTEXT "Server Authorization Required",IDC_STATIC,65,10,145,10\r
- DEFPUSHBUTTON "OK",IDOK,100,75,45,15,WS_DISABLED\r
- PUSHBUTTON "Cancel",IDCANCEL,165,75,45,15\r
-END\r
-\r
-IDD_SPLASH DIALOGEX 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,176,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- ICON IDI_XEMACS,IDC_STATIC,107,10,20,20\r
- LTEXT "Welcome to the XEmacs Net Release Setup Program. This will install XEmacs and/or associated packages on your computer.",\r
- IDC_STATIC,133,10,158,29\r
- LTEXT "Version (unknown)",IDC_VERSION,112,117,120,10\r
- LTEXT "Copyright (C) 2000 Red Hat Inc",IDC_STATIC,111,132,135,\r
- 8\r
- LTEXT "http://www.xemacs.org/",IDC_STATIC,111,147,150,10\r
- LTEXT "It is strongly recommended that you exit all Windows programs before running this utility.",\r
- IDC_STATIC,110,43,191,19\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-IDD_CHOOSE DIALOG DISCARDABLE 0, 0, 311, 239\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Next >",IDOK,199,214,45,15\r
- PUSHBUTTON "< Back",IDC_BACK,154,214,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,214,45,15\r
- LTEXT "",IDC_STATIC,10,201,291,1,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "Select packages to install",IDC_STATIC,55,5,85,8\r
- ICON IDI_XEMACS,IDC_STATIC,5,5,21,20\r
- LTEXT "",IDC_LISTVIEW_POS,55,15,230,155,SS_SUNKEN | NOT \r
- WS_VISIBLE | NOT WS_GROUP\r
- CONTROL "SPIN",IDC_STATIC,"Static",SS_BITMAP,55,170,15,13\r
- LTEXT "= click to choose action, (p) = previous version, (x) = experimental",\r
- IDC_STATIC,65,170,220,8\r
- PUSHBUTTON "Full/Part",IDC_CHOOSE_FULLPART,250,5,35,10\r
- PUSHBUTTON "Exp",IDC_CHOOSE_EXP,215,5,25,10\r
- PUSHBUTTON "Curr",IDC_CHOOSE_CURR,190,5,25,10\r
- PUSHBUTTON "Prev",IDC_CHOOSE_PREV,165,5,25,10\r
-END\r
-\r
-IDD_DESKTOP DIALOG DISCARDABLE 0, 0, 311, 201\r
-STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU\r
-CAPTION "XEmacs Setup"\r
-FONT 8, "MS Sans Serif"\r
-BEGIN\r
- DEFPUSHBUTTON "Finish",IDOK,199,176,45,15\r
- PUSHBUTTON "< Back",IDC_BACK,154,176,45,15\r
- PUSHBUTTON "Cancel",IDCANCEL,256,176,45,15\r
- LTEXT "",IDC_STATIC,10,10,87,151,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "",IDC_STATIC,10,169,291,1,SS_SUNKEN | NOT WS_GROUP\r
- LTEXT "Setup has now finished. To create desktop shortcuts, please select from the following options.",\r
- IDC_STATIC,112,11,170,17\r
- LTEXT "To complete setup click Finish.",IDC_STATIC,112,32,166,\r
- 17\r
- CONTROL "Create Desktop Icon",IDC_ROOT_DESKTOP,"Button",\r
- BS_AUTOCHECKBOX,113,76,100,8\r
- CONTROL "Add to Start Menu",IDC_ROOT_MENU,"Button",\r
- BS_AUTOCHECKBOX,113,97,100,8\r
- CONTROL "GNU",IDC_STATIC,"Static",SS_BITMAP,19,36,69,62\r
-END\r
-\r
-\r
-#ifdef APSTUDIO_INVOKED\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// TEXTINCLUDE\r
-//\r
-\r
-1 TEXTINCLUDE DISCARDABLE \r
-BEGIN\r
- "resource.h\0"\r
-END\r
-\r
-2 TEXTINCLUDE DISCARDABLE \r
-BEGIN\r
- "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
- "#include ""windows.h""\r\n"\r
- "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"\r
- "\0"\r
-END\r
-\r
-3 TEXTINCLUDE DISCARDABLE \r
-BEGIN\r
- "\r\n"\r
- "\0"\r
-END\r
-\r
-#endif // APSTUDIO_INVOKED\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Icon\r
-//\r
-\r
-// Icon with lowest ID value placed first to ensure application icon\r
-// remains consistent on all systems.\r
-IDI_XEMACS ICON DISCARDABLE "xemacs.ico"\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// FILE\r
-//\r
-\r
-XEMACS.ICON FILE DISCARDABLE "xemacs.ico"\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// DESIGNINFO\r
-//\r
-\r
-#ifdef APSTUDIO_INVOKED\r
-GUIDELINES DESIGNINFO DISCARDABLE \r
-BEGIN\r
- IDD_SOURCE, DIALOG\r
- BEGIN\r
- VERTGUIDE, 113\r
- VERTGUIDE, 127\r
- END\r
-\r
- IDD_LOCAL_DIR, DIALOG\r
- BEGIN\r
- VERTGUIDE, 112\r
- HORZGUIDE, 10\r
- END\r
-\r
- IDD_ROOT, DIALOG\r
- BEGIN\r
- VERTGUIDE, 112\r
- HORZGUIDE, 103\r
- HORZGUIDE, 118\r
- END\r
-\r
- IDD_SITE, DIALOG\r
- BEGIN\r
- HORZGUIDE, 11\r
- HORZGUIDE, 161\r
- END\r
-\r
- IDD_NET, DIALOG\r
- BEGIN\r
- VERTGUIDE, 128\r
- BOTTOMMARGIN, 191\r
- HORZGUIDE, 153\r
- END\r
-\r
- IDD_PROXY_AUTH, DIALOG\r
- BEGIN\r
- BOTTOMMARGIN, 49\r
- END\r
-\r
- IDD_NET_AUTH, DIALOG\r
- BEGIN\r
- BOTTOMMARGIN, 49\r
- END\r
-\r
- IDD_SPLASH, DIALOG\r
- BEGIN\r
- LEFTMARGIN, 10\r
- RIGHTMARGIN, 301\r
- TOPMARGIN, 10\r
- BOTTOMMARGIN, 191\r
- END\r
-\r
- IDD_CHOOSE, DIALOG\r
- BEGIN\r
- BOTTOMMARGIN, 229\r
- HORZGUIDE, 214\r
- END\r
-\r
- IDD_DESKTOP, DIALOG\r
- BEGIN\r
- VERTGUIDE, 113\r
- END\r
-END\r
-#endif // APSTUDIO_INVOKED\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Bitmap\r
-//\r
-\r
-SPIN BITMAP DISCARDABLE "choose-spin.bmp"\r
-IDB_SPIN BITMAP DISCARDABLE "choose-spin.bmp"\r
-IDB_RTARROW BITMAP DISCARDABLE "choose-rtarrow.bmp"\r
-IDB_CHECK_YES BITMAP DISCARDABLE "check-yes.bmp"\r
-IDB_CHECK_NO BITMAP DISCARDABLE "check-no.bmp"\r
-IDB_CHECK_NA BITMAP DISCARDABLE "check-na.bmp"\r
-GNU BITMAP DISCARDABLE "gnu.bmp"\r
-IDB_GNU BITMAP DISCARDABLE "gnu.bmp"\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// String Table\r
-//\r
-\r
-STRINGTABLE DISCARDABLE \r
-BEGIN\r
- IDS_ROOT_SLASH "Warning: we recommend you do NOT use the root of your hard drive as the XEmacs root. Proceed anyway?"\r
- IDS_ROOT_SPACE "You should not choose a root path that include spaces in directory names. Proceed anyway?"\r
- IDS_MIRROR_LST "http://ftp.xemacs.org/pub/xemacs/mirrors.lst"\r
- IDS_DIALOG_FAILED "Unable to create Dialog Box"\r
- IDS_CYGWIN_FUNC_MISSING "Error: unable to find function `%s' in %s"\r
- IDS_DOWNLOAD_SHORT "Download error: %s too short (%d, wanted %d)"\r
- IDS_ERR_OPEN_WRITE "Can't open %s for writing: %s"\r
- IDS_SETUPINI_MISSING "Unable to get setup.ini from %s"\r
- IDS_OLD_SETUPINI "This setup.ini is older than the one you used last time you installed cygwin. Proceed anyway?"\r
- IDS_ERR_RENAME "Can't rename %s to %s: %s"\r
- IDS_NOTHING_INSTALLED "Nothing needed to be installed"\r
- IDS_INSTALL_COMPLETE "Installation Complete"\r
-END\r
-\r
-STRINGTABLE DISCARDABLE \r
-BEGIN\r
- IDS_ERR_OPEN_READ "Can't open %s for reading: %s"\r
- IDS_ROOT_ABSOLUTE "The install directory must be absolute, with both a drive letter and leading slash, like C:\\Cygwin"\r
- IDS_DOWNLOAD_COMPLETE "Download Complete"\r
- IDS_CVSID "\n%%% $Id: res.rc,v 1.1.2.3 2000/12/27 09:35:11 andyp Exp $\n"\r
- IDS_NOLOGFILE "Cannot open log file %s for writing"\r
- IDS_UNINSTALL_COMPLETE "Uninstalls complete."\r
- IDS_WININET "Unable to find or load the Internet Explorer 5 DLLs"\r
- IDS_ERR_CHDIR "Could not change dir to %s"\r
- IDS_OLD_SETUP_VERSION "This setup is version %s, but setup.ini claims version %s is available.\nYou might want to upgrade to get the latest features and bug fixes."\r
- IDS_DOWNLOAD_FAILED "Unable to download %s"\r
- IDS_DOWNLOAD_INCOMPLETE "Download Incomplete. Try again?"\r
- IDS_INSTALL_INCOMPLETE "Installation incomplete. Check /setup.log.full for details"\r
- IDS_ROOT_NOCYGWIN "You should not install the Cygwin version without Cygwin installed. Proceed anyway?"\r
-END\r
-\r
-#endif // English (U.S.) resources\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-// English (U.K.) resources\r
-\r
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)\r
-#ifdef _WIN32\r
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK\r
-#pragma code_page(1252)\r
-#endif //_WIN32\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Bitmap\r
-//\r
-\r
-#endif // English (U.K.) resources\r
-/////////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-\r
-#ifndef APSTUDIO_INVOKED\r
-/////////////////////////////////////////////////////////////////////////////\r
-//\r
-// Generated from the TEXTINCLUDE 3 resource.\r
-//\r
-\r
-\r
-/////////////////////////////////////////////////////////////////////////////\r
-#endif // not APSTUDIO_INVOKED\r
-\r
+++ /dev/null
-//{{NO_DEPENDENCIES}}\r
-// Microsoft Developer Studio generated include file.\r
-// Used by res.rc\r
-//\r
-#define IDS_ROOT_SLASH 1\r
-#define IDS_ROOT_SPACE 2\r
-#define IDS_CWD_NONEMPTY 3\r
-#define IDS_MIRROR_LST 6\r
-#define IDS_DIALOG_FAILED 7\r
-#define IDS_CYGWIN_FUNC_MISSING 8\r
-#define IDS_DOWNLOAD_SHORT 9\r
-#define IDS_ERR_OPEN_WRITE 10\r
-#define IDS_SETUPINI_MISSING 11\r
-#define IDS_OLD_SETUPINI 12\r
-#define IDS_ERR_RENAME 13\r
-#define IDS_NOTHING_INSTALLED 14\r
-#define IDS_INSTALL_COMPLETE 15\r
-#define IDS_ERR_OPEN_READ 16\r
-#define IDS_ROOT_ABSOLUTE 17\r
-#define IDS_DOWNLOAD_COMPLETE 18\r
-#define IDS_CVSID 19\r
-#define IDS_NOLOGFILE 20\r
-#define IDS_UNINSTALL_COMPLETE 21\r
-#define IDS_WININET 22\r
-#define IDS_ERR_CHDIR 23\r
-#define IDS_OLD_SETUP_VERSION 24\r
-#define IDS_DOWNLOAD_FAILED 25\r
-#define IDS_DOWNLOAD_INCOMPLETE 26\r
-#define IDS_INSTALL_INCOMPLETE 27\r
-#define IDS_ROOT_NOCYGWIN 28\r
-#define IDD_ROOT 101\r
-#define IDD_SOURCE 102\r
-#define IDD_OTHER_URL 103\r
-#define IDD_SITE 104\r
-#define IDD_NET 105\r
-#define IDD_DLSTATUS 106\r
-#define IDD_S_LOAD_INI 107\r
-#define IDD_S_FROM_CWD 108\r
-#define IDD_CHOOSE 109\r
-#define IDD_S_DOWNLOAD 110\r
-#define IDD_S_INSTALL 111\r
-#define IDD_INSTATUS 112\r
-#define IDD_DESKTOP 113\r
-#define IDD_PROXY_AUTH 114\r
-#define IDD_S_POSTINSTALL 115\r
-#define IDD_NET_AUTH 116\r
-#define IDD_SPLASH 117\r
-#define IDB_SPIN 118\r
-#define IDB_RTARROW 119\r
-#define IDI_SPIN 120\r
-#define IDI_XEMACS 121\r
-#define IDD_LOCAL_DIR 122\r
-#define IDB_CHECK_YES 123\r
-#define IDB_CHECK_NO 124\r
-#define IDB_CHECK_NA 125\r
-#define IDB_GNU 126\r
-#define IDC_SOURCE_DOWNLOAD 1000\r
-#define IDC_SOURCE_NETINST 1001\r
-#define IDC_SOURCE_CWD 1002\r
-#define IDC_ROOT_DIR 1003\r
-#define IDC_ROOT_BROWSE 1004\r
-#define IDC_ROOT_TEXT 1005\r
-#define IDC_ROOT_BINARY 1006\r
-#define IDC_URL_LIST 1007\r
-#define IDC_SITE_NEXT 1008\r
-#define IDC_BACK 1009\r
-#define IDC_OTHER_URL 1010\r
-#define IDC_NET_IE5 1011\r
-#define IDC_NET_DIRECT 1012\r
-#define IDC_NET_PROXY 1013\r
-#define IDC_PROXY_HOST 1014\r
-#define IDC_PROXY_PORT 1015\r
-#define IDC_PROXY_USER 1016\r
-#define IDC_DLS_PROGRESS 1019\r
-#define IDC_DLS_URL 1020\r
-#define IDC_DLS_RATE 1021\r
-#define IDC_INS_PKG 1022\r
-#define IDC_INS_FILE 1023\r
-#define IDC_INS_DISKFULL 1024\r
-#define IDC_INS_IPROGRESS 1025\r
-#define IDC_INS_PPROGRESS 1026\r
-#define IDC_ROOT_SYSTEM 1028\r
-#define IDC_ROOT_USER 1029\r
-#define IDC_NET_USER 1030\r
-#define IDC_NET_PASSWD 1031\r
-#define IDC_VERSION 1033\r
-#define IDC_LISTVIEW_POS 1034\r
-#define IDC_CHOOSE_FULLPART 1035\r
-#define IDC_CHOOSE_EXP 1036\r
-#define IDC_CHOOSE_CURR 1037\r
-#define IDC_CHOOSE_PREV 1038\r
-#define IDC_CHOOSE_LIST 1039\r
-#define IDC_INS_ACTION 1040\r
-#define IDC_ROOT_DESKTOP 1041\r
-#define IDC_ROOT_MENU 1042\r
-#define IDC_LOCAL_DIR_BROWSE 1043\r
-#define IDC_LOCAL_DIR 1044\r
-#define IDC_INSTALL_NATIVE 1045\r
-#define IDC_INSTALL_CYGWIN 1046\r
-#define IDC_STATIC -1\r
-\r
-// Next default values for new objects\r
-// \r
-#ifdef APSTUDIO_INVOKED\r
-#ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NO_MFC 1\r
-#define _APS_3D_CONTROLS 1\r
-#define _APS_NEXT_RESOURCE_VALUE 127\r
-#define _APS_NEXT_COMMAND_VALUE 40003\r
-#define _APS_NEXT_CONTROL_VALUE 1050\r
-#define _APS_NEXT_SYMED_VALUE 101\r
-#endif\r
-#endif\r
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to ask the user where they want the
- root of the installation to be, and to ask whether the user prefers
- text or binary mounts. */
-
-#include "win32.h"
-#include <shlobj.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-#include "dialog.h"
-#include "resource.h"
-#include "state.h"
-#include "msg.h"
-#include "regedit.h"
-#include "reginfo.h"
-#include "concat.h"
-#include "log.h"
-
-static int rb[] = { IDC_INSTALL_CYGWIN, IDC_INSTALL_NATIVE, 0 };
-static int su[] = { IDC_ROOT_SYSTEM, IDC_ROOT_USER, 0 };
-
-static void
-check_if_enable_next (HWND h)
-{
- EnableWindow (GetDlgItem (h, IDOK), install_type && root_dir && root_scope);
-}
-
-static void
-load_dialog (HWND h)
-{
- rbset (h, rb, install_type);
- rbset (h, su, root_scope);
- eset (h, IDC_ROOT_DIR, root_dir);
- check_if_enable_next (h);
-}
-
-static void
-save_dialog (HWND h)
-{
- install_type = rbget (h, rb);
- root_scope = rbget (h, su);
- char* new_root_dir = eget (h, IDC_ROOT_DIR, root_dir);
-
- if (!root_dir || strcmp (new_root_dir, root_dir) != 0)
- root_dir_default = 0;
-
- root_dir = new_root_dir;
-}
-
-/*
- * is_admin () determines whether or not the current user is a member of the
- * Administrators group. On Windows 9X, the current user is considered an
- * Administrator by definition.
- */
-
-static int
-is_admin ()
-{
- // Windows 9X users are considered Administrators by definition
- OSVERSIONINFO verinfo;
- verinfo.dwOSVersionInfoSize = sizeof (verinfo);
- GetVersionEx (&verinfo);
- if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
- return 1;
-
- // Get the process token for the current process
- HANDLE token;
- BOOL status = OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &token);
- if (!status)
- return 0;
-
- // Get the group token information
- UCHAR token_info[1024];
- PTOKEN_GROUPS groups = (PTOKEN_GROUPS) token_info;
- DWORD token_info_len = sizeof (token_info);
- status = GetTokenInformation (token, TokenGroups, token_info, token_info_len, &token_info_len);
- CloseHandle(token);
- if (!status)
- return 0;
-
- // Create the Administrators group SID
- PSID admin_sid;
- SID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_AUTHORITY;
- status = AllocateAndInitializeSid (&authority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &admin_sid);
- if (!status)
- return 0;
-
- // Check to see if the user is a member of the Administrators group
- status = 0;
- for (UINT i=0; i<groups->GroupCount; i++) {
- if (EqualSid(groups->Groups[i].Sid, admin_sid)) {
- status = 1;
- break;
- }
- }
-
- // Destroy the Administrators group SID
- FreeSid (admin_sid);
-
- // Return whether or not the user is a member of the Administrators group
- return status;
-}
-
-static void
-change_default_root (int id)
-{
- int issystem;
- char* cygroot = find_cygwin_root (&issystem);
- if (id == IDC_INSTALL_CYGWIN && cygroot)
- {
- root_dir = concat (cygroot, XEMACS_CYGWIN_DEFAULT_ROOT, 0);
- install_type = IDC_INSTALL_CYGWIN;
- }
- else if (id == IDC_INSTALL_NATIVE)
- {
- char windir[_MAX_PATH];
- GetWindowsDirectory (windir, sizeof (windir));
- windir[2] = 0;
- root_dir = concat (windir, XEMACS_DEFAULT_ROOT, 0);
- install_type = IDC_INSTALL_NATIVE;
- }
-}
-
-static void
-read_mount_table ()
-{
- int isnative, issystem;
- root_dir = find_root_location (&issystem, &isnative);
- if (root_dir)
- {
- if (isnative)
- install_type = IDC_INSTALL_NATIVE;
- else
- install_type = IDC_INSTALL_CYGWIN;
-
- if (issystem)
- root_scope = IDC_ROOT_SYSTEM;
- else
- root_scope = IDC_ROOT_USER;
- root_dir_default = 0;
- }
- else
- {
- change_default_root (IDC_INSTALL_NATIVE);
- root_scope = (is_admin()) ? IDC_ROOT_SYSTEM : IDC_ROOT_USER;
- root_dir_default = 1;
- }
-}
-
-static int CALLBACK
-browse_cb (HWND h, UINT m, LPARAM lp, LPARAM data)
-{
- switch (m)
- {
- case BFFM_INITIALIZED:
- if (root_dir)
- SendMessage (h, BFFM_SETSELECTION, TRUE, (LPARAM)root_dir);
- break;
- }
- return 0;
-}
-
-static void
-browse (HWND h)
-{
- BROWSEINFO bi;
- CHAR name[MAX_PATH];
- LPITEMIDLIST pidl;
- memset (&bi, 0, sizeof (bi));
- bi.hwndOwner = h;
- bi.pszDisplayName = name;
- bi.lpszTitle = "Select an installation root directory";
- bi.ulFlags = BIF_RETURNONLYFSDIRS;
- bi.lpfn = browse_cb;
- pidl = SHBrowseForFolder (&bi);
- if (pidl)
- {
- if (SHGetPathFromIDList (pidl, name))
- eset (h, IDC_ROOT_DIR, name);
- }
-}
-
-#define isslash(c) ((c) == '\\' || (c) == '/')
-
-static int
-directory_is_absolute ()
-{
- if (isalpha (root_dir[0])
- && root_dir[1] == ':'
- && (root_dir[2] == '\\' || root_dir[2] == '/'))
- return 1;
- return 0;
-}
-
-static int
-directory_is_rootdir ()
-{
- char *c;
- for (c = root_dir; *c; c++)
- if (isslash (c[0]) && c[1] && !isslash (c[1]))
- return 0;
- return 1;
-}
-
-static int
-cygwin_without_cygwin ()
-{
- int issystem;
- if (install_type == IDC_INSTALL_CYGWIN
- && !find_cygwin_root (&issystem))
- return 1;
- return 0;
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_ROOT_DIR:
- case IDC_ROOT_SYSTEM:
- case IDC_ROOT_USER:
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDC_INSTALL_NATIVE:
- case IDC_INSTALL_CYGWIN:
- if (root_dir_default)
- {
- change_default_root (id);
- eset (h, IDC_ROOT_DIR, root_dir);
- }
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDC_ROOT_BROWSE:
- browse (h);
- break;
-
- case IDOK:
- save_dialog (h);
-
- if (! directory_is_absolute ())
- {
- note (IDS_ROOT_ABSOLUTE);
- break;
- }
-
- if (directory_is_rootdir ())
- if (IDNO == yesno (IDS_ROOT_SLASH))
- break;
-
- if (cygwin_without_cygwin ())
- if (IDNO == yesno (IDS_ROOT_NOCYGWIN))
- break;
-
- create_xemacs_root (backslash (root_dir),
- root_scope == IDC_ROOT_SYSTEM ? 1 : 0,
- install_type == IDC_INSTALL_NATIVE ? 1 : 0);
-
- switch (source)
- {
- case IDC_SOURCE_NETINST:
- NEXT (IDD_NET);
- break;
- case IDC_SOURCE_CWD:
- NEXT (IDD_S_FROM_CWD);
- break;
- default:
- msg ("source is default? %d\n", source);
- NEXT (0);
- }
- break;
-
- case IDC_BACK:
- save_dialog (h);
- NEXT (IDD_LOCAL_DIR);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-void
-do_root (HINSTANCE h)
-{
- int rv = 0;
- read_mount_table ();
-
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_ROOT), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-
- log (0, "root: %s %s %s", root_dir,
- (install_type == IDC_INSTALL_NATIVE) ? "native" : "cygwin",
- (root_scope == IDC_ROOT_USER) ? "user" : "system");
-}
-
+++ /dev/null
-# Makefile for Microsoft NMAKE
-# Copyright (C) 1995 Board of Trustees, University of Illinois.
-# Copyright (C) 1995, 1996, 2000 Ben Wing.
-# Copyright (C) 1995 Sun Microsystems, Inc.
-# Copyright (C) 1998 Free Software Foundation, Inc.
-#
-# This file is part of XEmacs.
-#
-# XEmacs 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 2, or (at your option) any
-# later version.
-#
-# XEmacs 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 XEmacs; see the file COPYING. If not, write to
-# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-#
-# Synched up with: Not in FSF.
-#
-
-TARGETOS=BOTH
-APPVER=4.0
-!include "c:\Program Files\Microsoft Platform SDK\Include\win32.mak"
-
-default: all
-
-# APA: Since there seems to be no way to determine the directory where
-# xemacs.mak is located (from within nmake) we just insist on the user
-# to invoke nmake in the directory where xemacs.mak is.
-!if !exist("$(MAKEDIR)\setup.mak")
-!error Please run nmake from the directory of this makefile (xemacs\netinstall).
-!endif
-
-XEMACS=$(MAKEDIR)\..
-
-# Define a variable for the 'del' command to use
-DEL=-del
-
-# Configuration from nt subdirectory if needed
-
-!include "$(XEMACS)\nt\config.inc"
-
-OUTDIR = obj
-
-#
-# Compiler command echo control. Define VERBOSECC=1 to get verbose compilation.
-#
-!if !defined(VERBOSECC)
-VERBOSECC=0
-!endif
-!if $(VERBOSECC)
-cc=$(cc)
-!else
-cc=@$(cc)
-!endif
-
-!if $(DEBUG_XEMACS)
-cdebug=-Od -Gr -Zi -Zp8
-!else
-cdebug=-Oxsb2 -Oy- -G5rFs -Zi -Zp8
-!endif
-
-defines = -DWIN32_NATIVE -I$(ZLIBDIR) $(ZLIB_FLAGS)
-
-#
-# Object files
-#
-OBJS = \
- $(OUTDIR)\choose.obj \
- $(OUTDIR)\concat.obj \
- $(OUTDIR)\desktop.obj \
- $(OUTDIR)\dialog.obj \
- $(OUTDIR)\diskfull.obj \
- $(OUTDIR)\download.obj \
- $(OUTDIR)\find.obj \
- $(OUTDIR)\fromcwd.obj \
- $(OUTDIR)\geturl.obj \
- $(OUTDIR)\hash.obj \
- $(OUTDIR)\ini.obj \
- $(OUTDIR)\inilex.obj \
- $(OUTDIR)\iniparse.obj \
- $(OUTDIR)\install.obj \
- $(OUTDIR)\localdir.obj \
- $(OUTDIR)\log.obj \
- $(OUTDIR)\main.obj \
- $(OUTDIR)\mkdir.obj \
- $(OUTDIR)\mklink2.obj \
- $(OUTDIR)\regedit.obj \
- $(OUTDIR)\msg.obj \
- $(OUTDIR)\net.obj \
- $(OUTDIR)\netio.obj \
- $(OUTDIR)\nio-ie5.obj \
- $(OUTDIR)\nio-file.obj \
- $(OUTDIR)\nio-ftp.obj \
- $(OUTDIR)\nio-http.obj \
- $(OUTDIR)\other.obj \
- $(OUTDIR)\postinstall.obj \
-# $(OUTDIR)\res.obj \
- $(OUTDIR)\root.obj \
- $(OUTDIR)\simpsock.obj \
- $(OUTDIR)\site.obj \
- $(OUTDIR)\source.obj \
- $(OUTDIR)\splash.obj \
- $(OUTDIR)\state.obj \
- $(OUTDIR)\tar.obj \
- $(OUTDIR)\version.obj
-
-#
-# Libraries
-#
-LIBS = libcmt.lib $(olelibsmt) \
- kernel32.lib shell32.lib \
- wsock32.lib netapi32.lib \
- wininet.lib $(zlib)
-
-# Rules
-
-.SUFFIXES:
-.SUFFIXES: .c .cc .obj .texi .info
-
-# nmake rule
-.cc{$(OUTDIR)}.obj:
- $(cc) /TP $(cflags) $(cdebug) $(cvarsmt) $(defines) -Fo$@ $<
-.c{$(OUTDIR)}.obj:
- $(cc) $(cflags) $(cdebug) $(cvarsmt) $(defines) -Fo$@ $<
-
-#
-# Main target
-#
-all: setup.exe
-
-#
-# Link target. setargv.obj is provided in the compiler library directory.
-#
-setup.exe: $(OUTDIR) $(OBJS) res.res
- $(link) /OUT:$@ $(ldebug) $(guilflags) $(OBJS) res.res $(LIBS)
-
-iniparse.c iniparse.h : iniparse.y
- bison -d -o iniparse.c $(srcdir)/iniparse.y
-
-$(OUTDIR)\inilex.obj: iniparse.h
-
-inilex.c : inilex.l iniparse.h
- flex -t $(srcdir)/inilex.l | sed "/^extern int isatty YY/d" > inilex.c
-
-version.c : $(srcdir)/ChangeLog version.pl
- perl version.pl < ChangeLog > version.c
-
-res.res: res.rc
- $(rc) $(rcvars) $(rcflags) /fo$@ $**
-
-$(OUTDIR):
- -@mkdir $(OUTDIR)
-
-install:: all
-
-clean::
- $(DEL) $(OUTDIR)\*.obj *.pdb *.aps res.res lex.yy.c
-
-distclean:: clean
- $(DEL) *~ setup.exe
-
-# DO NOT DELETE
-
-$(OUTDIR)/autoload.obj: autoload.c win32.h
-$(OUTDIR)/inilex.obj: inilex.c win32.h ini.h iniparse.h \
-
-$(OUTDIR)/iniparse.obj: iniparse.c ini.h iniparse.h port.h
-$(OUTDIR)/inilex.obj: inilex.c win32.h ini.h iniparse.h
-$(OUTDIR)/mklink2.obj: mklink2.c win32.h
-$(OUTDIR)/choose.obj: choose.cc win32.h dialog.h resource.h \
- state.h ini.h concat.h msg.h log.h find.h reginfo.h
-$(OUTDIR)/concat.obj: concat.cc win32.h
-$(OUTDIR)/desktop.obj: desktop.cc win32.h \
- resource.h ini.h msg.h state.h \
- concat.h mkdir.h dialog.h version.h reginfo.h regedit.h port.h
-$(OUTDIR)/dialog.obj: dialog.cc win32.h dialog.h msg.h log.h \
- win32.h
-$(OUTDIR)/diskfull.obj: diskfull.cc diskfull.h
-$(OUTDIR)/download.obj: download.cc win32.h resource.h msg.h \
- ini.h dialog.h concat.h geturl.h state.h mkdir.h log.h
-$(OUTDIR)/find.obj: find.cc win32.h port.h
-$(OUTDIR)/fromcwd.obj: fromcwd.cc win32.h \
- ini.h resource.h concat.h \
- state.h dialog.h msg.h find.h version.h port.h
-$(OUTDIR)/geturl.obj: geturl.cc win32.h dialog.h geturl.h \
- resource.h netio.h msg.h log.h
-$(OUTDIR)/hash.obj: hash.cc win32.h hash.h
-$(OUTDIR)/ini.obj: ini.cc win32.h ini.h resource.h concat.h \
- state.h geturl.h dialog.h msg.h mkdir.h log.h reginfo.h version.h
-$(OUTDIR)/install.obj: install.cc win32.h \
- $(ZLIBDIR)/zlib.h $(ZLIBDIR)/zconf.h \
- resource.h ini.h dialog.h concat.h geturl.h mkdir.h state.h tar.h \
- diskfull.h msg.h regedit.h reginfo.h log.h hash.h port.h
-$(OUTDIR)/localdir.obj: localdir.cc win32.h dialog.h resource.h \
- state.h msg.h concat.h log.h
-$(OUTDIR)/log.obj: log.cc win32.h resource.h msg.h log.h dialog.h \
- state.h concat.h mkdir.h
-$(OUTDIR)/main.obj: main.cc win32.h resource.h dialog.h state.h \
- msg.h netio.h find.h log.h port.h
-$(OUTDIR)/mkdir.obj: mkdir.cc win32.h mkdir.h
-$(OUTDIR)/msg.obj: msg.cc win32.h dialog.h log.h
-$(OUTDIR)/net.obj: net.cc win32.h dialog.h resource.h state.h \
- msg.h log.h
-$(OUTDIR)/netio.obj: netio.cc win32.h resource.h state.h msg.h \
- netio.h nio-file.h nio-ie5.h nio-http.h nio-ftp.h dialog.h log.h port.h \
- win32.h
-$(OUTDIR)/nio-file.obj: nio-file.cc netio.h nio-file.h resource.h \
- msg.h
-$(OUTDIR)/nio-ftp.obj: nio-ftp.cc win32.h resource.h state.h \
- simpsock.h log.h netio.h nio-ftp.h
-$(OUTDIR)/nio-http.obj: nio-http.cc win32.h resource.h state.h \
- simpsock.h msg.h netio.h nio-http.h
-$(OUTDIR)/nio-ie5.obj: nio-ie5.cc win32.h resource.h state.h \
- dialog.h msg.h netio.h nio-ie5.h
-$(OUTDIR)/other.obj: other.cc win32.h dialog.h resource.h state.h \
- msg.h log.h
-$(OUTDIR)/postinstall.obj: postinstall.cc win32.h \
- state.h dialog.h find.h \
- concat.h regedit.h reginfo.h resource.h port.h
-$(OUTDIR)/regedit.obj: regedit.cc win32.h reginfo.h regedit.h \
- msg.h resource.h dialog.h
-$(OUTDIR)/root.obj: root.cc win32.h dialog.h resource.h state.h \
- msg.h regedit.h reginfo.h concat.h log.h
-$(OUTDIR)/simpsock.obj: simpsock.cc win32.h simpsock.h msg.h \
- win32.h
-$(OUTDIR)/site.obj: site.cc dialog.h resource.h state.h geturl.h \
- msg.h concat.h regedit.h reginfo.h log.h port.h
-$(OUTDIR)/source.obj: source.cc win32.h dialog.h resource.h \
- state.h msg.h log.h
-$(OUTDIR)/splash.obj: splash.cc win32.h dialog.h resource.h msg.h \
- version.h
-$(OUTDIR)/state.obj: state.cc state.h
-$(OUTDIR)/tar.obj: tar.cc win32.h \
- $(ZLIBDIR)/zlib.h $(ZLIBDIR)/zconf.h \
- tar.h mkdir.h log.h port.h
-
-#\f
-# Local Variables:
-# mode: makefile
-# End:
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Simplified socket access functions */
-
-#include "win32.h"
-#include <winsock.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#include "simpsock.h"
-#include "msg.h"
-
-#define SSBUFSZ 1024
-
-SimpleSocket::SimpleSocket (char *hostname, int port)
-{
- static int initted = 0;
- if (!initted)
- {
- initted = 1;
- WSADATA d;
- WSAStartup (MAKEWORD (1,1), &d);
- }
-
- s = INVALID_SOCKET;
- buf = (char *) malloc (SSBUFSZ + 3);
- putp = getp = 0;
-
- int i1, i2, i3, i4;
- unsigned char ip[4];
-
- if (sscanf (hostname, "%d.%d.%d.%d", &i1, &i2, &i3, &i4) == 4)
- {
- ip[0] = i1;
- ip[1] = i2;
- ip[2] = i3;
- ip[3] = i4;
- }
- else
- {
- struct hostent *he;
- he = gethostbyname (hostname);
- if (!he)
- {
- msg ("Can't resolve `%s'\n", hostname);
- return;
- }
- memcpy (ip, he->h_addr_list[0], 4);
- }
-
- s = socket (AF_INET, SOCK_STREAM, 0);
- if (s == INVALID_SOCKET)
- {
- msg ("Can't create socket, %d", WSAGetLastError ());
- return;
- }
-
- struct sockaddr_in name;
-
- memset (&name, 0, sizeof (name));
- name.sin_family = AF_INET;
- name.sin_port = htons (port);
- memcpy (&name.sin_addr, ip, 4);
-
- if (connect (s, (sockaddr *)&name, sizeof(name)))
- {
- msg ("Can't connect to %s:%d", hostname, port);
- closesocket (s);
- s = INVALID_SOCKET;
- return;
- }
-
- return;
-}
-
-SimpleSocket::~SimpleSocket ()
-{
- if (s != INVALID_SOCKET)
- closesocket (s);
- s = INVALID_SOCKET;
- if (buf)
- free (buf);
- buf = 0;
-}
-
-int
-SimpleSocket::ok ()
-{
- if (s == INVALID_SOCKET)
- return 0;
- return 1;
-}
-
-int
-SimpleSocket::printf (char *fmt, ...)
-{
- char localbuf[SSBUFSZ];
- va_list args;
- va_start (args, fmt);
- vsprintf (localbuf, fmt, args);
- return send (s, localbuf, strlen (localbuf), 0);
-}
-
-int
-SimpleSocket::write (char *localbuf, int len)
-{
- return send (s, localbuf, len, 0);
-}
-
-int
-SimpleSocket::fill ()
-{
- if (putp == getp)
- putp = getp = 0;
-
- int n = SSBUFSZ - putp;
- if (n == 0)
- return 0;
- int r = recv (s, buf + putp, n, 0);
- if (r > 0)
- {
- putp += r;
- return r;
- }
- return 0;
-}
-
-char *
-SimpleSocket::gets ()
-{
- if (getp > 0 && putp > getp)
- {
- memmove (buf, buf+getp, putp-getp);
- putp -= getp;
- getp = 0;
- }
- if (putp == getp)
- fill();
-
- // getp is zero, always, here, and putp is the count
- char *nl;
- while ((nl = (char *)memchr (buf, '\n', putp)) == NULL && putp < SSBUFSZ)
- if (fill () <= 0)
- break;
-
- if (nl)
- {
- getp = nl - buf + 1;
- while ((*nl == '\n' || *nl == '\r') && nl >= buf)
- *nl-- = 0;
- }
- else
- {
- getp = putp;
- nl = buf + putp;
- nl[1] = 0;
- }
-
- return buf;
-}
-
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-
-int
-SimpleSocket::read (char *ubuf, int ulen)
-{
- int n, rv=0;
- if (putp > getp)
- {
- n = MIN (ulen, putp-getp);
- memmove (ubuf, buf+getp, n);
- getp += n;
- ubuf += n;
- ulen -= n;
- rv += n;
- }
- while (ulen > 0)
- {
- n = recv (s, ubuf, ulen, 0);
- if (n <= 0)
- return rv;
- ubuf += n;
- ulen -= n;
- rv += n;
- }
- return rv;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Simplified socket access functions */
-
-class SimpleSocket {
-
- SOCKET s;
- char *buf;
- int putp, getp;
- int fill ();
-
- public:
- SimpleSocket (char *hostname, int port);
- ~SimpleSocket ();
-
- int ok ();
-
- int printf (char *fmt, ...);
- int write (char *buf, int len);
-
- char *gets ();
- int read (char *buf, int len);
-};
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to get the list of mirror sites and ask
- the user which mirror site they want to download from. */
-
-#include "win32.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "dialog.h"
-#include "resource.h"
-#include "state.h"
-#include "geturl.h"
-#include "msg.h"
-#include "concat.h"
-#include "regedit.h"
-#include "reginfo.h"
-#include "log.h"
-
-#include "port.h"
-
-#define NO_IDX (-1)
-#define OTHER_IDX (-2)
-
-typedef struct {
- char *url;
- char *displayed_url;
- char *sort_key;
-} site_list_type;
-
-static site_list_type *site_list = 0;
-static int list_idx = NO_IDX;
-static int mirror_idx = NO_IDX;
-
-static void
-check_if_enable_next (HWND h)
-{
- EnableWindow (GetDlgItem (h, IDOK), (mirror_idx != NO_IDX) ? 1 : 0);
-}
-
-static void
-load_dialog (HWND h)
-{
- HWND listbox = GetDlgItem (h, IDC_URL_LIST);
- SendMessage (listbox, LB_SETCURSEL, list_idx, 0);
- check_if_enable_next (h);
-}
-
-static void
-save_dialog (HWND h)
-{
- HWND listbox = GetDlgItem (h, IDC_URL_LIST);
- list_idx = SendMessage (listbox, LB_GETCURSEL, 0, 0);
- if (list_idx == LB_ERR)
- {
- mirror_site = 0;
- mirror_idx = NO_IDX;
- list_idx = NO_IDX;
- }
- else
- {
- mirror_idx = SendMessage (listbox, LB_GETITEMDATA, list_idx, 0);
- if (mirror_idx == OTHER_IDX)
- mirror_site = 0;
- else
- mirror_site = site_list[mirror_idx].url;
- }
-}
-
-static void
-get_root_dir ()
-{
- int issystem, isnative;
- if (root_dir)
- return;
- root_dir = find_root_location (&issystem, &isnative);
-}
-
-void
-save_site_url ()
-{
- if (! MIRROR_SITE)
- return;
-
- get_root_dir ();
- if (! root_dir)
- return;
-
- FILE *f = fopen (concat (root_dir, XEMACS_SETUP_DIR, "last-mirror", 0), "wb");
- if (!f)
- return;
- fprintf (f, "%s\n", MIRROR_SITE);
- fclose (f);
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_URL_LIST:
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDOK:
- save_dialog (h);
- if (mirror_idx == OTHER_IDX)
- NEXT (IDD_OTHER_URL);
- else
- {
- other_url = 0;
- save_site_url ();
- NEXT (IDD_S_LOAD_INI);
- }
- break;
-
- case IDC_BACK:
- save_dialog (h);
- NEXT (IDD_NET);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- int i, j;
- HWND listbox;
- switch (message)
- {
- case WM_INITDIALOG:
- listbox = GetDlgItem (h, IDC_URL_LIST);
- for (i=0; site_list[i].url; i++)
- {
- j = SendMessage (listbox, LB_ADDSTRING, 0, (LPARAM)site_list[i].displayed_url);
- SendMessage (listbox, LB_SETITEMDATA, j, i);
- }
- j = SendMessage (listbox, LB_ADDSTRING, 0, (LPARAM)"Other URL");
- SendMessage (listbox, LB_SETITEMDATA, j, OTHER_IDX);
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-static int CDECL
-site_sort (const void *va, const void *vb)
-{
- site_list_type *a = (site_list_type *)va;
- site_list_type *b = (site_list_type *)vb;
- return strcmp (a->sort_key, b->sort_key);
-}
-
-static int
-get_site_list (HINSTANCE h)
-{
- char mirror_url[1000];
- if (LoadString (h, IDS_MIRROR_LST, mirror_url, sizeof (mirror_url)) <= 0)
- return 1;
- char *mirrors = get_url_to_string (mirror_url);
- dismiss_url_status_dialog ();
- if (!mirrors)
- return 1;
-
- char *bol, *eol, *nl;
-
-
- /* null plus account for possibly missing NL plus account for "Other
- URL" from previous run. */
- int nmirrors = 3;
-
- for (bol=mirrors; *bol; bol++)
- if (*bol == '\n')
- nmirrors ++;
-
- site_list = (site_list_type *) malloc (nmirrors * sizeof (site_list_type));
- nmirrors = 0;
-
- nl = mirrors;
- while (*nl)
- {
- bol = nl;
- for (eol = bol; *eol && *eol != '\n'; eol++) ;
- if (*eol)
- nl = eol+1;
- else
- nl = eol;
- while (eol > bol && eol[-1] == '\r')
- eol--;
- *eol = 0;
- if (bol[0] != '#' && bol[0] > ' ')
- {
- char *semi = strchr (bol, ';');
- if (semi)
- *semi = 0;
- site_list[nmirrors].url = _strdup (bol);
- site_list[nmirrors].displayed_url = _strdup (bol);
- char *dot = strchr (site_list[nmirrors].displayed_url, '.');
- if (dot)
- {
- dot = strchr (dot, '/');
- if (dot)
- *dot = 0;
- }
- site_list[nmirrors].sort_key = (char *) malloc (2*strlen (bol) + 3);
-
- dot = site_list[nmirrors].displayed_url;
- dot += strlen (dot);
- char *dp = site_list[nmirrors].sort_key;
- while (dot != site_list[nmirrors].displayed_url)
- {
- if (*dot == '.' || *dot == '/')
- {
- char *sp;
- if (dot[3] == 0)
- *dp++ = '~'; /* sort .com/.edu/.org together */
- for (sp=dot+1; *sp && *sp != '.' && *sp != '/';)
- *dp++ = *sp++;
- *dp++ = ' ';
- }
- dot--;
- }
- *dp++ = ' ';
- strcpy (dp, site_list[nmirrors].displayed_url);
-
- nmirrors++;
- }
- }
- site_list[nmirrors].url = 0;
-
- qsort (site_list, nmirrors, sizeof (site_list_type), site_sort);
-
- return 0;
-}
-
-/* List of machines that should not be used by default when saved
- in "last-mirror". */
-#define NOSAVE1 "ftp://ftp.xemacs.org/"
-#define NOSAVE1_LEN (sizeof ("ftp://ftp.xemacs.org/") - 1)
-
-static void
-get_initial_list_idx ()
-{
- get_root_dir ();
- if (! root_dir)
- return;
-
- FILE *f = fopen (concat (root_dir, XEMACS_SETUP_DIR, "last-mirror", 0), "rt");
- if (!f)
- return;
-
- char site[1000];
- site[0]='\0';
- char * fg_ret = fgets (site, 1000, f);
- fclose (f);
- if (! fg_ret)
- return;
-
- char *eos = site + strlen (site) - 1;
- while (eos >= site && (*eos == '\n' || *eos == '\r'))
- *eos-- = '\0';
-
- if (eos < site)
- return;
-
- int i;
- for (i = 0; site_list[i].url; i++)
- if (strcmp (site_list[i].url, site) == 0)
- break;
-
- if (! site_list[i].url)
- {
- /* Don't default to certain machines ever since they suffer
- from bandwidth limitations. */
- if (strnicmp (site, NOSAVE1, NOSAVE1_LEN) == 0)
- return;
- site_list[i].displayed_url =
- site_list[i].url = _strdup (site);
- site_list[i+1].url = 0;
- }
-
- mirror_idx = list_idx = i;
-}
-
-void
-do_site (HINSTANCE h)
-{
- int rv = 0;
-
- if (site_list == 0)
- if (get_site_list (h))
- {
- NEXT (IDD_NET);
- return;
- }
-
- get_initial_list_idx ();
-
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_SITE), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-
- if (mirror_idx != OTHER_IDX)
- log (0, "site: %s", mirror_site);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to manage the dialog box that lets the
- user choose the source of the install - from the net, from the
- current directory, or to just download files. */
-
-#include "win32.h"
-#include <stdio.h>
-#include "dialog.h"
-#include "resource.h"
-#include "state.h"
-#include "msg.h"
-#include "log.h"
-
-static int rb[] = { IDC_SOURCE_DOWNLOAD, IDC_SOURCE_NETINST, IDC_SOURCE_CWD, 0 };
-
-static void
-check_if_enable_next (HWND h)
-{
- EnableWindow (GetDlgItem (h, IDOK), source ? 1 : 0);
-}
-
-static void
-load_dialog (HWND h)
-{
- rbset (h, rb, source);
- check_if_enable_next (h);
-}
-
-static void
-save_dialog (HWND h)
-{
- source = rbget (h, rb);
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDC_SOURCE_DOWNLOAD:
- case IDC_SOURCE_NETINST:
- case IDC_SOURCE_CWD:
- save_dialog (h);
- check_if_enable_next (h);
- break;
-
- case IDOK:
- save_dialog (h);
- NEXT (IDD_LOCAL_DIR);
- break;
-
- case IDC_BACK:
- save_dialog (h);
- NEXT (0);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-void
-do_source (HINSTANCE h)
-{
- int rv = 0;
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_SOURCE), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-
- log (0, "source: %s",
- (source == IDC_SOURCE_DOWNLOAD) ? "download" :
- (source == IDC_SOURCE_NETINST) ? "network install" : "from cwd");
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to display the program name, version,
- copyright notice, and project URL. */
-
-#include "win32.h"
-#include <stdio.h>
-#include "dialog.h"
-#include "resource.h"
-#include "msg.h"
-#include "version.h"
-
-static void
-load_dialog (HWND h)
-{
- char buffer[100];
- HWND v = GetDlgItem (h, IDC_VERSION);
- sprintf (buffer, "Setup.exe version %s",
- version[0] ? version : "[unknown]");
- SetWindowText (v, buffer);
-}
-
-static BOOL
-dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
-{
- switch (id)
- {
-
- case IDOK:
- NEXT (IDD_SOURCE);
- break;
-
- case IDCANCEL:
- NEXT (0);
- break;
- }
- return FALSE;
-}
-
-static BOOL CALLBACK
-dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- load_dialog (h);
- return FALSE;
- case WM_COMMAND:
- return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
- }
- return FALSE;
-}
-
-void
-do_splash (HINSTANCE h)
-{
- int rv = 0;
- HANDLE gnu = LoadImage (h, MAKEINTRESOURCE (IDB_GNU), IMAGE_BITMAP, 0, 0, 0);
- rv = DialogBox (h, MAKEINTRESOURCE (IDD_SPLASH), 0, dialog_proc);
- if (rv == -1)
- fatal (IDS_DIALOG_FAILED);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* All we do here is instantiate the extern'd variables from state.h */
-
-#define extern
-#include "state.h"
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to contain all the global variables
- that define the "state" of the install, that is, all the
- information that the user has provided so far. These are set by
- the various dialogs and used by the various actions. */
-
-extern int source;
-
-extern char * local_dir;
-
-extern char * root_dir;
-extern int root_dir_default;
-extern int install_type;
-extern int root_scope;
-extern int root_menu;
-extern int root_desktop;
-
-extern int net_method;
-extern char * net_proxy_host;
-extern int net_proxy_port;
-
-extern char * net_user;
-extern char * net_passwd;
-extern char * net_proxy_user;
-extern char * net_proxy_passwd;
-
-extern char * mirror_site;
-extern char * other_url;
-
-extern int trust_level;
-
-#define MIRROR_SITE (mirror_site ? mirror_site : other_url)
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* Built-in tar functionality. See tar.h for usage. */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "win32.h"
-#include <zlib.h>
-#include "tar.h"
-#include "mkdir.h"
-#include "log.h"
-
-#include "port.h"
-
-#if defined(CYGWIN) || defined(MINGW)
-#define FACTOR (0x19db1ded53ea710LL)
-#define NSPERSEC 10000000LL
-#else
-__int64 FACTOR=0x19db1ded53ea710L;
-__int64 NSPERSEC=10000000L;
-#endif
-#define SYMLINK_COOKIE "!<symlink>"
-
-typedef struct {
- char name[100]; /* 0 */
- char mode[8]; /* 100 */
- char uid[8]; /* 108 */
- char gid[8]; /* 116 */
- char size[12]; /* 124 */
- char mtime[12]; /* 136 */
- char chksum[8]; /* 148 */
- char typeflag; /* 156 */
- char linkname[100]; /* 157 */
- char magic[6]; /* 257 */
- char version[2]; /* 263 */
- char uname[32]; /* 265 */
- char gname[32]; /* 297 */
- char devmajor[8]; /* 329 */
- char devminor[8]; /* 337 */
- char prefix[155]; /* 345 */
- char junk[12]; /* 500 */
-} tar_header_type;
-
-typedef struct tar_map_result_type_s {
- struct tar_map_result_type_s *next;
- char *stored_name;
- char *mapped_name;
-} tar_map_result_type;
-
-static tar_map_result_type *tar_map_result = 0;
-
-static int err;
-
-static char file_name[_MAX_PATH+512];
-static char have_longname = 0;
-static int file_length;
-
-static tar_header_type tar_header;
-static char buf[512];
-
-static int _tar_file_size = 0;
-int _tar_verbose = 0;
-FILE * _tar_vfile = 0;
-#define vp if (_tar_verbose) fprintf
-#define vp2 if (_tar_verbose>1) fprintf
-
-static gzFile g = 0;
-
-static char *
-xstrdup (char *c)
-{
- char *r = (char *) malloc (strlen (c) + 1);
- if (!r)
- exit_setup (1);
- strcpy (r, c);
- return r;
-}
-
-int
-tar_open (char *pathname)
-{
- struct stat s;
- if (_tar_vfile == 0)
- _tar_vfile = stderr;
-
- vp2 (_tar_vfile, "tar: open `%s'\n", pathname);
- if (stat (pathname, &s) < 0)
- return 1;
- _tar_file_size = s.st_size;
-
- g = gzopen (pathname, "rb");
- if (sizeof (tar_header) != 512)
- {
- /* drastic, but important */
- fprintf (stderr, "compilation error: tar header struct not 512"
- " bytes (it's %d)\n", sizeof (tar_header));
- exit_setup (1);
- }
- err = 0;
- return g ? 0 : 1;
-}
-
-/* For some reason the cygwin version uses a function that is not in
- the original source. We duplicate it here - although this does mean
- revealing some internals. */
-extern "C" {
- z_off_t ZEXPORT tar_gzctell (gzFile file);
- typedef struct gz_stream {
- z_stream stream;
- int z_err; /* error code for last stream operation */
- int z_eof; /* set if end of input file */
- FILE *file; /* .gz file */
- Byte *inbuf; /* input buffer */
- Byte *outbuf; /* output buffer */
- uLong crc; /* crc32 of uncompressed data */
- char *msg; /* error message */
- char *path; /* path name for debugging only */
- int transparent; /* 1 if input file is not a .gz file */
- char mode; /* 'w' or 'r' */
- long startpos; /* start of compressed data in file (header skipped) */
- } gz_stream;
-};
-
-z_off_t ZEXPORT tar_gzctell (gzFile file)
-{
- gz_stream *s = (gz_stream *)file;
- return ftell(s->file);
-}
-
-int
-tar_ftell ()
-{
- return tar_gzctell (g);
-}
-
-static void
-skip_file ()
-{
- while (file_length > 0)
- {
- gzread (g, buf, 512);
- file_length -= 512;
- }
-}
-
-char *
-tar_next_file ()
-{
- int r, n;
- char *c;
- r = gzread (g, &tar_header, 512);
-
- /* See if we're at end of file */
- if (r != 512)
- return 0;
-
- /* See if the header is all zeros (i.e. last block) */
- n = 0;
- for (r = 512/sizeof (int); r; r--)
- n |= ((int *)&tar_header)[r-1];
- if (n == 0)
- return 0;
-
- if (!have_longname && tar_header.typeflag != 'L')
- {
- memcpy (file_name, tar_header.name, 100);
- file_name[100] = 0;
- }
-
- sscanf (tar_header.size, "%o", &file_length);
-
- vp2 (_tar_vfile, "%c %9d %s\n", tar_header.typeflag, file_length, file_name);
-
- switch (tar_header.typeflag)
- {
- case 'L': /* GNU tar long name extension */
- if (file_length > _MAX_PATH)
- {
- skip_file ();
- fprintf (stderr, "error: long file name exceeds %d characters\n",
- _MAX_PATH);
- err ++;
- gzread (g, &tar_header, 512);
- sscanf (tar_header.size, "%o", &file_length);
- skip_file ();
- return tar_next_file ();
- }
- c = file_name;
- while (file_length > 0)
- {
- int need = file_length > 512 ? 512 : file_length;
- if (gzread (g, buf, 512) < 512)
- return 0;
- memcpy (c, buf, need);
- c += need;
- file_length -= need;
- }
- *c = 0;
- have_longname = 1;
- return tar_next_file ();
-
- case '3': /* char */
- case '4': /* block */
- case '6': /* fifo */
- fprintf (stderr, "warning: not extracting special file %s\n",
- file_name);
- err ++;
- return tar_next_file ();
-
- case '0': /* regular file */
- case 0: /* regular file also */
- case '2': /* symbolic link */
- case '5': /* directory */
- case '7': /* contiguous file */
- return file_name;
-
- case '1': /* hard link, we just copy */
- return file_name;
-
- default:
- fprintf (stderr, "error: unknown (or unsupported) file type `%c'\n",
- tar_header.typeflag);
- err ++;
- skip_file ();
- return tar_next_file ();
- }
-}
-
-static void
-fix_time_stamp (char *path)
-{
- int mtime;
-#if defined(CYGWIN) || defined(MINGW)
- long long ftimev;
-#else
- __int64 ftimev;
-#endif
- FILETIME ftime;
- HANDLE h;
-
- sscanf (tar_header.mtime, "%o", &mtime);
- ftimev = mtime * NSPERSEC + FACTOR;
- ftime.dwHighDateTime = ftimev >> 32;
- ftime.dwLowDateTime = ftimev;
- h = CreateFileA (path, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0, OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, 0);
- if (h)
- {
- SetFileTime (h, 0, 0, &ftime);
- CloseHandle (h);
- }
-}
-
-static FILE *
-common_fopen (char *path)
-{
- FILE *out;
- out = fopen (path, "wb");
- if (!out)
- {
- /* maybe we need to create a directory */
- if (mkdir_p (0, path))
- {
- skip_file ();
- return 0;
- }
- out = fopen (path, "wb");
- }
- if (!out)
- {
- fprintf (stderr, "unable to write to file %s\n", path);
- perror ("The error was");
- skip_file ();
- return 0;
- }
- return out;
-}
-
-static void
-prepare_for_file (char *path)
-{
- DWORD w;
- mkdir_p (0, path);
-
- w = GetFileAttributes (path);
- if (w != 0xffffffff && w & FILE_ATTRIBUTE_DIRECTORY)
- {
- char *tmp = (char *) malloc (strlen (path) + 10);
- int i = 0;
- do {
- i++;
- sprintf (tmp, "%s.old-%d", path, i);
- } while (GetFileAttributes (tmp) != 0xffffffff);
- fprintf (stderr, "warning: moving directory \"%s\" out of the way.\n", path);
- MoveFile (path, tmp);
- free (tmp);
- }
-
- DeleteFileA (path);
-}
-
-int
-tar_read_file (char *path)
-{
- FILE *out, *copy;
- HANDLE h;
- DWORD w;
- int got;
- tar_map_result_type *tmr;
-
- switch (tar_header.typeflag)
- {
- case '0': /* regular files */
- case 0:
- case '7':
- vp (_tar_vfile, "F %s\n", path);
- prepare_for_file (path);
- out = common_fopen (path);
- if (!out)
- return 1;
-
- while (file_length > 0)
- {
- int put;
- int want = file_length > 512 ? 512 : file_length;
- got = gzread (g, buf, 512);
- if (got < 512)
- {
- fprintf (stderr, "tar: unexpected end of file reading %s\n", path);
- fclose (out);
- remove (path);
- return 1;
- }
- put = fwrite (buf, 1, want, out);
- if (put < want)
- {
- fprintf (stderr, "tar: out of disk space writing %s\n", path);
- fclose (out);
- remove (path);
- skip_file ();
- return 1;
- }
- file_length -= want;
- }
- fclose (out);
-
- fix_time_stamp (path);
-
- /* we need this to do hard links below */
- tmr = (tar_map_result_type *) malloc (sizeof (tar_map_result_type));
- tmr->next = tar_map_result;
- tmr->stored_name = xstrdup (file_name);
- tmr->mapped_name = xstrdup (path);
- tar_map_result = tmr;
-
- return 0;
-
- case '1': /* hard links; we just copy */
- for (tmr = tar_map_result; tmr; tmr=tmr->next)
- if (strcmp (tmr->stored_name, tar_header.linkname) == 0)
- break;
- if (!tmr)
- {
- fprintf (stderr, "tar: can't find %s to link %s to\n",
- tar_header.linkname, path);
- return 1;
- }
- vp (_tar_vfile, "H %s <- %s\n", path, tmr->mapped_name);
- prepare_for_file (path);
- copy = fopen (tmr->mapped_name, "rb");
- if (!copy)
- {
- fprintf (stderr, "tar: unable to read %s\n", tmr->mapped_name);
- return 1;
- }
- out = common_fopen (path);
- if (!out)
- return 1;
-
- while ((got = fread (buf, 1, 512, copy)) > 0)
- {
- int put = fwrite (buf, 1, got, out);
- if (put < got)
- {
- fprintf (stderr, "tar: out of disk space writing %s\n", path);
- fclose (out);
- fclose (copy);
- remove (path);
- return 1;
- }
- }
- fclose (out);
- fclose (copy);
-
- fix_time_stamp (path);
- return 0;
-
- case '5': /* directories */
- vp (_tar_vfile, "D %s\n", path);
- while (path[0] && path[strlen (path)-1] == '/')
- path[strlen (path) - 1] = 0;
- return mkdir_p (1, path);
-
-
- case '2': /* symbolic links */
- vp (_tar_vfile, "L %s -> %s\n", path, tar_header.linkname);
- prepare_for_file (path);
- h = CreateFileA (path, GENERIC_WRITE, 0, 0, CREATE_NEW,
- FILE_ATTRIBUTE_NORMAL, 0);
- if (h == INVALID_HANDLE_VALUE)
- {
- fprintf (stderr, "error: unable to create symlink \"%s\" -> \"%s\"\n",
- path, tar_header.linkname);
- return 1;
- }
- strcpy (buf, SYMLINK_COOKIE);
- strcat (buf, tar_header.linkname);
- if (WriteFile (h, buf, strlen (buf) + 1, &w, NULL))
- {
- CloseHandle (h);
- SetFileAttributesA (path, FILE_ATTRIBUTE_SYSTEM);
- return 0;
- }
- CloseHandle (h);
- fprintf (stderr, "error: unable to write symlink \"%s\"\n", path);
- DeleteFileA (path);
- return 1;
- }
-
- return 0;
-}
-
-int
-tar_close ()
-{
-#if 0
- while (tar_map_result)
- {
- tar_map_result_type *t = tar_map_result->next;
- free (tar_map_result->stored_name);
- free (tar_map_result->mapped_name);
- free (tar_map_result);
- tar_map_result = t;
- }
-#endif
- tar_map_result = 0;
-
- if (gzclose (g))
- err ++;
- return err; /* includes errors for skipped files, etc */
-}
-
-typedef struct {
- char *from;
- int from_len;
- char *to;
- int to_len;
-} map_type;
-
-static map_type *map;
-static int nmaps;
-
-int
-tar_auto (char *pathname, char **maplist)
-{
- char *c;
- int errcount = 0;
- int i, j;
- map_type mtemp;
- char newname[_MAX_PATH+512];
- static char twiddles[] = "|\b/\b-\b\\\b";
- int t = 0;
-
- for (nmaps=0; maplist[nmaps*2]; nmaps++) ;
- map = (map_type *) malloc ((nmaps+1) * sizeof (map_type));
- for (nmaps=0; maplist[nmaps*2]; nmaps++)
- {
- map[nmaps].from = maplist[nmaps*2];
- map[nmaps].from_len = strlen (maplist[nmaps*2]);
- map[nmaps].to = maplist[nmaps*2+1];
- map[nmaps].to_len = strlen (maplist[nmaps*2+1]);
- }
- /* bubble sort - expect the maps to be short */
- for (i=0; i<nmaps-1; i++)
- for (j=i+1; j<nmaps; j++)
- if (map[i].from_len < map[j].from_len)
- {
- mtemp = map[i];
- map[i] = map[j];
- map[j] = mtemp;
- }
-
- if ((tar_open (pathname)))
- return 1;
- while ((c = tar_next_file ()))
- {
- int l = strlen (c);
- for (i=0; i<nmaps; i++)
- if (l >= map[i].from_len
- && strncmp (c, map[i].from, map[i].from_len) == 0)
- {
- strcpy (newname, map[i].to);
- strcpy (newname+map[i].to_len, c + map[i].from_len);
- c = newname;
- break;
- }
-
- t = (t+2) % 8;
- fwrite (twiddles+t, 1, 2, stderr);
-
- if (tar_read_file (c))
- errcount ++;
- }
- if (tar_close ())
- errcount ++;
-
- fwrite (" \b", 1, 2, stderr);
-
- vp2 (_tar_vfile, "tar_auto returns %d\n", errcount);
- return errcount;
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-#ifndef __TAR_H_
-#define __TAR_H_
-
-/* Only one tarfile may be open at a time. gzipped files handled
- automatically */
-
-/* returns zero on success, nonzero on failure */
-int tar_open (char *pathname);
-
-/* returns pointer to static buf containing name of next file */
-char * tar_next_file ();
-
-/* byte position in [compressed] file */
-int tar_ftell ();
-
-/* pass adjusted path, returns zero on success, nonzero on failure */
-int tar_read_file (char *path);
-
-/* closes the file */
-int tar_close ();
-
-/* pass path to tar file and from/to pairs for path prefix (NULLs at
- end , returns zero if completely successful, nonzero (counts
- errors) on failure */
-int tar_auto (char *pathname, char **map);
-
-int tar_mkdir_p (int isadir, char *path);
-
-/*
-extern int _tar_verbose;
-extern FILE * _tar_vfile;
-*/
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* misc version-related things */
-
-extern "C" char *version;
-extern "C" char *setup_version;
-extern "C" unsigned int setup_timestamp;
-
-extern char *canonicalize_version (char *);
+++ /dev/null
-while (<STDIN>) {
- if (/^\$Revision:\s*([0-9\.]*)/) {
- print "char *version = \"$1\";\n";
- print "static char *id = \"\\n%%% setup-version $1\\n\";\n";
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2000, Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by DJ Delorie <dj@cygnus.com>
- *
- */
-
-/* The purpose of this file is to limit the number of Win32 headers we
- actually have to parse. The Setup program only uses a few of them,
- so there's no point in parsing them all (even lean-n-mean). Doing
- this cuts compile time in half. */
-
-#ifndef _MINI_WIN32_
-#define _MINI_WIN32_
-
-#define _UNION_NAME(x)
-#define _STRUCT_NAME(x)
-#define NOCOMATTRIBUTE
-
-#include <stdarg.h>
-#ifdef WIN32_NATIVE
-/* MSVC is barking with the list above, something else is missing, so
- I'm using <windows.h> and lean-n-mean. FP, 2000-23-12 */
-#include <windows.h>
-#endif
-#include <windef.h>
-#include <basetyps.h>
-#include <winbase.h>
-#include <wingdi.h>
-#include <winuser.h>
-#include <wininet.h>
-#include <winreg.h>
-
-#include <windowsx.h>
-
-/* Cope with native win32 & mingw differences. Written by F. Popineau
- <Fabrice.Popineau@supelec.fr> */
-#ifdef WIN32_NATIVE
-# pragma warning( disable : 4007 4096 4018 4244 )
-# define strdup _strdup
-# define stat _stat
-# define strnicmp _strnicmp
-#endif
-
-#ifndef CDECL
-#define CDECL __cdecl
-#endif
-
-#endif /* _MINI_WIN32_ */