C$Procedure WRTSEG ( MPFPEF, write data into an EK segment ) SUBROUTINE WRTSEG( HANDLE, TABNAM, MAXCOL, RECIDX, . CNAMES, CDECLS, TMPCNS, TMPCDS, . RCPTRS, WKINDX, FLTIME, FLCMD, . FLPAR, FLCHV, FLCHF, FLDPV, . FLDPF, FLINV, FLINF, FLCHAR, . FLCHAE, FLCHAF, FLFLG, FLENTR, . FLPRID, ENTSZS ) C$ Abstract C C This subroutine writes data collected in the program buffers C into a single segment of output EK file using fast loader C subroutines. C C$ Copyright C C Copyright (1995), California Institute of Technology. C U.S. Government sponsorship acknowledged. C C$ Required_Reading C C EK.REQ C C$ Keywords C C None. C C$ Declarations INTEGER HANDLE CHARACTER*(*) TABNAM INTEGER MAXCOL INTEGER RECIDX CHARACTER*(*) CNAMES ( * ) CHARACTER*(*) CDECLS ( * ) CHARACTER*(*) TMPCNS ( * ) CHARACTER*(*) TMPCDS ( * ) INTEGER RCPTRS ( * ) INTEGER ENTSZS ( * ) INTEGER WKINDX ( * ) DOUBLE PRECISION FLTIME ( * ) CHARACTER*(*) FLCMD ( * ) CHARACTER*(*) FLCHV ( * ) LOGICAL FLCHF ( * ) CHARACTER*(*) FLPAR ( * ) DOUBLE PRECISION FLDPV ( * ) LOGICAL FLDPF ( * ) INTEGER FLINV ( * ) LOGICAL FLINF ( * ) CHARACTER*(*) FLCHAR ( * ) INTEGER FLCHAE ( * ) LOGICAL FLCHAF ( * ) CHARACTER*(*) FLFLG ( * ) CHARACTER*(*) FLENTR ( * ) INTEGER FLPRID ( * ) C$ Brief_I/O C C Variable I/O Description C -------- --- -------------------------------------------------- C HANDLE I EK file handle. C TABNAM I EK data table name. C MAXCOL I Maximum number of column in the table. C RECIDX I Number of records to write into the segment. C CNAMES I Column names. C CDECLS I Column declarations. C TMPCNS I Ancillary array for column names. C TMPCDS I Ancillary array for column declarations. C RCPTRS I Ancillary array for EK fast loaders. C ENTSZS I Entity sizes. C WKINDX I Ancillary array for EK fast loaders. C FLTIME I Times. C FLCMD I Command/subsystem names. C FLCHV I Character values. C FLCHF I Character value NULL flags. C FLPAR I Parameter/attribute names. C FLDPV I DP values. C FLDPF I DP values null flags. C FLINV I INT values. C FLINF I INT value NULL flags. C FLCHAR I Character array values. C FLCHAE I Character array value entry sizes. C FLCHAF I Character array value NULL flags. C FLFLG I Available value flags. C FLENTR I Entry IDs. C FLPRID I Parameter indexes. C C$ Detailed_Input C C Not provided yet. C C$ Detailed_Output C C None. C C$ Parameters C C None. C C$ Exceptions C C 1) If all column names are blank string reports an error C SPICE(NOTABLECOLUMNS). C C 2) Some error related to incorrect table and column C names, column declarations, number of records, etc C can be reported by routines called by this routine. C C$ Files C C Write a single segment in an EK file opened for write access C and given by its handle. C C$ Particulars C C Output EK file must be opened for write access before this C subroutines is called. C C$ Examples C C None. (See MPFPEF main program code) C C$ Restrictions C C Not described yet. C C$ Literature_References C C None. C C$ Author_and_Institution C C B.V. Semenov (JPL) C C$ Version C C- Beta Version 1.0.0, 07-OCT-1996 (NVS) C C-& C C SPICELIB functions C LOGICAL RETURN C C Internal variables C INTEGER SEGNO INTEGER NCOLS INTEGER I C C Standard SPICE error handling. C IF ( RETURN () ) THEN RETURN ELSE CALL CHKIN ( 'WRTSEG' ) END IF C C Find "real" number of columns and pack non-blank column names C declarations into temporary array. C NCOLS = 0 DO I = 1, MAXCOL IF ( CNAMES(I) .NE. ' ' ) THEN NCOLS = NCOLS + 1 TMPCNS( NCOLS ) = CNAMES( I ) TMPCDS( NCOLS ) = CDECLS( I ) END IF END DO C C If this number is 0 then report an error and return. C IF ( NCOLS .EQ. 0 ) THEN CALL DLTEEK CALL SETMSG ( 'No columns provided for the table #.' ) CALL ERRCH ( '#', TABNAM ) CALL SIGERR ( 'SPICE(NOTABLECOLUMNS)' ) END IF C C Sort column names and declaration if some columns are not needed. C IF ( MAXCOL .NE. NCOLS ) THEN END IF C C FAST LOAD: start segment. C CALL EKIFLD ( HANDLE, TABNAM, NCOLS, RECIDX, . TMPCNS, TMPCDS, SEGNO, RCPTRS ) C C loading command times ... C IF ( CNAMES(1) .NE. ' ' ) THEN CALL EKACLD ( HANDLE, SEGNO, CNAMES(1), FLTIME, . ENTSZS, FLDPF, RCPTRS, WKINDX ) END IF C C loading command names ... C IF ( CNAMES(2) .NE. ' ' ) THEN CALL EKACLC ( HANDLE, SEGNO, CNAMES(2), FLCMD, . ENTSZS, FLDPF, RCPTRS, WKINDX ) END IF C C loading parameter names ... C IF ( CNAMES(3) .NE. ' ' ) THEN CALL EKACLC ( HANDLE, SEGNO, CNAMES(3), FLPAR, . ENTSZS, FLDPF, RCPTRS, WKINDX ) END IF C C loading character values ... C IF ( CNAMES(4) .NE. ' ' ) THEN CALL EKACLC ( HANDLE, SEGNO, CNAMES(4), FLCHV, . ENTSZS, FLCHF, RCPTRS, WKINDX ) END IF C C loading dp values ... C IF ( CNAMES(5) .NE. ' ' ) THEN CALL EKACLD ( HANDLE, SEGNO, CNAMES(5), FLDPV, . ENTSZS, FLDPF, RCPTRS, WKINDX ) END IF C C loading int values ... C IF ( CNAMES(6) .NE. ' ' ) THEN CALL EKACLI ( HANDLE, SEGNO, CNAMES(6), FLINV, . ENTSZS, FLINF, RCPTRS, WKINDX ) END IF C C loading value flags ... C IF ( CNAMES(7) .NE. ' ' ) THEN CALL EKACLC ( HANDLE, SEGNO, CNAMES(7), FLFLG, . ENTSZS, FLDPF, RCPTRS, WKINDX ) END IF C C loading entry ids ... C IF ( CNAMES(8) .NE. ' ' ) THEN CALL EKACLC ( HANDLE, SEGNO, CNAMES(8), FLENTR, . ENTSZS, FLDPF, RCPTRS, WKINDX ) END IF C C loading parameter indexes ... C IF ( CNAMES(9) .NE. ' ' ) THEN CALL EKACLI ( HANDLE, SEGNO, CNAMES(9), FLPRID, . ENTSZS, FLINF, RCPTRS, WKINDX ) END IF C C loading character value arrays ... C IF ( CNAMES(10) .NE. ' ' ) THEN CALL EKACLC ( HANDLE, SEGNO, CNAMES(10), FLCHAR, . FLCHAE, FLCHAF, RCPTRS, WKINDX ) END IF C C finish fast load of the segment ... C CALL EKFFLD ( HANDLE, SEGNO, RCPTRS ) C C Check out. C CALL CHKOUT ( 'WRTSEG' ) RETURN END