docs: def show_human():
      """Curses terminal with standard outputs """
      form = 'RAW'
      units = 'raw'
  
      data_window = curses.newwin(19, 39, 0, 0)
      sat_window = curses.newwin(14, 39, 0, 40)
      device_window = curses.newwin(6, 39, 13, 40)
      packet_window = curses.newwin(7, 79, 19, 0)
  
      for new_data in gpsd_socket:
          if new_data:
              data_stream.unpack(new_data)
  
              screen.nodelay(1)
              key_press = screen.getch()
  
              if key_press == ord('q'):  # quit
                  shut_down()
              elif key_press == ord('a'):  # NMEA
                  gpsd_socket.watch(enable=False, gpsd_protocol='json')
                  gpsd_socket.watch(gpsd_protocol='nmea')
                  show_nmea()
              elif key_press == ord('0'):  # raw
                  form = 'RAW'
                  units = 'raw'
                  data_window.clear()
              elif key_press == ord('1'):  # DDD
                  form = 'DDD'
                  data_window.clear()
              elif key_press == ord('2'):  # DMM
                  form = 'DMM'
                  data_window.clear()
              elif key_press == ord('3'):  # DMS
                  form = 'DMS'
                  data_window.clear()
              elif key_press == ord('m'):  # Metric
                  units = 'metric'
                  data_window.clear()
              elif key_press == ord('i'):  # Imperial
                  units = 'imperial'
                  data_window.clear()
              elif key_press == ord('n'):  # Nautical
                  units = 'nautical'
                  data_window.clear()
              elif key_press == ord('d'):  # Refresh device listings
                  gpsd_socket.send('?DEVICES;')
                  device_window.clear()
  
              data_window.box()
              data_window.addstr(0, 2, 'GPS3 Python {}.{}.{} GPSD Interface'.format(*sys.version_info), curses.A_BOLD)
              data_window.addstr(1, 2, 'Time:  {time} '.format(**data_stream.TPV))
              data_window.addstr(2, 2, 'Latitude:  {} '.format(sexagesimal(data_stream.TPV['lat'], 'lat', form)))
              data_window.addstr(3, 2, 'Longitude: {} '.format(sexagesimal(data_stream.TPV['lon'], 'lon', form)))
              data_window.addstr(4, 2, 'Altitude:  {} {}'.format(*unit_conversion(data_stream.TPV['alt'], units, length=True)))
              data_window.addstr(5, 2, 'Speed:     {} {}'.format(*unit_conversion(data_stream.TPV['speed'], units)))
              data_window.addstr(6, 2, 'Heading:   {track}° True'.format(**data_stream.TPV))
              data_window.addstr(7, 2, 'Climb:     {} {}/s'.format(*unit_conversion(data_stream.TPV['climb'], units, length=True)))
              data_window.addstr(8, 2, 'Status:     {mode:<}D  '.format(**data_stream.TPV))
              data_window.addstr(9, 2, 'Latitude Err:  +/-{} {} '.format(*unit_conversion(data_stream.TPV['epx'], units, length=True)))
              data_window.addstr(10, 2, 'Longitude Err: +/-{} {}'.format(*unit_conversion(data_stream.TPV['epy'], units, length=True)))
              data_window.addstr(11, 2, 'Altitude Err:  +/-{} {} '.format(*unit_conversion(data_stream.TPV['epv'], units, length=True)))
              data_window.addstr(12, 2, 'Course Err:    +/-{epc}  '.format(**data_stream.TPV), curses.A_DIM)
              data_window.addstr(13, 2, 'Speed Err:     +/-{} {} '.format(*unit_conversion(data_stream.TPV['eps'], units)), curses.A_DIM)
              data_window.addstr(14, 2, 'Time Offset:   +/-{ept}  '.format(**data_stream.TPV), curses.A_DIM)
              data_window.addstr(15, 2, 'gdop:{gdop}  pdop:{pdop}  tdop:{tdop}'.format(**data_stream.SKY))
              data_window.addstr(16, 2, 'ydop:{ydop}  xdop:{xdop} '.format(**data_stream.SKY))
              data_window.addstr(17, 2, 'vdop:{vdop}  hdop:{hdop} '.format(**data_stream.SKY))
  
              sat_window.clear()
              sat_window.box()
              sat_window.addstr(0, 2, 'Using {0[1]}/{0[0]} satellites (truncated)'.format(satellites_used(data_stream.SKY['satellites'])))
              sat_window.addstr(1, 2, 'PRN     Elev   Azimuth   SNR   Used')
              line = 2
              if isinstance(data_stream.SKY['satellites'], list):  # Nested lists of dictionaries are strings before data is present
                  for sats in data_stream.SKY['satellites'][0:10]:
                      sat_window.addstr(line, 2, '{PRN:>2}   {el:>6}   {az:>5}   {ss:>5}   {used:}'.format(**sats))
                      line += 1
  
              # device_window.clear()
              device_window.box()
              if not isinstance(data_stream.DEVICES['devices'], list):  # Local machines need a 'device' kick start
                  gpsd_socket.send('?DEVICES;')  # to have valid data I don't know why.
  
              if isinstance(data_stream.DEVICES['devices'], list):  # Nested lists of dictionaries are strings before data is present.
                  for gizmo in data_stream.DEVICES['devices']:
                      start_time, _uicroseconds = gizmo['activated'].split('.')  # Remove '.000Z'
                      elapsed = elapsed_time_from(start_time)
  
                      device_window.addstr(1, 2, 'Activated: {}'.format(gizmo['activated']))
                      device_window.addstr(2, 2, 'Host:{0.host}:{0.port} {1}'.format(args, gizmo['path']))
                      device_window.addstr(3, 2, 'Driver:{driver}     BPS:{bps}'.format(**gizmo))
                      device_window.addstr(4, 2, 'Cycle:{0} Hz {1!s:>14} Elapsed'.format(1 / gizmo['cycle'], elapsed))
  
              packet_window.clear()
              # packet_window.border(0)
              packet_window.scrollok(True)
              packet_window.addstr(0, 0, '{}'.format(new_data))
  
  #            sleep(.9)
  
              data_window.refresh()
              sat_window.refresh()
              device_window.refresh()
              packet_window.refresh()
          else:  # Reduced CPU cycles with the non-blocking socket read, by putting 'sleep' here, rather than hitting
              sleep(.1)