#!/bin/sh
# nrg70iso - convierte archivo[s] nrg a iso
# autor: rodrigo nannig m.
#
#
# nuestro nombre de programa
# algo asi como el comando 'basename'
#
__progname=`echo "$0"|sed 's/^.*/(.*)$/1/'`
#
# MACROS
# _NRG_HEADER es el tamaño de la cabecera del
# archivo nrg en bytes
#
# NOTA: en realidad un archivo nrg no es mas
# que un archivo iso, a la cual se le agrega
# una cabecera de 300kb
#
# _DD_TMP es la salida del comando dd
# el que vamos a utilizar para transformar el archivo
#
# _ISO_TMP lo mismo que el anterior pero como salida
# a la verificacion del archivo iso
#
# _OSTYPE el nombre rigido de nuestro sistema, sin numero
# de version ni nada
#
# _SHELL conserva el nombre crudo del shell que estamos
# utilizando, sin la ruta absoluta
#
# _ECHO_OPT el comando echo, pero el bash utiliza
# la opcion -e para no mostrar literalmente los
# caracteres de escape
#
# IFS cuales van a ser nuestros separadores
#
_NRG_HEADER=300
_DD_TMP='.dd.n70i'
_ISO_TMP='.ckiso.n70i.'
_OSTYPE=`uname -s|sed 's/^(.*)_.*/1/'|tr A-Z a-z`
_SHELL=`echo "$SHELL"|sed 's/^.*/(.*)$/1/'`
IFS='
'' '
#
# verificamos nuestra shell
#
[ "$_OSTYPE" = "cygwin" -a "$_SHELL" = "bash" ] &&
_ECHO_OPT='-e'
#
# en cygwin no he encontrado la forma de extraer
# un archivo iso en un directorio, la opcion -o loop
# no existe para el comando mount. si encuentras la manera
# de hacerlo hazmelo saber. gracias
# el siguiente lo hace con winrar, buscando la ruta en el
# registro de windows
#
[ "$_OSTYPE" = "cygwin" ] &&
_WINRAR=`reg query
"HKCU\software\microsoft\windows\shellnoroam\muicache"|
grep -i winrar.exe|sed '1!d;s/^ *//;s/^(.*) R.*$/1/;s/\///g'|
tr A-Z a-z`
#
# FUNCIONES
# algunos archivos nrg son iso en realidad, por lo
# cual solo basta con renombrarlos, esta funcion
# sirve para revisar el archivo nrg comprobando
# que no sea un iso
#
# SINOPSIS: ckis filename
#
ckiso()
{
_err=0
dd bs=1024 skip=32 if="$1" of="$_ISO_TMP" count=1 2>"$_DD_TMP"
[ `cat "$_DD_TMP"|wc -l|cut -f1 -d' '` -ne 3 ] &&
_err=`expr $_err + 1`
[ $_err -eq 0 -a "`cut -b2-6 $_ISO_TMP`" != "CD001" ] &&
_err=`expr $_err + 1`
rm -f "$_DD_TMP" "$_ISO_TMP"
return $_err
}
#
# esta funcion chequea si la extension del archivo es correcta
# recibe como primer parametro el nombre del archivo y el
# segundo la extension de referencia
#
# SINOPSIS: ckext filename extension
#
ckext()
{
_ext=`echo "$1"|sed 's/.*.(.*)$/1/'|tr A-Z a-z`
[ "$_ext" != "$2" ] &&
return 1
return 0
}
#
# despliega un mensaje de error por
# la salida standar de error
#
# SINOPSIS: __display message ...
#
__display()
{
echo $_ECHO_OPT "$__progname: error: $@" 1>&2
}
#
# como se utiliza nuestro programa
#
usage()
{
echo $_ECHO_OPT "usage: $__progname
[-e|--extract] [