diff options
Diffstat (limited to 'Build/source/libs/xpdf/xpdf-3.04/vms_make.com')
-rw-r--r-- | Build/source/libs/xpdf/xpdf-3.04/vms_make.com | 736 |
1 files changed, 0 insertions, 736 deletions
diff --git a/Build/source/libs/xpdf/xpdf-3.04/vms_make.com b/Build/source/libs/xpdf/xpdf-3.04/vms_make.com deleted file mode 100644 index d70caad765b..00000000000 --- a/Build/source/libs/xpdf/xpdf-3.04/vms_make.com +++ /dev/null @@ -1,736 +0,0 @@ -$!======================================================================== -$! -$! Main Xpdf compile script for VMS. -$! -$! Written by Patrick Moreau, Martin P.J. Zinser. -$! -$! Copyright 1996-2003 Glyph & Cog, LLC -$! -$!======================================================================== -$! -$! This procedure takes up to three (optional) parameters: -$! -$! 1.) Configuration settings: -$! -$! a4 - Use european A4 as the default paper size. -$! -$! no_text_select - Disable text selection in Xpdf -$! -$! opi_support - Compile Xpdf with support for the Open Prepress -$! Interface (OPI) -$! -$! 2.) Compiler detection: -$! -$! In case you want to override the automatic compiler detection -$! specify either DECC or GCC as the second paramter, -$! e.g. @vms_make "" GCC -$! -$! 3.) System Xpdf resource file -$! -$! The default for this is decw$system_defaults:xpdfrc.dat, since this -$! is the standard place for systemwide Xdefaults files on OpenVMS. You -$! may provide a different file in p3. -$! -$! External libraries (like T1lib, Freetype, and XPM) are supported via the -$! config file VMSLIB.DAT. Please check the sample file, which will be created -$! by this procedure upon first invocation, for the information you need to -$! provide -$! -$! Sample invocation of the script: -$! @vms_make a4,opi_support "" -$! -$! In case of problems with the compile you may contact me at -$! zinser@decus.de (preferred) or zinser@sysdev.deutsche-boerse.com (work). -$! -$!======================================================================== -$! -$ on error then goto err_exit -$! -$! -$! Just some general constants... -$! -$ true = 1 -$ false = 0 -$ xpdf_link :== link -$ tmpnam = "temp_" + f$getjpi("","pid") -$ tc = tmpnam + ".c" -$! -$! Setup variables holding "config" information -$! -$ aconf_in_file = "aconf_h.in#aconf.h_in#aconf.h.in" -$ name = "Xpdf" -$ version = "?.?" -$ mydefs = "#" -$ xlibs = "xt#xmu#motif" -$ cxxdefs = "" -$ libdefs = "\" -$ libincs = "" -$ float = "" -$ compress_def = false -$ ft2def = false -$ x11_save = "" -$ p2 = f$edit(p2,"upcase,trim") -$ if f$edit(p3,"trim") .eqs. "" -$ then -$ resfil = "decw$system_defaults:xpdfrc.dat" -$ else -$ resfil = "'p3'" -$ endif -$! -$ gosub proc_config -$ gosub check_version -$! -$! Start building the option file -$! -$ open/write optf xpdf.opt -$ open/write topt tmp.opt -$ write optf "Identification=""''name' ''version'""" -$ gosub check_create_vmslib -$ gosub check_xlib -$! -$ if (f$getsyi("HW_MODEL").ge.1024) .and. - - (f$locate("T1LIB",f$edit(libdefs,"UPCASE")) .lt. f$length(libdefs)) - - then float = "/float=ieee_float" -$ incs = "sys$library:,[-],[],[-.goo]''libincs'" -$! -$ gosub check_compiler -$ close optf -$ close topt -$! -$! aconf.h.in might be mapped in different ways, so go figure -$! -$ i = 0 -$FIND_ACONF: -$ fname = f$element(i,"#",aconf_in_file) -$ if fname .eqs. "#" then goto AMISS_ERR -$ if f$search(fname) .eqs. "" -$ then -$ i = i + 1 -$ goto find_aconf -$ endif -$ open/read/err=aconf_err aconf_in 'fname' -$ open/write aconf aconf.h -$ACONF_LOOP: -$ read/end_of_file=aconf_exit aconf_in line -$ work = f$edit(line, "compress,trim") -$ if f$extract(0,6,work) .nes. "#undef" -$ then -$ write aconf line -$ else -$ def = f$element(1," ",work) -$ if ((f$locate("\''def'\",f$edit(libdefs,"UPCASE")) .lt. f$length(libdefs)) - - .or. (f$locate("#''def'#",f$edit(mydefs,"UPCASE")) .lt. f$length(mydefs))) -$ then -$ write aconf "#define ", def, " 1" -$ else -$ gosub check_config -$ endif -$ endif -$! -$! Make sure old-style VMS is defined along with __VMS -$! -$ if f$locate("define ACONF_H",line) .lt. f$length(line) -$ then -$ write aconf "#define VMS 1" -$ endif -$ goto aconf_loop -$ACONF_EXIT: -$ close aconf_in -$ close aconf -$ write sys$output "Compiling in [.GOO]" -$ set default [.goo] -$ @vms_make -$ write sys$output "Compiling in [.XPDF]" -$ set default [-.xpdf] -$ @vms_make -$ set default [-] -$ gosub reset_env -$ dele/noconf/nolog tmp.opt;* -$ exit -$ACONF_ERR: -$ write sys$output "Input file ''fname' could not be opened" -$ goto err_exit -$AMISS_ERR: -$ write sys$output "No source for aconf.h found." -$ write sys$output "Tried any of ''aconf_in_file'" -$CXX_ERR: -$ write sys$output "C++ compiler required to build Xpdf" -$ goto err_exit -$FT2_ERR: -$ write sys$output "Can not find [.internal] sub-dir in Freetype 2 tree" -$ goto err_exit -$ERR_EXIT: -$ set message/facil/ident/sever/text -$ gosub reset_env -$ close/nolog aconf_in -$ close/nolog aconf -$ close/nolog optf -$ close/nolog tmpc -$ close/nolop topt -$ write sys$output "Exiting..." -$ exit 2 -$!------------------------------------------------------------------------------ -$! -$! Take care of driver file with information about external libraries -$! -$CHECK_CREATE_VMSLIB: -$! -$ if f$search("VMSLIB.DAT") .eqs. "" -$ then -$ type/out=vmslib.dat sys$input -! -! This is a simple driver file with information used by vms_make.com to -! check if external libraries (like t1lib and freetype) are available on -! the system. -! -! Layout of the file: -! -! - Lines starting with ! are treated as comments -! - Elements in a data line are separated by # signs -! - The elements need to be listed in the following order -! 1.) Name of the Library (only used for informative messages -! from vms_make.com) -! 2.) Location where the object library can be found -! 3.) Location where the include files for the library can be found -! 4.) Include file used to verify library location -! 5.) CPP define to pass to the build to indicate availability of -! the library -! -! Example: The following lines show how definitions -! might look like. They are site specific and the locations of the -! library and include files need almost certainly to be changed. -! -! Location: All of the libaries can be found at the following addresses -! -! T1LIB: http://www.decus.de:8080/www/vms/sw/t1lib.htmlx -! FREETYPE: http://www.decus.de:8080/www/vms/sw/freetype2.htmlx -! XPM: http://www.decus.de:8080/www/vms/sw/xpm.htmlx -! LIBPAPER: http://www.decus.de:8080/www/vms/sw/libpaper.htmlx -! -!T1LIB # pubbin:t1shr.exe # public$root:[xtools.libs.t1lib.lib.t1lib] # t1lib.h # HAVE_T1LIB_H -!FREETYPE # pubbin:freetype2shr.exe # public$root:[xtools.libs.ft2.include.freetype],public$root:[xtools.libs.ft2.include] # freetype.h # HAVE_FREETYPE_H\FREETYPE2 -!XPM # pubbin:libxpm.olb # X11: # xpm.h # HAVE_X11_XPM_H -!LIBPAPER # pubbin:libpapershr.exe # public$root:[util.libs.paper.lib] # paper.h # HAVE_PAPER_H -$ write sys$output "New driver file vmslib.dat created." -$ write sys$output "Please customize libary locations for your site" -$ write sys$output "and afterwards re-execute vms_make.com" -$ write sys$output "Exiting..." -$ close/nolog optf -$ exit -$ endif -$! -$! Open data file with location of libraries -$! -$ open/read/end=end_lib/err=err_lib libdata VMSLIB.DAT -$LIB_LOOP: -$ read/end=end_lib libdata libline -$ libline = f$edit(libline, "UNCOMMENT,COLLAPSE") -$ if libline .eqs. "" then goto LIB_LOOP ! Comment line -$ libname = f$edit(f$element(0,"#",libline),"UPCASE") -$ write sys$output "Processing ''libname' setup ..." -$ libloc = f$element(1,"#",libline) -$ libsrc = f$element(2,"#",libline) -$ testinc = f$element(3,"#",libline) -$ cppdef = f$element(4,"#",libline) -$ old_cpp = f$locate("=1",cppdef) -$ if old_cpp.lt.f$length(cppdef) then cppdef = f$extract(0,old_cpp,cppdef) -$ if f$search("''libloc'").eqs. "" -$ then -$ write sys$output "Can not find library ''libloc' - Skipping ''libname'" -$ goto LIB_LOOP -$ endif -$ libsrc_elem = 0 -$ libsrc_found = false -$LIBSRC_LOOP: -$ libsrcdir = f$element(libsrc_elem,",",libsrc) -$ if (libsrcdir .eqs. ",") then goto END_LIBSRC -$ if f$search("''libsrcdir'''testinc'") .nes. "" then libsrc_found = true -$ libsrc_elem = libsrc_elem + 1 -$ goto LIBSRC_LOOP -$END_LIBSRC: -$ if .not. libsrc_found -$ then -$ write sys$output "Can not find includes at ''libsrc' - Skipping ''libname'" -$ goto LIB_LOOP -$ endif -$ libdefs = libdefs + cppdef + "\" -$ libincs = libincs + "," + libsrc -$ lqual = "/lib" -$ libtype = f$edit(f$parse(libloc,,,"TYPE"),"UPCASE") -$ if f$locate("EXE",libtype) .lt. f$length(libtype) then lqual = "/share" -$ write optf libloc , lqual -$ write topt libloc , lqual -$! -$! Nasty hack to get the freetype includes to work -$! -$ if ((libname .eqs. "FREETYPE") .and. - - (f$locate("FREETYPE2",cppdef) .lt. f$length(cppdef))) -$ then -$ if ((f$search("freetype:freetype.h") .nes. "") .and. - - (f$search("freetype:[internal]ftobjs.h") .nes. "")) -$ then -$ write sys$output "Will use local definition of freetype logical" -$ ft2def = false -$ else -$ ft2elem = 0 -$FT2_LOOP: -$ ft2srcdir = f$element(ft2elem,",",libsrc) -$ if f$search("''ft2srcdir'''testinc'") .nes. "" -$ then -$ if f$search("''ft2srcdir'internal.dir") .nes. "" -$ then -$ ft2dev = f$parse("''ft2srcdir'",,,"device","no_conceal") -$ ft2dir = f$parse("''ft2srcdir'",,,"directory","no_conceal") -$ ft2conc = f$locate("][",ft2dir) -$ ft2len = f$length(ft2dir) -$ if ft2conc .lt. ft2len -$ then -$ ft2dir = f$extract(0,ft2conc,ft2dir) + - - f$extract(ft2conc+2,ft2len-2,ft2dir) -$ endif -$ ft2dir = ft2dir - "]" + ".]" -$ define freetype 'ft2dev''ft2dir','ft2srcdir' -$ ft2def = true -$ else -$ goto ft2_err -$ endif -$ else -$ ft2elem = ft2elem + 1 -$ goto ft2_loop -$ endif -$ endif -$ endif -$! -$! Yet another special treatment for Xpm/X11 -$! -$ if (libname .eqs. "XPM") -$ then -$ my_x11 = f$parse("''libsrc'xpm.h",,,"device") + - - f$parse("''libsrc'xpm.h",,,"directory") -$ x11_save = f$trnlnm("X11") -$ define x11 'my_x11',decw$include -$ endif -$ goto LIB_LOOP -$END_LIB: -$ close libdata -$ return -$!------------------------------------------------------------------------------ -$! -$! Take care of driver file with information about external libraries -$! -$CHECK_CONFIG: -$! -$ if (def .eqs. "SYSTEM_XPDFRC") -$ then -$ write aconf "#define SYSTEM_XPDFRC """, resfil, """" -$ else -$ gosub check_cc_def -$ endif -$ return -$!------------------------------------------------------------------------------ -$! -$! Check if this is a define relating to the properties of the C/C++ -$! compiler -$! -$CHECK_CC_DEF: -$ if (def .eqs. "HAVE_DIRENT_H") -$ then -$ copy sys$input: 'tc -$ deck -#include <dirent.h> -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_NDIR_H") -$ then -$ copy sys$input: 'tc -$ deck -#include <sys/ndir.h> -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_DIR_H") -$ then -$ copy sys$input: 'tc -$ deck -#include <sys/dir.h> -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_NDIR_H") -$ then -$ copy sys$input: 'tc -$ deck -#include <ndir.h> -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_SELECT_H") -$ then -$ copy sys$input: 'tc -$ deck -#include <sys/select.h> -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_BSDTYPES_H") -$ then -$ copy sys$input: 'tc -$ deck -#include <sys/bsdtypes.h> -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_STRINGS_H") -$ then -$ copy sys$input: 'tc -$ deck -#include <strings.h> -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_POPEN") -$ then -$ copy sys$input: 'tc -$ deck -#include <stdio.h> - -int main(){ -FILE *pipe; - pipe = popen("DIR","r"); - pclose(pipe); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_MKSTEMP") -$ then -$ copy sys$input: 'tc -$ deck -#include <stdlib.h> - -int main(){ - mkstemp("tempXXXXXX"); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_FSEEKO") -$ then -$ copy sys$input: 'tc -$ deck -#define _LARGEFILE -#include <stdio.h> - -int main(){ -FILE *fp; - fp = fopen("temp.txt","r"); - fseeko(fp,1,SEEK_SET); - fclose(fp); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "_LARGE_FILES") -$ then -$ copy sys$input: 'tc -$ deck -#define _LARGEFILE -#include <stdio.h> - -int main(){ -FILE *fp; - fp = fopen("temp.txt","r"); - fseeko(fp,1,SEEK_SET); - fclose(fp); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_XTAPPSETEXITFLAG") -$ then -$ copy sys$input: 'tc -$ deck -#include <X11/Intrinsic.h> - -int main(){ - XtAppContext app_context; - app_context = XtCreateApplicationContext(); - XtAppSetExitFlag(app_context); - return 0; -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ write aconf "/* ", line, " */" -$ return -$!------------------------------------------------------------------------------ -$! -$! Process config settings passed from the command line -$! (analog to Unix --enable-xxx) -$! -$PROC_CONFIG: -$ if (p1.nes."") -$ then -$ i = 0 -$ qual_list = f$edit(p1,"upcase") -$DEF_LOOP: -$ qual = f$element(i,",",qual_list) -$ if qual .eqs. "," then goto FINISH_DEF -$ i = i + 1 -$ if (qual .eqs. "A4") -$ then -$ mydefs = mydefs + "A4_PAPER#" -$ goto def_loop -$ endif -$ if (qual .eqs. "NO_TEXT_SELECT") -$ then -$ mydefs = mydefs + "NO_TEXT_SELECT#" -$ goto def_loop -$ endif -$ if (qual .eqs. "OPI_SUPPORT") -$ then -$ mydefs = mydefs + "OPI_SUPPORT#" -$ goto def_loop -$ endif -$ if (qual .eqs. "COMPRESS") -$ then -$ compress_def = true -$ goto def_loop -$ endif -$ write sys$output "Qualifier ''qual' not recognized, will be ignored" -$ goto def_loop -$ endif -$FINISH_DEF: -$ return -$! -$!------------------------------------------------------------------------------ -$! -$! Look for the compiler used -$! -$CHECK_COMPILER: -$ its_decc = (f$search("SYS$SYSTEM:CXX$COMPILER.EXE") .nes. "") -$ its_gnuc = .not. its_decc .and. (f$trnlnm("gnu_cc") .nes. "") -$! -$! Exit if no compiler available -$! -$ if (.not. (its_decc .or. its_gnuc)) then goto CXX_ERR -$! -$! Override if requested from the commandline -$! -$ if (p2 .eqs. "DECC") -$ then -$ its_decc = true -$ its_gnuc = false -$ endif -$ if (p1 .eqs. "GNUC") -$ then -$ its_decc = false -$ its_gnuc = true -$ endif -$! -$ if its_decc -$ then -$ ccomp :== "cc/decc/prefix=all ''float'" -$! -$! Take care of includes -$! -$ cc_user = f$trnlnm("DECC$USER_INCLUDE") -$ cc_system = f$trnlnm("DECC$SYSTEM_INCLUDE") -$ cxx_user = f$trnlnm("CXX$USER_INCLUDE") -$ cxx_system = f$trnlnm("CXX$SYSTEM_INCLUDE") -$ define decc$system_include 'incs' -$ define decc$user_include 'incs' -$ define cxx$user_include 'incs' -$ define cxx$system_include 'incs' -$! -$! Check version of the C++ compiler -$! -$ create vms_xpdf_cc_test.cc -$ cxx/lis=vms_xpdf_cc_test.lis/show=all vms_xpdf_cc_test.cc -$ open list vms_xpdf_cc_test.lis -$CXX_LIST: -$ read/end=close_cxx list line -$ start = f$locate("__DECCXX_VER",line) -$ if start .ne. f$length(line) -$ then -$ cxx_ver = f$extract(start+13,8,line) -$ if cxx_ver .gt. 60000000 -$ then -$ cxxdefs = "/warn=(disable=nosimpint)" -$ xpdf_link :== cxxlink -$ endif -$ goto close_cxx -$ endif -$ goto cxx_list -$CLOSE_CXX: -$ close list -$ delete/noconfirm vms_xpdf_cc_test.*;* -$ cxxcomp :== "cxx/prefix=all ''cxxdefs' ''float' /include=cxx$user_include" -$ endif -$! -$ if its_gnuc -$ then -$ ccomp :== "gcc/nocase/include=(''incs')" -$ cxxcomp :== "gcc/plusplus/nocase/include=(''incs')" -$ write optf "gnu_cc:[000000]gcclib.olb/lib" -$ write optf "sys$share:vaxcrtl.exe/share" -$ endif -$ return -$------------------------------------------------------------------------------- -$RESET_ENV: -$ delete/sym/glob cxxcomp -$ delete/sym/glob ccomp -$ delete/sym/glob xpdf_link -$ if (ft2def) then deassign freetype -$ if its_decc -$ then -$ if cc_user .eqs. "" -$ then -$ deass decc$user_include -$ else -$ define decc$user_include 'cc_user' -$ endif -$ if cc_system .eqs. "" -$ then -$ deass decc$system_include -$ else -$ define decc$system_include 'cc_system' -$ endif -$ if cxx_user .eqs. "" -$ then -$ deass cxx$user_include -$ else -$ define cxx$user_include 'cxx_user' -$ endif -$ if cxx_system .eqs. "" -$ then -$ deass cxx$system_include -$ else -$ define cxx$system_include 'cxx_system' -$ endif -$ endif -$ if (x11_save .nes. "") then define x11 'x11_save' -$ return -$! -$!------------------------------------------------------------------------------ -$! -$! Check for properties of C/C++ compiler -$! -$CC_PROP_CHECK: -$ cc_prop = true -$ set message/nofac/noident/nosever/notext -$ on error then continue -$ cc 'tmpnam' -$ if .not. ($status) then cc_prop = false -$ on error then continue -$! The headers might lie about the capabilities of the RTL -$ link/opt=tmp.opt 'tmpnam' -$ if .not. ($status) then cc_prop = false -$ set message/fac/ident/sever/text -$ on error then goto err_exit -$ delete/nolog 'tmpnam'.*;* -$ if cc_prop -$ then -$ write sys$output "Checking for ''def'... yes" -$ write aconf "#define ''def' 1" -$ if (def .eqs. "HAVE_FSEEKO") .or. (def .eqs. "_LARGE_FILES") then - - write aconf "#define _LARGEFILE" -$ else -$ write sys$output "Checking for ''def'... no" -$ write aconf line -$ endif -$ return -$!------------------------------------------------------------------------------ -$! -$! Check Xlibs and write to options file -$! -$CHECK_XLIB: -$ If F$Type (xlibs) .nes. "STRING" Then xlibs = "" -$ need_xt = f$locate("XT",f$edit(xlibs,"upcase")) .lt. f$length(xlibs) -$ need_xmu = f$locate("XMU",f$edit(xlibs,"upcase")) .lt. f$length(xlibs) -$ need_xm = f$locate("MOTIF",f$edit(xlibs,"upcase")) .lt. f$length(xlibs) -$ On Error Then GoTo XUI -$ @sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version -$ if f$extract(4,3,decw$version).eqs."1.0" -$ then -$ if need_xt .or. need_xmu .or. need_xm -$ then -$ write optf "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ write topt "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ endif -$ endif -$ if f$extract(4,3,decw$version).eqs."1.1" -$ then -$ if need_xm then write optf "sys$share:decw$xmlibshr.exe/share" -$ if need_xt then write optf "sys$share:decw$xtshr.exe/share" -$ if nedd_xmu then write optf "sys$share:decw$xmulibshr.exe/share" -$ if need_xm then write topt "sys$share:decw$xmlibshr.exe/share" -$ if need_xt then write topt "sys$share:decw$xtshr.exe/share" -$ if nedd_xmu then write topt "sys$share:decw$xmulibshr.exe/share" -$ endif -$ if f$extract(4,3,decw$version).eqs."1.2" -$ then -$ if need_xm then write optf "sys$share:decw$xmlibshr12.exe/share" -$ if need_xt then write optf "sys$share:decw$xtlibshrr5.exe/share" -$ if need_xmu then write optf "sys$share:decw$xmulibshrr5.exe/share" -$ if need_xm then write topt "sys$share:decw$xmlibshr12.exe/share" -$ if need_xt then write topt "sys$share:decw$xtlibshrr5.exe/share" -$ if need_xmu then write topt "sys$share:decw$xmulibshrr5.exe/share" -$ endif -$ GoTo MAIN -$ XUI: -$! -$ if need_xt .or. need_xmu -$ then -$ write optf "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ write topt "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ endif -$ MAIN: -$ on error then goto err_exit -$ write optf "sys$share:decw$xlibshr.exe/share" -$ write topt "sys$share:decw$xlibshr.exe/share" -$ return -$!------------------------------------------------------------------------------ -$! -$! Check version of Xpdf to build -$! -$CHECK_VERSION: -$ open/read in [.xpdf]config.h -$ check_string = "xpdfVersionNum" -$vloop: -$ read/end=vdone in rec -$ if (f$element(1," " ,rec) .nes. check_string) then goto vloop -$ start = f$locate(check_string,rec) + f$length(check_string) -$ len = f$length(rec) - start -$ version = f$edit(f$extract(start,len,rec),"COLLAPSE") -$vdone: -$ close in -$ return -$!------------------------------------------------------------------------------ |