; ------------------------------------------------------------------------------------------------

FUNCTION os::get_os

RETURN, self.os

END

; ------------------------------------------------------------------------------------------------

FUNCTION os::get_os_family

RETURN, self.family

END

; ------------------------------------------------------------------------------------------------

FUNCTION os::get_vendor_name

RETURN, self.vendor_name

END

; ------------------------------------------------------------------------------------------------

FUNCTION os::get_file_delim

RETURN, self.file_delim

END

; ------------------------------------------------------------------------------------------------

FUNCTION os::get_env_delim

RETURN, self.env_delim

END

; ------------------------------------------------------------------------------------------------

FUNCTION os::init,  VERBOSE = verbose

self.os          = !VERSION.OS
self.family      = !VERSION.OS_FAMILY
self.vendor_name = !VERSION.OS_NAME

CASE STRLOWCASE (self.family) OF

   'windows' : BEGIN

      self.file_delim =  '\'
      self.env_delim  =  ';'

      END

   'macos'   : BEGIN

      self.file_delim = '/'
      self.env_delim  = ':'

      END

   'vms'     : BEGIN

      self.file_delim = ';'
      self.env_delim  = ','

      END

   'unix'    : BEGIN

      self.file_delim = '/'
      self.env_delim  = ':'

      END


    ELSE     : BEGIN

      self.file_delim = '/'
      self.env_delim  = ':'

      END

ENDCASE

IF KEYWORD_SET (verbose) THEN BEGIN

   PRINT, 'Detected OS: ' + self.os + ' OS Family: ' + self.family + '   ' + self.vendor_name

ENDIF

RETURN, 1

END

; ------------------------------------------------------------------------------------------------

PRO os__define

struct = {OS,                $ ; OS object, contains information about the current operating system.
          os:          '',   $ ; operating system name
          family:      '',   $ ; operating system family name
          vendor_name: '',   $ ; operating system name assigned by the vendor.
          file_delim:  '',   $ ; file path delimeter for the current OS.
          env_delim:   ''    $ ; enviroment delimeter for concatenating multiple directories.
          }


RETURN

END