8/1/16

MAME script (II) – Lanzador de juegos arcade.

Hace un tiempo publiqué un script en otro post que lanzaba los juegos de la plataforma M.A.M.E. al que llamé MAME script (I) con intención de implementarle mas funciones y mejorarlo.

El código anterior analizaba la carpeta de nuestras roms cada vez que mostrabamos el menu con lo que, si tieníamos muchas roms, tardaba un poco en realizar el proceso. Para solucionar esto, en lugar de analizar la carpeta de nuestras roms una y otra vez, en este caso lo haremos solo una vez al inciarlo la primera vez que lo ejecutamos, (veremos el progreso en pantalla).

Genera una pequeña base de datos con la que es mas rápido trabajar. Otra funciónalidad incorporada es la capacidad de detectar si el contenido de la carpeta de nuestras roms ha cambiado, para actulizar nuestra base de datos y el menú automáticamente.

Se ha añadido detección de roms defectuosas, en cuyo caso, recibiremos una notificación (y mostraremos el log de dicha rom) consultando si queremos eliminar el archivo de nuestro equipo.

La ruta de las roms por defecto es "roms" dentro de nuestro Home pero se puede cambiar en el script.

Esta vez no posteo el código, lo adjunto para descargar en el siguiente archivo:

mame script.zip

Hay que descomprimir, dar permisos de ejecución y a disfrutar de nuestras roms!

23/9/15

Comprobar dependencias de un script.

Muchas veces, hacemos uso de otros paquetes que facilitan la programación (y la ejecución) de nuestros scripts, y me ha parecido oportuno escribir una pequeña rutina que compruebe la existencia de los paquetes dados.

Pasaremos los paquetes a comprobar en una matriz o array, y si no estan instalados procederemos a la instalación de los mismos. Supongamos que necesitamos los tres siguientes paquetes: zenity, mplayer y xdotool. Pasaremos los nombres al array al que hemos llamado "dependencias".
#!/bin/bash
# Autor: Esteban C. Sanz

dependencias=(zenity mplayer xdotool)
for item in ${dependencias[*]}
do
 if ! (pacman -Q $item >/dev/null);
 then
  lista=$lista" "$item
 fi
done
if [ -n "$lista" ]
then
 sudo pacman -S $lista --noconfirm
fi
De esta forma, la primera vez que se ejecute vuestro script, este se asegurará de que esté todo en orden para la correcta ejecución del mismo. Como siempre, espero os sea útil.

14/9/15

Comprobar si estamos conectados a internet en Bash.


La función de este código es sencilla. Nos será util en con scripts que requieran conexión a internet. Sencillamente hace una llamada a Google.com (podria ser cualquier página existente), enviando un paquete (-c1) y obtenemos la salida de ping a /dev/null
#!/bin/bash

if ping -c1 google.com &>/dev/null;
then
echo "Conexión a internet OK.";
else
echo "No hay conexión.";
fi
Hasta aqui bien, pero y si además necesitamos que se ejecute de nuevo hasta estar conectados? Bien, en ese caso cambiaremos el código por:
#!/bin/bash

# Comprobamos conexión cada 10 segundos.
until ping -c1 google.com &>/dev/null
do
echo "No hay conexión. Reintentando en 5 segundos..."
sleep 5
done
# Hay conexión!
echo "Conexión a internet OK";
De esta forma ejecutaremos el script cada 10 segundos hasta que estemos conectados.
Hasta pronto!

12/9/15

Script para mostrar la información de nuestro disco duro.

El enunciado lo dice todo. Es un código que encontré que he creido que puede ser de utilidad a alguién. Un código cortito y muy rápio en ejecución.

[code language="perl"]
#!/usr/bin/perl -w
# zfree.pl es un script que utiliza la lista de diálogo zenity para mostrar
# la información libre en el disco duro

my @df = qx "df -h";
my $cl = "zenity --list --width=500 --height=280 --title=\"Espacio libre en disco\" --text=\"Espacio utilizado y libre en los discos duros montados\" ";
my @cols = split /\s+/,$df[0];
shift @df;
pop @cols;
foreach(@cols){
$cl .= "--column=\"$_\" ";
}
@cols = ();
foreach (@df){
@cols = split /\s+/;
foreach(@cols){
$cl .= "\"$_\" ";
}
}system $cl;
exit;[/code]

Hasta el proximo script!

11/9/15

MAME script (I) - Lanzador de juegos arcade.

Todos conocemos la plataforma MAME (o Multiple Arcade Machine Emulator), pero ultimamente han desaparecido muchos programas que gestionaban mediante interfaz gŕafica nuestras roms.
Como siempre, marqué como objetivo un script que fuera liviano y para esto utilizé Zenity como interfaz gráfica. Me puse manos a la obra y desarrolle un script muy pequeño que quedó tal que así:
#!/bin/bash
# MAME script v0.01
# Autor: Esteban C. Sanz
# dependencias: zenity sldmame

DIRECTORIO=~/roms

while : ; do

OUTPUT=$(
for ARCHIVO in `ls $DIRECTORIO/*zip`
do 
ROM=`basename $ARCHIVO .zip`
NOMBRE=`sdlmame -ll $ROM | awk -F\" '/\".*\"/ {print $2}' | tr -d "'"`
echo $ROM  # Columna "Rom"
echo $NOMBRE # Columna "Juego"
done | zenity --list \
--width=550 \
--height=500 \
--title="Juegos MAME" \
--column="Rom" \
--column="Juego";
)

if [ $? -eq 1 ]; then break; else
sdlmame $DIRECTORIO/$OUTPUT.zip
fi 

done
En la línea 4 pasamos como variable la carpeta conde estan nuestras roms. En mi caso esta ubicada en el raíz de HOME con el nombre "roms" (sin comillas). Cada cual debe de asignar a DIRECTORIO la ruta de la carpeta donde tenga sus roms.
Por ejemplo, si tenemos las roms en HOME/juegos/mame roms/ declararemos DIRECTORIO de la siguiente forma: DIRECTORIO=~/juegos/mame roms ¿Facil, no?
Luego lo guardamos como mame_script.sh y le damos permisos de ejecución con:
chmod +x /ruta del archivo/mame_script.sh
Ya podemos lanzar nuestras roms ejecutando: /ruta del archivo/mame_script.sh
Les dejo un par de enlaces a las principales páginas para poder descargar sus roms:

Rom-World.com http://www.rom-world.com/dl.php?name=MAME
Coolrom.com http://www.coolrom.com/roms/
Un saludo!