ansilove

ANSI and ASCII art to PNG converter in C
Log | Files | Refs | README | LICENSE

commit 4ffa44f5de28cfd2f1b98697653f7863b6603074
parent f0db3cd03d503e5ae4cecf501566c0feb582c55f
Author: ByteProject <stefan.vogt@byteproject.net>
Date:   Tue, 27 Dec 2011 10:57:52 +0100

we just disable everything.... tadaaa... ported!

kidding aside, we comment all code contained in ansilove.c and
systematically reenable functions we have ported so far.

Diffstat:
Mansilove/ansilove.c | 5516+++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 2757 insertions(+), 2759 deletions(-)

diff --git a/ansilove/ansilove.c b/ansilove/ansilove.c @@ -15,2762 +15,2760 @@ #include "ansilove.h" #endif -/*****************************************************************************/ -/* ERROR HANDLING AND MESSAGE LOGGER */ -/*****************************************************************************/ - -function write_log($message) -{ - if (($file = @fopen (ANSILOVE_LOG_FILE, a))==FALSE) - { - echo "ERROR: Can't create log file."; - exit(-1); - } - - $string = date("[Y-m-d] - H:i:s")." - $message\n"; - - fputs ($file,$string); - fclose ($file); -} - -function error($message) -{ - trim($message); - echo("ERROR: ".$message."\n\n"); - write_log($message); - exit(-1); -} - -/*****************************************************************************/ -/* LOAD CONFIGURATION FILE */ -/*****************************************************************************/ - -if (!@require_once(dirname(__FILE__).'/ansilove.cfg.php')) -{ - error("Can't load Ansilove configuration file"); -} - -/*****************************************************************************/ -/* SANITIZE INPUT */ -/*****************************************************************************/ - -function sanitize_input($input) -{ - $input=preg_replace("/((\/+)|(\.\.)|(%2f))/","",$input); - - return $input; -} - - - -/*****************************************************************************/ -/* CHECK LIBRARIES */ -/*****************************************************************************/ - -function check_libraries() -{ - if (!extension_loaded('gd')) - { - error("Ansilove requires GD library"); - } -} - -/*****************************************************************************/ -/* CREATE THUMBNAIL */ -/*****************************************************************************/ - -function thumbnail($source,$output,$columns,$font_size_y,$position_y_max) -{ - $columns=min($columns,80); - - if (THUMBNAILS_SIZE<=0) - { - $size=1; - } - else - { - $size=THUMBNAILS_SIZE; - } - - if (THUMBNAILS_HEIGHT==0) - { - $height=$position_y_max*($font_size_y/8); - $height_source=$position_y_max*$font_size_y; - } - else - { - $height=min($position_y_max*($font_size_y/8),THUMBNAILS_HEIGHT); - $height_source=$height*8; - } - - $width_source=$columns*8; - $height*=$size; - $columns*=$size; - - if (!$thumbnail = imagecreatetruecolor($columns,$height)) - { - error("Can't allocate buffer image memory"); - } - - imagecopyresampled($thumbnail,$source,0,0,0,0,$columns,$height,$width_source,$height_source); - - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($thumbnail); - } - else - { - ImagePNG($thumbnail,$output); - } - - imagedestroy($thumbnail); -} - - - -/*****************************************************************************/ -/* LOAD ANSI */ -/*****************************************************************************/ - -function load_ansi($input,$output,$font,$bits,$icecolors) -{ - check_libraries(); - -/*****************************************************************************/ -/* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ -/*****************************************************************************/ - - $columns=80; - - switch($font) - { - case '80x25': - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case '80x50': - $font_file='ansilove_font_pc_80x50.png'; - $font_size_x=9; - $font_size_y=8; - break; - - case 'armenian': - $font_file='ansilove_font_pc_armenian.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'baltic': - $font_file='ansilove_font_pc_baltic.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'cyrillic': - $font_file='ansilove_font_pc_cyrillic.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'french-canadian': - $font_file='ansilove_font_pc_french_canadian.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'greek': - $font_file='ansilove_font_pc_greek.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'greek-869': - $font_file='ansilove_font_pc_greek_869.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'hebrew': - $font_file='ansilove_font_pc_hebrew.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'icelandic': - $font_file='ansilove_font_pc_icelandic.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'latin1': - $font_file='ansilove_font_pc_latin1.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'latin2': - $font_file='ansilove_font_pc_latin2.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'nordic': - $font_file='ansilove_font_pc_nordic.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'persian': - $font_file='ansilove_font_pc_persian.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'portuguese': - $font_file='ansilove_font_pc_portuguese.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'russian': - $font_file='ansilove_font_pc_russian.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'terminus': - $font_file='ansilove_font_pc_terminus.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'turkish': - $font_file='ansilove_font_pc_turkish.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case 'amiga': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_topaz_1200.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'b-strict': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_b-strict.png'; - $font_size_x=8; - $font_size_y=8; - break; - - case 'b-struct': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_b-struct.png'; - $font_size_x=8; - $font_size_y=8; - break; - - case 'microknight': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_microknight.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'microknight+': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_microknight+.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'microknightplus': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_microknight+.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'mosoul': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_mosoul.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'pot-noodle': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_pot-noodle.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'topaz': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_topaz_1200.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'topaz+': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_topaz_1200+.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'topazplus': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_topaz_1200+.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'topaz500': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_topaz_500.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'topaz500+': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_topaz_500+.png'; - $font_size_x=8; - $font_size_y=16; - break; - - case 'topaz500plus': - $font_amiga=TRUE; - $font_file='ansilove_font_amiga_topaz_500+.png'; - $font_size_x=8; - $font_size_y=16; - break; - - default: - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - } - - if ($bits=='ced') - { - $ced=TRUE; - } - if ($bits=='thumbnail') - { - $thumbnail=TRUE; - } - if ($bits=='transparent') - { - $transparent=TRUE; - } - if ($bits=='workbench') - { - $workbench=TRUE; - } - if ($bits=='workbench-transparent') - { - $workbench=TRUE; - $transparent=TRUE; - } - if ($bits!=8 && $bits!=9 | $font_amiga) - { - $bits=8; - } - - - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_sauce=load_sauce($input); - - if ($input_file_sauce!=NULL) - { - $input_file_size=$input_file_sauce['FileSize']; - } - else - { - $input_file_size=filesize($input); - } - - if (!$input_file_buffer = fread($input_file,$input_file_size)) - { - error("Can't read file $input"); - } - - fclose($input_file); - - $diz_extensions_exploded=explode(",",DIZ_EXTENSIONS); - - for ($loop=0;$loop<sizeof($diz_extensions_exploded);$loop++) - { - $diz_extension_length=strlen($diz_extensions_exploded[$loop]); - - if (strtolower(substr($input,(strlen($input)-$diz_extension_length),$diz_extension_length))==$diz_extensions_exploded[$loop] || strtolower(substr($input,strlen($input)-($diz_extension_length+9),($diz_extension_length+9)))==$diz_extensions_exploded[$loop].'.ansilove') - { - $input_file_buffer=preg_replace("/^(\s+[\r\n])+/","",$input_file_buffer); - $input_file_buffer=rtrim($input_file_buffer); - $input_file_size=strlen($input_file_buffer); - } - } - -/*****************************************************************************/ -/* LOAD BACKGROUND/FONT */ -/*****************************************************************************/ - - if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) - { - error("Can't open file ansilove_background.png"); - } - - if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) - { - error("Can't open file $font_file"); - } - - imagecolortransparent($font,20); - - - -/*****************************************************************************/ -/* PROCESS ANSI */ -/*****************************************************************************/ - - $color_background=0; - $color_foreground=7; - - $loop=0; - - $position_x=0; - $position_y=0; - - $position_x_max=0; - $position_y_max=0; - - while ($loop<$input_file_size) - { - $current_character=ord($input_file_buffer[$loop]); - $next_character=ord($input_file_buffer[$loop+1]); - - if ($position_x==80 && WRAP_COLUMN_80) - { - $position_y++; - $position_x=0; - } - -/*****************************************************************************/ -/* CR+LF */ -/*****************************************************************************/ - - if ($current_character==13) - { - if ($next_character==10) - { - $position_y++; - $position_x=0; - $loop++; - } - } - -/*****************************************************************************/ -/* LF */ -/*****************************************************************************/ - - if ($current_character==10) - { - $position_y++; - $position_x=0; - } - -/*****************************************************************************/ -/* TAB */ -/*****************************************************************************/ - - if ($current_character==9) - { - $position_x+=8; - } - -/*****************************************************************************/ -/* SUB */ -/*****************************************************************************/ - - if ($current_character==26 && SUBSTITUTE_BREAK) - { - break; - } - - - -/*****************************************************************************/ -/* ANSI SEQUENCE */ -/*****************************************************************************/ - - if ($current_character==27 && $next_character==91) - { - unset($ansi_sequence); - - for ($ansi_sequence_loop=0;$ansi_sequence_loop<12;$ansi_sequence_loop++) - { - $ansi_sequence_character=$input_file_buffer[$loop+2+$ansi_sequence_loop]; - -/*****************************************************************************/ -/* CURSOR POSITION */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='H' || $ansi_sequence_character=='f') - { - $ansi_sequence_exploded=explode(";",$ansi_sequence); - $position_y=$ansi_sequence_exploded[0]-1; - $position_x=$ansi_sequence_exploded[1]-1; - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* CURSOR UP */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='A') - { - if ($ansi_sequence=='') - { - $ansi_sequence=1; - } - - $position_y=$position_y-$ansi_sequence; - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* CURSOR DOWN */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='B') - { - if ($ansi_sequence=='') - { - $ansi_sequence=1; - } - - $position_y=$position_y+$ansi_sequence; - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* CURSOR FORWARD */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='C') - { - if ($ansi_sequence=='') - { - $ansi_sequence=1; - } - - $position_x=$position_x+$ansi_sequence; - if ($position_x>80) - { - $position_x=80; - } - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* CURSOR BACKWARD */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='D') - { - if ($ansi_sequence=='') - { - $ansi_sequence=1; - } - - $position_x=$position_x-$ansi_sequence; - if ($position_x<0) - { - $position_x=0; - } - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* SAVE CURSOR POSITION */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='s') - { - $saved_position_y=$position_y; - $saved_position_x=$position_x; - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* RESTORE CURSOR POSITION */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='u') - { - $position_y=$saved_position_y; - $position_x=$saved_position_x; - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* ERASE DISPLAY */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='J') - { - if ($ansi_sequence==2) - { - unset($ansi_buffer); - - $position_x=0; - $position_y=0; - - $position_x_max=0; - $position_y_max=0; - } - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* SET GRAPHIC RENDITION */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='m') - { - $ansi_sequence_exploded=explode(";",$ansi_sequence); - - sort($ansi_sequence_exploded); - - for ($loop_ansi_sequence=0;$loop_ansi_sequence<sizeof($ansi_sequence_exploded);$loop_ansi_sequence++) - { - $ansi_sequence_value=$ansi_sequence_exploded[$loop_ansi_sequence]; - - if ($ansi_sequence_value==0) - { - $color_background=0; - $color_foreground=7; - $bold=FALSE; - $underline=FALSE; - $italics=FALSE; - $blink=FALSE; - } - - if ($ansi_sequence_value==1) - { - if (!$workbench) - { - $color_foreground+=8; - } - $bold=TRUE; - } - - if ($ansi_sequence_value==3) - { - $italics=TRUE; - } - - if ($ansi_sequence_value==4) - { - $underline=TRUE; - } - - if ($ansi_sequence_value==5) - { - if (!$workbench) - { - $color_background+=8; - } - $blink=TRUE; - } - - if ($ansi_sequence_value>29 && $ansi_sequence_value<38) - { - $color_foreground=$ansi_sequence_value-30; - - if ($bold) - { - $color_foreground+=8; - } - } - - if ($ansi_sequence_value>39 && $ansi_sequence_value<48) - { - $color_background=$ansi_sequence_value-40; - - if ($blink && $icecolors) - { - $color_background+=8; - } - } - } - - $loop+=$ansi_sequence_loop+2; - break; - } - -/*****************************************************************************/ -/* CURSOR DE/ACTIVATION (AMIGA ANSI) */ -/*****************************************************************************/ - - if ($ansi_sequence_character=='p') - { - $loop+=$ansi_sequence_loop+2; - break; - } - - $ansi_sequence.=$ansi_sequence_character; - } - } - elseif ($current_character!=10 && $current_character!=13 && $current_character!=9) - { - -/*****************************************************************************/ -/* RECORD NUMBER OF COLUMNS AND LINES USED */ -/*****************************************************************************/ - - if ($position_x>$position_x_max) - { - $position_x_max=$position_x; - } - - if ($position_y>$position_y_max) - { - $position_y_max=$position_y; - } - - - -/*****************************************************************************/ -/* WRITE CURRENT CHARACTER INFO IN A TEMPORARY ARRAY */ -/*****************************************************************************/ - - if (!$font_amiga || ($current_character!=12 && $current_character!=13)) - { - $ansi_buffer.=chr($color_background); - $ansi_buffer.=chr($color_foreground); - $ansi_buffer.=chr($current_character); - $ansi_buffer.=chr($bold); - $ansi_buffer.=chr($italics); - $ansi_buffer.=chr($underline); - $ansi_buffer.=chr($position_x); - $ansi_buffer.=chr($position_y & 0xFF); - $ansi_buffer.=chr($position_y>>8); - - $position_x++; - } - } - $loop++; - } - - - -/*****************************************************************************/ -/* ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - $position_x_max++; - $position_y_max++; - - if ($ced) - { - $columns=78; - } - - for ($loop=0;$loop<sizeof($diz_extensions_exploded);$loop++) - { - $diz_extension_length=strlen($diz_extensions_exploded[$loop]); - - if (strtolower(substr($input,(strlen($input)-$diz_extension_length),$diz_extension_length))==$diz_extensions_exploded[$loop] || strtolower(substr($input,strlen($input)-($diz_extension_length+9),($diz_extension_length+9)))==$diz_extensions_exploded[$loop].'.ansilove') - { - $columns=min($position_x_max,80); - } - } - - if (!$ansi = imagecreate($columns*$bits,($position_y_max)*$font_size_y)) - { - error("Can't allocate buffer image memory"); - } - - if ($ced) - { - $ced_background_color=explode(",",CED_BACKGROUND_COLOR); - $ced_foreground_color=explode(",",CED_FOREGROUND_COLOR); - - imagecolorallocate($ansi,$ced_background_color[0],$ced_background_color[1],$ced_background_color[2]); - - $ced_color=imagecolorallocate($ansi,$ced_background_color[0],$ced_background_color[1],$ced_background_color[2]); - $ced_color=imagecolorallocate($background,$ced_background_color[0],$ced_background_color[1],$ced_background_color[2]); - - imagefill($ansi,0,0,$ced_color); - imagefilledrectangle($background,0,0,144,16,$ced_color); - - for ($loop=0;$loop<16;$loop++) - { - imagecolorset($font,$loop,$ced_foreground_color[0],$ced_foreground_color[1],$ced_foreground_color[2]); - } - } - else if ($workbench) - { - $workbench_color[0]=explode(",",WORKBENCH_COLOR_0); - $workbench_color[1]=explode(",",WORKBENCH_COLOR_4); - $workbench_color[2]=explode(",",WORKBENCH_COLOR_2); - $workbench_color[3]=explode(",",WORKBENCH_COLOR_6); - $workbench_color[4]=explode(",",WORKBENCH_COLOR_1); - $workbench_color[5]=explode(",",WORKBENCH_COLOR_5); - $workbench_color[6]=explode(",",WORKBENCH_COLOR_3); - $workbench_color[7]=explode(",",WORKBENCH_COLOR_7); - - imagecolorallocate($ansi,$workbench_color[0][0],$workbench_color[0][1],$workbench_color[0][2]); - - $workbench_background=imagecolorallocate($ansi,$workbench_color[0][0],$workbench_color[0][1],$workbench_color[0][2]); - $workbench_background=imagecolorallocate($background,$workbench_color[0][0],$workbench_color[0][1],$workbench_color[0][2]); - - imagefill($ansi,0,0,$workbench_background); - - for ($loop=0; $loop<8; $loop++) - { - imagecolorset($background,$loop,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); - imagecolorset($background,$loop+8,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); - imagecolorset($font,$loop,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); - imagecolorset($font,$loop+8,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); - } - } - else - { - $background_canvas=imagecolorallocate($ansi,0,0,0); - } - - for ($loop=0; $loop<16; $loop++) - { - /* Generating ANSI colors array in order to be able to draw underlines */ - $color_index=imagecolorsforindex($background,$loop); - $colors[$loop]=imagecolorallocate($ansi,$color_index['red'],$color_index['green'],$color_index['blue']); - } - - - -/*****************************************************************************/ -/* RENDER ANSI */ -/*****************************************************************************/ - - for ($loop=0;$loop<strlen($ansi_buffer);$loop+=9) - { - $color_background=ord($ansi_buffer[$loop]); - $color_foreground=ord($ansi_buffer[$loop+1]); - $character=ord($ansi_buffer[$loop+2]); - $bold=ord($ansi_buffer[$loop+3]); - $italics=ord($ansi_buffer[$loop+4]); - $underline=ord($ansi_buffer[$loop+5]); - $position_x=ord($ansi_buffer[$loop+6]); - $position_y=ord($ansi_buffer[$loop+7])+(ord($ansi_buffer[$loop+8])<<8); - - if (!$font_amiga) - { - imagecopy($ansi,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); - imagecopy($ansi,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); - } - else - { - if ($color_background!=0 || !$italics) - { - imagecopy($ansi,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); - } - - if (!$italics) - { - imagecopy($ansi,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); - } - else - { - imagecopy($ansi,$font,$position_x*$bits+3,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,2); - imagecopy($ansi,$font,$position_x*$bits+2,$position_y*$font_size_y+2,$character*$font_size_x,$color_foreground*$font_size_y+2,$bits,4); - imagecopy($ansi,$font,$position_x*$bits+1,$position_y*$font_size_y+6,$character*$font_size_x,$color_foreground*$font_size_y+6,$bits,4); - imagecopy($ansi,$font,$position_x*$bits,$position_y*$font_size_y+10,$character*$font_size_x,$color_foreground*$font_size_y+10,$bits,4); - imagecopy($ansi,$font,$position_x*$bits-1,$position_y*$font_size_y+14,$character*$font_size_x,$color_foreground*$font_size_y+14,$bits,2); - } - - if ($italics && $bold) - { - imagecopy($ansi,$font,$position_x*$bits+3+1,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,2); - imagecopy($ansi,$font,$position_x*$bits+2+1,$position_y*$font_size_y+2,$character*$font_size_x,$color_foreground*$font_size_y+2,$bits,4); - imagecopy($ansi,$font,$position_x*$bits+1+1,$position_y*$font_size_y+6,$character*$font_size_x,$color_foreground*$font_size_y+6,$bits,4); - imagecopy($ansi,$font,$position_x*$bits+1,$position_y*$font_size_y+10,$character*$font_size_x,$color_foreground*$font_size_y+10,$bits,4); - imagecopy($ansi,$font,$position_x*$bits-1+1,$position_y*$font_size_y+14,$character*$font_size_x,$color_foreground*$font_size_y+14,$bits,2); - } - - if ($bold && !$italics) - { - imagecopy($ansi,$font,1+$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); - } - - if ($underline) - { - $loop_column=0; - $character_size_x=8; - - if ($bold) - { - $character_size_x++; - } - - if ($italics) - { - $loop_column=-1; - $character_size_x=11; - } - - while ($loop_column<$character_size_x) - { - if (imagecolorat($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+15)==$color_background && imagecolorat($ansi,$position_x*$bits+$loop_column+1,$position_y*$font_size_y+15)==$color_background) - { - imagesetpixel($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+14,$colors[$color_foreground]); - imagesetpixel($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+15,$colors[$color_foreground]); - } - else if (imagecolorat($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+15)!=$color_background && imagecolorat($ansi,$position_x*$bits+$loop_column+1,$position_y*$font_size_y+15)==$color_background) - { - $loop_column++; - } - - $loop_column++; - } - - if ($pixel_carry) - { - imagesetpixel($ansi,$position_x*$bits,$position_y*$font_size_y+14,$colors[$color_foreground]); - imagesetpixel($ansi,$position_x*$bits,$position_y*$font_size_y+15,$colors[$color_foreground]); - $pixel_carry=FALSE; - } - - if (imagecolorat($font,$character*$font_size_x,$color_foreground*$font_size_y+15)!=20) - { - imagesetpixel($ansi,$position_x*$bits-1,$position_y*$font_size_y+14,$colors[$color_foreground]); - imagesetpixel($ansi,$position_x*$bits-1,$position_y*$font_size_y+15,$colors[$color_foreground]); - } - - if (imagecolorat($font,$character*$font_size_x+$character_size_x-1,$color_foreground*$font_size_y+15)!=20) - { - $pixel_carry=TRUE; - } - } - } - } - - - -/*****************************************************************************/ -/* CREATE OUTPUT FILE */ -/*****************************************************************************/ - - if ($transparent) - { - imagecolortransparent($ansi,$background_canvas); - } - - if ($thumbnail) - { - thumbnail($ansi,$output,$columns,$font_size_y,$position_y_max); - } - else - { - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($ansi); - } - else - { - if (!SPLIT) - { - ImagePNG($ansi,$output); - } - else - { - $image_size_y=$position_y_max*$font_size_y; - $split_size_y=SPLIT_HEIGHT; - - $loop_max=($image_size_y/$split_size_y); - - for ($loop=0; $loop<$loop_max; $loop++) - { - if (($image_size_y-($split_size_y*$loop))<$split_size_y) - { - $height=($image_size_y-($split_size_y*$loop)); - } - else - { - $height=$split_size_y; - } - - if (!$split = imagecreate($columns*$bits,$height)) - { - error("Can't allocate buffer image memory"); - } - - imagecolorallocate($split,0,0,0); - imagecopy($split,$ansi,0,0,0,($loop*$split_size_y),$columns*$bits,$height); - - if ($loop_max>=1) - { - $output_file=$output.SPLIT_SEPARATOR.str_pad($loop,4,"0",STR_PAD_LEFT).".png"; - } - else - { - $output_file=$output.".png"; - } - - $output_files[]=$output_file; - - if ($transparent) - { - imagecolortransparent($split,$background_canvas); - } - - ImagePNG($split,$output_file); - imagedestroy($split); - } - } - } - } - - - -/*****************************************************************************/ -/* FREE MEMORY */ -/*****************************************************************************/ - - imagedestroy($ansi); - imagedestroy($background); - imagedestroy($font); - - return $output_files; -} - - - -/*****************************************************************************/ -/* LOAD PCBOARD */ -/*****************************************************************************/ - -function load_pcboard($input,$output,$font,$bits) -{ - check_libraries(); - -/*****************************************************************************/ -/* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ -/*****************************************************************************/ - - $columns=80; - - if ($bits=='thumbnail') - { - $thumbnail=TRUE; - } - if ($bits!=8 && $bits!=9) - { - $bits=8; - } - - switch($font) - { - case '80x25': - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case '80x50': - $font_file='ansilove_font_pc_80x50.png'; - $font_size_x=9; - $font_size_y=8; - break; - - default: - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - } - - - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_sauce=load_sauce($input); - - if ($input_file_sauce!=NULL) - { - $input_file_size=$input_file_sauce['FileSize']; - } - else - { - $input_file_size=filesize($input); - } - - if (!$input_file_buffer = fread($input_file,$input_file_size)) - { - error("Can't read file $input"); - } - - fclose($input_file); - - - -/*****************************************************************************/ -/* LOAD BACKGROUND/FONT */ -/*****************************************************************************/ - - if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) - { - error("Can't open file ansilove_background.png"); - } - - if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) - { - error("Can't open file $font_file"); - } - - imagecolortransparent($font,20); - - - -/*****************************************************************************/ -/* ALLOCATE BACKGROUND/FOREGROUND COLOR ARRAYS */ -/*****************************************************************************/ - - $pcb_colors[48]=0; $pcb_colors[49]=4; $pcb_colors[50]=2; $pcb_colors[51]=6; $pcb_colors[52]=1; $pcb_colors[53]=5; $pcb_colors[54]=3; $pcb_colors[55]=7; $pcb_colors[56]=8; $pcb_colors[57]=12; $pcb_colors[65]=10; $pcb_colors[66]=14; $pcb_colors[67]=9; $pcb_colors[68]=13; $pcb_colors[69]=11; $pcb_colors[70]=15; - - - -/*****************************************************************************/ -/* STRIP UNWANTED PCBOARD CODES (DEFINED IN CONFIG FILE) */ -/*****************************************************************************/ - - $pcboard_strip_codes_exploded=explode(",",PCBOARD_STRIP_CODES); - - for ($loop=0;$loop<sizeof($pcboard_strip_codes_exploded);$loop++) - { - $input_file_buffer=preg_replace("/(".$pcboard_strip_codes_exploded[$loop].")/","",$input_file_buffer); - } - - - -/*****************************************************************************/ -/* PROCESS PCB */ -/*****************************************************************************/ - - $color_background=0; - $color_foreground=7; - - $loop=0; - - $position_x=0; - $position_y=0; - - $position_x_max=0; - $position_y_max=0; - - while ($loop<$input_file_size) - { - $current_character=ord($input_file_buffer[$loop]); - $next_character=ord($input_file_buffer[$loop+1]); - - if ($position_x==80) - { - $position_y++; - $position_x=0; - } - -/*****************************************************************************/ -/* CR+LF */ -/*****************************************************************************/ - - if ($current_character==13) - { - if ($next_character==10) - { - $position_y++; - $position_x=0; - $loop++; - } - } - -/*****************************************************************************/ -/* LF */ -/*****************************************************************************/ - - if ($current_character==10) - { - $position_y++; - $position_x=0; - } - -/*****************************************************************************/ -/* TAB */ -/*****************************************************************************/ - - if ($current_character==9) - { - $position_x+=8; - } - -/*****************************************************************************/ -/* SUB */ -/*****************************************************************************/ - - if ($current_character==26) - { - break; - } - -/*****************************************************************************/ -/* PCB SEQUENCE */ -/*****************************************************************************/ - - if ($current_character==64 & $next_character==88) - { - -/*****************************************************************************/ -/* SET GRAPHIC RENDITION */ -/*****************************************************************************/ - - $color_background=$pcb_colors[ord($input_file_buffer[$loop+2])]; - $color_foreground=$pcb_colors[ord($input_file_buffer[$loop+3])]; - - $loop+=3; - } - elseif ($current_character==64 & $next_character==67 & $input_file_buffer[$loop+2]=='L' & $input_file_buffer[$loop+3]=='S') - { - -/*****************************************************************************/ -/* ERASE DISPLAY */ -/*****************************************************************************/ - - unset($pcboard_buffer); - - $position_x=0; - $position_y=0; - - $position_x_max=0; - $position_y_max=0; - - $loop+=4; - } - elseif ($current_character==64 & $next_character==80 & $input_file_buffer[$loop+2]=='O' & $input_file_buffer[$loop+3]=='S' & $input_file_buffer[$loop+4]==':') - { - -/*****************************************************************************/ -/* CURSOR POSITION */ -/*****************************************************************************/ - - if ($input_file_buffer[$loop+6]=='@') - { - $position_x=(ord($input_file_buffer[$loop+5])-48)-1; - $loop+=5; - } - else - { - $position_x=(10*(ord($input_file_buffer[$loop+5])-48)+ord($input_file_buffer[$loop+6])-48)-1; - $loop+=6; - } - } - elseif ($current_character!=10 && $current_character!=13 && $current_character!=9) - { - -/*****************************************************************************/ -/* RECORD NUMBER OF COLUMNS AND LINES USED */ -/*****************************************************************************/ - - if ($position_x>$position_x_max) - { - $position_x_max=$position_x; - } - - if ($position_y>$position_y_max) - { - $position_y_max=$position_y; - } - - - -/*****************************************************************************/ -/* WRITE CURRENT CHARACTER INFO IN A TEMPORARY ARRAY */ -/*****************************************************************************/ - - $pcboard_buffer[]=$position_x; - $pcboard_buffer[]=$position_y; - $pcboard_buffer[]=$color_background; - $pcboard_buffer[]=$color_foreground; - $pcboard_buffer[]=$current_character; - - $position_x++; - } - $loop++; - } - - - -/*****************************************************************************/ -/* ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - $position_x_max++; - $position_y_max++; - - if (!$pcboard = imagecreate($columns*$bits,($position_y_max)*$font_size_y)) - { - error("Can't allocate buffer image memory"); - } - - imagecolorallocate($pcboard,0,0,0); - - - -/*****************************************************************************/ -/* RENDER PCB */ -/*****************************************************************************/ - - for ($loop=0;$loop<sizeof($pcboard_buffer);$loop+=5) - { - $position_x=$pcboard_buffer[$loop]; - $position_y=$pcboard_buffer[$loop+1]; - $color_background=$pcboard_buffer[$loop+2]; - $color_foreground=$pcboard_buffer[$loop+3]; - $character=$pcboard_buffer[$loop+4]; - - imagecopy($pcboard,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); - imagecopy($pcboard,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); - } - - - -/*****************************************************************************/ -/* CREATE OUTPUT FILE */ -/*****************************************************************************/ - - if ($thumbnail) - { - thumbnail($pcboard,$output,$columns,$font_size_y,$position_y_max); - } - else - { - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($pcboard); - } - else - { - ImagePNG($pcboard,$output); - } - } - - - -/*****************************************************************************/ -/* FREE MEMORY */ -/*****************************************************************************/ - - imagedestroy($pcboard); - imagedestroy($background); - imagedestroy($font); -} - - - -/*****************************************************************************/ -/* LOAD BINARY */ -/*****************************************************************************/ - -function load_binary($input,$output,$columns,$font,$bits,$icecolors) -{ - check_libraries(); - -/*****************************************************************************/ -/* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ -/*****************************************************************************/ - - if ($columns==0) - { - $columns=160; - } - - if ($bits=='thumbnail') - { - $thumbnail=TRUE; - } - if ($bits!=8 && $bits!=9) - { - $bits=8; - } - - switch($font) - { - case '80x25': - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case '80x50': - $font_file='ansilove_font_pc_80x50.png'; - $font_size_x=9; - $font_size_y=8; - break; - - default: - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - } - - - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_sauce=load_sauce($input); - - if ($input_file_sauce!=NULL) - { - $input_file_size=$input_file_sauce['FileSize']; - } - else - { - $input_file_size=filesize($input); - } - - if (!$input_file_buffer = fread($input_file,$input_file_size)) - { - error("Can't read file $input"); - } - - fclose($input_file); - - - -/*****************************************************************************/ -/* LOAD BACKGROUND/FONT AND ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) - { - error("Can't open file ansilove_background.png"); - } - - if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) - { - error("Can't open file $font_file"); - } - - imagecolortransparent($font,20); - - if (!$binary = imagecreate($columns*$bits,(($input_file_size/2)/$columns)*$font_size_y)) - { - error("Can't allocate buffer image memory"); - } - - imagecolorallocate($binary,0,0,0); - - - -/*****************************************************************************/ -/* ALLOCATE BACKGROUND/FOREGROUND COLOR ARRAYS */ -/*****************************************************************************/ - - $binary_colors[0]=0; $binary_colors[1]=4; $binary_colors[2]=2; $binary_colors[3]=6; $binary_colors[4]=1; $binary_colors[5]=5; $binary_colors[6]=3; $binary_colors[7]=7; $binary_colors[8]=8; $binary_colors[9]=12; $binary_colors[10]=10; $binary_colors[11]=14; $binary_colors[12]=9; $binary_colors[13]=13; $binary_colors[14]=11; $binary_colors[15]=15; - - - -/*****************************************************************************/ -/* PROCESS BINARY */ -/*****************************************************************************/ - - while ($loop<$input_file_size) - { - if ($position_x==$columns) - { - $position_x=0; - $position_y++; - } - - $character=ord($input_file_buffer[$loop]); - $attribute=ord($input_file_buffer[$loop+1]); - - $color_background=$binary_colors[($attribute & 240)>>4]; - $color_foreground=$binary_colors[$attribute & 15]; - - if ($color_background>8 && $icecolors==0) - { - $color_background-=8; - } - - imagecopy($binary,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); - imagecopy($binary,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); - - $position_x++; - $loop+=2; - } - - - -/*****************************************************************************/ -/* CREATE OUTPUT FILE */ -/*****************************************************************************/ - - if ($thumbnail) - { - $position_y_max=($input_file_size/2)/$columns; - thumbnail($binary,$output,$columns,$font_size_y,$position_y_max); - } - else - { - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($binary); - } - else - { - ImagePNG($binary,$output); - } - } - - - -/*****************************************************************************/ -/* FREE MEMORY */ -/*****************************************************************************/ - - imagedestroy($binary); - imagedestroy($background); - imagedestroy($font); -} - - - -/*****************************************************************************/ -/* LOAD ADF */ -/*****************************************************************************/ - -function load_adf($input,$output,$bits) -{ - check_libraries(); - - if ($bits=='thumbnail') - { - $thumbnail=TRUE; - } - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_sauce=load_sauce($input); - - if ($input_file_sauce!=NULL) - { - $input_file_size=$input_file_sauce['FileSize']; - } - else - { - $input_file_size=filesize($input); - } - - if (!$input_file_buffer = fread($input_file,$input_file_size)) - { - error("Can't read file $input"); - } - - fclose($input_file); - - - -/*****************************************************************************/ -/* ALLOCATE BACKGROUND/FONT IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$background = imagecreate(128,16)) - { - error("Can't allocate background buffer image memory"); - } - - if (!$font = imagecreate(2048,256)) - { - error("Can't allocate font buffer image memory"); - } - - if (!$font_inverted = imagecreate(2048,16)) - { - error("Can't allocate temporary font buffer image memory"); - } - - - -/*****************************************************************************/ -/* PROCESS ADF PALETTE */ -/*****************************************************************************/ - - $adf_colors=array(0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63); - - for ($loop=0;$loop<16;$loop++) - { - $index=($adf_colors[$loop]*3)+1; - $colors[$loop]=imagecolorallocate($background,(ord($input_file_buffer[$index])<<2 | ord($input_file_buffer[$index])>>4),(ord($input_file_buffer[$index+1])<<2 | ord($input_file_buffer[$index+1])>>4),(ord($input_file_buffer[$index+2])<<2 | ord($input_file_buffer[$index+2])>>4)); - } - - imagepalettecopy($font,$background); - imagepalettecopy($font_inverted,$background); - - $color_index=imagecolorsforindex($background, 0); - $colors[16]=imagecolorallocate($font,$color_index['red'],$color_index['green'],$color_index['blue']); - $colors[20]=imagecolorallocate($font_inverted,200,220,169); - - for ($loop=0;$loop<16;$loop++) - { - imagefilledrectangle($background,$loop<<3,0,($loop<<3)+8,16,$colors[$loop]); - } - - - -/*****************************************************************************/ -/* PROCESS ADF FONT */ -/*****************************************************************************/ - - imagefilledrectangle($font_inverted,0,0,2048,16,$colors[20]); - imagecolortransparent($font_inverted,$colors[20]); - - for ($loop=0;$loop<256;$loop++) - { - for ($adf_font_size_y=0;$adf_font_size_y<16;$adf_font_size_y++) - { - $adf_character_line=ord($input_file_buffer[193+$adf_font_size_y+($loop*16)]); - - for ($loop_column=0;$loop_column<8;$loop_column++) - { - $adf_character_column=128/pow(2,$loop_column); - - if (($adf_character_line & $adf_character_column)!=$adf_character_column) - { - imagesetpixel($font_inverted,($loop*8)+$loop_column,$adf_font_size_y,$colors[0]); - } - } - } - } - - for ($loop=1;$loop<16;$loop++) - { - imagefilledrectangle($font,0,$loop*16,2048,($loop*16)+16,$colors[$loop]); - } - imagefilledrectangle($font,0,0,2048,15,$colors[16]); - - for ($loop=0;$loop<16;$loop++) - { - imagecopy($font,$font_inverted,0,$loop*16,0,0,2048,16); - } - imagecolortransparent($font,$colors[0]); - - - -/*****************************************************************************/ -/* ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$adf = imagecreate(640,((($input_file_size-192-4096-1)/2)/80)*16)) - { - error("Can't allocate buffer image memory"); - } - - imagecolorallocate($adf,0,0,0); - - - -/*****************************************************************************/ -/* PROCESS ADF */ -/*****************************************************************************/ - - $loop=192+4096+1; - - while ($loop<$input_file_size) - { - if ($position_x==80) - { - $position_x=0; - $position_y++; - } - - $character=ord($input_file_buffer[$loop]); - $attribute=ord($input_file_buffer[$loop+1]); - - $color_background=($attribute & 240)>>4; - $color_foreground=$attribute & 15; - - imagecopy($adf,$background,$position_x*8,$position_y*16,$color_background*8,0,8,16); - imagecopy($adf,$font,$position_x*8,$position_y*16,$character*8,$color_foreground*16,8,16); - - $position_x++; - $loop+=2; - } - - - -/*****************************************************************************/ -/* CREATE OUTPUT FILE */ -/*****************************************************************************/ - - if ($thumbnail) - { - $position_y_max=(($input_file_size-192-4096-1)/2)/80; - $columns=80; - $font_size_y=16; - - thumbnail($adf,$output,$columns,$font_size_y,$position_y_max); - } - else - { - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($adf); - } - else - { - ImagePNG($adf,$output); - } - } - - - -/*****************************************************************************/ -/* FREE MEMORY */ -/*****************************************************************************/ - - imagedestroy($adf); - imagedestroy($background); - imagedestroy($font); - imagedestroy($font_inverted); -} - - - -/*****************************************************************************/ -/* LOAD IDF */ -/*****************************************************************************/ - -function load_idf($input,$output,$bits) -{ - check_libraries(); - - if ($bits=='thumbnail') - { - $thumbnail=TRUE; - } - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_sauce=load_sauce($input); - - if ($input_file_sauce!=NULL) - { - $input_file_size=$input_file_sauce['FileSize']; - } - else - { - $input_file_size=filesize($input); - } - - if (!$input_file_buffer = fread($input_file,$input_file_size)) - { - error("Can't read file $input"); - } - - fclose($input_file); - - - -/*****************************************************************************/ -/* EXTRACT IDF HEADER */ -/*****************************************************************************/ - - $idf_header['ID']=substr($input_file_buffer,0,4); - $idf_header=array_merge($idf_header,unpack('vx1/vy1/vx2/vy2',substr($input_file_buffer,4,8))); - - - -/*****************************************************************************/ -/* ALLOCATE BACKGROUND/FONT IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$background = imagecreate(128,16)) - { - error("Can't allocate background buffer image memory"); - } - - if (!$font = imagecreate(2048,256)) - { - error("Can't allocate font buffer image memory"); - } - - if (!$font_inverted = imagecreate(2048,16)) - { - error("Can't allocate temporary font buffer image memory"); - } - - - -/*****************************************************************************/ -/* PROCESS IDF PALETTE */ -/*****************************************************************************/ - - for ($loop=0;$loop<16;$loop++) - { - $index=($loop*3)+$input_file_size-48; - $colors[$loop]=imagecolorallocate($background,(ord($input_file_buffer[$index])<<2 | ord($input_file_buffer[$index])>>4),(ord($input_file_buffer[$index+1])<<2 | ord($input_file_buffer[$index+1])>>4),(ord($input_file_buffer[$index+2])<<2 | ord($input_file_buffer[$index+2])>>4)); - } - - imagepalettecopy($font,$background); - imagepalettecopy($font_inverted,$background); - - $color_index=imagecolorsforindex($background,0); - $colors[16]=imagecolorallocate($font,$color_index['red'],$color_index['green'],$color_index['blue']); - $colors[20]= imagecolorallocate($font_inverted,200,220,169); - - for ($loop=0;$loop<16;$loop++) - { - imagefilledrectangle($background,$loop<<3,0,($loop<<3)+8,16,$colors[$loop]); - } - - - -/*****************************************************************************/ -/* PROCESS IDF FONT */ -/*****************************************************************************/ - - imagefilledrectangle($font_inverted,0,0,2048,16,$colors[20]); - imagecolortransparent($font_inverted,$colors[20]); - - for ($loop=0;$loop<256;$loop++) - { - for ($idf_font_size_y=0;$idf_font_size_y<16;$idf_font_size_y++) - { - $idf_character_line=ord($input_file_buffer[$input_file_size-48-4096+$idf_font_size_y+($loop*16)]); - - for ($loop_column=0;$loop_column<8;$loop_column++) - { - $idf_character_column=128/pow(2,$loop_column); - - if (($idf_character_line & $idf_character_column)!=$idf_character_column) - { - imagesetpixel($font_inverted,($loop*8)+$loop_column,$idf_font_size_y,$colors[0]); - } - } - } - } - - for ($loop=1;$loop<16;$loop++) - { - imagefilledrectangle($font,0,$loop*16,2048,($loop*16)+16,$colors[$loop]); - } - imagefilledrectangle($font,0,0,2048,15,$colors[16]); - - for ($loop=0;$loop<16;$loop++) - { - imagecopy($font,$font_inverted,0,$loop*16,0,0,2048,16); - } - imagecolortransparent($font,$colors[0]); - - - -/*****************************************************************************/ -/* PROCESS IDF */ -/*****************************************************************************/ - - $loop=12; - - while ($loop<$input_file_size-4096-48) - { - $idf_data=unpack('vdata',substr($input_file_buffer,$loop,2)); - if ($idf_data['data']==1) - { - $idf_data=unpack('vlength',substr($input_file_buffer,$loop+2,2)); - - $idf_sequence_length=$idf_data['length'] & 255; - $idf_data=unpack('Ccharacter/Cattribute',substr($input_file_buffer,$loop+4,2)); - - for ($idf_sequence_loop=0;$idf_sequence_loop<$idf_sequence_length;$idf_sequence_loop++) - { - $idf_buffer[]=$idf_data['character']; - $idf_buffer[]=$idf_data['attribute']; - } - - $loop+=4; - } - else - { - $idf_data=unpack('Ccharacter/Cattribute',substr($input_file_buffer,$loop,2)); - - $idf_buffer[]=$idf_data['character']; - $idf_buffer[]=$idf_data['attribute']; - } - - $loop+=2; - } - - - -/*****************************************************************************/ -/* ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$idf = imagecreate(($idf_header['x2']+1)*8,(sizeof($idf_buffer)/2/80)*16)) - { - error("Can't allocate buffer image memory"); - } - - imagecolorallocate($idf,0,0,0); - - - -/*****************************************************************************/ -/* RENDER IDF */ -/*****************************************************************************/ - - for ($loop=0;$loop<sizeof($idf_buffer);$loop+=2) - { - if ($position_x==$idf_header['x2']+1) - { - $position_x=0; - $position_y++; - } - - $character=$idf_buffer[$loop]; - $attribute=$idf_buffer[$loop+1]; - - $color_background=($attribute & 240)>>4; - $color_foreground=$attribute & 15; - - imagecopy($idf,$background,$position_x*8,$position_y*16,$color_background*8,0,8,16); - imagecopy($idf,$font,$position_x*8,$position_y*16,$character*8,$color_foreground*16,8,16); - - $position_x++; - } - - - -/*****************************************************************************/ -/* CREATE OUTPUT FILE */ -/*****************************************************************************/ - - if ($thumbnail) - { - $position_y_max=$position_y; - $columns=80; - $font_size_y=16; - - thumbnail($idf,$output,$columns,$font_size_y,$position_y_max); - } - else - { - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($idf); - } - else - { - ImagePNG($idf,$output); - } - } - - - -/*****************************************************************************/ -/* FREE MEMORY */ -/*****************************************************************************/ - - imagedestroy($idf); - imagedestroy($background); - imagedestroy($font); - imagedestroy($font_inverted); -} - - - -/*****************************************************************************/ -/* LOAD TUNDRA */ -/*****************************************************************************/ - -function load_tundra($input,$output,$font,$bits) -{ - check_libraries(); - -/*****************************************************************************/ -/* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ -/*****************************************************************************/ - - $columns=80; - - if ($bits=='thumbnail') - { - $thumbnail=TRUE; - } - if ($bits!=8 && $bits!=9) - { - $bits=8; - } - - switch($font) - { - case '80x25': - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - break; - - case '80x50': - $font_file='ansilove_font_pc_80x50.png'; - $font_size_x=9; - $font_size_y=8; - break; - - default: - $font_file='ansilove_font_pc_80x25.png'; - $font_size_x=9; - $font_size_y=16; - } - - - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_sauce=load_sauce($input); - - if ($input_file_sauce!=NULL) - { - $input_file_size=$input_file_sauce['FileSize']; - } - else - { - $input_file_size=filesize($input); - } - - if (!$input_file_buffer = fread($input_file,$input_file_size)) - { - error("Can't read file $input"); - } - - fclose($input_file); - - - -/*****************************************************************************/ -/* EXTRACT TUNDRA HEADER */ -/*****************************************************************************/ - - $tundra_header['value']=$input_file_buffer[0]; - $tundra_header['string']=substr($input_file_buffer,1,8); - - if (ord($tundra_header['value'])!=24 || $tundra_header['string']!='TUNDRA24') - { - error("$input is not a TUNDRA file"); - } - - - -/*****************************************************************************/ -/* LOAD BACKGROUND/FONT AND ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) - { - error("Can't open file ansilove_background.png"); - } - - if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) - { - error("Can't open file $font_file"); - } - - imagecolorset($font,20,0,0,0); - - - -/*****************************************************************************/ -/* READ TUNDRA FILE A FIRST TIME TO FIND THE IMAGE SIZE */ -/*****************************************************************************/ - - $loop=9; - - while ($loop<$input_file_size) - { - if ($position_x==80) - { - $position_x=0; - $position_y++; - } - - $character=ord($input_file_buffer[$loop]); - - if ($character==1) - { - $tundra_position_array=unpack('Nposition_y/Nposition_x',substr($input_file_buffer,$loop+1,8)); - $position_y=$tundra_position_array['position_y']; - $position_x=$tundra_position_array['position_x']; - - $loop+=8; - } - - if ($character==2) - { - $loop+=5; - } - - if ($character==4) - { - $loop+=5; - } - - if ($character==6) - { - $loop+=9; - } - - if ($character!=1 && $character!=2 && $character!=4 && $character!=6) - { - $position_x++; - } - - $loop++; - } - - $position_y++; - - - -/*****************************************************************************/ -/* ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$tundra = imagecreate($columns*$bits,($position_y)*$font_size_y)) - { - error("Can't allocate buffer image memory"); - } - - imagecolorallocate($tundra,0,0,0); - - - -/*****************************************************************************/ -/* PROCESS TUNDRA FILE */ -/*****************************************************************************/ - - $position_x=0; - $position_y=0; - - $loop=9; - - while ($loop<$input_file_size) - { - if ($position_x==$columns) - { - $position_x=0; - $position_y++; - } - - $character=ord($input_file_buffer[$loop]); - - if ($character==1) - { - $tundra_position_array=unpack('Nposition_y/Nposition_x',substr($input_file_buffer,$loop+1,8)); - $position_y=$tundra_position_array['position_y']; - $position_x=$tundra_position_array['position_x']; - - $loop+=8; - } - - if ($character==2) - { - $tundra_color_array=unpack('Ncolor_foreground',substr($input_file_buffer,$loop+2,4)); - $color_foreground=$tundra_color_array['color_foreground']; - $red=($color_foreground>>16) & 0x000000FF; - $green=($color_foreground>>8) & 0x000000FF; - $blue=$color_foreground & 0x000000FF; - imagecolorset($font,0,$red,$green,$blue); - - $character=ord($input_file_buffer[$loop+1]); - - $loop+=5; - } - - - if ($character==4) - { - $tundra_color_array=unpack('Ncolor_background',substr($input_file_buffer,$loop+2,4)); - $color_background=$tundra_color_array['color_background']; - $red=($color_background>>16) & 0x000000FF; - $green=($color_background>>8) & 0x000000FF; - $blue=$color_background & 0x000000FF; - imagecolorset($font,20,$red,$green,$blue); - - $character=ord($input_file_buffer[$loop+1]); - - $loop+=5; - } - - if ($character==6) - { - $tundra_color_array=unpack('Ncolor_foreground/Ncolor_background',substr($input_file_buffer,$loop+2,8)); - $color_foreground=$tundra_color_array['color_foreground']; - $red=($color_foreground>>16) & 0x000000FF; - $green=($color_foreground>>8) & 0x000000FF; - $blue=$color_foreground & 0x000000FF; - imagecolorset($font,0,$red,$green,$blue); - - $color_background=$tundra_color_array['color_background']; - $red=($color_background>>16) & 0x000000FF; - $green=($color_background>>8) & 0x000000FF; - $blue=$color_background & 0x000000FF; - imagecolorset($font,20,$red,$green,$blue); - - $character=ord($input_file_buffer[$loop+1]); - - $loop+=9; - } - - if ($character!=1 && $character!=2 && $character!=4 && $character!=6) - { - imagecopy($tundra,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,0,$bits,$font_size_y); - - $position_x++; - } - - $loop++; - } - - - -/*****************************************************************************/ -/* CREATE OUTPUT FILE */ -/*****************************************************************************/ - - if ($thumbnail) - { - $position_y_max=$position_y; - - thumbnail($tundra,$output,$columns,$font_size_y,$position_y_max); - } - else - { - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($tundra); - } - else - { - ImagePNG($tundra,$output); - } - } - - - -/*****************************************************************************/ -/* FREE MEMORY */ -/*****************************************************************************/ - - imagedestroy($tundra); - imagedestroy($background); - imagedestroy($font); -} - - - -/*****************************************************************************/ -/* LOAD XBIN */ -/*****************************************************************************/ - -function load_xbin($input,$output,$bits) -{ - check_libraries(); - - if ($bits=='thumbnail') - { - $thumbnail=TRUE; - } - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_sauce=load_sauce($input); - - if ($input_file_sauce!=NULL) - { - $input_file_size=$input_file_sauce['FileSize']; - } - else - { - $input_file_size=filesize($input); - } - - if (!$input_file_buffer = fread($input_file,$input_file_size)) - { - error("Can't read file $input"); - } - - fclose($input_file); - - - -/*****************************************************************************/ -/* EXTRACT XBIN HEADER */ -/*****************************************************************************/ - - $xbin_header['ID']=substr($input_file_buffer,0,4); - - if ($xbin_header['ID']!='XBIN') - { - error("$input is not a XBiN file"); - } - - $xbin_header=array_merge($xbin_header,unpack('CEofChar/vWidth/vHeight/CFontsize/CFlags',substr($input_file_buffer,4,7))); - - if (($xbin_header['Flags'] & 1)==1) - { - $xbin_flags['palette']=1; - } - - if (($xbin_header['Flags'] & 2)==2) - { - $xbin_flags['font']=1; - } - - if (($xbin_header['Flags'] & 4)==4) - { - $xbin_flags['compress']=1; - } - - if (($xbin_header['Flags'] & 8)==8) - { - $xbin_flags['nonblink']=1; - } - - if (($xbin_header['Flags'] & 16)==16) - { - $xbin_flags['512chars']=1; - } - - - -/*****************************************************************************/ -/* PROCESS XBIN PALETTE */ -/*****************************************************************************/ - - if ($xbin_flags['palette']==1) - { - if (!$background = imagecreate(128,16)) - { - error("Can't allocate background buffer image memory"); - } - - for ($loop=0;$loop<16;$loop++) - { - $index=($loop*3)+11; - $colors[$loop]=imagecolorallocate($background,(ord($input_file_buffer[$index])<<2 | ord($input_file_buffer[$index])>>4),(ord($input_file_buffer[$index+1])<<2 | ord($input_file_buffer[$index+1])>>4),(ord($input_file_buffer[$index+2])<<2 | ord($input_file_buffer[$index+2])>>4)); - } - - for ($loop=0;$loop<16;$loop++) - { - imagefilledrectangle($background,$loop<<3,0,($loop<<3)+8,16,$colors[$loop]); - } - - $background_size_x=8; - } - else - { - if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) - { - error("Can't open file ansilove_background.png"); - } - - $background_size_x=9; - } - - - -/*****************************************************************************/ -/* PROCESS XBIN FONT */ -/*****************************************************************************/ - - if ($xbin_flags['font']==1) - { - if (!$font = imagecreate(2048,$xbin_header['Fontsize']*16)) - { - error("Can't allocate font buffer image memory"); - } - - if (!$font_inverted = imagecreate(2048,$xbin_header['Fontsize'])) - { - error("Can't allocate temporary font buffer image memory"); - } - - imagepalettecopy($font,$background); - imagepalettecopy($font_inverted,$background); - - $color_index=imagecolorsforindex($background,0); - $colors[16]=imagecolorallocate($font,$color_index['red'],$color_index['green'],$color_index['blue']); - $colors[20]=imagecolorallocate($font_inverted,200,220,169); - - imagefilledrectangle($font_inverted,0,0,2048,$xbin_header['Fontsize'],$colors[20]); - imagecolortransparent($font_inverted,$colors[20]); - - for ($loop=0;$loop<256;$loop++) - { - for ($xbin_font_size_y=0;$xbin_font_size_y<$xbin_header['Fontsize'];$xbin_font_size_y++) - { - $xbin_character_line=ord($input_file_buffer[11+$xbin_flags['palette']*48+$xbin_font_size_y+($loop*$xbin_header['Fontsize'])]); - - for ($loop_column=0;$loop_column<8;$loop_column++) - { - $xbin_character_column=128/pow(2,$loop_column); - - if (($xbin_character_line & $xbin_character_column)!=$xbin_character_column) - { - imagesetpixel($font_inverted,($loop*8)+$loop_column,$xbin_font_size_y,$colors[0]); - } - } - } - } - - for ($loop=1;$loop<16;$loop++) - { - imagefilledrectangle($font,0,$loop*$xbin_header['Fontsize'],2048,($loop*$xbin_header['Fontsize'])+$xbin_header['Fontsize'],$loop); - } - imagefilledrectangle($font,0,0,2048,$xbin_header['Fontsize']-1,$colors[16]); - - for ($loop=0;$loop<16;$loop++) - { - imagecopy ($font, $font_inverted, 0,$loop*$xbin_header['Fontsize'],0,0,2048,$xbin_header['Fontsize']); - } - imagecolortransparent($font,$colors[0]); - - $font_size_x=8; - $font_size_y=$xbin_header['Fontsize']; - } - else - { - if (!$font = imagecreatefrompng (dirname(__FILE__).'/fonts/ansilove_font_pc_80x25.png')) - { - error("Can't open file $font_file"); - } - - $font_size_x=9; - $font_size_y=16; - - imagecolortransparent($font,20); - } - - - -/*****************************************************************************/ -/* PROCESS XBIN */ -/*****************************************************************************/ - - $loop=11+$xbin_flags['palette']*48+$xbin_flags['font']*256*$xbin_header['Fontsize']; - - if ($xbin_flags['compress']==1) - { - while ($loop<$input_file_size) - { - $character=ord($input_file_buffer[$loop]); - - $compression=$character & 192; - $repeat=1+($character & 63); - - if ($compression==0) - { - for ($i=0;$i<$repeat*2;$i++) - { - $xbin_buffer[]=ord($input_file_buffer[$loop+1+$i]); - } - - $loop=$loop+1+($repeat*2); - } - - if ($compression==64) - { - for ($i=0;$i<$repeat;$i++) - { - $xbin_buffer[]=ord($input_file_buffer[$loop+1]); - $xbin_buffer[]=ord($input_file_buffer[$loop+2+$i]); - } - - $loop=$loop+2+$repeat; - } - - if ($compression==128) - { - for ($i=0;$i<$repeat;$i++) - { - $xbin_buffer[]=ord($input_file_buffer[$loop+2+$i]); - $xbin_buffer[]=ord($input_file_buffer[$loop+1]); - } - - $loop=$loop+2+$repeat; - } - - if ($compression==192) - { - for ($i=0;$i<$repeat;$i++) - { - $xbin_buffer[]=ord($input_file_buffer[$loop+1]); - $xbin_buffer[]=ord($input_file_buffer[$loop+2]); - } - - $loop+=3; - } - } - } - else - { - while ($loop<$input_file_size) - { - $xbin_buffer[]=ord($input_file_buffer[$loop]); - $loop++; - } - } - - - -/*****************************************************************************/ -/* ALLOCATE IMAGE BUFFER MEMORY */ -/*****************************************************************************/ - - if (!$xbin = imagecreatetruecolor($xbin_header['Width']*8,$xbin_header['Height']*$font_size_y)) - { - error("Can't allocate buffer image memory"); - } - - imagecolorallocate($xbin,0,0,0); - - - -/*****************************************************************************/ -/* RENDER XBIN */ -/*****************************************************************************/ - - for ($loop=0;$loop<sizeof($xbin_buffer);$loop+=2) - { - if ($position_x==$xbin_header['Width']) - { - $position_x=0; - $position_y++; - } - - $character=($xbin_buffer[$loop]); - $attribute=($xbin_buffer[$loop+1]); - - $color_background=($attribute & 240)>>4; - $color_foreground=$attribute & 15; - - imagecopy($xbin, $background,$position_x*8,$position_y*$font_size_y,$color_background*$background_size_x,0,8,$font_size_y); - imagecopy($xbin,$font,$position_x*8,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,8,$font_size_y); - - $position_x++; - } - - - -/*****************************************************************************/ -/* CREATE OUTPUT FILE */ -/*****************************************************************************/ - - if ($thumbnail) - { - $position_y_max=$xbin_header['Height']; - $columns=$xbin_header['Width']; - - thumbnail($xbin,$output,$columns,$font_size_y,$position_y_max); - } - else - { - if ($output=='online') - { - Header("Content-type: image/png"); - ImagePNG($xbin); - } - else - { - ImagePNG($xbin,$output); - } - } - -/*****************************************************************************/ -/* FREE MEMORY */ -/*****************************************************************************/ - - imagedestroy($xbin); - imagedestroy($background); - imagedestroy($font); - - if ($xbin_flags['font']==1) - { - imagedestroy($font_inverted); - } -} - - - -/*****************************************************************************/ -/* LOAD SAUCE */ -/*****************************************************************************/ - -function load_sauce($input) -{ - -/*****************************************************************************/ -/* LOAD INPUT FILE */ -/*****************************************************************************/ - - if (!$input_file = fopen ($input,'r')) - { - error("Can't open file $input"); - } - - $input_file_size=filesize($input); - - - -/*****************************************************************************/ -/* PROCESS SAUCE */ -/*****************************************************************************/ - - if ($input_file_size>=128) - { - fseek($input_file,$input_file_size-128); - $input_file_buffer=fread($input_file,128); - - $sauce['ID']=substr($input_file_buffer,0,5); - $sauce['Version']=substr($input_file_buffer,5,2); - $sauce['Title']=substr($input_file_buffer,7,35); - $sauce['Author']=substr($input_file_buffer,42,20); - $sauce['Group']=substr($input_file_buffer,62,20); - $sauce['Date']=substr($input_file_buffer,82,8); - $sauce=array_merge($sauce,unpack('lFileSize/CDataType/CFileType/v4TInfo/CComments/CFlags',substr($input_file_buffer,90,16))); - $sauce['Filler']=substr($input_file_buffer,106,22); - } - - - -/*****************************************************************************/ -/* PROCESS SAUCE COMMENTS */ -/*****************************************************************************/ - - $sauce_comment_lines=$sauce['Comments']; - - if ($sauce_comment_lines!=0) - { - if ($input_file_size>=128+5+($sauce_comment_lines*64)) - { - fseek($input_file,($input_file_size-128-5-($sauce_comment_lines*64))); - $comment_id=fread($input_file,5); - - if ($comment_id=='COMNT') - { - for ($loop=0;$loop<$sauce_comment_lines;$loop++) - { - fseek($input_file,($input_file_size-128-($sauce_comment_lines*64)+($loop*64))); - - $comment_line="Comment_Line_"; - if ($loop<9) - { - $comment_line.="0"; - } - $comment_line.=($loop+1); - - $sauce[$comment_line]=fread($input_file,64); - } - } - } - } - - fclose($input_file); - - - -/*****************************************************************************/ -/* RETURN SAUCE */ -/*****************************************************************************/ - - if ($sauce['ID']=='SAUCE') - { - return($sauce); - } -} +///*****************************************************************************/ +///* ERROR HANDLING AND MESSAGE LOGGER */ +///*****************************************************************************/ +// +//function write_log($message) +//{ +// if (($file = @fopen (ANSILOVE_LOG_FILE, a))==FALSE) +// { +// echo "ERROR: Can't create log file."; +// exit(-1); +// } +// +// $string = date("[Y-m-d] - H:i:s")." - $message\n"; +// +// fputs ($file,$string); +// fclose ($file); +//} +// +//function error($message) +//{ +// trim($message); +// echo("ERROR: ".$message."\n\n"); +// write_log($message); +// exit(-1); +//} +// +///*****************************************************************************/ +///* LOAD CONFIGURATION FILE */ +///*****************************************************************************/ +// +//if (!@require_once(dirname(__FILE__).'/ansilove.cfg.php')) +//{ +// error("Can't load Ansilove configuration file"); +//} +// +///*****************************************************************************/ +///* SANITIZE INPUT */ +///*****************************************************************************/ +// +//function sanitize_input($input) +//{ +// $input=preg_replace("/((\/+)|(\.\.)|(%2f))/","",$input); +// +// return $input; +//} +// +///*****************************************************************************/ +///* CHECK LIBRARIES */ +///*****************************************************************************/ +// +//function check_libraries() +//{ +// if (!extension_loaded('gd')) +// { +// error("Ansilove requires GD library"); +// } +//} +// +///*****************************************************************************/ +///* CREATE THUMBNAIL */ +///*****************************************************************************/ +// +//function thumbnail($source,$output,$columns,$font_size_y,$position_y_max) +//{ +// $columns=min($columns,80); +// +// if (THUMBNAILS_SIZE<=0) +// { +// $size=1; +// } +// else +// { +// $size=THUMBNAILS_SIZE; +// } +// +// if (THUMBNAILS_HEIGHT==0) +// { +// $height=$position_y_max*($font_size_y/8); +// $height_source=$position_y_max*$font_size_y; +// } +// else +// { +// $height=min($position_y_max*($font_size_y/8),THUMBNAILS_HEIGHT); +// $height_source=$height*8; +// } +// +// $width_source=$columns*8; +// $height*=$size; +// $columns*=$size; +// +// if (!$thumbnail = imagecreatetruecolor($columns,$height)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecopyresampled($thumbnail,$source,0,0,0,0,$columns,$height,$width_source,$height_source); +// +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($thumbnail); +// } +// else +// { +// ImagePNG($thumbnail,$output); +// } +// +// imagedestroy($thumbnail); +//} +// +// +// +///*****************************************************************************/ +///* LOAD ANSI */ +///*****************************************************************************/ +// +//function load_ansi($input,$output,$font,$bits,$icecolors) +//{ +// check_libraries(); +// +///*****************************************************************************/ +///* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ +///*****************************************************************************/ +// +// $columns=80; +// +// switch($font) +// { +// case '80x25': +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case '80x50': +// $font_file='ansilove_font_pc_80x50.png'; +// $font_size_x=9; +// $font_size_y=8; +// break; +// +// case 'armenian': +// $font_file='ansilove_font_pc_armenian.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'baltic': +// $font_file='ansilove_font_pc_baltic.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'cyrillic': +// $font_file='ansilove_font_pc_cyrillic.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'french-canadian': +// $font_file='ansilove_font_pc_french_canadian.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'greek': +// $font_file='ansilove_font_pc_greek.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'greek-869': +// $font_file='ansilove_font_pc_greek_869.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'hebrew': +// $font_file='ansilove_font_pc_hebrew.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'icelandic': +// $font_file='ansilove_font_pc_icelandic.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'latin1': +// $font_file='ansilove_font_pc_latin1.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'latin2': +// $font_file='ansilove_font_pc_latin2.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'nordic': +// $font_file='ansilove_font_pc_nordic.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'persian': +// $font_file='ansilove_font_pc_persian.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'portuguese': +// $font_file='ansilove_font_pc_portuguese.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'russian': +// $font_file='ansilove_font_pc_russian.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'terminus': +// $font_file='ansilove_font_pc_terminus.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'turkish': +// $font_file='ansilove_font_pc_turkish.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case 'amiga': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_topaz_1200.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'b-strict': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_b-strict.png'; +// $font_size_x=8; +// $font_size_y=8; +// break; +// +// case 'b-struct': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_b-struct.png'; +// $font_size_x=8; +// $font_size_y=8; +// break; +// +// case 'microknight': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_microknight.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'microknight+': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_microknight+.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'microknightplus': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_microknight+.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'mosoul': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_mosoul.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'pot-noodle': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_pot-noodle.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'topaz': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_topaz_1200.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'topaz+': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_topaz_1200+.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'topazplus': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_topaz_1200+.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'topaz500': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_topaz_500.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'topaz500+': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_topaz_500+.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// case 'topaz500plus': +// $font_amiga=TRUE; +// $font_file='ansilove_font_amiga_topaz_500+.png'; +// $font_size_x=8; +// $font_size_y=16; +// break; +// +// default: +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// } +// +// if ($bits=='ced') +// { +// $ced=TRUE; +// } +// if ($bits=='thumbnail') +// { +// $thumbnail=TRUE; +// } +// if ($bits=='transparent') +// { +// $transparent=TRUE; +// } +// if ($bits=='workbench') +// { +// $workbench=TRUE; +// } +// if ($bits=='workbench-transparent') +// { +// $workbench=TRUE; +// $transparent=TRUE; +// } +// if ($bits!=8 && $bits!=9 | $font_amiga) +// { +// $bits=8; +// } +// +// +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_sauce=load_sauce($input); +// +// if ($input_file_sauce!=NULL) +// { +// $input_file_size=$input_file_sauce['FileSize']; +// } +// else +// { +// $input_file_size=filesize($input); +// } +// +// if (!$input_file_buffer = fread($input_file,$input_file_size)) +// { +// error("Can't read file $input"); +// } +// +// fclose($input_file); +// +// $diz_extensions_exploded=explode(",",DIZ_EXTENSIONS); +// +// for ($loop=0;$loop<sizeof($diz_extensions_exploded);$loop++) +// { +// $diz_extension_length=strlen($diz_extensions_exploded[$loop]); +// +// if (strtolower(substr($input,(strlen($input)-$diz_extension_length),$diz_extension_length))==$diz_extensions_exploded[$loop] || strtolower(substr($input,strlen($input)-($diz_extension_length+9),($diz_extension_length+9)))==$diz_extensions_exploded[$loop].'.ansilove') +// { +// $input_file_buffer=preg_replace("/^(\s+[\r\n])+/","",$input_file_buffer); +// $input_file_buffer=rtrim($input_file_buffer); +// $input_file_size=strlen($input_file_buffer); +// } +// } +// +///*****************************************************************************/ +///* LOAD BACKGROUND/FONT */ +///*****************************************************************************/ +// +// if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) +// { +// error("Can't open file ansilove_background.png"); +// } +// +// if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) +// { +// error("Can't open file $font_file"); +// } +// +// imagecolortransparent($font,20); +// +// +// +///*****************************************************************************/ +///* PROCESS ANSI */ +///*****************************************************************************/ +// +// $color_background=0; +// $color_foreground=7; +// +// $loop=0; +// +// $position_x=0; +// $position_y=0; +// +// $position_x_max=0; +// $position_y_max=0; +// +// while ($loop<$input_file_size) +// { +// $current_character=ord($input_file_buffer[$loop]); +// $next_character=ord($input_file_buffer[$loop+1]); +// +// if ($position_x==80 && WRAP_COLUMN_80) +// { +// $position_y++; +// $position_x=0; +// } +// +///*****************************************************************************/ +///* CR+LF */ +///*****************************************************************************/ +// +// if ($current_character==13) +// { +// if ($next_character==10) +// { +// $position_y++; +// $position_x=0; +// $loop++; +// } +// } +// +///*****************************************************************************/ +///* LF */ +///*****************************************************************************/ +// +// if ($current_character==10) +// { +// $position_y++; +// $position_x=0; +// } +// +///*****************************************************************************/ +///* TAB */ +///*****************************************************************************/ +// +// if ($current_character==9) +// { +// $position_x+=8; +// } +// +///*****************************************************************************/ +///* SUB */ +///*****************************************************************************/ +// +// if ($current_character==26 && SUBSTITUTE_BREAK) +// { +// break; +// } +// +// +// +///*****************************************************************************/ +///* ANSI SEQUENCE */ +///*****************************************************************************/ +// +// if ($current_character==27 && $next_character==91) +// { +// unset($ansi_sequence); +// +// for ($ansi_sequence_loop=0;$ansi_sequence_loop<12;$ansi_sequence_loop++) +// { +// $ansi_sequence_character=$input_file_buffer[$loop+2+$ansi_sequence_loop]; +// +///*****************************************************************************/ +///* CURSOR POSITION */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='H' || $ansi_sequence_character=='f') +// { +// $ansi_sequence_exploded=explode(";",$ansi_sequence); +// $position_y=$ansi_sequence_exploded[0]-1; +// $position_x=$ansi_sequence_exploded[1]-1; +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* CURSOR UP */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='A') +// { +// if ($ansi_sequence=='') +// { +// $ansi_sequence=1; +// } +// +// $position_y=$position_y-$ansi_sequence; +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* CURSOR DOWN */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='B') +// { +// if ($ansi_sequence=='') +// { +// $ansi_sequence=1; +// } +// +// $position_y=$position_y+$ansi_sequence; +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* CURSOR FORWARD */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='C') +// { +// if ($ansi_sequence=='') +// { +// $ansi_sequence=1; +// } +// +// $position_x=$position_x+$ansi_sequence; +// if ($position_x>80) +// { +// $position_x=80; +// } +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* CURSOR BACKWARD */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='D') +// { +// if ($ansi_sequence=='') +// { +// $ansi_sequence=1; +// } +// +// $position_x=$position_x-$ansi_sequence; +// if ($position_x<0) +// { +// $position_x=0; +// } +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* SAVE CURSOR POSITION */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='s') +// { +// $saved_position_y=$position_y; +// $saved_position_x=$position_x; +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* RESTORE CURSOR POSITION */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='u') +// { +// $position_y=$saved_position_y; +// $position_x=$saved_position_x; +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* ERASE DISPLAY */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='J') +// { +// if ($ansi_sequence==2) +// { +// unset($ansi_buffer); +// +// $position_x=0; +// $position_y=0; +// +// $position_x_max=0; +// $position_y_max=0; +// } +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* SET GRAPHIC RENDITION */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='m') +// { +// $ansi_sequence_exploded=explode(";",$ansi_sequence); +// +// sort($ansi_sequence_exploded); +// +// for ($loop_ansi_sequence=0;$loop_ansi_sequence<sizeof($ansi_sequence_exploded);$loop_ansi_sequence++) +// { +// $ansi_sequence_value=$ansi_sequence_exploded[$loop_ansi_sequence]; +// +// if ($ansi_sequence_value==0) +// { +// $color_background=0; +// $color_foreground=7; +// $bold=FALSE; +// $underline=FALSE; +// $italics=FALSE; +// $blink=FALSE; +// } +// +// if ($ansi_sequence_value==1) +// { +// if (!$workbench) +// { +// $color_foreground+=8; +// } +// $bold=TRUE; +// } +// +// if ($ansi_sequence_value==3) +// { +// $italics=TRUE; +// } +// +// if ($ansi_sequence_value==4) +// { +// $underline=TRUE; +// } +// +// if ($ansi_sequence_value==5) +// { +// if (!$workbench) +// { +// $color_background+=8; +// } +// $blink=TRUE; +// } +// +// if ($ansi_sequence_value>29 && $ansi_sequence_value<38) +// { +// $color_foreground=$ansi_sequence_value-30; +// +// if ($bold) +// { +// $color_foreground+=8; +// } +// } +// +// if ($ansi_sequence_value>39 && $ansi_sequence_value<48) +// { +// $color_background=$ansi_sequence_value-40; +// +// if ($blink && $icecolors) +// { +// $color_background+=8; +// } +// } +// } +// +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +///*****************************************************************************/ +///* CURSOR DE/ACTIVATION (AMIGA ANSI) */ +///*****************************************************************************/ +// +// if ($ansi_sequence_character=='p') +// { +// $loop+=$ansi_sequence_loop+2; +// break; +// } +// +// $ansi_sequence.=$ansi_sequence_character; +// } +// } +// elseif ($current_character!=10 && $current_character!=13 && $current_character!=9) +// { +// +///*****************************************************************************/ +///* RECORD NUMBER OF COLUMNS AND LINES USED */ +///*****************************************************************************/ +// +// if ($position_x>$position_x_max) +// { +// $position_x_max=$position_x; +// } +// +// if ($position_y>$position_y_max) +// { +// $position_y_max=$position_y; +// } +// +// +// +///*****************************************************************************/ +///* WRITE CURRENT CHARACTER INFO IN A TEMPORARY ARRAY */ +///*****************************************************************************/ +// +// if (!$font_amiga || ($current_character!=12 && $current_character!=13)) +// { +// $ansi_buffer.=chr($color_background); +// $ansi_buffer.=chr($color_foreground); +// $ansi_buffer.=chr($current_character); +// $ansi_buffer.=chr($bold); +// $ansi_buffer.=chr($italics); +// $ansi_buffer.=chr($underline); +// $ansi_buffer.=chr($position_x); +// $ansi_buffer.=chr($position_y & 0xFF); +// $ansi_buffer.=chr($position_y>>8); +// +// $position_x++; +// } +// } +// $loop++; +// } +// +// +// +///*****************************************************************************/ +///* ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// $position_x_max++; +// $position_y_max++; +// +// if ($ced) +// { +// $columns=78; +// } +// +// for ($loop=0;$loop<sizeof($diz_extensions_exploded);$loop++) +// { +// $diz_extension_length=strlen($diz_extensions_exploded[$loop]); +// +// if (strtolower(substr($input,(strlen($input)-$diz_extension_length),$diz_extension_length))==$diz_extensions_exploded[$loop] || strtolower(substr($input,strlen($input)-($diz_extension_length+9),($diz_extension_length+9)))==$diz_extensions_exploded[$loop].'.ansilove') +// { +// $columns=min($position_x_max,80); +// } +// } +// +// if (!$ansi = imagecreate($columns*$bits,($position_y_max)*$font_size_y)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// if ($ced) +// { +// $ced_background_color=explode(",",CED_BACKGROUND_COLOR); +// $ced_foreground_color=explode(",",CED_FOREGROUND_COLOR); +// +// imagecolorallocate($ansi,$ced_background_color[0],$ced_background_color[1],$ced_background_color[2]); +// +// $ced_color=imagecolorallocate($ansi,$ced_background_color[0],$ced_background_color[1],$ced_background_color[2]); +// $ced_color=imagecolorallocate($background,$ced_background_color[0],$ced_background_color[1],$ced_background_color[2]); +// +// imagefill($ansi,0,0,$ced_color); +// imagefilledrectangle($background,0,0,144,16,$ced_color); +// +// for ($loop=0;$loop<16;$loop++) +// { +// imagecolorset($font,$loop,$ced_foreground_color[0],$ced_foreground_color[1],$ced_foreground_color[2]); +// } +// } +// else if ($workbench) +// { +// $workbench_color[0]=explode(",",WORKBENCH_COLOR_0); +// $workbench_color[1]=explode(",",WORKBENCH_COLOR_4); +// $workbench_color[2]=explode(",",WORKBENCH_COLOR_2); +// $workbench_color[3]=explode(",",WORKBENCH_COLOR_6); +// $workbench_color[4]=explode(",",WORKBENCH_COLOR_1); +// $workbench_color[5]=explode(",",WORKBENCH_COLOR_5); +// $workbench_color[6]=explode(",",WORKBENCH_COLOR_3); +// $workbench_color[7]=explode(",",WORKBENCH_COLOR_7); +// +// imagecolorallocate($ansi,$workbench_color[0][0],$workbench_color[0][1],$workbench_color[0][2]); +// +// $workbench_background=imagecolorallocate($ansi,$workbench_color[0][0],$workbench_color[0][1],$workbench_color[0][2]); +// $workbench_background=imagecolorallocate($background,$workbench_color[0][0],$workbench_color[0][1],$workbench_color[0][2]); +// +// imagefill($ansi,0,0,$workbench_background); +// +// for ($loop=0; $loop<8; $loop++) +// { +// imagecolorset($background,$loop,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); +// imagecolorset($background,$loop+8,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); +// imagecolorset($font,$loop,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); +// imagecolorset($font,$loop+8,$workbench_color[$loop][0],$workbench_color[$loop][1],$workbench_color[$loop][2]); +// } +// } +// else +// { +// $background_canvas=imagecolorallocate($ansi,0,0,0); +// } +// +// for ($loop=0; $loop<16; $loop++) +// { +// /* Generating ANSI colors array in order to be able to draw underlines */ +// $color_index=imagecolorsforindex($background,$loop); +// $colors[$loop]=imagecolorallocate($ansi,$color_index['red'],$color_index['green'],$color_index['blue']); +// } +// +// +// +///*****************************************************************************/ +///* RENDER ANSI */ +///*****************************************************************************/ +// +// for ($loop=0;$loop<strlen($ansi_buffer);$loop+=9) +// { +// $color_background=ord($ansi_buffer[$loop]); +// $color_foreground=ord($ansi_buffer[$loop+1]); +// $character=ord($ansi_buffer[$loop+2]); +// $bold=ord($ansi_buffer[$loop+3]); +// $italics=ord($ansi_buffer[$loop+4]); +// $underline=ord($ansi_buffer[$loop+5]); +// $position_x=ord($ansi_buffer[$loop+6]); +// $position_y=ord($ansi_buffer[$loop+7])+(ord($ansi_buffer[$loop+8])<<8); +// +// if (!$font_amiga) +// { +// imagecopy($ansi,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); +// imagecopy($ansi,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); +// } +// else +// { +// if ($color_background!=0 || !$italics) +// { +// imagecopy($ansi,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); +// } +// +// if (!$italics) +// { +// imagecopy($ansi,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); +// } +// else +// { +// imagecopy($ansi,$font,$position_x*$bits+3,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,2); +// imagecopy($ansi,$font,$position_x*$bits+2,$position_y*$font_size_y+2,$character*$font_size_x,$color_foreground*$font_size_y+2,$bits,4); +// imagecopy($ansi,$font,$position_x*$bits+1,$position_y*$font_size_y+6,$character*$font_size_x,$color_foreground*$font_size_y+6,$bits,4); +// imagecopy($ansi,$font,$position_x*$bits,$position_y*$font_size_y+10,$character*$font_size_x,$color_foreground*$font_size_y+10,$bits,4); +// imagecopy($ansi,$font,$position_x*$bits-1,$position_y*$font_size_y+14,$character*$font_size_x,$color_foreground*$font_size_y+14,$bits,2); +// } +// +// if ($italics && $bold) +// { +// imagecopy($ansi,$font,$position_x*$bits+3+1,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,2); +// imagecopy($ansi,$font,$position_x*$bits+2+1,$position_y*$font_size_y+2,$character*$font_size_x,$color_foreground*$font_size_y+2,$bits,4); +// imagecopy($ansi,$font,$position_x*$bits+1+1,$position_y*$font_size_y+6,$character*$font_size_x,$color_foreground*$font_size_y+6,$bits,4); +// imagecopy($ansi,$font,$position_x*$bits+1,$position_y*$font_size_y+10,$character*$font_size_x,$color_foreground*$font_size_y+10,$bits,4); +// imagecopy($ansi,$font,$position_x*$bits-1+1,$position_y*$font_size_y+14,$character*$font_size_x,$color_foreground*$font_size_y+14,$bits,2); +// } +// +// if ($bold && !$italics) +// { +// imagecopy($ansi,$font,1+$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); +// } +// +// if ($underline) +// { +// $loop_column=0; +// $character_size_x=8; +// +// if ($bold) +// { +// $character_size_x++; +// } +// +// if ($italics) +// { +// $loop_column=-1; +// $character_size_x=11; +// } +// +// while ($loop_column<$character_size_x) +// { +// if (imagecolorat($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+15)==$color_background && imagecolorat($ansi,$position_x*$bits+$loop_column+1,$position_y*$font_size_y+15)==$color_background) +// { +// imagesetpixel($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+14,$colors[$color_foreground]); +// imagesetpixel($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+15,$colors[$color_foreground]); +// } +// else if (imagecolorat($ansi,$position_x*$bits+$loop_column,$position_y*$font_size_y+15)!=$color_background && imagecolorat($ansi,$position_x*$bits+$loop_column+1,$position_y*$font_size_y+15)==$color_background) +// { +// $loop_column++; +// } +// +// $loop_column++; +// } +// +// if ($pixel_carry) +// { +// imagesetpixel($ansi,$position_x*$bits,$position_y*$font_size_y+14,$colors[$color_foreground]); +// imagesetpixel($ansi,$position_x*$bits,$position_y*$font_size_y+15,$colors[$color_foreground]); +// $pixel_carry=FALSE; +// } +// +// if (imagecolorat($font,$character*$font_size_x,$color_foreground*$font_size_y+15)!=20) +// { +// imagesetpixel($ansi,$position_x*$bits-1,$position_y*$font_size_y+14,$colors[$color_foreground]); +// imagesetpixel($ansi,$position_x*$bits-1,$position_y*$font_size_y+15,$colors[$color_foreground]); +// } +// +// if (imagecolorat($font,$character*$font_size_x+$character_size_x-1,$color_foreground*$font_size_y+15)!=20) +// { +// $pixel_carry=TRUE; +// } +// } +// } +// } +// +// +// +///*****************************************************************************/ +///* CREATE OUTPUT FILE */ +///*****************************************************************************/ +// +// if ($transparent) +// { +// imagecolortransparent($ansi,$background_canvas); +// } +// +// if ($thumbnail) +// { +// thumbnail($ansi,$output,$columns,$font_size_y,$position_y_max); +// } +// else +// { +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($ansi); +// } +// else +// { +// if (!SPLIT) +// { +// ImagePNG($ansi,$output); +// } +// else +// { +// $image_size_y=$position_y_max*$font_size_y; +// $split_size_y=SPLIT_HEIGHT; +// +// $loop_max=($image_size_y/$split_size_y); +// +// for ($loop=0; $loop<$loop_max; $loop++) +// { +// if (($image_size_y-($split_size_y*$loop))<$split_size_y) +// { +// $height=($image_size_y-($split_size_y*$loop)); +// } +// else +// { +// $height=$split_size_y; +// } +// +// if (!$split = imagecreate($columns*$bits,$height)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecolorallocate($split,0,0,0); +// imagecopy($split,$ansi,0,0,0,($loop*$split_size_y),$columns*$bits,$height); +// +// if ($loop_max>=1) +// { +// $output_file=$output.SPLIT_SEPARATOR.str_pad($loop,4,"0",STR_PAD_LEFT).".png"; +// } +// else +// { +// $output_file=$output.".png"; +// } +// +// $output_files[]=$output_file; +// +// if ($transparent) +// { +// imagecolortransparent($split,$background_canvas); +// } +// +// ImagePNG($split,$output_file); +// imagedestroy($split); +// } +// } +// } +// } +// +// +// +///*****************************************************************************/ +///* FREE MEMORY */ +///*****************************************************************************/ +// +// imagedestroy($ansi); +// imagedestroy($background); +// imagedestroy($font); +// +// return $output_files; +//} +// +// +// +///*****************************************************************************/ +///* LOAD PCBOARD */ +///*****************************************************************************/ +// +//function load_pcboard($input,$output,$font,$bits) +//{ +// check_libraries(); +// +///*****************************************************************************/ +///* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ +///*****************************************************************************/ +// +// $columns=80; +// +// if ($bits=='thumbnail') +// { +// $thumbnail=TRUE; +// } +// if ($bits!=8 && $bits!=9) +// { +// $bits=8; +// } +// +// switch($font) +// { +// case '80x25': +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case '80x50': +// $font_file='ansilove_font_pc_80x50.png'; +// $font_size_x=9; +// $font_size_y=8; +// break; +// +// default: +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// } +// +// +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_sauce=load_sauce($input); +// +// if ($input_file_sauce!=NULL) +// { +// $input_file_size=$input_file_sauce['FileSize']; +// } +// else +// { +// $input_file_size=filesize($input); +// } +// +// if (!$input_file_buffer = fread($input_file,$input_file_size)) +// { +// error("Can't read file $input"); +// } +// +// fclose($input_file); +// +// +// +///*****************************************************************************/ +///* LOAD BACKGROUND/FONT */ +///*****************************************************************************/ +// +// if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) +// { +// error("Can't open file ansilove_background.png"); +// } +// +// if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) +// { +// error("Can't open file $font_file"); +// } +// +// imagecolortransparent($font,20); +// +// +// +///*****************************************************************************/ +///* ALLOCATE BACKGROUND/FOREGROUND COLOR ARRAYS */ +///*****************************************************************************/ +// +// $pcb_colors[48]=0; $pcb_colors[49]=4; $pcb_colors[50]=2; $pcb_colors[51]=6; $pcb_colors[52]=1; $pcb_colors[53]=5; $pcb_colors[54]=3; $pcb_colors[55]=7; $pcb_colors[56]=8; $pcb_colors[57]=12; $pcb_colors[65]=10; $pcb_colors[66]=14; $pcb_colors[67]=9; $pcb_colors[68]=13; $pcb_colors[69]=11; $pcb_colors[70]=15; +// +// +// +///*****************************************************************************/ +///* STRIP UNWANTED PCBOARD CODES (DEFINED IN CONFIG FILE) */ +///*****************************************************************************/ +// +// $pcboard_strip_codes_exploded=explode(",",PCBOARD_STRIP_CODES); +// +// for ($loop=0;$loop<sizeof($pcboard_strip_codes_exploded);$loop++) +// { +// $input_file_buffer=preg_replace("/(".$pcboard_strip_codes_exploded[$loop].")/","",$input_file_buffer); +// } +// +// +// +///*****************************************************************************/ +///* PROCESS PCB */ +///*****************************************************************************/ +// +// $color_background=0; +// $color_foreground=7; +// +// $loop=0; +// +// $position_x=0; +// $position_y=0; +// +// $position_x_max=0; +// $position_y_max=0; +// +// while ($loop<$input_file_size) +// { +// $current_character=ord($input_file_buffer[$loop]); +// $next_character=ord($input_file_buffer[$loop+1]); +// +// if ($position_x==80) +// { +// $position_y++; +// $position_x=0; +// } +// +///*****************************************************************************/ +///* CR+LF */ +///*****************************************************************************/ +// +// if ($current_character==13) +// { +// if ($next_character==10) +// { +// $position_y++; +// $position_x=0; +// $loop++; +// } +// } +// +///*****************************************************************************/ +///* LF */ +///*****************************************************************************/ +// +// if ($current_character==10) +// { +// $position_y++; +// $position_x=0; +// } +// +///*****************************************************************************/ +///* TAB */ +///*****************************************************************************/ +// +// if ($current_character==9) +// { +// $position_x+=8; +// } +// +///*****************************************************************************/ +///* SUB */ +///*****************************************************************************/ +// +// if ($current_character==26) +// { +// break; +// } +// +///*****************************************************************************/ +///* PCB SEQUENCE */ +///*****************************************************************************/ +// +// if ($current_character==64 & $next_character==88) +// { +// +///*****************************************************************************/ +///* SET GRAPHIC RENDITION */ +///*****************************************************************************/ +// +// $color_background=$pcb_colors[ord($input_file_buffer[$loop+2])]; +// $color_foreground=$pcb_colors[ord($input_file_buffer[$loop+3])]; +// +// $loop+=3; +// } +// elseif ($current_character==64 & $next_character==67 & $input_file_buffer[$loop+2]=='L' & $input_file_buffer[$loop+3]=='S') +// { +// +///*****************************************************************************/ +///* ERASE DISPLAY */ +///*****************************************************************************/ +// +// unset($pcboard_buffer); +// +// $position_x=0; +// $position_y=0; +// +// $position_x_max=0; +// $position_y_max=0; +// +// $loop+=4; +// } +// elseif ($current_character==64 & $next_character==80 & $input_file_buffer[$loop+2]=='O' & $input_file_buffer[$loop+3]=='S' & $input_file_buffer[$loop+4]==':') +// { +// +///*****************************************************************************/ +///* CURSOR POSITION */ +///*****************************************************************************/ +// +// if ($input_file_buffer[$loop+6]=='@') +// { +// $position_x=(ord($input_file_buffer[$loop+5])-48)-1; +// $loop+=5; +// } +// else +// { +// $position_x=(10*(ord($input_file_buffer[$loop+5])-48)+ord($input_file_buffer[$loop+6])-48)-1; +// $loop+=6; +// } +// } +// elseif ($current_character!=10 && $current_character!=13 && $current_character!=9) +// { +// +///*****************************************************************************/ +///* RECORD NUMBER OF COLUMNS AND LINES USED */ +///*****************************************************************************/ +// +// if ($position_x>$position_x_max) +// { +// $position_x_max=$position_x; +// } +// +// if ($position_y>$position_y_max) +// { +// $position_y_max=$position_y; +// } +// +// +// +///*****************************************************************************/ +///* WRITE CURRENT CHARACTER INFO IN A TEMPORARY ARRAY */ +///*****************************************************************************/ +// +// $pcboard_buffer[]=$position_x; +// $pcboard_buffer[]=$position_y; +// $pcboard_buffer[]=$color_background; +// $pcboard_buffer[]=$color_foreground; +// $pcboard_buffer[]=$current_character; +// +// $position_x++; +// } +// $loop++; +// } +// +// +// +///*****************************************************************************/ +///* ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// $position_x_max++; +// $position_y_max++; +// +// if (!$pcboard = imagecreate($columns*$bits,($position_y_max)*$font_size_y)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecolorallocate($pcboard,0,0,0); +// +// +// +///*****************************************************************************/ +///* RENDER PCB */ +///*****************************************************************************/ +// +// for ($loop=0;$loop<sizeof($pcboard_buffer);$loop+=5) +// { +// $position_x=$pcboard_buffer[$loop]; +// $position_y=$pcboard_buffer[$loop+1]; +// $color_background=$pcboard_buffer[$loop+2]; +// $color_foreground=$pcboard_buffer[$loop+3]; +// $character=$pcboard_buffer[$loop+4]; +// +// imagecopy($pcboard,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); +// imagecopy($pcboard,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); +// } +// +// +// +///*****************************************************************************/ +///* CREATE OUTPUT FILE */ +///*****************************************************************************/ +// +// if ($thumbnail) +// { +// thumbnail($pcboard,$output,$columns,$font_size_y,$position_y_max); +// } +// else +// { +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($pcboard); +// } +// else +// { +// ImagePNG($pcboard,$output); +// } +// } +// +// +// +///*****************************************************************************/ +///* FREE MEMORY */ +///*****************************************************************************/ +// +// imagedestroy($pcboard); +// imagedestroy($background); +// imagedestroy($font); +//} +// +// +// +///*****************************************************************************/ +///* LOAD BINARY */ +///*****************************************************************************/ +// +//function load_binary($input,$output,$columns,$font,$bits,$icecolors) +//{ +// check_libraries(); +// +///*****************************************************************************/ +///* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ +///*****************************************************************************/ +// +// if ($columns==0) +// { +// $columns=160; +// } +// +// if ($bits=='thumbnail') +// { +// $thumbnail=TRUE; +// } +// if ($bits!=8 && $bits!=9) +// { +// $bits=8; +// } +// +// switch($font) +// { +// case '80x25': +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case '80x50': +// $font_file='ansilove_font_pc_80x50.png'; +// $font_size_x=9; +// $font_size_y=8; +// break; +// +// default: +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// } +// +// +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_sauce=load_sauce($input); +// +// if ($input_file_sauce!=NULL) +// { +// $input_file_size=$input_file_sauce['FileSize']; +// } +// else +// { +// $input_file_size=filesize($input); +// } +// +// if (!$input_file_buffer = fread($input_file,$input_file_size)) +// { +// error("Can't read file $input"); +// } +// +// fclose($input_file); +// +// +// +///*****************************************************************************/ +///* LOAD BACKGROUND/FONT AND ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) +// { +// error("Can't open file ansilove_background.png"); +// } +// +// if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) +// { +// error("Can't open file $font_file"); +// } +// +// imagecolortransparent($font,20); +// +// if (!$binary = imagecreate($columns*$bits,(($input_file_size/2)/$columns)*$font_size_y)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecolorallocate($binary,0,0,0); +// +// +// +///*****************************************************************************/ +///* ALLOCATE BACKGROUND/FOREGROUND COLOR ARRAYS */ +///*****************************************************************************/ +// +// $binary_colors[0]=0; $binary_colors[1]=4; $binary_colors[2]=2; $binary_colors[3]=6; $binary_colors[4]=1; $binary_colors[5]=5; $binary_colors[6]=3; $binary_colors[7]=7; $binary_colors[8]=8; $binary_colors[9]=12; $binary_colors[10]=10; $binary_colors[11]=14; $binary_colors[12]=9; $binary_colors[13]=13; $binary_colors[14]=11; $binary_colors[15]=15; +// +// +// +///*****************************************************************************/ +///* PROCESS BINARY */ +///*****************************************************************************/ +// +// while ($loop<$input_file_size) +// { +// if ($position_x==$columns) +// { +// $position_x=0; +// $position_y++; +// } +// +// $character=ord($input_file_buffer[$loop]); +// $attribute=ord($input_file_buffer[$loop+1]); +// +// $color_background=$binary_colors[($attribute & 240)>>4]; +// $color_foreground=$binary_colors[$attribute & 15]; +// +// if ($color_background>8 && $icecolors==0) +// { +// $color_background-=8; +// } +// +// imagecopy($binary,$background,$position_x*$bits,$position_y*$font_size_y,$color_background*9,0,$bits,$font_size_y); +// imagecopy($binary,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,$bits,$font_size_y); +// +// $position_x++; +// $loop+=2; +// } +// +// +// +///*****************************************************************************/ +///* CREATE OUTPUT FILE */ +///*****************************************************************************/ +// +// if ($thumbnail) +// { +// $position_y_max=($input_file_size/2)/$columns; +// thumbnail($binary,$output,$columns,$font_size_y,$position_y_max); +// } +// else +// { +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($binary); +// } +// else +// { +// ImagePNG($binary,$output); +// } +// } +// +// +// +///*****************************************************************************/ +///* FREE MEMORY */ +///*****************************************************************************/ +// +// imagedestroy($binary); +// imagedestroy($background); +// imagedestroy($font); +//} +// +// +// +///*****************************************************************************/ +///* LOAD ADF */ +///*****************************************************************************/ +// +//function load_adf($input,$output,$bits) +//{ +// check_libraries(); +// +// if ($bits=='thumbnail') +// { +// $thumbnail=TRUE; +// } +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_sauce=load_sauce($input); +// +// if ($input_file_sauce!=NULL) +// { +// $input_file_size=$input_file_sauce['FileSize']; +// } +// else +// { +// $input_file_size=filesize($input); +// } +// +// if (!$input_file_buffer = fread($input_file,$input_file_size)) +// { +// error("Can't read file $input"); +// } +// +// fclose($input_file); +// +// +// +///*****************************************************************************/ +///* ALLOCATE BACKGROUND/FONT IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$background = imagecreate(128,16)) +// { +// error("Can't allocate background buffer image memory"); +// } +// +// if (!$font = imagecreate(2048,256)) +// { +// error("Can't allocate font buffer image memory"); +// } +// +// if (!$font_inverted = imagecreate(2048,16)) +// { +// error("Can't allocate temporary font buffer image memory"); +// } +// +// +// +///*****************************************************************************/ +///* PROCESS ADF PALETTE */ +///*****************************************************************************/ +// +// $adf_colors=array(0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63); +// +// for ($loop=0;$loop<16;$loop++) +// { +// $index=($adf_colors[$loop]*3)+1; +// $colors[$loop]=imagecolorallocate($background,(ord($input_file_buffer[$index])<<2 | ord($input_file_buffer[$index])>>4),(ord($input_file_buffer[$index+1])<<2 | ord($input_file_buffer[$index+1])>>4),(ord($input_file_buffer[$index+2])<<2 | ord($input_file_buffer[$index+2])>>4)); +// } +// +// imagepalettecopy($font,$background); +// imagepalettecopy($font_inverted,$background); +// +// $color_index=imagecolorsforindex($background, 0); +// $colors[16]=imagecolorallocate($font,$color_index['red'],$color_index['green'],$color_index['blue']); +// $colors[20]=imagecolorallocate($font_inverted,200,220,169); +// +// for ($loop=0;$loop<16;$loop++) +// { +// imagefilledrectangle($background,$loop<<3,0,($loop<<3)+8,16,$colors[$loop]); +// } +// +// +// +///*****************************************************************************/ +///* PROCESS ADF FONT */ +///*****************************************************************************/ +// +// imagefilledrectangle($font_inverted,0,0,2048,16,$colors[20]); +// imagecolortransparent($font_inverted,$colors[20]); +// +// for ($loop=0;$loop<256;$loop++) +// { +// for ($adf_font_size_y=0;$adf_font_size_y<16;$adf_font_size_y++) +// { +// $adf_character_line=ord($input_file_buffer[193+$adf_font_size_y+($loop*16)]); +// +// for ($loop_column=0;$loop_column<8;$loop_column++) +// { +// $adf_character_column=128/pow(2,$loop_column); +// +// if (($adf_character_line & $adf_character_column)!=$adf_character_column) +// { +// imagesetpixel($font_inverted,($loop*8)+$loop_column,$adf_font_size_y,$colors[0]); +// } +// } +// } +// } +// +// for ($loop=1;$loop<16;$loop++) +// { +// imagefilledrectangle($font,0,$loop*16,2048,($loop*16)+16,$colors[$loop]); +// } +// imagefilledrectangle($font,0,0,2048,15,$colors[16]); +// +// for ($loop=0;$loop<16;$loop++) +// { +// imagecopy($font,$font_inverted,0,$loop*16,0,0,2048,16); +// } +// imagecolortransparent($font,$colors[0]); +// +// +// +///*****************************************************************************/ +///* ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$adf = imagecreate(640,((($input_file_size-192-4096-1)/2)/80)*16)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecolorallocate($adf,0,0,0); +// +// +// +///*****************************************************************************/ +///* PROCESS ADF */ +///*****************************************************************************/ +// +// $loop=192+4096+1; +// +// while ($loop<$input_file_size) +// { +// if ($position_x==80) +// { +// $position_x=0; +// $position_y++; +// } +// +// $character=ord($input_file_buffer[$loop]); +// $attribute=ord($input_file_buffer[$loop+1]); +// +// $color_background=($attribute & 240)>>4; +// $color_foreground=$attribute & 15; +// +// imagecopy($adf,$background,$position_x*8,$position_y*16,$color_background*8,0,8,16); +// imagecopy($adf,$font,$position_x*8,$position_y*16,$character*8,$color_foreground*16,8,16); +// +// $position_x++; +// $loop+=2; +// } +// +// +// +///*****************************************************************************/ +///* CREATE OUTPUT FILE */ +///*****************************************************************************/ +// +// if ($thumbnail) +// { +// $position_y_max=(($input_file_size-192-4096-1)/2)/80; +// $columns=80; +// $font_size_y=16; +// +// thumbnail($adf,$output,$columns,$font_size_y,$position_y_max); +// } +// else +// { +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($adf); +// } +// else +// { +// ImagePNG($adf,$output); +// } +// } +// +// +// +///*****************************************************************************/ +///* FREE MEMORY */ +///*****************************************************************************/ +// +// imagedestroy($adf); +// imagedestroy($background); +// imagedestroy($font); +// imagedestroy($font_inverted); +//} +// +// +// +///*****************************************************************************/ +///* LOAD IDF */ +///*****************************************************************************/ +// +//function load_idf($input,$output,$bits) +//{ +// check_libraries(); +// +// if ($bits=='thumbnail') +// { +// $thumbnail=TRUE; +// } +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_sauce=load_sauce($input); +// +// if ($input_file_sauce!=NULL) +// { +// $input_file_size=$input_file_sauce['FileSize']; +// } +// else +// { +// $input_file_size=filesize($input); +// } +// +// if (!$input_file_buffer = fread($input_file,$input_file_size)) +// { +// error("Can't read file $input"); +// } +// +// fclose($input_file); +// +// +// +///*****************************************************************************/ +///* EXTRACT IDF HEADER */ +///*****************************************************************************/ +// +// $idf_header['ID']=substr($input_file_buffer,0,4); +// $idf_header=array_merge($idf_header,unpack('vx1/vy1/vx2/vy2',substr($input_file_buffer,4,8))); +// +// +// +///*****************************************************************************/ +///* ALLOCATE BACKGROUND/FONT IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$background = imagecreate(128,16)) +// { +// error("Can't allocate background buffer image memory"); +// } +// +// if (!$font = imagecreate(2048,256)) +// { +// error("Can't allocate font buffer image memory"); +// } +// +// if (!$font_inverted = imagecreate(2048,16)) +// { +// error("Can't allocate temporary font buffer image memory"); +// } +// +// +// +///*****************************************************************************/ +///* PROCESS IDF PALETTE */ +///*****************************************************************************/ +// +// for ($loop=0;$loop<16;$loop++) +// { +// $index=($loop*3)+$input_file_size-48; +// $colors[$loop]=imagecolorallocate($background,(ord($input_file_buffer[$index])<<2 | ord($input_file_buffer[$index])>>4),(ord($input_file_buffer[$index+1])<<2 | ord($input_file_buffer[$index+1])>>4),(ord($input_file_buffer[$index+2])<<2 | ord($input_file_buffer[$index+2])>>4)); +// } +// +// imagepalettecopy($font,$background); +// imagepalettecopy($font_inverted,$background); +// +// $color_index=imagecolorsforindex($background,0); +// $colors[16]=imagecolorallocate($font,$color_index['red'],$color_index['green'],$color_index['blue']); +// $colors[20]= imagecolorallocate($font_inverted,200,220,169); +// +// for ($loop=0;$loop<16;$loop++) +// { +// imagefilledrectangle($background,$loop<<3,0,($loop<<3)+8,16,$colors[$loop]); +// } +// +// +// +///*****************************************************************************/ +///* PROCESS IDF FONT */ +///*****************************************************************************/ +// +// imagefilledrectangle($font_inverted,0,0,2048,16,$colors[20]); +// imagecolortransparent($font_inverted,$colors[20]); +// +// for ($loop=0;$loop<256;$loop++) +// { +// for ($idf_font_size_y=0;$idf_font_size_y<16;$idf_font_size_y++) +// { +// $idf_character_line=ord($input_file_buffer[$input_file_size-48-4096+$idf_font_size_y+($loop*16)]); +// +// for ($loop_column=0;$loop_column<8;$loop_column++) +// { +// $idf_character_column=128/pow(2,$loop_column); +// +// if (($idf_character_line & $idf_character_column)!=$idf_character_column) +// { +// imagesetpixel($font_inverted,($loop*8)+$loop_column,$idf_font_size_y,$colors[0]); +// } +// } +// } +// } +// +// for ($loop=1;$loop<16;$loop++) +// { +// imagefilledrectangle($font,0,$loop*16,2048,($loop*16)+16,$colors[$loop]); +// } +// imagefilledrectangle($font,0,0,2048,15,$colors[16]); +// +// for ($loop=0;$loop<16;$loop++) +// { +// imagecopy($font,$font_inverted,0,$loop*16,0,0,2048,16); +// } +// imagecolortransparent($font,$colors[0]); +// +// +// +///*****************************************************************************/ +///* PROCESS IDF */ +///*****************************************************************************/ +// +// $loop=12; +// +// while ($loop<$input_file_size-4096-48) +// { +// $idf_data=unpack('vdata',substr($input_file_buffer,$loop,2)); +// if ($idf_data['data']==1) +// { +// $idf_data=unpack('vlength',substr($input_file_buffer,$loop+2,2)); +// +// $idf_sequence_length=$idf_data['length'] & 255; +// $idf_data=unpack('Ccharacter/Cattribute',substr($input_file_buffer,$loop+4,2)); +// +// for ($idf_sequence_loop=0;$idf_sequence_loop<$idf_sequence_length;$idf_sequence_loop++) +// { +// $idf_buffer[]=$idf_data['character']; +// $idf_buffer[]=$idf_data['attribute']; +// } +// +// $loop+=4; +// } +// else +// { +// $idf_data=unpack('Ccharacter/Cattribute',substr($input_file_buffer,$loop,2)); +// +// $idf_buffer[]=$idf_data['character']; +// $idf_buffer[]=$idf_data['attribute']; +// } +// +// $loop+=2; +// } +// +// +// +///*****************************************************************************/ +///* ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$idf = imagecreate(($idf_header['x2']+1)*8,(sizeof($idf_buffer)/2/80)*16)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecolorallocate($idf,0,0,0); +// +// +// +///*****************************************************************************/ +///* RENDER IDF */ +///*****************************************************************************/ +// +// for ($loop=0;$loop<sizeof($idf_buffer);$loop+=2) +// { +// if ($position_x==$idf_header['x2']+1) +// { +// $position_x=0; +// $position_y++; +// } +// +// $character=$idf_buffer[$loop]; +// $attribute=$idf_buffer[$loop+1]; +// +// $color_background=($attribute & 240)>>4; +// $color_foreground=$attribute & 15; +// +// imagecopy($idf,$background,$position_x*8,$position_y*16,$color_background*8,0,8,16); +// imagecopy($idf,$font,$position_x*8,$position_y*16,$character*8,$color_foreground*16,8,16); +// +// $position_x++; +// } +// +// +// +///*****************************************************************************/ +///* CREATE OUTPUT FILE */ +///*****************************************************************************/ +// +// if ($thumbnail) +// { +// $position_y_max=$position_y; +// $columns=80; +// $font_size_y=16; +// +// thumbnail($idf,$output,$columns,$font_size_y,$position_y_max); +// } +// else +// { +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($idf); +// } +// else +// { +// ImagePNG($idf,$output); +// } +// } +// +// +// +///*****************************************************************************/ +///* FREE MEMORY */ +///*****************************************************************************/ +// +// imagedestroy($idf); +// imagedestroy($background); +// imagedestroy($font); +// imagedestroy($font_inverted); +//} +// +// +// +///*****************************************************************************/ +///* LOAD TUNDRA */ +///*****************************************************************************/ +// +//function load_tundra($input,$output,$font,$bits) +//{ +// check_libraries(); +// +///*****************************************************************************/ +///* CHECK PARAMETERS AND FORCE DEFAULT VALUES IF INVALID INPUT IS DETECTED */ +///*****************************************************************************/ +// +// $columns=80; +// +// if ($bits=='thumbnail') +// { +// $thumbnail=TRUE; +// } +// if ($bits!=8 && $bits!=9) +// { +// $bits=8; +// } +// +// switch($font) +// { +// case '80x25': +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// break; +// +// case '80x50': +// $font_file='ansilove_font_pc_80x50.png'; +// $font_size_x=9; +// $font_size_y=8; +// break; +// +// default: +// $font_file='ansilove_font_pc_80x25.png'; +// $font_size_x=9; +// $font_size_y=16; +// } +// +// +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_sauce=load_sauce($input); +// +// if ($input_file_sauce!=NULL) +// { +// $input_file_size=$input_file_sauce['FileSize']; +// } +// else +// { +// $input_file_size=filesize($input); +// } +// +// if (!$input_file_buffer = fread($input_file,$input_file_size)) +// { +// error("Can't read file $input"); +// } +// +// fclose($input_file); +// +// +// +///*****************************************************************************/ +///* EXTRACT TUNDRA HEADER */ +///*****************************************************************************/ +// +// $tundra_header['value']=$input_file_buffer[0]; +// $tundra_header['string']=substr($input_file_buffer,1,8); +// +// if (ord($tundra_header['value'])!=24 || $tundra_header['string']!='TUNDRA24') +// { +// error("$input is not a TUNDRA file"); +// } +// +// +// +///*****************************************************************************/ +///* LOAD BACKGROUND/FONT AND ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) +// { +// error("Can't open file ansilove_background.png"); +// } +// +// if (!$font = imagecreatefrompng(dirname(__FILE__).'/fonts/'.$font_file)) +// { +// error("Can't open file $font_file"); +// } +// +// imagecolorset($font,20,0,0,0); +// +// +// +///*****************************************************************************/ +///* READ TUNDRA FILE A FIRST TIME TO FIND THE IMAGE SIZE */ +///*****************************************************************************/ +// +// $loop=9; +// +// while ($loop<$input_file_size) +// { +// if ($position_x==80) +// { +// $position_x=0; +// $position_y++; +// } +// +// $character=ord($input_file_buffer[$loop]); +// +// if ($character==1) +// { +// $tundra_position_array=unpack('Nposition_y/Nposition_x',substr($input_file_buffer,$loop+1,8)); +// $position_y=$tundra_position_array['position_y']; +// $position_x=$tundra_position_array['position_x']; +// +// $loop+=8; +// } +// +// if ($character==2) +// { +// $loop+=5; +// } +// +// if ($character==4) +// { +// $loop+=5; +// } +// +// if ($character==6) +// { +// $loop+=9; +// } +// +// if ($character!=1 && $character!=2 && $character!=4 && $character!=6) +// { +// $position_x++; +// } +// +// $loop++; +// } +// +// $position_y++; +// +// +// +///*****************************************************************************/ +///* ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$tundra = imagecreate($columns*$bits,($position_y)*$font_size_y)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecolorallocate($tundra,0,0,0); +// +// +// +///*****************************************************************************/ +///* PROCESS TUNDRA FILE */ +///*****************************************************************************/ +// +// $position_x=0; +// $position_y=0; +// +// $loop=9; +// +// while ($loop<$input_file_size) +// { +// if ($position_x==$columns) +// { +// $position_x=0; +// $position_y++; +// } +// +// $character=ord($input_file_buffer[$loop]); +// +// if ($character==1) +// { +// $tundra_position_array=unpack('Nposition_y/Nposition_x',substr($input_file_buffer,$loop+1,8)); +// $position_y=$tundra_position_array['position_y']; +// $position_x=$tundra_position_array['position_x']; +// +// $loop+=8; +// } +// +// if ($character==2) +// { +// $tundra_color_array=unpack('Ncolor_foreground',substr($input_file_buffer,$loop+2,4)); +// $color_foreground=$tundra_color_array['color_foreground']; +// $red=($color_foreground>>16) & 0x000000FF; +// $green=($color_foreground>>8) & 0x000000FF; +// $blue=$color_foreground & 0x000000FF; +// imagecolorset($font,0,$red,$green,$blue); +// +// $character=ord($input_file_buffer[$loop+1]); +// +// $loop+=5; +// } +// +// +// if ($character==4) +// { +// $tundra_color_array=unpack('Ncolor_background',substr($input_file_buffer,$loop+2,4)); +// $color_background=$tundra_color_array['color_background']; +// $red=($color_background>>16) & 0x000000FF; +// $green=($color_background>>8) & 0x000000FF; +// $blue=$color_background & 0x000000FF; +// imagecolorset($font,20,$red,$green,$blue); +// +// $character=ord($input_file_buffer[$loop+1]); +// +// $loop+=5; +// } +// +// if ($character==6) +// { +// $tundra_color_array=unpack('Ncolor_foreground/Ncolor_background',substr($input_file_buffer,$loop+2,8)); +// $color_foreground=$tundra_color_array['color_foreground']; +// $red=($color_foreground>>16) & 0x000000FF; +// $green=($color_foreground>>8) & 0x000000FF; +// $blue=$color_foreground & 0x000000FF; +// imagecolorset($font,0,$red,$green,$blue); +// +// $color_background=$tundra_color_array['color_background']; +// $red=($color_background>>16) & 0x000000FF; +// $green=($color_background>>8) & 0x000000FF; +// $blue=$color_background & 0x000000FF; +// imagecolorset($font,20,$red,$green,$blue); +// +// $character=ord($input_file_buffer[$loop+1]); +// +// $loop+=9; +// } +// +// if ($character!=1 && $character!=2 && $character!=4 && $character!=6) +// { +// imagecopy($tundra,$font,$position_x*$bits,$position_y*$font_size_y,$character*$font_size_x,0,$bits,$font_size_y); +// +// $position_x++; +// } +// +// $loop++; +// } +// +// +// +///*****************************************************************************/ +///* CREATE OUTPUT FILE */ +///*****************************************************************************/ +// +// if ($thumbnail) +// { +// $position_y_max=$position_y; +// +// thumbnail($tundra,$output,$columns,$font_size_y,$position_y_max); +// } +// else +// { +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($tundra); +// } +// else +// { +// ImagePNG($tundra,$output); +// } +// } +// +// +// +///*****************************************************************************/ +///* FREE MEMORY */ +///*****************************************************************************/ +// +// imagedestroy($tundra); +// imagedestroy($background); +// imagedestroy($font); +//} +// +// +// +///*****************************************************************************/ +///* LOAD XBIN */ +///*****************************************************************************/ +// +//function load_xbin($input,$output,$bits) +//{ +// check_libraries(); +// +// if ($bits=='thumbnail') +// { +// $thumbnail=TRUE; +// } +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_sauce=load_sauce($input); +// +// if ($input_file_sauce!=NULL) +// { +// $input_file_size=$input_file_sauce['FileSize']; +// } +// else +// { +// $input_file_size=filesize($input); +// } +// +// if (!$input_file_buffer = fread($input_file,$input_file_size)) +// { +// error("Can't read file $input"); +// } +// +// fclose($input_file); +// +// +// +///*****************************************************************************/ +///* EXTRACT XBIN HEADER */ +///*****************************************************************************/ +// +// $xbin_header['ID']=substr($input_file_buffer,0,4); +// +// if ($xbin_header['ID']!='XBIN') +// { +// error("$input is not a XBiN file"); +// } +// +// $xbin_header=array_merge($xbin_header,unpack('CEofChar/vWidth/vHeight/CFontsize/CFlags',substr($input_file_buffer,4,7))); +// +// if (($xbin_header['Flags'] & 1)==1) +// { +// $xbin_flags['palette']=1; +// } +// +// if (($xbin_header['Flags'] & 2)==2) +// { +// $xbin_flags['font']=1; +// } +// +// if (($xbin_header['Flags'] & 4)==4) +// { +// $xbin_flags['compress']=1; +// } +// +// if (($xbin_header['Flags'] & 8)==8) +// { +// $xbin_flags['nonblink']=1; +// } +// +// if (($xbin_header['Flags'] & 16)==16) +// { +// $xbin_flags['512chars']=1; +// } +// +// +// +///*****************************************************************************/ +///* PROCESS XBIN PALETTE */ +///*****************************************************************************/ +// +// if ($xbin_flags['palette']==1) +// { +// if (!$background = imagecreate(128,16)) +// { +// error("Can't allocate background buffer image memory"); +// } +// +// for ($loop=0;$loop<16;$loop++) +// { +// $index=($loop*3)+11; +// $colors[$loop]=imagecolorallocate($background,(ord($input_file_buffer[$index])<<2 | ord($input_file_buffer[$index])>>4),(ord($input_file_buffer[$index+1])<<2 | ord($input_file_buffer[$index+1])>>4),(ord($input_file_buffer[$index+2])<<2 | ord($input_file_buffer[$index+2])>>4)); +// } +// +// for ($loop=0;$loop<16;$loop++) +// { +// imagefilledrectangle($background,$loop<<3,0,($loop<<3)+8,16,$colors[$loop]); +// } +// +// $background_size_x=8; +// } +// else +// { +// if (!$background = imagecreatefrompng(dirname(__FILE__).'/fonts/ansilove_background.png')) +// { +// error("Can't open file ansilove_background.png"); +// } +// +// $background_size_x=9; +// } +// +// +// +///*****************************************************************************/ +///* PROCESS XBIN FONT */ +///*****************************************************************************/ +// +// if ($xbin_flags['font']==1) +// { +// if (!$font = imagecreate(2048,$xbin_header['Fontsize']*16)) +// { +// error("Can't allocate font buffer image memory"); +// } +// +// if (!$font_inverted = imagecreate(2048,$xbin_header['Fontsize'])) +// { +// error("Can't allocate temporary font buffer image memory"); +// } +// +// imagepalettecopy($font,$background); +// imagepalettecopy($font_inverted,$background); +// +// $color_index=imagecolorsforindex($background,0); +// $colors[16]=imagecolorallocate($font,$color_index['red'],$color_index['green'],$color_index['blue']); +// $colors[20]=imagecolorallocate($font_inverted,200,220,169); +// +// imagefilledrectangle($font_inverted,0,0,2048,$xbin_header['Fontsize'],$colors[20]); +// imagecolortransparent($font_inverted,$colors[20]); +// +// for ($loop=0;$loop<256;$loop++) +// { +// for ($xbin_font_size_y=0;$xbin_font_size_y<$xbin_header['Fontsize'];$xbin_font_size_y++) +// { +// $xbin_character_line=ord($input_file_buffer[11+$xbin_flags['palette']*48+$xbin_font_size_y+($loop*$xbin_header['Fontsize'])]); +// +// for ($loop_column=0;$loop_column<8;$loop_column++) +// { +// $xbin_character_column=128/pow(2,$loop_column); +// +// if (($xbin_character_line & $xbin_character_column)!=$xbin_character_column) +// { +// imagesetpixel($font_inverted,($loop*8)+$loop_column,$xbin_font_size_y,$colors[0]); +// } +// } +// } +// } +// +// for ($loop=1;$loop<16;$loop++) +// { +// imagefilledrectangle($font,0,$loop*$xbin_header['Fontsize'],2048,($loop*$xbin_header['Fontsize'])+$xbin_header['Fontsize'],$loop); +// } +// imagefilledrectangle($font,0,0,2048,$xbin_header['Fontsize']-1,$colors[16]); +// +// for ($loop=0;$loop<16;$loop++) +// { +// imagecopy ($font, $font_inverted, 0,$loop*$xbin_header['Fontsize'],0,0,2048,$xbin_header['Fontsize']); +// } +// imagecolortransparent($font,$colors[0]); +// +// $font_size_x=8; +// $font_size_y=$xbin_header['Fontsize']; +// } +// else +// { +// if (!$font = imagecreatefrompng (dirname(__FILE__).'/fonts/ansilove_font_pc_80x25.png')) +// { +// error("Can't open file $font_file"); +// } +// +// $font_size_x=9; +// $font_size_y=16; +// +// imagecolortransparent($font,20); +// } +// +// +// +///*****************************************************************************/ +///* PROCESS XBIN */ +///*****************************************************************************/ +// +// $loop=11+$xbin_flags['palette']*48+$xbin_flags['font']*256*$xbin_header['Fontsize']; +// +// if ($xbin_flags['compress']==1) +// { +// while ($loop<$input_file_size) +// { +// $character=ord($input_file_buffer[$loop]); +// +// $compression=$character & 192; +// $repeat=1+($character & 63); +// +// if ($compression==0) +// { +// for ($i=0;$i<$repeat*2;$i++) +// { +// $xbin_buffer[]=ord($input_file_buffer[$loop+1+$i]); +// } +// +// $loop=$loop+1+($repeat*2); +// } +// +// if ($compression==64) +// { +// for ($i=0;$i<$repeat;$i++) +// { +// $xbin_buffer[]=ord($input_file_buffer[$loop+1]); +// $xbin_buffer[]=ord($input_file_buffer[$loop+2+$i]); +// } +// +// $loop=$loop+2+$repeat; +// } +// +// if ($compression==128) +// { +// for ($i=0;$i<$repeat;$i++) +// { +// $xbin_buffer[]=ord($input_file_buffer[$loop+2+$i]); +// $xbin_buffer[]=ord($input_file_buffer[$loop+1]); +// } +// +// $loop=$loop+2+$repeat; +// } +// +// if ($compression==192) +// { +// for ($i=0;$i<$repeat;$i++) +// { +// $xbin_buffer[]=ord($input_file_buffer[$loop+1]); +// $xbin_buffer[]=ord($input_file_buffer[$loop+2]); +// } +// +// $loop+=3; +// } +// } +// } +// else +// { +// while ($loop<$input_file_size) +// { +// $xbin_buffer[]=ord($input_file_buffer[$loop]); +// $loop++; +// } +// } +// +// +// +///*****************************************************************************/ +///* ALLOCATE IMAGE BUFFER MEMORY */ +///*****************************************************************************/ +// +// if (!$xbin = imagecreatetruecolor($xbin_header['Width']*8,$xbin_header['Height']*$font_size_y)) +// { +// error("Can't allocate buffer image memory"); +// } +// +// imagecolorallocate($xbin,0,0,0); +// +// +// +///*****************************************************************************/ +///* RENDER XBIN */ +///*****************************************************************************/ +// +// for ($loop=0;$loop<sizeof($xbin_buffer);$loop+=2) +// { +// if ($position_x==$xbin_header['Width']) +// { +// $position_x=0; +// $position_y++; +// } +// +// $character=($xbin_buffer[$loop]); +// $attribute=($xbin_buffer[$loop+1]); +// +// $color_background=($attribute & 240)>>4; +// $color_foreground=$attribute & 15; +// +// imagecopy($xbin, $background,$position_x*8,$position_y*$font_size_y,$color_background*$background_size_x,0,8,$font_size_y); +// imagecopy($xbin,$font,$position_x*8,$position_y*$font_size_y,$character*$font_size_x,$color_foreground*$font_size_y,8,$font_size_y); +// +// $position_x++; +// } +// +// +// +///*****************************************************************************/ +///* CREATE OUTPUT FILE */ +///*****************************************************************************/ +// +// if ($thumbnail) +// { +// $position_y_max=$xbin_header['Height']; +// $columns=$xbin_header['Width']; +// +// thumbnail($xbin,$output,$columns,$font_size_y,$position_y_max); +// } +// else +// { +// if ($output=='online') +// { +// Header("Content-type: image/png"); +// ImagePNG($xbin); +// } +// else +// { +// ImagePNG($xbin,$output); +// } +// } +// +///*****************************************************************************/ +///* FREE MEMORY */ +///*****************************************************************************/ +// +// imagedestroy($xbin); +// imagedestroy($background); +// imagedestroy($font); +// +// if ($xbin_flags['font']==1) +// { +// imagedestroy($font_inverted); +// } +//} +// +// +// +///*****************************************************************************/ +///* LOAD SAUCE */ +///*****************************************************************************/ +// +//function load_sauce($input) +//{ +// +///*****************************************************************************/ +///* LOAD INPUT FILE */ +///*****************************************************************************/ +// +// if (!$input_file = fopen ($input,'r')) +// { +// error("Can't open file $input"); +// } +// +// $input_file_size=filesize($input); +// +// +// +///*****************************************************************************/ +///* PROCESS SAUCE */ +///*****************************************************************************/ +// +// if ($input_file_size>=128) +// { +// fseek($input_file,$input_file_size-128); +// $input_file_buffer=fread($input_file,128); +// +// $sauce['ID']=substr($input_file_buffer,0,5); +// $sauce['Version']=substr($input_file_buffer,5,2); +// $sauce['Title']=substr($input_file_buffer,7,35); +// $sauce['Author']=substr($input_file_buffer,42,20); +// $sauce['Group']=substr($input_file_buffer,62,20); +// $sauce['Date']=substr($input_file_buffer,82,8); +// $sauce=array_merge($sauce,unpack('lFileSize/CDataType/CFileType/v4TInfo/CComments/CFlags',substr($input_file_buffer,90,16))); +// $sauce['Filler']=substr($input_file_buffer,106,22); +// } +// +// +// +///*****************************************************************************/ +///* PROCESS SAUCE COMMENTS */ +///*****************************************************************************/ +// +// $sauce_comment_lines=$sauce['Comments']; +// +// if ($sauce_comment_lines!=0) +// { +// if ($input_file_size>=128+5+($sauce_comment_lines*64)) +// { +// fseek($input_file,($input_file_size-128-5-($sauce_comment_lines*64))); +// $comment_id=fread($input_file,5); +// +// if ($comment_id=='COMNT') +// { +// for ($loop=0;$loop<$sauce_comment_lines;$loop++) +// { +// fseek($input_file,($input_file_size-128-($sauce_comment_lines*64)+($loop*64))); +// +// $comment_line="Comment_Line_"; +// if ($loop<9) +// { +// $comment_line.="0"; +// } +// $comment_line.=($loop+1); +// +// $sauce[$comment_line]=fread($input_file,64); +// } +// } +// } +// } +// +// fclose($input_file); +// +// +// +///*****************************************************************************/ +///* RETURN SAUCE */ +///*****************************************************************************/ +// +// if ($sauce['ID']=='SAUCE') +// { +// return($sauce); +// } +//}