commit 39ea96f0f2d141ac9c2befa2e4287c7a1623f1ca Author: Aurelien Labate Date: Thu Dec 26 17:22:34 2019 +0100 Initial commit diff --git a/FXItoG1R/converter.php b/FXItoG1R/converter.php new file mode 100644 index 0000000..7a5c185 --- /dev/null +++ b/FXItoG1R/converter.php @@ -0,0 +1,370 @@ + noir/blanc) + //rouge + foreach($picsArray[0] as $key => $value) + { + $g1mPicsArray[0][$key]=$value; + } + //bleu + foreach($picsArray[1] as $key => $value) + { + $g1mPicsArray[0][$key]|=$value; + } + //vert + foreach($picsArray[2] as $key => $value) + { + $g1mPicsArray[0][$key]|=$value; + } + //blanc + foreach($picsArray[3] as $key => $value) + { + $g1mPicsArray[1][$key]=$value; + } + //test + // echo $picsArray[3][0];exit; + //generating g1m block + $text ="5049435455524520".$picId."00000000000000000000016d61696e0000000050494354".$picId."0000000700000800000000"; + $color = 0; + $j =0; + while($color < 2) + { + $text .= str_pad(dechex($g1mPicsArray[$color][$j]), 2, '0', STR_PAD_LEFT); + $j++; + if($j > 1023) + { + $color++; + $j = 0; + } + } + //calcul taille texte + $tailleText = strlen($text)/2; + $tailleText= $tailleText + (4-$tailleText%4); + $textSize += $tailleText; + //arrondi la taille a 4 + $text = str_pad($text, $tailleText*2, '0', STR_PAD_RIGHT); + $prgms.=$text; + //validation + $nbrPrgm++; + } + } + //MSC1  : TXT graph 100 + elseif(substr($InFile, $i, 14) == "4d435331000000" && $InFile[$i+18].$InFile[$i+19]=="01") + { + $valide = true; + //title : ([^\xff]{1,8}) + $title = ""; + for($j = $i+20 ; $j < $i+20+16; $j+=2) + { + if($InFile[$j].$InFile[$j+1] == "ff") + break; + else + $title.= $InFile[$j].$InFile[$j+1]; + } + $title = str_pad($title, 16, '0', STR_PAD_RIGHT); + // echo "Title hex : ".$title."\nTitle ascii : \"".pack('H*',$title)."\"\n\n";exit; + $titleLen = strlen($title)/2; + // \xff{16,23} : (16+8-$titleLen) FF + $Offset = $j; + for($j=$j ; $j < $i+76; $j++) + { + if($InFile[$j]!='f') + { + $valide = false; + break; + } + } + //get prgm content + if($valide) + { + $text ="00000000000000000000"; + for($j = $i+96 ; $j < $InFileSize*2; $j+=2) + { + if($InFile[$j].$InFile[$j+1]=='ff') + { + break; + } + else + { + $text.=$InFile[$j].$InFile[$j+1]; + } + } + //calcul taille texte + $tailleText = strlen($text)/2; + $tailleText= $tailleText + (4-$tailleText%4); + $textSize += $tailleText+44; + $tailleTextHex = str_pad(dechex($tailleText), 8, '0', STR_PAD_LEFT); + //arrondi la taille a 4 + $text = str_pad($text, $tailleText*2, '0', STR_PAD_RIGHT); + } + //validation prgm + if($valide) + { + $prgms .= "50524f4752414d0000000000000000000000000173797374656d0000".$title."01".$tailleTextHex."000000".$text; + $nbrPrgm++; + } + } + //MSC1  : MAT graph 100 + elseif(substr($InFile, $i, 14) == "4d435331000000" && $InFile[$i+18].$InFile[$i+19]=="06") + { + $valide = true; + //title : ([^\xff]{1,8}) + $title = ""; + for($j = $i+20 ; $j < $i+20+16; $j+=2) + { + if($InFile[$j].$InFile[$j+1] == "ff") + break; + else + $title.= $InFile[$j].$InFile[$j+1]; + } + $title = str_pad($title, 16, '0', STR_PAD_RIGHT); + $letter = $title[8].$title[9]; + // echo "Title hex : ".$title."\nTitle ascii : \"".pack('H*',$title)."\" ; letter : ".$letter."\n\n";exit; + $titleLen = strlen($title)/2; + // \xff{16,23} : (16+8-$titleLen) FF + $Offset = $j; + for($j=$j ; $j < $i+76; $j++) + { + if($InFile[$j]!='f') + { + $valide = false; + break; + } + } + //get content size + $contentSize = substr($InFile, $i+10, 8); + $contentSize = hexdec($contentSize); + //get matrix height + $matrixHeight = $InFile[$i+92].$InFile[$i+93]; + //get matrix width + $matrixWidth = $InFile[$i+96].$InFile[$i+97]; + //get prgm content + if($valide) + { + //contenu + $matrixContent= substr($InFile, $i+108, ($contentSize-16)*2); + //ajouter 3*00 apres 9eme puis au 9+3 +9 + $matrixContentSize = strlen($matrixContent); + for($j=18 ; $j < $matrixContentSize; $j+=18) + { + if(isset($matrixContent[$j])) + { + $matrixContent = substr($matrixContent,0,$j)."000000".substr($matrixContent,$j,$matrixContentSize-$j); + $matrixContentSize+=6; + $j+=6; + } + else + break; + } + //calcul taille texte + $tailleText = strlen($matrixContent)/2; + $tailleText= $tailleText + (4-$tailleText%4) + 16; + $textSize += $tailleText + 44; + $tailleTextHex = str_pad(dechex($tailleText), 8, '0', STR_PAD_LEFT); + //arrondi la taille a 4 + $matrixContent = str_pad($matrixContent, ($tailleText-16)*2, '0', STR_PAD_RIGHT); + //contenu finale + $prgms .= + "4d415420".$letter."0000000000000000000000". + "000000016d61696e000000004d41545f". + $letter."00000006". $tailleTextHex ."00000000000000". + "0000000000". $matrixHeight ."00". $matrixWidth ."00000000". $matrixContent; + } + //validation prgm + if($valide) + { + $nbrPrgm++; + } + } + } + // echo $InFile;exit; + //G1M generating + //filesize calculation + // $filesize = 32 + $textSize + 44*$nbrPrgm; + $filesize = 32 + $textSize; + if($filesize > 0xFFFFFFFF) + { + error("File too big.", "Fichier trop gros."); + } + //OFFSET 0xE : last filesize byte + 65(0x41) and NOT (inverted) + $offset0xE = $filesize + 0x41; + $offset0xE = 0xFFFFFFFF - $offset0xE; + $offset0xE = dechex($offset0xE); + $offset0xE = str_pad($offset0xE, 2, '0', STR_PAD_LEFT); + $offset0xE = substr($offset0xE, -2); // take the last byte + //OFFSET 0x10 : filesize NOT (inverted) + $offset0x10 = 0xFFFFFFFF - $filesize; + $offset0x10 = dechex($offset0x10);// to hex + $offset0x10 = str_pad($offset0x10, 8, '0', STR_PAD_LEFT); + //OFFSET 0x14 : last filesize byte + 184(0xB8) and NOT (inverted) + $offset0x14 = $filesize + 0xB8; + $offset0x14 = 0xFFFFFFFF - $offset0x14; + $offset0x14 = dechex($offset0x14); + $offset0x14 = str_pad($offset0x14, 2, '0', STR_PAD_LEFT); + $offset0x14 = substr($offset0x14, -2); + //OFFSET 0x14 : last filesize byte + 184(0xB8) and NOT (inverted) + $offset0x1E = $nbrPrgm; + $offset0x1E = 0xFFFF - $offset0x1E; + $offset0x1E = dechex($offset0x1E); + $offset0x1E = str_pad($offset0x1E, 4, '0', STR_PAD_LEFT); + //making + $fileContent = pack('H*', + "aaacbdaf90889a8dceffefffefff".$offset0xE."fe". + $offset0x10.$offset0x14."000000000000000000".$offset0x1E. + $prgms + ); + //sending + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment;filename="'.substr($_FILES['file']['name'],0,-4).'.'.$format.'"'); + header('Cache-Control: max-age=0'); + $fh = fopen('php://output', 'wb'); + fwrite($fh, $fileContent); + fclose($fh); +} +else +{ + header("Location: ../"); +} +?> \ No newline at end of file diff --git a/FXItoG1R/index.html b/FXItoG1R/index.html new file mode 100644 index 0000000..1309607 --- /dev/null +++ b/FXItoG1R/index.html @@ -0,0 +1,50 @@ + + + + + Fxi to g1r converter + + + + +
+ +

Fxi to g1r converter

+
+ + Casiopeia + + + Planète Casio + + + Casio Universal Wiki + +
+
+
+

Convert Fxi to g1r


+
+ Format :

+ +
+
+ + + diff --git a/G1MtoG1R/converter.php b/G1MtoG1R/converter.php new file mode 100644 index 0000000..7f7a16c --- /dev/null +++ b/G1MtoG1R/converter.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/G1MtoG1R/index.html b/G1MtoG1R/index.html new file mode 100644 index 0000000..757ef89 --- /dev/null +++ b/G1MtoG1R/index.html @@ -0,0 +1,51 @@ + + + + + g1m to g1r converter + + + + +
+ +

g1m to g1r converter

+
+ + Casiopeia + + + Planète Casio + + + Casio Universal Wiki + +
+
+
+

Convert g1m to g1r


+
+ +
+ +

Cet utilitaire ne fait que rennomer votre fichier .g1m en .g1r, aucune autre action n'est effectué. Vous pouvez donc très bien le faire depuis votre ordinateur, mais si vous ne savez pas comment alors cet (in)utilitaire est fait pour vous !

+

This tool only rename your .g1m file to .g1r, no other action is made. You can easily do the same on your computer, but if you don't know how to do it, then this (useless) tool is made for you !

+
+ + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..35627ac --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013-2019 Aurélien Labate + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/PicViewer/converter.php b/PicViewer/converter.php new file mode 100644 index 0000000..e6d50b9 --- /dev/null +++ b/PicViewer/converter.php @@ -0,0 +1,86 @@ +9) + { + $size=3; + } + else $size=$_POST['size']; + //get colors + if(isset($_POST['blackAndWhite']) && $format=="fxi") + { + $colors =array(array(0,0,0),array(0, 0, 0),array(0, 0, 0),array(255, 255, 255)) ; + //0 = rouge + //1 = bleu + //2 = vert + //3 = white + } + elseif($format=="fxi") + // else + { + $colors =array(array(255,0,0),array(0, 0, 255),array(0, 128, 0),array(255, 255, 255)); + //0 = rouge => black + //1 = bleu => black + //2 = vert => black + //3 = white => white + } + else + { + $colors =array(array(0,0,0),array(255, 255, 255),array(255, 255, 255),array(255, 255, 255)) ; + } + //getfile + $InFile = file_get_contents($_FILES['file']['tmp_name']); + $InFileSize = strlen($InFile); + + if($format == 'fxi') + { + //decode fxi & to hex + $InFile = fxiDecode($InFile); + //search for pic block + for($i = 0 ; $i < $InFileSize*2; $i+=2) + { + if(substr($InFile, $i, 6) == "494d47" && substr($InFile,$i+8,4)=="5043") + { + $pics =""; + for($j = $i+96 ; $j < $i+8224+96; $j++) + { + $pics.=$InFile[$j]; + } + $picsArray = getFxiPic($pics); + writePics($picsArray, $colors, $size); + exit; + } + } + } + elseif($format == 'g1r' || $format == 'g1m' || $format == 'g2m') + { + //to hex + $InFile = bin2hex($InFile); + //search for pic block + for($i = 0 ; $i < $InFileSize*2; $i+=2) + { + if(substr($InFile, $i, 16) == "5049435455524520" && substr($InFile,$i+18,46)=="00000000000000000000016d61696e0000000050494354" && substr($InFile,$i+66,22)=="0000000700000800000000") + { + $pics =""; + for($j = $i+88 ; $j < $i+4096+88; $j++) + { + $pics.=$InFile[$j]; + } + $picsArray = getG1mPic($pics); + writePics($picsArray, $colors, $size); + exit; + } + } + echo "Aucune image trouvée";exit; + } +} +else +{ + header('Location : ../'); +} +?> \ No newline at end of file diff --git a/PicViewer/index.html b/PicViewer/index.html new file mode 100644 index 0000000..4ac664a --- /dev/null +++ b/PicViewer/index.html @@ -0,0 +1,50 @@ + + + + + Picture Viewer + + + + + +
+
+

Read fxi/g1m/g2m/g1r pictures


+
+
+ Zoom : ×
+ +
+
+ + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..17ee9aa --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# G1R/FXI tools + +Set of web tools to convert and manipulate fxi, g1r and g1m files. + +This tool has originally been created by Ziqumu (aka Alabate) in 2013 for [Planète Casio](https://www.planet-casio.com/Fr/forums/topic12023-1-Quelques-outils-en-ligne.html). + +* FXItoG1R : Convert an old FXI file to the newer format G1R +* G1MtoG1R : Rename a G1M file to G1R.. because it's not so easy for everyone! +* PicViewer : Find the first image of an FXI or G1R file and display it + +## Thanks to + +* [Casetta projet](http://casetta.tuxfamily.org/) +* Simon Lothar \ No newline at end of file diff --git a/common/functions.php b/common/functions.php new file mode 100644 index 0000000..0fbff4c --- /dev/null +++ b/common/functions.php @@ -0,0 +1,188 @@ + "18", 254 => "19", 253 => "1a", 252 => "1b", 251 => "1c", + 250 => "1d", 249 => "1e", 248 => "1f", 247 => "10", 246 => "11", + 245 => "12", 244 => "13", 243 => "14", 242 => "15", 241 => "16", + 240 => "17", 239 => "08", 238 => "09", 237 => "0a", 236 => "0b", + 235 => "0c", 234 => "0d", 233 => "0e", 232 => "0f", 231 => "00", + 230 => "01", 229 => "02", 228 => "03", 227 => "04", 226 => "05", + 225 => "06", 224 => "07", 223 => "38", 222 => "39", 221 => "3a", + 220 => "3b", 219 => "3c", 218 => "3d", 217 => "3e", 216 => "3f", + 215 => "30", 214 => "31", 213 => "32", 212 => "33", 211 => "34", + 210 => "35", 209 => "36", 208 => "37", 207 => "28", 206 => "29", + 205 => "2a", 204 => "2b", 203 => "2c", 202 => "2d", 201 => "2e", + 200 => "2f", 199 => "20", 198 => "21", 197 => "22", 196 => "23", + 195 => "24", 194 => "25", 193 => "26", 192 => "27", 191 => "58", + 190 => "59", 189 => "5a", 188 => "5b", 187 => "5c", 186 => "5d", + 185 => "5e", 184 => "5f", 183 => "50", 182 => "51", 181 => "52", + 180 => "53", 179 => "54", 178 => "55", 177 => "56", 176 => "57", + 175 => "48", 174 => "49", 173 => "4a", 172 => "4b", 171 => "4c", + 170 => "4d", 169 => "4e", 168 => "4f", 167 => "40", 166 => "41", + 165 => "42", 164 => "43", 163 => "44", 162 => "45", 161 => "46", + 160 => "47", 159 => "78", 158 => "79", 157 => "7a", 156 => "7b", + 155 => "7c", 154 => "7d", 153 => "7e", 152 => "7f", 151 => "70", + 150 => "71", 149 => "72", 148 => "73", 147 => "74", 146 => "75", + 145 => "76", 144 => "77", 143 => "68", 142 => "69", 141 => "6a", + 140 => "6b", 139 => "6c", 138 => "6d", 137 => "6e", 136 => "6f", + 135 => "60", 134 => "61", 133 => "62", 132 => "63", 131 => "64", + 130 => "65", 129 => "66", 128 => "67", 127 => "98", 126 => "99", + 125 => "9a", 124 => "9b", 123 => "9c", 122 => "9d", 121 => "9e", + 120 => "9f", 119 => "90", 118 => "91", 117 => "92", 116 => "93", + 115 => "94", 114 => "95", 113 => "96", 112 => "97", 111 => "88", + 110 => "89", 109 => "8a", 108 => "8b", 107 => "8c", 106 => "8d", + 105 => "8e", 104 => "8f", 103 => "80", 102 => "81", 101 => "82", + 100 => "83", 99 => "84", 98 => "85", 97 => "86", 96 => "87", + 95 => "b8", 94 => "b9", 93 => "ba", 92 => "bb", 91 => "bc", + 90 => "bd", 89 => "be", 88 => "bf", 87 => "b0", 86 => "b1", + 85 => "b2", 84 => "b3", 83 => "b4", 82 => "b5", 81 => "b6", + 80 => "b7", 79 => "a8", 78 => "a9", 77 => "aa", 76 => "ab", + 75 => "ac", 74 => "ad", 73 => "ae", 72 => "af", 71 => "a0", + 70 => "a1", 69 => "a2", 68 => "a3", 67 => "a4", 66 => "a5", + 65 => "a6", 64 => "a7", 63 => "d8", 62 => "d9", 61 => "da", + 60 => "db", 59 => "dc", 58 => "dd", 57 => "de", 56 => "df", + 55 => "d0", 54 => "d1", 53 => "d2", 52 => "d3", 51 => "d4", + 50 => "d5", 49 => "d6", 48 => "d7", 47 => "c8", 46 => "c9", + 45 => "ca", 44 => "cb", 43 => "cc", 42 => "cd", 41 => "ce", + 40 => "cf", 39 => "c0", 38 => "c1", 37 => "c2", 36 => "c3", + 35 => "c4", 34 => "c5", 33 => "c6", 32 => "c7", 31 => "f8", + 30 => "f9", 29 => "fa", 28 => "fb", 27 => "fc", 26 => "fd", + 25 => "fe", 24 => "ff", 23 => "f0", 22 => "f1", 21 => "f2", + 20 => "f3", 19 => "f4", 18 => "f5", 17 => "f6", 16 => "f7", + 15 => "e8", 14 => "e9", 13 => "ea", 12 => "eb", 11 => "ec", + 10 => "ed", 9 => "ee", 8 => "ef", 7 => "e0", 6 => "e1", + 5 => "e2", 4 => "e3", 3 => "e4", 2 => "e5", 1 => "e6", + 0 => "e7", + ); + + + function fxiDecode($text) + { + global $Fxi2RawArray; + $fileSize = strlen($text); + $Return=""; + for($i = 0 ; $i < $fileSize; $i++) + { + if(isset($Fxi2RawArray[ord($text[$i])])) + { + $Return.= $Fxi2RawArray[ord($text[$i])]; + } + else + { + echo "Erreur : caractere non reconnu (erreur impossible)";exit; + } + } + return $Return; + } + + function getFxiPic($text) //transform fxi pic an array of 4 array reprent all 4 colors. array of colors are coded like a g1m sheet (natural organisation : one bit represente one pixel) ; color order : Blue, orange, green, white + { + $textSize = strlen($text); + $actuelColor = 0; + $x = 15; + $y = 63; + for($i = 8 ; $i < $textSize; $i+=2) + { + //changement de couleur + if($i >=($actuelColor*2056+2056) ) + { + $actuelColor++; + $i+=8; + $x = 15; + $y = 63; + } + //changement de colonne + if($y<0) + { + $y=63; + $x--; + } + //enregistrement de la case + $Return[$actuelColor][$y*16+$x] = hexdec($text[$i].$text[$i+1]); + $y--; + } + + return $Return; + } + + function getG1mPic($text) //transform G1m pic an array of 4 array reprent all 2 colors. array of colors are coded like a g1m sheet (natural organisation : one bit represente one pixel) ; color order : Blue, orange, green, white + { + $textSize = strlen($text); + $actuelColor = 0; + $i = 0; + while($actuelColor < 2 && $actuelColor*2048+$i<$textSize) + { + if($i >= 2048 ) + { + $i = 0; + $actuelColor++; + } + $Return[$actuelColor][$i/2] = hexdec($text[$actuelColor*2048+$i].$text[$actuelColor*2048+$i+1]); + $i+=2; + } + // print_r($Return);exit; + return $Return; + } + //color=array(array(255,0,0),array(0, 0, 255),array(0, 128, 0),array(66, 174, 9)) + + + function imageResizeAlpha($src, $coef) + { + $w = imagesx($src)*$coef; + $h = imagesy($src)*$coef; + $temp = imagecreatetruecolor($w, $h); + imagealphablending($temp, false); + imagesavealpha($temp, true); + $trans_layer_overlay = imagecolorallocatealpha($temp, 0, 0, 0, 127); + imagefill($temp, 0, 0, $trans_layer_overlay); + imagecopyresized($temp, $src, 0, 0, 0, 0, $w, $h, imagesx($src), imagesy($src)); + return $temp; + } + + //=array(array(255,0,0),array(0, 0, 255),array(0, 128, 0),array(66, 174, 9)) + // $actualPic = 1; + //0 = rouge + //1 = bleu + //2 = vert + //3 = white + function writePics($pics, $colors, $size=3) + { + $nbrPics = count($pics); + // header("Content-type: image/png"); + $image = imagecreate(128,64); + $fond = imagecolorallocate($image, 255,255,255); + imagecolortransparent($image,$fond); + for($actualPic = 0 ; $actualPic < $nbrPics; $actualPic++) + { + // echo $actualPic; + $AColor = imagecolorallocate($image, $colors[$actualPic][0], $colors[$actualPic][1], $colors[$actualPic][2]); + for($xy = 0 ; $xy < 1024; $xy++) + { + $y = (int)($xy/16); + $x = ($xy%16)*8; + if($pics[$actualPic][$xy]&1)//00000001 + ImageSetPixel($image, $x+7, $y, $AColor); + if(($pics[$actualPic][$xy]&2)>>1)//00000010 + ImageSetPixel($image, $x+6, $y, $AColor); + if(($pics[$actualPic][$xy]&4)>>2)//00000100 + ImageSetPixel($image, $x+5, $y, $AColor); + if(($pics[$actualPic][$xy]&8)>>3)//00001000 + ImageSetPixel($image, $x+4, $y, $AColor); + if(($pics[$actualPic][$xy]&16)>>4)//00010000 + ImageSetPixel($image, $x+3, $y, $AColor); + if(($pics[$actualPic][$xy]&32)>>5)//00100000 + ImageSetPixel($image, $x+2, $y, $AColor); + if(($pics[$actualPic][$xy]&64)>>6)//01000000 + ImageSetPixel($image, $x+1, $y, $AColor); + if(($pics[$actualPic][$xy]&128)>>7)//10000000 + ImageSetPixel($image, $x, $y, $AColor); + } + } + //resizing + if($size >=2) + { + $image = imageResizeAlpha($image,$size); + } + //senging + imagepng($image); + } +?> \ No newline at end of file diff --git a/common/style.css b/common/style.css new file mode 100644 index 0000000..250a732 --- /dev/null +++ b/common/style.css @@ -0,0 +1,48 @@ +body{margin:0;padding:0;background-color:#f6f6f6;font-family:sans-serif;min-width:950px;} +p{text-align:justify;font-size:11pt;} +/* header bar : title and links */ +#headerBar{text-align:center;background-color:#ffffff;border:solid #a7d7f9 1px;width:95%;margin:15px auto;height:40px; box-shadow: 2px 2px 15px #d0d0d0;} + #headerBar div{margin:0;padding:0;color:red;} + #headerBar .Cell{height:40px;display:inline-block} + #headerBar .CellR{border-left:solid #a7d7f9 1px;float:right;} + #headerBar .CellL{border-right:solid #a7d7f9 1px;float:left;} + #headerBar a{color:#000;text-decoration:none;} + #headerBar a:hover{background-color:#ecfbfe;color:#120447; } + #headerBar .PClink:hover{color:#be1717;background-color:#fce9e9;border:solid #be1717 1px;margin:-1px -1px 0 0;} + #headerBar .casiopeiaLink:hover{color:#4283c6;background-color:#e2eef6;border:solid #4283c6 1px;margin:-1px -1px 0 0;} + #headerBar h1{font-weight:normal;font-family:sans-serif;font-size:26px;margin:5px 10px 0 10px;} + #headerBar strong{display:inline-block;font-weight:normal;font-size:18px;margin:9px 10px 0 10px;} +/* loadbox to get file to load */ + #loadBox{display:block;width:40%;margin: 0 auto;padding:10px;box-shadow: 2px 2px 15px #d0d0d0;background-color:white;border:solid #a7d7f9 1px;text-align:center;} + #loadBox a{text-decoration:none;color:#0d90d4;margin-top:5px;display:inline-block;} + #loadBox h4{margin:0;padding:0;} + #loadBox a:hover{text-decoration:underline;} +/* errorBox error msg box */ + #errorBox{overflow:hidden;display:none;width:90%;margin: 30px auto;padding:10px;box-shadow: 2px 2px 15px #d0d0d0;background-color:white;border:solid #a7d7f9 1px;text-align:center;} + #errorBox h3{margin:0;padding:0;font-size:1.2em;color:red;font-weight:normal;} + #errorBox a{text-decoration:none;color:#0d90d4;margin-top:5px;display:block;} + #errorBox a:hover{text-decoration:underline;} +/* settings Bar : name format and eventual password */ +#settingsBar{width:95%;height:25px;margin:auto;text-align:center;margin-bottom:15px;} + #settingsBar .title{float:left;} + #settingsBar .format{float:right;} + #settingsBar .centralInput{display:none;} +/* #eactmaker the textarea and menu in top and in bottom */ +#eactmaker{width:95%;margin: 0 auto;padding:0;box-shadow: 2px 2px 15px #d0d0d0;} + #eactmaker .buttons{background-color:white;height:33px;width:100%;border:solid #a7d7f9 1px;margin:0 auto;padding:0;} + #eactmaker .buttons.top{display:none;} + #eactmaker .buttons a{float:left;border-right:solid 1px #dddddd;margin:0;height:26px;padding:7px 15px 0 15px;text-decoration:none;color:#7b7b7b;display:none;} + #eactmaker .buttons a.img{padding:0 10px;height:33px;}/*comportement of the link for img */ + #eactmaker .buttons a.img div{display:inline-block;height:33px;} + #eactmaker .buttons a:hover{color:#0d90d4;background-color:#ecfbfe;} + #eactmaker .buttons .right{border-left:1px solid #dddddd;border-right:0;float:right;} + #eactmaker .buttons input{border-style:solid;border-width:0 1px 0 1;background:none;display:inline-block;margin:0;height:33px;padding:0px 15px 0 15px;color:#7b7b7b;font-size:1.0em;font-weight:bold;cursor:pointer;} + #eactmaker .buttons input:hover{color:#0d90d4;background-color:#ecfbfe;} + #eactmaker #charsTab{background-color:#f3fdfe;width:100%;border:solid #a7d7f9 1px;margin:-1px auto 0 auto;padding:0;display:none;} + #eactmaker #charsTab div{margin:10px auto;position:relative;} + #eactmaker #charsTab a{position:absolute;display:block;width:23px;height:29px;} + #eactmaker #charsTab a:hover{border:solid #a7d7f9 1px;} + #eactmaker textarea{vertical-align: middle;width:100%;font-size:1.3em;border:solid #a7d7f9 1px;padding:0;max-width:100%;min-width:100%;min-height:30px;margin:-1px 0 -1px 0;} +#footer{font-size:10px;color:grey;float:right;width:100%;text-align:center;margin-top:15px;} + #footer a{color:grey;} + #footer a:hover{text-decoration:none;} \ No newline at end of file