# make an array new_args # add most of "$@" to new_args # expand if the file of a -U argument is an elf file EEPROM_S=.eeprom LFUSE_S=.lfuse HFUSE_S=.hfuse EFUSE_S=.efuse FLASH_H=.flash.hex EEPROM_H=.eeprom.hex LFUSE_H=.lfuse.hex HFUSE_H=.hfuse.hex EFUSE_H=.efuse.hex j=0 u=0 for arg_in in "$@" ; do if [ $arg_in = -U ] ; then u=1 elif [ $u -eq 1 ] ; then # if the file is an elf file we edit # otherwise, pass it through subargs=( $(echo $arg_in | tr : ' ') ) if grep -q ELF ${subargs[2]} ; then # elf # figure out what we need for mem in $(echo ${subargs[0]} | tr , ' ') ; do case $mem in (f | flash) avr-objcopy -R $EEPROM_S -R $LFUSE_S -R $HFUSE_S \ -R $EFUSE_S -O ihex \ ${subargs[2]} $FLASH_H new_args[$((j++))]=-U new_args[$((j++))]=${mem}:${subargs[1]}:$FLASH_H ;; (e | eeprom) avr-objcopy -j $EEPROM_S -O ihex \ --set-section-flags=${EEPROM_S}="alloc,load" \ --change-section-lma ${EEPROM_S}=0 \ ${subargs[2]} $EEPROM_H new_args[$((j++))]=-U new_args[$((j++))]=${mem}:${subargs[1]}:$EEPROM_H ;; (l | lf | lfuse | fuse) avr-objcopy -j $LFUSE_S -O ihex \ --set-section-flags=${LFUSE_S}="alloc,load" \ --change-section-lma ${LFUSE_S}=0 \ ${subargs[2]} $LFUSE_H new_args[$((j++))]=-U new_args[$((j++))]=${mem}:${subargs[1]}:$LFUSE_H ;; (h | hf | hfuse) avr-objcopy -j $HFUSE_S -O ihex \ --set-section-flags=${HFUSE_S}="alloc,load" \ --change-section-lma ${HFUSE_S}=0 \ ${subargs[2]} $HFUSE_H new_args[$((j++))]=-U new_args[$((j++))]=${mem}:${subargs[1]}:$HFUSE_H ;; (e | ef | efuse) avr-objcopy -j $EFUSE_S -O ihex \ --set-section-flags=${EFUSE_S}="alloc,load" \ --change-section-lma ${EFUSE_S}=0 \ ${subargs[2]} $EFUSE_H new_args[$((j++))]=-U new_args[$((j++))]=${mem}:${subargs[1]}:$EFUSE_H ;; (*) echo I don\'t understand memory type $mem ;; esac done u=0 else # not elf new_args[$((j++))]=-U new_args[$((j++))]=$arg_in fi else new_args[$((j++))]=$arg_in fi done avrdude "address@hidden"