#!/usr/bin/env python3
# Copyright (c) 2006 Arastra, Inc.  All rights reserved.
# Arastra, Inc. Confidential and Proprietary.

# Note: this script is installed with eight symlinks, named:
#   /usr/bin/memread8
#   /usr/bin/memread32
#   /usr/bin/memwrite8
#   /usr/bin/memwrite32
#   /usr/bin/ioread8
#   /usr/bin/ioread32
#   /usr/bin/iowrite8
#   /usr/bin/iowrite32

import sys, os, LegacyUtil

validPrognames = { 'memread8':   ( "%#04x",  1, LegacyUtil.memRead8 ),
                   'memread32':  ( "%#010x", 1, LegacyUtil.memRead32 ),
                   'memwrite8':  ( None,     2, LegacyUtil.memWrite8 ),
                   'memwrite32': ( None,     2, LegacyUtil.memWrite32 ),
                   'ioread8':    ( "%#04x",  1, LegacyUtil.ioRead8 ),
                   'ioread32':   ( "%#010x", 1, LegacyUtil.ioRead32 ),
                   'iowrite8':   ( None,     2, LegacyUtil.ioWrite8 ),
                   'iowrite32':  ( None,     2, LegacyUtil.ioWrite32 ) }

def strToInt( s ):
   try:                   
      i = int( s )
   except ValueError:
      i = int( s, 16 )
   return i

prog = validPrognames.get( os.path.basename( sys.argv[0] ) )
if not prog:
   print( 'Use {mem,io}{read,write}{8,32} instead', file=sys.stderr )
   sys.exit( 1 )
   
if len( sys.argv ) - 1 != prog[1]:
   if prog[1] == 1:
      # pylint: disable-next=consider-using-f-string
      print( 'Usage: %s <address>' % sys.argv[ 0 ], file=sys.stderr )
   else:
      # pylint: disable-next=consider-using-f-string
      print( 'Usage: %s <address> <value>' % sys.argv[ 0 ], file=sys.stderr )
   sys.exit( 1 )

try:
   addr = strToInt( sys.argv[1] )
   if prog[0]:
      print( prog[ 0 ] % prog[ 2 ]( addr ) )
   else:
      value = strToInt( sys.argv[2] )
      prog[2]( addr, value )

except ValueError as e:
   print( e, file=sys.stderr )
   sys.exit( 1 )

