home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / INCLUDE / OAKLAND.H < prev    next >
C/C++ Source or Header  |  1990-12-19  |  15KB  |  673 lines

  1. /*
  2.     oakland.h
  3.  
  4.     % Compiler and OS dependent external declarations used by Oakland C-tools.
  5.       Miscellaneous External Declarations used by Oakland C-tools.
  6.  
  7.     OWL 1.2
  8.     Copyright (c) 1986-1990, by Oakland Group, Inc.
  9.     ALL RIGHTS RESERVED.
  10.  
  11.     Revision History:
  12.     -----------------
  13.      9/12/88 jmd    added prototyping macro
  14.     10/17/88 jmd    changed _$arg to _arg
  15.     12/07/88 ted    re-merged compiler-dependent public definitions.
  16.     12/13/88 jmd    added byte define for Lattice
  17.     10/16/89 jmd    added SIZE_T to OAK_APOLLO conditionals
  18.     10/16/89 jmd    added SEEK_ stuff in OAK_APOLLO conditionals
  19.  
  20.      6/25/89 jmd    added OEXTERN, OGLOBAL stuff for VMS
  21.      7/06/89 gam    added MetaWare High C stuff
  22.      7/07/89 gam    added #define for FNULL
  23.      7/12/89 ted    Added OSTATIC stuff for MetaWare.
  24.      7/14/89 ted    Added memmove/omemmove stuff for MetaWare.
  25.      7/15/89 ted    Added TIME_T, VOID_FPTR; moved int_min,int_max to ostdlib.h.
  26.      7/18/89 jmd    added more stuff for VMS
  27.      8/17/89 jmd    ansified apollo
  28.      9/11/89 jmd    added BORDER_CHARS macro
  29.  
  30.     10/24/89 jmd    added XENIX macro
  31.     11/04/89 jmd    added otoupper, otolower macros
  32.  
  33.     12/07/89 jsm    added Z2 macro and zortech stuff
  34.     12/17/89 jmd    added SEEK stuff to DG
  35.      1/21/89 ted    changed os/2 family api definition method
  36.      2/15/90 jmd    fixed Watcom defines.
  37.      2/29/90 ted    fixed Watcom define.
  38.      3/03/90 jsm    added CI macros
  39.      3/03/90 ted    Added automatic apollo define.
  40.      4/02/90 ted    Added M6 defines & MSC detect.
  41.      6/05/90 gam    Added TSC stuff.
  42.      6/05/90 jmd    Changed to Apollo to include .h files instead of .ins.c
  43.      6/20/90 ted    Added Watcom 8.0 '386 defines.
  44.      7/24/90 ted    Moved from Watcom 7.0 to 8.0.
  45.      8/30/90 ted    defined hard_Claim/Release for all cases except OAK_DOS.
  46.     10/01/90 jmd    added defines for UNIX flavors
  47.     10/04/90 jmd    added auto defines for sun/vms
  48.     10/10/90 ted    added support for TCP Turbo C++ flag.
  49.     10/11/90 pmcm    defined BORDER_CHARS for OAK_VMS
  50.     10/17/90 jsm    added SYSV autodetect 
  51.     10/18/90 jmd    added OCOMP_VER define
  52.     10/20/90 bkd    fixed reference to O_NOLIMIT_H for Apollo.
  53.     10/22/90 bkd    added O_ALIGNSIZE and oroundup macros.
  54.     10/22/90 ted    shuffled OAK_APOLLO automatic symbol definition around.
  55.     10/22/90 ted    added O_FORCE_REPAINT flag to fix apollo repaint bug.
  56.     10/30/90 jsm    Modified SYSV autodetect to allow turbo compiles
  57.     10/30/90 jsm    Added the OAK_SYSVR30 define
  58.     10/30/90 jmd    added OAK_SYS define, OAK_COMP
  59.     10/31/90 jmd    added autodetect for HPUX
  60.     12/05/90 ted    added FNULL for JPI TSC.
  61.      12/5/90 bkd    moved NO_PROTO definition for Unix inside ifdef __STDC__
  62.      12/6/90 bkd    added ifndef to OAK_UNIX definitions of SIZE_T and TIME_T
  63.                      and added ifndef to definition of FALSE
  64.      12/7/90 bkd    added ifdef for OAK_UMIPS
  65.     12/10/90 bkd    added autodetect for Xenix 386
  66.     12/11/90 bkd    added autodetect for AIX
  67.     12/12/90 jmd    fixed O_NOLIMIT define for DG, added O_DIRECT for Xenix
  68.     12/14/90 bkd    changed default UNIX system from SYSVR4 to SYSVR32, added
  69.                     VOID definition for OAK_BSD, fixed Xenix autodetect
  70.                     (was triggered under SCO UNIX), removed O_DIRECT for Xenix.
  71.     12/17/90 jmd    added define of FNULL for APOLLO
  72.     12/19/90 ted/bkd Rearranged unix OAK_SYS usage because SYS-V default was
  73.                     hitting command-line declared unix systems.
  74.         
  75.  
  76.     This file depends on a symbol being #define'd for the Compiler or OS.
  77.  
  78.     Use one of the following:
  79.  
  80.     M5
  81.     M1
  82.     M6
  83.     TC
  84.     TCP
  85.     LC
  86.     MW
  87.     Z2
  88.     W8
  89.     W8386
  90.     CI
  91.     TSC
  92.     OAK_UNIX
  93.     OAK_UMIPS
  94.     OAK_XENIX386
  95.     OAK_APOLLO
  96.     OAK_ULTRIX
  97.     OAK_VMS
  98.     OAK_STRATUS
  99.     OAK_DG
  100.     OAK_QNX
  101.     OAK_SYSVR30
  102.     OAK_SYSVR32
  103.  
  104.     In addition, the symbol OAK_OS2 or OAK_OS2FAPI may be #define'd here.
  105.  
  106.     Other files to look at:
  107.  
  108.     oakpriv.h
  109.     ostdlib.h        OS specific only
  110.     olimits.h        OS specific only
  111.     oakdir.h        OS specific only
  112.  
  113.     dispmode.h        OS specific only
  114.     scancode.h        OS specific only
  115.  
  116.     pcmode.h        PC specific only
  117.     cursdecl.h        UNIX specific only
  118. */
  119. /* -------------------------------------------------------------------------- */
  120.  
  121. /* Define OAK_OS2 if you want to compile for OS/2, protected mode only. */
  122. /* #define OAK_OS2 */
  123.  
  124. /* Define OAK_OS2FAPI for OS/2 with family mode support. */
  125. /* #define OAK_OS2FAPI */
  126.  
  127. #ifdef OAK_OS2FAPI
  128. #    define OAK_OS2
  129. #endif
  130.  
  131. /* -------------------------------------------------------------------------- */
  132. /* Automatic definition of DOS compiler */
  133.  
  134. /* Automatically take care of #definine'ing M6 */
  135. #ifdef _MSC_VER
  136. #    define M6
  137. #    define OAK_SYS
  138. #endif
  139.  
  140. /* Microsoft 5.1 is the same as 5.0 */
  141. #ifdef M1
  142. #    define M5
  143. #endif
  144.  
  145. /* Microsoft 6.0 is the same as 5.x */
  146. #ifdef M5
  147. #    define M6
  148. #endif
  149.  
  150. /* Automatically take care of #definine'ing TC */
  151. #ifdef __TURBOC__
  152. #    ifdef __cplusplus
  153. #        define TCP
  154. #        define OAK_SYS
  155. #    else
  156. #        define TC
  157. #        define OAK_SYS
  158. #    endif
  159. #endif
  160.  
  161. /* Automatically take care of #define'ing TSC */
  162. #ifdef __TSC__
  163. #    define TSC
  164. #    define OAK_SYS
  165. #endif
  166.  
  167. /* Automatically take care of #definine'ing LC */
  168. #ifdef LATTICE
  169. #    define LC
  170. #    define OAK_SYS
  171. #endif
  172.  
  173. /* Automatically do Zortech */
  174. #ifdef __ZTC__
  175. #    define Z2
  176. #    define OAK_SYS
  177. #endif
  178.  
  179. /* Automatically do Watcom */
  180. #ifdef __WATCOMC__
  181. #    ifdef __386__
  182. #        define W8386
  183. #        define OAK_SYS
  184. #    else
  185. #        define W8
  186. #        define OAK_SYS
  187. #    endif
  188. #endif
  189.  
  190. /* Automatically Define CI for C86  */
  191. #ifdef C86
  192. #    define CI
  193. #    define OAK_SYS
  194. #endif
  195. /* ------------------------------------ */
  196. /* Automatic definition of non-DOS, non-Unix compiler and OS symbols */
  197.  
  198. /* Automatically define OAK_APOLLO for Apollo */
  199. #ifdef apollo
  200. #    define OAK_APOLLO
  201. #    define OAK_SYS
  202. #endif
  203.  
  204. /* Automatically define OAK_VMS for VAX/VMS system */
  205. #ifdef VMS
  206. #    define OAK_VMS
  207. #    define OAK_SYS
  208. #endif
  209.  
  210. /* Automatically define OAK_QNX for QNX */
  211. #ifdef QNX
  212. #    define OAK_QNX
  213. #    define OAK_SYS
  214. #endif
  215. /* ------------------------------------ */
  216. /* Automatic definition of Unix compiler and OS symbols */
  217.  
  218. /* detect SunOS */
  219. #ifdef sun
  220. #    ifdef unix
  221. #        define OAK_SUNOS
  222. #    endif
  223. #endif
  224.  
  225. /* detect HP/UX */
  226. #ifdef __hpux
  227. #    define OAK_HPUX
  228. #endif
  229.  
  230. /* automatically define OAK_XENIX386 for XENIX */
  231. #ifdef M_XENIX
  232. #    ifndef unix
  233. #        ifdef M_I386
  234. #            define OAK_XENIX386
  235. #        endif
  236. #    endif
  237. #endif
  238.  
  239. /* detect IBM AIX */
  240. #ifdef _AIX
  241. #    define OAK_AIX
  242. #endif
  243.  
  244. /* End of autodetect section */
  245. /* -------------------------------------------------------------------------- */
  246. /*  UNIX stuff: 
  247.  
  248.     OAK_UNIX defined for all flavors, 
  249.     various feature flags set accordingly in cursdecl.h
  250. */
  251.  
  252. #ifdef OAK_SYSVR30
  253. #    define OAK_UNIX
  254. #    define OAK_SYS
  255. #endif
  256.  
  257. #ifdef OAK_SYSVR4
  258. #    define OAK_UNIX
  259. #    define OAK_SYS
  260. #endif
  261.  
  262. #ifdef OAK_HPUX
  263. #    define OAK_UNIX
  264. #    define OAK_SYS
  265. #endif
  266.  
  267. #ifdef OAK_XENIX386
  268. #    define OAK_UNIX
  269. #    define OAK_SYS
  270. #endif
  271.  
  272. #ifdef OAK_SCOUNIX
  273. #    define OAK_UNIX
  274. #    define OAK_SYS
  275. #endif
  276.  
  277. #ifdef OAK_BSD
  278. #    define OAK_UNIX
  279. #    define O_DIRECT
  280. #    define VOID            char
  281. #    define OAK_SYS
  282. #endif
  283.  
  284. #ifdef OAK_ULTRIX
  285. #    define OAK_UNIX
  286. #    define SIZE_T        size_t
  287. #    define TIME_T        time_t
  288. #    define OAK_SYS
  289. #endif
  290.  
  291. #ifdef OAK_SUNOS
  292. #    define OAK_UNIX
  293. #    define OAK_SYS
  294. #endif
  295.  
  296. #ifdef OAK_AIX
  297. #    define OAK_UNIX
  298. #    define OAK_SYS
  299. #endif
  300.  
  301. #ifdef OAK_NCRTOWER
  302. #    define OAK_UNIX
  303. #    define OAK_SYS
  304. #endif
  305.  
  306. #ifdef OAK_UMIPS
  307. #    define OAK_UNIX
  308. #    define VOID            char
  309. #    define OAK_SYS
  310. #endif
  311.  
  312. /* by default, detect system V (this goes last) */
  313. #ifdef unix
  314. #    ifndef OAK_SYS
  315. #        ifndef OAK_SYSVR32
  316. #            define OAK_SYSVR32
  317. #        endif
  318. #    endif
  319. #endif
  320.  
  321. #ifdef OAK_SYSVR32
  322. #    define OAK_UNIX
  323. #    define OAK_SYS
  324. #endif
  325. /* -------------------------------------------------------------------------- */
  326. /* Extra autodetect stuff that depends on OAK_UNIX being defined */
  327.  
  328. /* Automatically do MetaWare High C (unless we're under UNIX/AIX) */
  329. #ifdef __HIGHC__
  330. #    ifndef OAK_UNIX
  331. #        define MW
  332. #        define OAK_SYS
  333. #    endif
  334. #endif
  335.  
  336. #ifdef DATAGENERAL        /* Data General AOS/VS C Dependent Code */
  337. #    ifndef OAK_UNIX        /* auto detect AOS/VS, not DG-UNIX */
  338. #        define OAK_DG
  339. #        define OAK_SYS
  340. #    endif
  341. #endif
  342. /* -------------------------------------------------------------------------- */
  343. /*  Selectively define stuff we need for the various systems */
  344.  
  345. /*        Microsoft C version 5,6.x dependent code */
  346. #ifdef M6
  347. #    ifdef M5
  348. #    define OAK_COMP    "Microsoft 5.1"
  349. #    else
  350. #    define OAK_COMP    "Microsoft 6.0"
  351. #    endif
  352.  
  353. #    define oak_notused(var)    var
  354. #    ifndef OAK_OS2
  355. #        define OAK_DOS        TRUE
  356. #    endif
  357.     typedef unsigned char    byte;
  358.     typedef    int             boolean;
  359. #endif
  360.  
  361. #ifdef TC    /*          Turbo C Dependent Code         */
  362. #    define OAK_COMP    "Turbo C"
  363.  
  364. #    define oak_notused(var) (var = var)
  365. #    define OAK_DOS            TRUE
  366. #    define FNULL             0                /* NULL for function pointers */
  367.     typedef unsigned char    byte;
  368.     typedef    int             boolean;
  369. #endif
  370.  
  371. #ifdef TCP    /*          Turbo C++ Dependent Code    */
  372. #    define OAK_COMP    "Turbo C++"
  373.  
  374. #    define oak_notused(var) (var = var)
  375. #    define OAK_DOS            TRUE
  376.     typedef unsigned char    byte;
  377.     typedef    int             boolean;
  378. #endif
  379.  
  380. #ifdef TSC /*  JPI TopSpeed C Dependent Code    */
  381. #    define OAK_COMP    "Topspeed C"
  382.  
  383. #    define oak_notused(var)    (var = var)
  384. #    ifndef OAK_OS2
  385. #        define OAK_DOS        TRUE
  386. #    endif
  387.  
  388. #    define FNULL             0                    /* NULL for function pointers */
  389.     typedef unsigned char    byte;
  390.     typedef int                boolean;
  391. #endif
  392.  
  393. #ifdef LC    /*          Lattice C Dependent Code    */
  394. #    define OAK_COMP    "Lattice C"
  395.  
  396. #    ifndef OAK_OS2
  397. #        define OAK_DOS        TRUE
  398. #    endif
  399. #    define oak_notused(var)    (var = 0)
  400. #    define SEEK_SET         0
  401. #    define SEEK_CUR         1
  402. #    define SEEK_END         2
  403. #    define SIZE_T            unsigned
  404. #    define TIME_T            long
  405.     typedef unsigned char    byte;
  406.     typedef    int             boolean;
  407. #endif
  408.  
  409. #ifdef MW    /*    Meta Ware High C Dependent Code    */
  410. #    define OAK_COMP    "MetaWare High C"
  411.  
  412. #    define OAK_DOS            TRUE
  413. #    define OAK_DOS386        TRUE
  414. #    define oak_notused(var)    (var = var)
  415. #    define NO_PROTO
  416. #    define OSTATIC
  417. #    define FNULL             0                    /* NULL for function pointers */
  418.     typedef unsigned char    byte;
  419.     typedef    int             boolean;
  420. #endif
  421.  
  422. #ifdef Z2    /*          Zortech C 2.0+ Dependent Code         */
  423. #    define OAK_COMP    "Zortech C++ 2.0"
  424.  
  425. #    define oak_notused(var)    (var = var)
  426. #    define OAK_DOS            TRUE
  427. #    define FNULL            ((VOID *) 0)        /* NULL for function pointers */
  428.     typedef unsigned char    byte;
  429.     typedef    int             boolean;
  430. #endif
  431.  
  432. /*          Watcom C 8.0 Dependent Code     */
  433. #ifdef W8
  434. #    define OAK_COMP    "Watcom 8.0"
  435.  
  436. #    define oak_notused(var)    (var = var)
  437. #    ifndef OAK_OS2
  438. #        define OAK_DOS        TRUE
  439. #    endif
  440.     typedef unsigned char    byte;
  441.     typedef    int             boolean;
  442. #endif
  443.  
  444. /*          Watcom C 8.0 386 Dependent Code     */
  445. #ifdef W8386
  446. #    define OAK_COMP    "Watcom 8.0 386"
  447.  
  448. #    define oak_notused(var) (var = var)
  449. #     define OAK_DOS            TRUE
  450. #    define OAK_DOS386        TRUE
  451.     typedef unsigned char    byte;
  452.     typedef    int             boolean;
  453. #endif
  454.  
  455. #ifdef CI    /* Computer Innovations C86 specific Code */
  456. #    ifdef OAK_QNX
  457. #    define OAK_COMP    "QNX"
  458. #    else
  459. #    define OAK_COMP    "Computer Innovations C86"
  460. #    endif
  461.  
  462. #    define oak_notused(var) (var = var)
  463. #    define FNULL            ((VOID *) 0)    /* NULL for function pointers */
  464.     typedef unsigned char    byte;
  465.     typedef    int             boolean;
  466. #endif
  467.  
  468. #ifdef OAK_DG
  469. #    define OAK_COMP    "DG AOS/VS"
  470.  
  471. #    define oak_notused(var)
  472. #    define O_NOLIMIT_H
  473. #     define O_NOSTDLIB_H
  474.  
  475. #    define SEEK_SET         0
  476. #    define SEEK_CUR         1
  477. #    define SEEK_END         2
  478.  
  479. #    define SIZE_T            unsigned
  480. #    define TIME_T            long
  481. #    define NO_PROTO
  482. #    define FNULL             0                /* NULL for function pointers */
  483.  
  484.     typedef unsigned char    byte;
  485.     typedef    int             boolean;
  486. #endif
  487.  
  488. #ifdef OAK_VMS
  489. #    define OAK_COMP    "VMS"
  490.  
  491. #    define oak_notused(var)
  492. #    define O_FORCE_REPAINT
  493. #    define SEEK_SET         0
  494. #    define SEEK_CUR         1
  495. #    define SEEK_END         2
  496. #    define SIZE_T            unsigned
  497. #    define TIME_T            long
  498.     typedef unsigned char    byte;
  499.     typedef    int             boolean;
  500.  
  501. #    define OEXTERN globalref  
  502. #    define OGLOBAL globaldef
  503. #endif
  504.  
  505. #ifdef OAK_STRATUS        /*          STRATUS Dependent Code */
  506. #    define OAK_COMP    "Stratus VOS"
  507.  
  508. #    define oak_notused(var)
  509. #    define NO_PROTO
  510. #    define O_NOSTDLIB_H
  511.  
  512.     typedef unsigned char    byte;
  513.     typedef    int             boolean;
  514. #endif
  515.  
  516. #ifdef OAK_APOLLO
  517. #    define OAK_COMP    "Apollo Domain"
  518.  
  519. #    define oak_notused(var)
  520.  
  521. #    define O_DIRECT
  522. #    define O_NOLIMIT_H
  523. #     define O_NOSTDLIB_H
  524.  
  525. #    define FNULL             0                /* NULL for function pointers */
  526.  
  527. #    ifndef SEEK_SET
  528. #        define SEEK_SET         0
  529. #        define SEEK_CUR         1
  530. #        define SEEK_END         2
  531. #    endif
  532.  
  533. #    define SIZE_T            unsigned
  534. #    define TIME_T            long
  535.     typedef unsigned char    byte;
  536.  
  537.     /* fix definition of toupper/lower */
  538.  
  539. #    define otolower(c)        ((isupper(c)) ? (tolower(c)) : (c))
  540. #    define otoupper(c)        ((islower(c)) ? (toupper(c)) : (c))
  541.  
  542.     /* For boolean typedef */
  543. #    include <apollo/base.h>
  544. #endif
  545.  
  546. #ifdef OAK_UNIX        /*          UNIX Dependent Code */
  547. #    define oak_notused(var)
  548. #    define OAK_COMP        "UNIX"
  549. #    define O_FORCE_REPAINT
  550.  
  551. #    ifndef __STDC__
  552.     /* K&R UNIX compiler */
  553. #        define O_NOLIMIT_H
  554. #        define O_NOSTDLIB_H
  555. #        define NO_PROTO
  556. #    else
  557.     /* ANSI UNIX compiler */
  558. #    endif
  559.  
  560. #    define SEEK_SET         0
  561. #    define SEEK_CUR         1
  562. #    define SEEK_END         2
  563. #    ifndef SIZE_T
  564. #        define SIZE_T            unsigned
  565. #    endif
  566. #    ifndef TIME_T
  567. #        define TIME_T            long
  568. #    endif
  569. #    define FNULL             0                /* NULL for function pointers */
  570.     typedef unsigned char    byte;
  571.     typedef    int             boolean;
  572. #endif
  573. /* -------------------------------------------------------------------------- */
  574. /* Machine architecture defines: */
  575.  
  576. #ifdef sparc
  577. #    define O_ALIGNSIZE        sizeof(long)
  578. #endif    /* sparc */
  579.  
  580. #ifdef OAK_HPUX
  581. #    define O_ALIGNSIZE        sizeof(long)
  582. #endif    /* hp9000 */
  583.  
  584. #ifndef O_ALIGNSIZE
  585. #    define O_ALIGNSIZE        sizeof(char)
  586. #endif    /* !O_ALIGNSIZE */
  587.  
  588. /* -------------------------------------------------------------------------- */
  589. /* portable macros */
  590.  
  591. #ifndef otolower
  592. #    define otolower(c)        tolower(c)
  593. #endif
  594.  
  595. #ifndef otoupper
  596. #    define otoupper(c)        toupper(c)
  597. #endif
  598.  
  599. #ifndef oroundup
  600. #    define oroundup(n,gran)    (((n + gran - 1) / gran) * gran)
  601. #endif    /* !ordoundup */
  602.  
  603. /* data types and constants */
  604. #ifndef TRUE
  605. #define     TRUE     1
  606. #endif
  607. #ifndef FALSE
  608. #define     FALSE     0
  609. #endif
  610.  
  611. typedef void (*VOID_FPTR)(void);
  612.  
  613. #ifndef FNULL
  614. #define FNULL    ((VOID_FPTR) 0)    /* NULL for function pointers */
  615. #endif
  616.  
  617. #ifndef VOID
  618. #define VOID     void            /* define VOID to char on older systems */
  619. #endif
  620.  
  621. #ifndef SIZE_T
  622. #define SIZE_T    size_t            /* define SIZE_T to unsigned on older systems */
  623. #endif
  624.  
  625. #ifndef TIME_T
  626. #define TIME_T    time_t            /* define TIME_T to long on older systems */
  627. #endif
  628.  
  629. /* defines for compilers that don't handle static structures correctly */
  630. #ifndef OEXTERN
  631. #    define OEXTERN extern  
  632. #endif
  633.  
  634. #ifndef OGLOBAL
  635. #    define OGLOBAL 
  636. #endif
  637.  
  638. #ifndef OSTATIC
  639. #    define OSTATIC static
  640. #endif
  641.  
  642. /** Reentrancy protection functions **/
  643. #ifndef OAK_DOS
  644. #    define hard_Claim()                hard_ProtectDmgr()
  645. #    define hard_Release()            hard_UnProtectDmgr()
  646. #else
  647. #    define hard_Claim()
  648. #    define hard_Release()
  649. #endif
  650.  
  651. /*** useful constants ***/
  652.  
  653. #define    OAK_HERE          0
  654. #define    OAK_UP             -1
  655. #define    OAK_DOWN        -2
  656. #define    OAK_RIGHT        -3
  657. #define    OAK_LEFT        -4
  658.  
  659. /*** use fancy characters in borders? ***/
  660. #ifdef OAK_DOS
  661. #    define BORDER_CHARS
  662. #endif
  663.  
  664. #ifdef OAK_OS2
  665. #    define BORDER_CHARS
  666. #endif
  667.  
  668. #ifdef OAK_VMS
  669. #    define BORDER_CHARS
  670. #endif
  671. /* -------------------------------------------------------------------------- */
  672.  
  673.