;******************************************************************************
;* File name: ql_load_ref_tbl.pro                                             *
;*                                                                            *
;* Content  : 	ql_load_ref_tbl                                               *
;*                                                                            *
;*                                                                            *
;* Date		Author		Comment                                       *
;* -------------------------------------------------------------------------- *
;* 10-01-94	E.PETIT		Creation                                      *
;* 27-01-94	E.PETIT		Add process id table                          *
;* 08-02-94	E.PETIT		Add Wave length value                         *
;* 02-03-94	E.PETIT		Add Dispersion angle values                   *
;* 25-03-94	E.PETIT		Remove wave_len.ref                           *
;* 20-04-94	E.PETIT		Date format                                   *
;* 25-01-95	N.MORISSET	Bad format for Target reference table         *
;* 13-06-97     N.MORISSET      Problem with scient_id consists of 3 digits   * 
;*                                                                            *
;******************************************************************************


;***
;##############################################################################
;#Function  name   : ql_load_ref_tbl                                          #
;#LEVEL            :                                                          #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : Load References tables                                   #
;#Creation date    : December 1993                                            #
;#Update date      : E.PETIT		Add process id table                  #
;#                   08-02-94	E.PETIT		Add Wave length value         #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO  ql_load_ref_tbl, err

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON file_com
  COMMON format_com
  COMMON target_com
  COMMON line_com
  COMMON scient_com
  COMMON meth_com
  COMMON instr_id_com
  COMMON instr_evt_com
  COMMON proc_id_com
  COMMON err_msg_com
  COMMON disp_ang_com
  COMMON slit_ang_com
  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err             = 0


  nb_format       = 0
  number          = 0
  libel           = ''
  size_x          = 0L
  size_y          = 0L
  type            = ''
  type_size       = 0
  display_code    = 0
                 
  nb_target      = 0
  target_id      = 0
  target_name    = ''
                 
  nb_line        = 0
  lambda         = 0.0
  line_name      = ''
                 
  nb_scient      = 0
  scient_id      = 0
  scient_name    = ''
                 
  nb_meth        = 0
  meth_id        = 0
  meth_name      = ''
                 
  nb_instr_id    = 0
  instr_id_id    = 0
  instr_id_name  = ''

  nb_instr_evt   = 0
  instr_evt_id   = 0
  instr_evt_name = ''
  
  nb_err_msg     = 0
  err_msg_id     = 0
  err_msg_txt    = ''

  nb_proc_id     = 0
  proc_id_id     = 0
  proc_id_txt    = ''

  nb_disp_ang    = 0
  disp_date      = ''
  disp_l1        = 0.0
  disp_l2        = 0.0
  disp_ang       = 0.0
  disp_cmt       = ''

  nb_slit_ang    = 0
  slit_date      = ''
  slit_l1        = 0.0
  slit_ang       = 0.0
  slit_cmt       = ''
  slit_counter   = 0L

  ;============================================================================
  ;                       Processing 
  ;============================================================================
  
  ; --------------------------
  ; Load Format Reference File 
  ; --------------------------
   OPENR, unit, format_ref_file, /GET_LUN 
  ; First compute number of formats 
  ; -------------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I2,X,A20,X,I4,X,I4,X,A1,X,I1,X,I4)' , $
           number      , $
           libel       , $
           size_x      , $
           size_y      , $
           type        , $
           type_size   , $
           display_code   
    nb_format = nb_format + 1
  END
  ; Return to top of file, allocate and format_lst structure
  ; --------------------------------------------------------
  POINT_LUN, unit, 0
  format_lst = REPLICATE ( {format_str      , $
                            number       : 0  , $
                            libel        :''  , $
                            size_x       :0L  , $
                            size_y       :0L  , $
                            type         :''  , $
                            type_size    :0L  , $
                            display_code :0     $
                            }, nb_format)
   i = 0
   WHILE NOT EOF(unit) DO BEGIN
    READF, unit       , $
           FORMAT = '(I2,X,A20,X,I4,X,I4,X,A1,X,I1,X,I4)', $
           number     , $
           libel      , $
           size_x     , $
           size_y     , $
           type       , $
           type_size  , $
           display_code    
    
    format_lst(i).number       = number
    format_lst(i).libel        = libel
    format_lst(i).size_x       = size_x
    format_lst(i).size_y       = size_y
    format_lst(i).type         = type
    format_lst(i).type_size    = type_size
    format_lst(i).display_code = display_code
    i = i + 1
  END
  FREE_LUN, unit   

  ; --------------------
  ; Load target Ref file 
  ; --------------------
   OPENR, unit, target_ref_file, /GET_LUN 
  ; First compute number of targets 
  ; -------------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I3,X,A20)' , $
           target_id             , $
           target_name      
    nb_target = nb_target + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  target_lst = REPLICATE ( {target_str           , $
                            target_id       : 0  , $
                            target_name     :''    $
                            }, nb_target)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I3,X,A20)' , $
           target_id             , $
           target_name      
    target_lst(i).target_id   = target_id
    target_lst(i).target_name = target_name
    i = i + 1
  END
  FREE_LUN, unit   

  ; ------------------
  ; Load line Ref file 
  ; ------------------
   OPENR, unit, line_ref_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(F8.3,X,A20)' , $
           lambda                  , $
           line_name          
    nb_line = nb_line + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  line_lst = REPLICATE ( {line_str           , $
                          lambda        :0.0 , $
                          line_name     :''    $
                            }, nb_line)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(F8.3,X,A20)' , $
           lambda                  , $
           line_name      
    line_lst(i).lambda    = lambda
    line_lst(i).line_name = line_name
    i = i + 1
  END
  FREE_LUN, unit   


  ; --------------------
  ; Load Scient Ref file 
  ; --------------------
   OPENR, unit, scient_ref_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I3,X,A20)' , $
           scient_id             , $
           scient_name          
    nb_scient = nb_scient + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  scient_lst = REPLICATE ( {scient_str         , $
                            scient_id       :0 , $
                            scient_name     :''    $
                            }, nb_scient)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I3,X,A20)' , $
           scient_id             , $
           scient_name      
    scient_lst(i).scient_id    = scient_id
    scient_lst(i).scient_name  = scient_name
    i = i + 1
  END
  FREE_LUN, unit   

  ; ------------------------------
  ; Load Data Compression Ref file 
  ; ------------------------------
   OPENR, unit, data_cmpr_ref_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I2,X,A20)' , $
           meth_id               , $
           meth_name          
    nb_meth = nb_meth + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  meth_lst = REPLICATE ( {meth_str         , $
                          meth_id       :0 , $
                          meth_name     :''    $
                          }, nb_meth)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I2,X,A20)' , $
           meth_id               , $
           meth_name      
    meth_lst(i).meth_id    = meth_id
    meth_lst(i).meth_name  = meth_name
    i = i + 1
  END
  FREE_LUN, unit   

  ; ----------------------
  ; Load Instr Id Ref file 
  ; ----------------------
   OPENR, unit, instr_id_ref_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I2,X,A20)' , $
           instr_id_id               , $
           instr_id_name          
    nb_instr_id = nb_instr_id + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  instr_id_lst = REPLICATE ( {instr_id_str         , $
                          instr_id_id       :0 , $
                          instr_id_name     :''    $
                          }, nb_instr_id)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I2,X,A20)' , $
           instr_id_id               , $
           instr_id_name      
    instr_id_lst(i).instr_id_id    = instr_id_id
    instr_id_lst(i).instr_id_name  = instr_id_name
    i = i + 1
  END
  FREE_LUN, unit   


  ; -----------------------
  ; Load Instr Evt Ref file 
  ; -----------------------
   OPENR, unit, instr_evt_ref_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I2,X,A20)' , $
           instr_evt_id               , $
           instr_evt_name          
    nb_instr_evt = nb_instr_evt + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  instr_evt_lst = REPLICATE ( {instr_evt_str         , $
                          instr_evt_id       :0 , $
                          instr_evt_name     :''    $
                          }, nb_instr_evt)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit        , $
           FORMAT = '(I2,X,A20)' , $
           instr_evt_id               , $
           instr_evt_name      
    instr_evt_lst(i).instr_evt_id    = instr_evt_id
    instr_evt_lst(i).instr_evt_name  = instr_evt_name
    i = i + 1
  END
  FREE_LUN, unit   

  ; ------------------
  ; Load Err Msg Table
  ; ------------------
   OPENR, unit, err_msg_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                  , $
           FORMAT = '(I4,X,A80)' , $
           err_msg_id            , $
           err_msg_txt          
    nb_err_msg = nb_err_msg + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  err_msg_lst = REPLICATE ( {err_msg_str     , $
                             err_msg_id  :0  , $
                             err_msg_txt :''   $
                           }, nb_err_msg)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                  , $
           FORMAT = '(I4,X,A80)' , $
           err_msg_id            , $
           err_msg_txt          
    err_msg_lst(i).err_msg_id    = err_msg_id
    err_msg_lst(i).err_msg_txt   = err_msg_txt
    i = i + 1
  END

  ; ------------------
  ; Load Proc Id Table
  ; ------------------
   OPENR, unit, proc_id_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                  , $
           FORMAT = '(I2,X,A40)' , $
           proc_id_id            , $
           proc_id_txt          
    nb_proc_id = nb_proc_id + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  proc_id_lst = REPLICATE ( {proc_id_str     , $
                             proc_id_id  :0  , $
                             proc_id_txt :''   $
                           }, nb_proc_id)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                  , $
           FORMAT = '(I2,X,A40)' , $
           proc_id_id            , $
           proc_id_txt          
    proc_id_lst(i).proc_id_id    = proc_id_id
    proc_id_lst(i).proc_id_txt   = proc_id_txt
    i = i + 1
  END
  FREE_LUN, unit  

  ; ----------------------------
  ; Load Dispertion angle table
  ; --------------------------
   OPENR, unit, disp_ang_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                                        , $
           FORMAT = '(A10,X,F8.3,X,F8.3,X,F7.3,X,A20)' , $
           disp_date                                   , $
           disp_l1                                     , $
           disp_l2                                     , $
           disp_ang                                    , $
           disp_cmt      
             
    nb_disp_ang = nb_disp_ang + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  disp_ang_lst = REPLICATE ( {disp_ang_str          , $
                              disp_date      : ''   , $
                              disp_l1        : 0.0  , $
                              disp_l2        : 0.0  , $
                              disp_ang       : 0.0  , $
                              disp_cmt       : ''     $
                           }, nb_disp_ang)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                                        , $
           FORMAT = '(A11,X,F8.3,X,F8.3,X,F7.3,X,A20)' , $
           disp_date                                   , $
           disp_l1                                     , $
           disp_l2                                     , $
           disp_ang                                    , $
           disp_cmt      

    disp_ang_lst(i).disp_date  = disp_date
    disp_ang_lst(i).disp_l1    = disp_l1  
    disp_ang_lst(i).disp_l2    = disp_l2  
    disp_ang_lst(i).disp_ang   = disp_ang 
    disp_ang_lst(i).disp_cmt   = disp_cmt 
    i = i + 1
  END
  FREE_LUN, unit  

  ; ----------------------------
  ; Load slit  angle table
  ; --------------------------
   OPENR, unit, slit_ang_file, /GET_LUN 
  ; First compute number of lines
  ; -----------------------------
  nb_slit_ang=0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                                        , $
           FORMAT = '(I10,X,A11,X,F8.3,X,F7.3,X,A20)' , $
           slit_counter                                , $
           slit_date                                   , $
           slit_l1                                     , $
           slit_ang                                    , $
           slit_cmt      

    nb_slit_ang = nb_slit_ang + 1
  END
  ; Return to top of file
  ; ---------------------
  POINT_LUN, unit, 0
  slit_ang_lst = REPLICATE ( {slit_ang_str          , $
			      slit_counter   : 0L   , $
                              slit_date      : ''   , $
                              slit_l1        : 0.0  , $
                              slit_ang       : 0.0  , $
                              slit_cmt       : ''     $
                           }, nb_slit_ang)
  i = 0
  WHILE NOT EOF(unit) DO BEGIN
    READF, unit                                        , $
           FORMAT = '(I10,X,A11,X,F8.3,X,F7.3,X,A20)'  , $
           slit_counter				       , $
           slit_date                                   , $
           slit_l1                                     , $
           slit_ang                                    , $
           slit_cmt      

    slit_ang_lst(i).slit_counter  = slit_counter
    slit_ang_lst(i).slit_date  = slit_date
    slit_ang_lst(i).slit_l1    = slit_l1  
    slit_ang_lst(i).slit_ang   = slit_ang 
    slit_ang_lst(i).slit_cmt   = slit_cmt 
    i = i + 1
  END
  FREE_LUN, unit  


  RETURN 
END
