Unix colors to HTML (by PHP)

Hi there,
this is a really short code to enable you to transform colored unix texts into html spans. Can be useful if you need to display something coming from your unix machine without coding it again in php.

All you need before pasting the code is to write this above the function :

  exec ($yourcommand, $input);
  echo doTransform ($input);

Here it goes !

function doTransform ($input) {
  $transform = array(
        1  => '$fontWeight="bold";',
        21 => '$fontWeight="thin";',
        4  => '$textDecoration="underline";',
        24 => '$textDecoration="none";',
        31 => '$color="darkred";',
        32 => '$color="darkgreen";',
        33 => '$color="saddlebrown";',
        34 => '$color="darkblue";',
        35 => '$color="darkmagenta";',
        36 => '$color="darkslateblue";',
        37 => '$color="white";',
        0  => '$fontWeight="thin";$color="black";$backgroundColor="transparent";$textDecoration="none";',
        30 => '$color="black";',
        40 => '$backgroundColor="transparent";',
        41 => '$backgroundColor="darkred";',
        42 => '$backgroundColor="darkgreen";',
        43 => '$backgroundColor="saddlebrown";',
        44 => '$backgroundColor="darkblue";',
        45 => '$backgroundColor="darkmagenta";',
        46 => '$backgroundColor="darkslateblue";',
        47 => '$backgroundColor="white";',
        );

  $fontWeight="thin";
  $textDecoration="none";
  $color="black";
  $backgroundColor="transparent";
  $outputLine = "<span>";

  foreach ($input as $inputLine){
    $inputLine = str_replace (" ", "&nbsp;", $inputLine);
    preg_match_all ("/".chr(27)."\[([0-9]+;)*([0-9]+m)/i", $inputLine, $matches, PREG_OFFSET_CAPTURE);
    $lastIndexOutput = 0;
    $currentMatchNumber = 0;
    foreach ($matches [0] as $match){
      $outputLine .= substr($inputLine, $lastIndexOutput, $match [1] - $lastIndexOutput);
      $outputLine .= "</span><span style=\"";

      for ($replacementIndex = 1 ; $replacementIndex < count ($matches) ; $replacementIndex++){
        if ($matches [$replacementIndex] [$currentMatchNumber] [1] != -1){
          $oneReplacement = $matches [$replacementIndex] [$currentMatchNumber] [0];
          $oneReplacement = substr ($oneReplacement, 0, strlen ($oneReplacement) - 1);
          eval ($transform [$oneReplacement]); 
        }
      }

      $outputLine .= "font-weight:$fontWeight;text-decoration:$textDecoration;color:$color;background-color:$backgroundColor";

      $outputLine .= "\">";
      $lastIndexOutput = $match [1] + strlen ($match [0]);
      $currentMatchNumber++;
    }
    $outputLine .= "<br /></span>"; 
  } 
  return $outputLine;
}

Have fun.

Envoi bluetooth en ligne de commande

Wouah un mois sans signe de vie ?

Si si je suis toujours là, mon Twitter est même encore actif.

Et euh oui, j’ai un truc à vous montrer tout de même cette semaine : un script unix pour envoyer facilement un fichier via Bluetooth, sous linux. Ça paraît bien simple comme fonction en apparence mais lorsqu’on veut le faire dans un programme de manière automatique, on se perd vite entre les commandes.

Assurez vous d’avoir toutes ces commandes : bluetoothd, bluetooth-agent, rfcomm, hcitool, obexftp.

Pour envoyer un fichier a priori, tapez le nom du script et en arguments le fichier à envoyer et l’adresse mac si vous l’avez déjà.
L’usage est « usage : envoiBluetooth.bash [device] »

Le fichier peut aussi être téléchargé (en .bash sinon ce serveur web emet un 403…)

#!/bin/sh

BTD_LAUNCHED=`ps -e | grep bluetoothd`
BTA_LAUNCHED=`ps -e | grep  » bluetooth$ »`

STEP=1

echo « \033[1;4m \033[0m »
echo « \033[1;4m> Send a file by Bluetooth on shell |\033[0m »
echo
echo « File to send : \033[1m’$1’\033[0m »
echo « Deviced specified : \033[1m’$2’\033[0m (not mandatory) »
echo
echo « Let’s go. »

BEGIN=`date « +%s »`

################################################# KO

if [ `whoami` != « root » ]; then
echo « \n\033[1;31;4mYou should be root to do this.\033[0m »
echo « \nusage : `basename $0` [device] »
exit 1
fi

if [ $# -lt 1 ]; then
echo « \nusage : `basename $0` [device] »
exit 2
fi

if [ ! -f « $1 » ]; then
echo « \n\033[1;31;4m’$1′ is not a file.\033[0m »
echo « \nusage : `basename $0` [device] »
exit 2
fi

################################################# OK

echo « \n\033[1;32;40m$STEP/ Bluetooth Daemon\033[0m »
if [ -z « $BTD_LAUNCHED » ]; then
bluetoothd&
echo « I launched a new daemon »
else
echo « Already present daemon »
fi
STEP=`expr $STEP \+ 1`
echo « \n\033[1;32;40m$STEP/ Bluetooth Agent\033[0m »
if [ -z « $BTA_LAUNCHED » ]; then
bluetooth-agent 0000 $2
echo « \033[1mSleeping 10 seconds\033[0m »
echo « \033[1;4mYOU HAVE 10 SECONDS TO ENTER THIS PIN CODE ON PHONE : ‘0000’\033[0m »
echo « (I launched a new agent) »
sleep 10
else
echo « Already present agent »
fi
STEP=`expr $STEP \+ 1`
echo « \n\033[1;32;40m$STEP/ Getting device address\033[0m »
ADDRESS=$2;
if [ ! -z $ADDRESS ]; then
echo « You just gave me the address $ADDRESS »
else
echo « This may take a while… »
ADDRESS=$(hcitool scan | tail -n 1 | tr ‘ ‘ ‘\n’ | tr ‘\t’ ‘\n’ | head -n 2 | tail -n 1)
echo « Well, I found this address : ‘$ADDRESS’ (see nothing ? then something wrong happened before) »
fi
if [ -z $ADDRESS ]; then
echo « Do you have installed each needed command ? bluetoothd, bluetooth-agent, rfcomm, hcitool, obexftp ? »
exit 1
fi
STEP=`expr $STEP \+ 1`
echo « \n\033[1;32;40m$STEP/ Connecting to device\033[0m »
rfcomm connect 0 $ADDRESS &
PID=$!
echo « PID of connection manager : $PID »
STEP=`expr $STEP \+ 1`
echo « \n\033[1;32;40m$STEP/ FTP with file\033[0m »
obexftp -b $ADDRESS -p $1
STATUS=$?
STEP=`expr $STEP \+ 1`
echo « \n\033[1;32;40m$STEP/ Killing connection\033[0m »
kill $PID
echo « FTP with status $STATUS »
if [ $STATUS -eq 255 ]; then
echo « Which means \033[1;37;4msucessful\033[0m »
else
echo « Which means \033[1;31;4mfailure\033[0m »
fi

if [ $STATUS -eq 69 ]; then
echo « … is your file already used on the device ? »
fi

if [ $STATUS -eq 1 ]; then
echo « … are you sure your device address is correct ? »
fi

END=`date « +%s »`

LENGTH=`expr $END \- $BEGIN`
echo
echo « Duration : $LENGTH seconds »