PRO FXBHMAKE,HEADER,NROWS,EXTNAME,COMMENT,DATE=DATE,    $
        INITIALIZE=INITIALIZE,EXTVER=EXTVER,EXTLEVEL=EXTLEVEL,  $
        ERRMSG=ERRMSG
;
    ON_ERROR,2
;
;  Check the number of parameters first.
;
    IF N_PARAMS() LT 2 THEN BEGIN
        MESSAGE = 'Calling sequence:  FXBHMAKE, HEADER, NROWS ' + $
            '[, EXTNAME [, COMMENT ]]'
        IF N_ELEMENTS(ERRMSG) NE 0 THEN BEGIN
            ERRMSG = MESSAGE
            RETURN
        END ELSE MESSAGE, MESSAGE
    ENDIF
;
;  If requested, then initialize the header.
;
    IF KEYWORD_SET(INITIALIZE) THEN BEGIN
        HEADER = STRARR(36)
        HEADER[0] = 'END' + STRING(REPLICATE(32B,77))
;
;  Else, if undefined, then initialize the header.
;
    END ELSE IF N_ELEMENTS(HEADER) EQ 0 THEN BEGIN
        HEADER = STRARR(36)
        HEADER[0] = 'END' + STRING(REPLICATE(32B,77))
;
;  Otherwise, make sure that HEADER is a string array, and remove any keywords
;  that describe the format of the file.
;
    END ELSE BEGIN
        SZ = SIZE(HEADER)
        IF (SZ[0] NE 1) OR (SZ[2] NE 7) THEN BEGIN
            MESSAGE = 'HEADER must be a (one-dimensional) ' + $
                'string array'
            IF N_ELEMENTS(ERRMSG) NE 0 THEN BEGIN
                ERRMSG = MESSAGE
                RETURN
            END ELSE MESSAGE, MESSAGE
        ENDIF
        IF N_ELEMENTS(ERRMSG) NE 0 THEN BEGIN
            FXHCLEAN,HEADER,ERRMSG=ERRMSG
            IF ERRMSG EQ '' THEN RETURN
        END ELSE FXHCLEAN,HEADER
    ENDELSE
;
;  Add the required keywords.  Start out with a completely blank table, with no
;  columns.
;
    FXADDPAR,HEADER,'XTENSION','BINTABLE','Written by IDL:  '+ SYSTIME()
    FXADDPAR,HEADER,'BITPIX',8
    FXADDPAR,HEADER,'NAXIS',2,'Binary table'
    FXADDPAR,HEADER,'NAXIS1',0,'Number of bytes per row'
    FXADDPAR,HEADER,'NAXIS2',LONG(NROWS),'Number of rows'
    FXADDPAR,HEADER,'PCOUNT',0,'Random parameter count'
    FXADDPAR,HEADER,'GCOUNT',1,'Group count'
    FXADDPAR,HEADER,'TFIELDS',0,'Number of columns'
;
;  If requested, add the EXTNAME keyword to the header.
;
    IF N_PARAMS() GE 3 THEN BEGIN
        IF N_PARAMS() EQ 3 THEN COMMENT = 'Extension name'
        FXADDPAR,HEADER,'EXTNAME',EXTNAME,COMMENT
    ENDIF
;
;  If requested, add the EXTVER keyword to the header.
;
    IF N_ELEMENTS(EXTVER) EQ 1 THEN     $
        FXADDPAR,HEADER,'EXTVER',LONG(EXTVER),'Extension version'
;
;  If requested, add the EXTLEVEL keyword to the header.
;
    IF N_ELEMENTS(EXTLEVEL) EQ 1 THEN   $
        FXADDPAR,HEADER,'EXTLEVEL',LONG(EXTLEVEL),'Extension level'
;
;  If requested, add the DATE keyword to the header, containing the current
;  date.
;
    IF KEYWORD_SET(DATE) THEN BEGIN
            GET_DATE,DTE                    ;Get current date as CCYY-MM-DD
            FXADDPAR,HEADER,'DATE',DTE,'Creation date'
    ENDIF
;
    IF N_ELEMENTS(ERRMSG) NE 0 THEN ERRMSG = ''
    RETURN
    END