code: def appdata_dir(appname=None, roaming=False):
      """appdata_dir(appname=None, roaming=False)
  
      Get the path to the application directory, where applications are allowed
      to write user specific files (e.g. configurations). For non-user specific
      data, consider using common_appdata_dir().
      If appname is given, a subdir is appended (and created if necessary).
      If roaming is True, will prefer a roaming directory (Windows Vista/7).
      """
  
      # Define default user directory
      userDir = os.getenv("IMAGEIO_USERDIR", None)
      if userDir is None:
          userDir = os.path.expanduser("~")
          if not os.path.isdir(userDir):  # pragma: no cover
              userDir = "/var/tmp"  # issue #54
  
      # Get system app data dir
      path = None
      if sys.platform.startswith("win"):
          path1, path2 = os.getenv("LOCALAPPDATA"), os.getenv("APPDATA")
          path = (path2 or path1) if roaming else (path1 or path2)
      elif sys.platform.startswith("darwin"):
          path = os.path.join(userDir, "Library", "Application Support")
      # On Linux and as fallback
      if not (path and os.path.isdir(path)):
          path = userDir
  
      # Maybe we should store things local to the executable (in case of a
      # portable distro or a frozen application that wants to be portable)
      prefix = sys.prefix
      if getattr(sys, "frozen", None):
          prefix = os.path.abspath(os.path.dirname(sys.executable))
      for reldir in ("settings", "../settings"):
          localpath = os.path.abspath(os.path.join(prefix, reldir))
          if os.path.isdir(localpath):  # pragma: no cover
              try:
                  open(
                      os.path.join(localpath, "test.write"), "wb"
                  ).close()
                  os.remove(os.path.join(localpath, "test.write"))
              except IOError:
                  pass  # We cannot write in this directory
              else:
                  path = localpath
                  break
  
      # Get path specific for this app
      if appname:
          if path == userDir:
              appname = "." + appname.lstrip(
                  "."
              )  # Make it a hidden directory
          path = os.path.join(path, appname)
          if not os.path.isdir(path):  # pragma: no cover
              os.makedirs(path, exist_ok=True)
  
      # Done
      return path
  
imports: from collections import OrderedDict
  import numpy
  import os
  import re
  import struct
  import sys
  import time
  import logging
label_desc: Use image node_id 5 for calling a global function with example usage: appdata_dir(appname, roaming) and returns: path