|
|
1.1 root 1: dnl Process this file with autoconf to produce a configure script.
2:
1.1.1.2 root 3: AC_INIT(amiga/source/transdisk.c)
4: AC_PREREQ(2.10)
1.1 root 5: dnl Checks for programs.
6: AC_PROG_CC
7:
8: AC_PROG_CPP
9: AC_PROG_MAKE_SET
10:
11: AC_AIX
12: AC_ISC_POSIX
13:
14: dnl Checks for libraries.
15: HAVE_BEBOX=n
16: dnl Replace `main' with a function in -lMedia_s: (Ian!)
17: AC_CHECK_LIB(Media_s, main, HAVE_MEDIA_LIB=y, HAVE_MEDIA_LIB=n)
18: dnl Replace `main' with a function in -lNeXT_s:
19: AC_CHECK_LIB(NeXT_s, main, HAVE_NEXT_LIB=y, HAVE_NEXT_LIB=n)
1.1.1.3 ! root 20: AC_CHECK_LIB(amiga, OpenLibrary, HAVE_AMIGA_LIB=y, HAVE_AMIGA_LIB=n)
1.1 root 21: AC_CHECK_LIB(vga, vga_setmode, HAVE_SVGA_LIB=y, HAVE_SVGA_LIB=n)
22: AC_CHECK_LIB(AF, AFOpenAudioConn, HAVE_AF_LIB=y, HAVE_AF_LIB=n)
23:
24: AC_PATH_XTRA
1.1.1.2 root 25: AC_CONFIG_HEADER(src/include/sysconfig.h)
1.1 root 26:
1.1.1.3 ! root 27: DO_PROFILING=no
! 28: AC_ARG_ENABLE(profiling, --enable-profiling Build a profiling (SLOW!) version,[DO_PROFILING=$enableval],[])
! 29:
1.1 root 30: AC_HEADER_DIRENT
31: AC_HEADER_STDC
1.1.1.3 ! root 32: AC_CHECK_HEADERS(unistd.h fcntl.h sys/time.h sys/types.h utime.h string.h strings.h values.h ncurses.h)
1.1.1.2 root 33: AC_CHECK_HEADERS(sys/vfs.h sys/mount.h sys/select.h sys/param.h sys/statfs.h sys/statvfs.h sys/stat.h linux/joystick.h)
1.1.1.3 ! root 34: AC_CHECK_HEADERS(X11/forms.h forms.h)
1.1 root 35:
1.1.1.3 ! root 36: if [[ "$ac_cv_header_linux_joystick_h" = "yes" ]]; then
1.1 root 37: AC_MSG_CHECKING(whether linux/joystick.h is broken)
38: if grep "#include" /usr/include/linux/joystick.h >/dev/null; then
39: AC_MSG_RESULT(yes)
40: BROKEN_JOYSTICK_H=1
1.1.1.3 ! root 41: grep -v "#include" /usr/include/linux/joystick.h >src/include/joystick.h
1.1 root 42: else
43: AC_MSG_RESULT(no)
44: BROKEN_JOYSTICK_H=0
45: fi
46: fi
47:
48: AC_CHECK_SIZEOF(char)
49: AC_CHECK_SIZEOF(short)
50: AC_CHECK_SIZEOF(int)
51: AC_CHECK_SIZEOF(long)
52: AC_CHECK_SIZEOF(long long)
53:
54: dnl Checks for typedefs, structures, and compiler characteristics.
55: AC_C_CONST
56: AC_C_INLINE
57: AC_TYPE_MODE_T
58: AC_TYPE_OFF_T
59: AC_TYPE_PID_T
60: AC_STRUCT_ST_BLOCKS
61: AC_HEADER_TIME
62: AC_STRUCT_TM
63:
64: dnl Checks for library functions.
65: AC_PROG_GCC_TRADITIONAL
66: AC_FUNC_MEMCMP
67: AC_TYPE_SIGNAL
68: AC_FUNC_UTIME_NULL
1.1.1.3 ! root 69: AC_CHECK_FUNCS(gettimeofday sigaction mkdir rmdir select strerror strstr statfs)
1.1 root 70:
71: AC_MSG_CHECKING(how many args statfs takes)
1.1.1.3 ! root 72: if [[ "$ac_cv_func_statfs" = "yes" ]]; then
1.1 root 73: AC_TRY_COMPILE([
74: #include "confdefs.h"
1.1.1.2 root 75: #ifdef HAVE_SYS_TYPES_H
76: #include <sys/types.h>
77: #endif
78: #ifdef HAVE_SYS_PARAM_H
79: #include <sys/param.h>
80: #endif
1.1 root 81: #ifdef HAVE_SYS_MOUNT_H
82: #include <sys/mount.h>
83: #endif
1.1.1.2 root 84: #ifdef HAVE_SYS_SELECT_H
85: #include <sys/select.h>
86: #endif
1.1 root 87: #ifdef HAVE_SYS_VFS_H
88: #include <sys/vfs.h>
89: #endif
90: #ifdef HAVE_SYS_STATFS_H
91: #include <sys/statfs.h>
92: #endif
93: #ifdef HAVE_SYS_STATVFS_H
94: #include <sys/statvfs.h>
95: #endif],[struct statfs statbuf;statfs("/",&statbuf);],
96: AC_MSG_RESULT(2)
97: STATFS_NO_ARGS=2,
98: AC_MSG_RESULT(4)
99: STATFS_NO_ARGS=4)
100: fi
101:
102: AC_MSG_CHECKING(whether to use f_bavail or f_bfree)
103: if [[ $ac_cv_func_statfs = "yes" ]]; then
104: AC_TRY_COMPILE([
105: #include "confdefs.h"
1.1.1.2 root 106: #ifdef HAVE_SYS_TYPES_H
107: #include <sys/types.h>
108: #endif
109: #ifdef HAVE_SYS_PARAM_H
110: #include <sys/param.h>
111: #endif
1.1 root 112: #ifdef HAVE_SYS_MOUNT_H
113: #include <sys/mount.h>
114: #endif
1.1.1.2 root 115: #ifdef HAVE_SYS_SELECT_H
116: #include <sys/select.h>
117: #endif
1.1 root 118: #ifdef HAVE_SYS_VFS_H
119: #include <sys/vfs.h>
120: #endif
121: #ifdef HAVE_SYS_STATFS_H
122: #include <sys/statfs.h>
123: #endif
124: #ifdef HAVE_SYS_STATVFS_H
125: #include <sys/statvfs.h>
126: #endif],[struct statfs statbuf;statbuf.f_bavail;],
127: AC_MSG_RESULT(f_bavail)
128: STATBUF_BAVAIL=f_bavail,
129: AC_MSG_RESULT(f_bfree)
130: STATBUF_BAVAIL=f_bfree)
131: fi
132:
1.1.1.2 root 133: USE_GUI=yes
1.1.1.3 ! root 134: AC_ARG_ENABLE(gui, --disable-gui Don't use any GUI,[USE_GUI=$enableval],[])
! 135: if [[ x$USE_GUI = "xyes" ]]; then
1.1.1.2 root 136: AC_CHECK_PROG(USE_GUI,wish4.0,yes,no)
137: else
138: echo "Disabling the GUI."
139: fi
140:
1.1.1.3 ! root 141: MATHLIB=-lm
! 142:
1.1 root 143: AC_MSG_CHECKING(which target to use)
144: if [[ $HAVE_BEBOX = "y" ]]; then
145: AC_MSG_RESULT(BeBox)
146: TARGET=be
147: GFXOBJS="bebox.o nogui.o"
148: ac_cv_c_inline=
1.1.1.3 ! root 149: else if [[ $HAVE_AMIGA_LIB = "y" ]]; then
! 150: AC_MSG_RESULT(AmigaOS)
! 151: TARGET=amigaos
! 152: GFXOBJS="machdep/ami-win.o machdep/ami-gui.o machdep/ami-disk.o machdep/ami-rexx.o"
! 153: else if [[ $HAVE_NEXT_LIB = "y" ]]; then
! 154: AC_MSG_RESULT(NeXTStep)
! 155: MATHLIB=
! 156: TARGET=next
! 157: GFXOBJS="NeXTwin.o"
! 158: LIBRARIES="-sectcreate __ICON __header ../Uae.app/Uae.iconheader -segprot __ICON r r -sectcreate __ICON app ../Uae.app/Uae.tiff -lMedia_s -lNeXT_s"
! 159: else if [[ x$no_x = "xyes" ]]; then
! 160: if [[ $HAVE_SVGA_LIB = "n" ]]; then
! 161: AC_MSG_RESULT(Ummm....)
! 162: echo "Neither X nor SVGAlib found, don't know what target to use."
! 163: exit 1
! 164: else
! 165: AC_MSG_RESULT(SVGAlib)
! 166: TARGET=svgalib
! 167: AC_CHECK_LIB(ncurses, waddch, , HAVE_GUI=no)
! 168: if [[ x$USE_GUI = "xyes" ]]; then
! 169: GFXOBJS="svga.o tui.o svgancui.o"
! 170: LIBRARIES="-lvga -lncurses"
! 171: if [[ $ac_cv_header_ncurses_h = "no" ]]; then
! 172: echo "Found libncurses, but no ncurses.h. Unfortunately, newer ncurses"
! 173: echo "installations don't come with ncurses.h. I'll try to use curses.h instead."
! 174: echo "If you get linker or compiler errors in svgancui.c, please remove"
! 175: echo "all traces of an existing ncurses-installation and re-install ncurses."
1.1 root 176: fi
177: else
1.1.1.3 ! root 178: GFXOBJS="svga.o nogui.o"
! 179: LIBRARIES="-lvga"
! 180: fi
! 181: fi
! 182: else
! 183: AC_MSG_RESULT(X Window System)
! 184: TARGET=x11
! 185:
! 186: AC_ARG_ENABLE(dga, --enable-dga Use the DGA extension,[USEDGA=$enableval],[])
! 187: if [[ x$USE_GUI = "xyes" ]]; then
! 188: if [[ x$USE_DGA = "xyes" ]]; then
! 189: echo "Can't use the GUI with DGA - disabling DGA."
! 190: fi
! 191: USEDGA=no
! 192: fi
! 193: dnl Check for X Forms library. Boy is this complicated
! 194: HAVE_XFORMS=no
! 195: if [[ "$ac_cv_header_forms_h" = "yes" -o "$ac_cv_header_X11_forms_h" = "yes" ]]; then
! 196: TMP_SAVE_LIBS=$LIBS
! 197: LIBS="$X_LIBS $LIBS -lforms -lX11 -lm"
! 198: AC_CHECK_LIB(forms, fl_library_version, HAVE_XFORMS=yes, )
! 199: LIBS=$TMP_SAVE_LIBS
! 200: if [[ "$ac_cv_header_forms_h" = "yes" ]]; then
! 201: FORMS_HEADER=forms.h
! 202: else
! 203: FORMS_HEADER=X11/forms.h
! 204: fi
! 205: fi
! 206: if [[ x$HAVE_XFORMS = "xyes" ]]; then
! 207: echo '#include "'$FORMS_HEADER\" >conftest.c
! 208: cat >>conftest.c << EOF
! 209: int main()
! 210: {
! 211: if (fl_library_version(NULL, NULL) == FL_INCLUDE_VERSION
! 212: && FL_INCLUDE_VERSION >= 80)
! 213: printf("OK\n");
! 214: return 0;
! 215: }
! 216: EOF
! 217: $CC conftest.c -c -o conftest.o $CFLAGS
! 218: $CC conftest.o -o conftest $X_LIBS $LIBS -lforms -lX11 -lm
! 219: ./conftest >conftest.file
! 220: if grep OK conftest.file >/dev/null; then
! 221: echo "X Forms include and library version match."
! 222: else
! 223: echo "Installation problem with the X Forms library, versions don't match!"
! 224: HAVE_XFORMS = no
! 225: fi
! 226: fi
! 227:
! 228: if [[ x$USEDGA = "xyes" ]]; then
! 229: TMP_SAVE_LIBS=$LIBS
! 230: LIBS="$X_LIBS $LIBS"
! 231: AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension, USEDGA=yes, USEDGA=no, [ -lXext -lX11 ])
! 232: LIBS=$TMP_SAVE_LIBS
! 233: fi
! 234:
! 235: if [[ x$USEDGA = "xyes" ]]; then
! 236: LIBRARIES="$X_LIBS $X_PRE_LIBS -lXxf86dga -lXext -lX11 $X_EXTRA_LIBS"
! 237: X_CFLAGS="$X_CFLAGS -DUSE_DGA_EXTENSION"
! 238: else
! 239: LIBRARIES="$X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS"
! 240: fi
! 241:
! 242: if [[ x$USE_GUI = "xyes" ]]; then
! 243: USE_XFGUI=no
! 244: AC_ARG_ENABLE(xfgui, --enable-xfgui Use the XForms GUI instead of Tcl/Tk,[USE_XFGUI=$enableval],[])
! 245: if [[ x$USE_XFGUI = "xyes" ]]; then
! 246: if [[ x$HAVE_XFORMS = "xyes" ]]; then
! 247: echo "Using XForms GUI."
! 248: LIBRARIES="$LIBRARIES -lforms"
! 249: GFXOBJS="xwin.o"
1.1 root 250: else
1.1.1.3 ! root 251: echo "You don't have XForms. Disabling GUI!"
! 252: USE_XFGUI=no
! 253: USE_GUI=no
! 254: GFXOBJS="xwin.o nogui.o"
1.1 root 255: fi
1.1.1.3 ! root 256: else
! 257: echo "Using Tcl/Tk GUI."
! 258: GFXOBJS="xwin.o xui.o"
1.1 root 259: fi
1.1.1.3 ! root 260: else
! 261: GFXOBJS="xwin.o nogui.o"
1.1 root 262: fi
263: fi
1.1.1.3 ! root 264: fi
! 265: fi
! 266: fi
1.1 root 267:
1.1.1.3 ! root 268: if [[ x$USE_XFGUI = "xyes" ]]; then
! 269: DEBUGOBJS="xdebug.o"
! 270: else
! 271: DEBUGOBJS="debug.o"
! 272: fi
! 273:
! 274: dnl Find out some things about the system
! 275: dnl - whether we have GCC 2.7 or better.
! 276: dnl - what CPU we have (to use some assembly hacks on the x86)
! 277: dnl - whether we are on a Linux system
! 278: dnl - whether that is an ELF system (underscore hacks in X86.S are DOS only
! 279: dnl right now).
! 280:
! 281: LINUXELF=n
! 282: HAVEGCC27=n
! 283: HAVEI386=n
1.1 root 284: ASMOBJS=
1.1.1.2 root 285: CPUOBJS="cpu0.o cpu1.o cpu2.o cpu3.o cpu4.o cpu5.o cpu6.o cpu7.o cpu8.o cpu9.o cpuA.o cpuB.o cpuC.o cpuD.o cpuE.o cpuF.o"
1.1.1.3 ! root 286: CPUOBJS1="cpu_d0.o cpu_d1.o cpu_d2.o cpu_d3.o cpu_d4.o cpu_d5.o cpu_d6.o cpu_d7.o cpu_d8.o cpu_d9.o cpu_dA.o cpu_dB.o cpu_dC.o cpu_dD.o cpu_dE.o cpu_dF.o"
! 287:
! 288: cat >conftest.c << EOF
! 289: int main()
! 290: {
! 291: #if defined(__GNUC__) && defined(__GNUC_MINOR__)
! 292: #if __GNUC__ > 2 || __GNUC_MINOR__ > 6
! 293: printf("GNU\n");
! 294: #endif
! 295: #endif
! 296: return 0;
! 297: }
! 298: EOF
! 299:
! 300: $CC conftest.c -c -o conftest.o
! 301: $CC conftest.o -o conftest
! 302: ./conftest >conftest.file
! 303: if grep GNU conftest.file >/dev/null; then
! 304: HAVEGCC27=y
! 305: echo "Good news. Found GCC 2.7 or better."
! 306: else
! 307: if [[ "$CC" = "gcc" ]]; then
! 308: echo "I suggest you upgrade to at least version 2.7 of GCC"
! 309: else
! 310: echo "Couldn't find GCC. UAE may or may not compile and run correctly."
! 311: fi
! 312: fi
! 313:
! 314: if [[ x$DO_PROFILING = "xyes" ]]; then
! 315: if [[ "$CC" = "gcc" ]]; then
! 316: CFLAGS="-O -g -fno-inline-functions -fno-omit-frame-pointer -pg -DUSE_PROFILING"
! 317: LDFLAGS="-pg"
! 318: fi
! 319: else
! 320: if [[ "$CC" = "gcc" ]]; then
! 321: CFLAGS="-O3 -fomit-frame-pointer -Wall -Wtraditional -Wno-unused -Wno-format -W -Wmissing-prototypes -Wstrict-prototypes"
! 322: fi
! 323: fi
! 324:
! 325: if [[ x$HAVEGCC27 = "xy" ]]; then
! 326: CFLAGS="$CFLAGS -DGCCCONSTFUNC=\"__attribute__((const))\""
! 327: else
! 328: CFLAGS="$CFLAGS -DGCCCONSTFUNC="
! 329: fi
! 330:
! 331: cat >conftest.c << EOF
! 332: int main()
! 333: {
! 334: #ifdef __i386__
! 335: printf("386\n");
! 336: #endif
! 337: return 0;
! 338: }
! 339: EOF
! 340:
! 341: $CC conftest.c -c -o conftest.o
! 342: $CC conftest.o -o conftest
! 343: ./conftest >conftest.file
! 344: if grep 386 conftest.file >/dev/null; then
! 345: HAVEI386=y
! 346: echo "You seem to be using a x86 CPU (UAE will require a 486 to run)"
! 347: else
! 348: echo "No special hacks for your CPU, sorry."
! 349: fi
! 350:
! 351: rm -f conftest*
1.1 root 352:
353: dnl It may be possible to use X86.S on other systems, too, but then again, it
354: dnl might break. Check for a system that is known to work.
355: dnl Gustavo says it works on linuxaout, too. We'll try this later.
356:
1.1.1.3 ! root 357: if [[ "$HAVEGCC27" = "y" -a "$HAVEI386" = "y" -a x$DO_PROFILING = "xno" ]]; then
1.1.1.2 root 358: dnl strength-reduce is turned off not because of paranoia, but because it
359: dnl actually makes the code worse in some cases on the i386 (generates too
360: dnl many registers, which all end up on the stack).
1.1 root 361: AC_MSG_CHECKING(whether we are on a Linux/i386 ELF system)
362: if MACHINE=`uname -a 2>/dev/null`; then
363: cat >conftest.c << EOF
364: int main() { return 0; }
365: EOF
366: case $MACHINE in
367: Linux*i*86)
368: gcc conftest.c -o conftest
369: file conftest >conftest.file
370: if grep ELF conftest.file >/dev/null; then
371: LINUXELF=y
372: fi
373: ;;
374: esac
375: rm -f conftest*
376: fi
377: if [[ $LINUXELF = "n" ]]; then
378: AC_MSG_RESULT(no)
379: else
380: AC_MSG_RESULT(yes)
381: ASMOBJS=X86.o
1.1.1.3 ! root 382: CPUOBJS="cpu_f0.o cpu_f1.o cpu_f2.o cpu_f3.o cpu_f4.o cpu_f5.o cpu_f6.o cpu_f7.o cpu_f8.o cpu_f9.o cpu_fA.o cpu_fB.o cpu_fC.o cpu_fD.o cpu_fE.o cpu_fF.o"
! 383: CPUOBJS1="cpu_f_d0.o cpu_f_d1.o cpu_f_d2.o cpu_f_d3.o cpu_f_d4.o cpu_f_d5.o cpu_f_d6.o cpu_f_d7.o cpu_f_d8.o cpu_f_d9.o cpu_f_dA.o cpu_f_dB.o cpu_f_dC.o cpu_f_dD.o cpu_f_dE.o cpu_f_dF.o"
1.1 root 384: CFLAGS="$CFLAGS -DX86_ASSEMBLY"
385: fi
1.1.1.3 ! root 386: fi
! 387:
! 388: dnl Set up the link to the appropriate machdep directory and select something
! 389: dnl for the REGPARAM define.
! 390:
! 391: rm -f src/machdep
! 392: if [[ "$LINUXELF" = "y" -a x$DO_PROFILING = "xno" ]]; then
! 393: ln -s md-i386-linux src/machdep
! 394: CFLAGS="$CFLAGS -fno-strength-reduce -DINTEL_FLAG_OPT=1 -DREGPARAM=\"__attribute__((regparm(3)))\""
! 395: else if [[ "$HAVEGCC27" = "y" -a "$HAVEI386" = "y" -a x$DO_PROFILING = "xno" ]]; then
! 396: ln -s md-i386-gcc src/machdep
! 397: CFLAGS="$CFLAGS -fno-strength-reduce -DINTEL_FLAG_OPT=1 -DREGPARAM=\"__attribute__((regparm(3)))\""
! 398: else if [[ "$TARGET" = "amigaos" ]]; then
! 399: ln -s md-amiga src/machdep
! 400: CPUOBJS="cpu_f0.o cpu_f1.o cpu_f2.o cpu_f3.o cpu_f4.o cpu_f5.o cpu_f6.o cpu_f7.o cpu_f8.o cpu_f9.o cpu_fA.o cpu_fB.o cpu_fC.o cpu_fD.o cpu_fE.o cpu_fF.o"
! 401: CPUOBJS1="cpu_f_d0.o cpu_f_d1.o cpu_f_d2.o cpu_f_d3.o cpu_f_d4.o cpu_f_d5.o cpu_f_d6.o cpu_f_d7.o cpu_f_d8.o cpu_f_d9.o cpu_f_dA.o cpu_f_dB.o cpu_f_dC.o cpu_f_dD.o cpu_f_dE.o cpu_f_dF.o"
! 402: CFLAGS="$CFLAGS -DREGPARAM=\"__attribute__((regparm(4)))\" -DM68K_FLAG_OPT=1"
1.1 root 403: else
1.1.1.3 ! root 404: ln -s md-generic src/machdep
! 405: CFLAGS="$CFLAGS -DREGPARAM="
! 406: fi
! 407: fi
1.1 root 408: fi
409:
1.1.1.2 root 410: if [[ $TARGET = "x11" -o $TARGET = "svgalib" ]]; then
411: dnl On a Unix system, zfile is supposed to work. Dunno about others.
412: CFLAGS="$CFLAGS -DUSE_ZFILE"
413: fi
414:
1.1.1.3 ! root 415: if [[ $TARGET = "amigaos" ]]; then
! 416: CFLAGS="$CFLAGS -DUSE_ZFILE"
! 417:
! 418: dnl Determine the cpu-type
! 419: AC_MSG_CHECKING(which CPU to use)
! 420: cpu=`cpu | cut -d' ' -f2`
! 421: AC_MSG_RESULT($cpu)
! 422: CFLAGS="$CFLAGS -m$cpu"
! 423:
! 424: dnl Is that correct for the fpu ?
! 425: AC_MSG_CHECKING(which FPU to use)
! 426: fpu=`cpu | cut -d' ' -f3 | grep '^68[[0-9]]*$'`
! 427: if [[ ! "x$fpu" = "x" ]]; then
! 428: AC_MSG_RESULT($fpu)
! 429: CFLAGS="$CFLAGS -m$fpu"
! 430: else
! 431: AC_MSG_RESULT(none)
! 432: fi
! 433: fi
! 434:
1.1 root 435: AC_SUBST(ac_cv_c_inline)
436: AC_SUBST(STATFS_NO_ARGS)
437: AC_SUBST(BROKEN_JOYSTICK_H)
438: AC_SUBST(STATBUF_BAVAIL)
439: AC_SUBST(LIBRARIES)
440: AC_SUBST(TARGET)
441: AC_SUBST(GFXOBJS)
442: AC_SUBST(ASMOBJS)
1.1.1.2 root 443: AC_SUBST(CPUOBJS)
1.1.1.3 ! root 444: AC_SUBST(CPUOBJS1)
! 445: AC_SUBST(DEBUGOBJS)
1.1.1.2 root 446: AC_SUBST(SET_MAKE)
1.1.1.3 ! root 447: AC_SUBST(MATHLIB)
! 448: if [[ "$FORMS_HEADER" = "forms.h" ]]; then
! 449: FORMS_H_VARIANT=0
! 450: else
! 451: FORMS_H_VARIANT=1
! 452: fi
! 453: AC_SUBST(FORMS_H_VARIANT)
! 454: AC_SUBST(top_srcdir)
1.1 root 455:
1.1.1.2 root 456: AC_OUTPUT(src/Makefile Makefile)
1.1.1.3 ! root 457: if [[ x$DO_PROFILING = "xyes" ]]; then
! 458: echo "Building a profiling version of UAE (select this option only if you know"
! 459: echo "what you are doing)"
! 460: fi
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.