true, 'indent_string'=>'  ', 'indent_line_numbers'=>true, 'keyword_prefix'=>'', 'keyword_suffix'=>'', 'special_keyword_prefix'=>'', 'special_keyword_suffix'=>'', 'line_number_prefix'=>'', 'line_number_suffix'=>' ', 'string_prefix'=>'', 'string_suffix'=>'', 'line_prefix'=>'
', 'line_suffix'=>'
' . "\r\n", 'star_command_prefix'=>'', 'star_command_suffix'=>'', 'comment_prefix'=>'', 'comment_suffix'=>'', 'assembly_prefix'=>'', 'assembly_suffix'=>'', ); return $settings; } function decode_char($char) { if ($char == ' ') return ' '; if ($char == '<') return '<'; return $char; } function get_token_to_keyword_map() { return array( 0x7F=>array('keyword'=>'OTHERWISE', 'indent'=>0, 'special'=>false), 0x80=>array('keyword'=>'AND', 'indent'=>0, 'special'=>false), 0x81=>array('keyword'=>'DIV', 'indent'=>0, 'special'=>false), 0x82=>array('keyword'=>'EOR', 'indent'=>0, 'special'=>false), 0x83=>array('keyword'=>'MOD', 'indent'=>0, 'special'=>false), 0x84=>array('keyword'=>'OR', 'indent'=>0, 'special'=>false), 0x85=>array('keyword'=>'ERROR', 'indent'=>0, 'special'=>false), 0x86=>array('keyword'=>'LINE', 'indent'=>0, 'special'=>false), 0x87=>array('keyword'=>'OFF', 'indent'=>0, 'special'=>false), 0x88=>array('keyword'=>'STEP', 'indent'=>0, 'special'=>false), 0x89=>array('keyword'=>'SPC', 'indent'=>0, 'special'=>false), 0x8A=>array('keyword'=>'TAB(', 'indent'=>0, 'special'=>false), 0x8B=>array('keyword'=>'ELSE', 'indent'=>0, 'special'=>false), 0x8C=>array('keyword'=>'THEN', 'indent'=>1, 'special'=>false), 0x8D=>array('keyword'=>'$LINE$', 'indent'=>0, 'special'=>false), 0x8E=>array('keyword'=>'OPENIN', 'indent'=>0, 'special'=>false), 0x8F=>array('keyword'=>'PTR', 'indent'=>0, 'special'=>false), 0x90=>array('keyword'=>'PAGE', 'indent'=>0, 'special'=>false), 0x91=>array('keyword'=>'TIME', 'indent'=>0, 'special'=>false), 0x92=>array('keyword'=>'LOMEM', 'indent'=>0, 'special'=>false), 0x93=>array('keyword'=>'HIMEM', 'indent'=>0, 'special'=>false), 0x94=>array('keyword'=>'ABS', 'indent'=>0, 'special'=>false), 0x95=>array('keyword'=>'ACS', 'indent'=>0, 'special'=>false), 0x96=>array('keyword'=>'ADVAL', 'indent'=>0, 'special'=>false), 0x97=>array('keyword'=>'ASC', 'indent'=>0, 'special'=>false), 0x98=>array('keyword'=>'ASN', 'indent'=>0, 'special'=>false), 0x99=>array('keyword'=>'ATN', 'indent'=>0, 'special'=>false), 0x9A=>array('keyword'=>'BGET', 'indent'=>0, 'special'=>false), 0x9B=>array('keyword'=>'COS', 'indent'=>0, 'special'=>false), 0x9C=>array('keyword'=>'COUNT', 'indent'=>0, 'special'=>false), 0x9D=>array('keyword'=>'DEG', 'indent'=>0, 'special'=>false), 0x9E=>array('keyword'=>'ERL', 'indent'=>0, 'special'=>false), 0x9F=>array('keyword'=>'ERR', 'indent'=>0, 'special'=>false), 0xA0=>array('keyword'=>'EVAL', 'indent'=>0, 'special'=>false), 0xA1=>array('keyword'=>'EXP', 'indent'=>0, 'special'=>false), 0xA2=>array('keyword'=>'EXT', 'indent'=>0, 'special'=>false), 0xA3=>array('keyword'=>'FALSE', 'indent'=>0, 'special'=>false), 0xA4=>array('keyword'=>'FN', 'indent'=>0, 'special'=>false), 0xA5=>array('keyword'=>'GET', 'indent'=>0, 'special'=>false), 0xA6=>array('keyword'=>'INKEY', 'indent'=>0, 'special'=>false), 0xA7=>array('keyword'=>'INSTR(', 'indent'=>0, 'special'=>false), 0xA8=>array('keyword'=>'INT', 'indent'=>0, 'special'=>false), 0xA9=>array('keyword'=>'LEN', 'indent'=>0, 'special'=>false), 0xAA=>array('keyword'=>'LN', 'indent'=>0, 'special'=>false), 0xAB=>array('keyword'=>'LOG', 'indent'=>0, 'special'=>false), 0xAC=>array('keyword'=>'NOT', 'indent'=>0, 'special'=>false), 0xAD=>array('keyword'=>'OPENUP', 'indent'=>0, 'special'=>false), 0xAE=>array('keyword'=>'OPENOUT', 'indent'=>0, 'special'=>false), 0xAF=>array('keyword'=>'PI', 'indent'=>0, 'special'=>false), 0xB0=>array('keyword'=>'POINT(', 'indent'=>0, 'special'=>false), 0xB1=>array('keyword'=>'POS', 'indent'=>0, 'special'=>false), 0xB2=>array('keyword'=>'RAD', 'indent'=>0, 'special'=>false), 0xB3=>array('keyword'=>'RND', 'indent'=>0, 'special'=>false), 0xB4=>array('keyword'=>'SGN', 'indent'=>0, 'special'=>false), 0xB5=>array('keyword'=>'SIN', 'indent'=>0, 'special'=>false), 0xB6=>array('keyword'=>'SQR', 'indent'=>0, 'special'=>false), 0xB7=>array('keyword'=>'TAN', 'indent'=>0, 'special'=>false), 0xB8=>array('keyword'=>'TO', 'indent'=>0, 'special'=>false), 0xB9=>array('keyword'=>'TRUE', 'indent'=>0, 'special'=>false), 0xBA=>array('keyword'=>'USR', 'indent'=>0, 'special'=>false), 0xBB=>array('keyword'=>'VAL', 'indent'=>0, 'special'=>false), 0xBC=>array('keyword'=>'VPOS', 'indent'=>0, 'special'=>false), 0xBD=>array('keyword'=>'CHR$', 'indent'=>0, 'special'=>false), 0xBE=>array('keyword'=>'GET$', 'indent'=>0, 'special'=>false), 0xBF=>array('keyword'=>'INKEY$', 'indent'=>0, 'special'=>false), 0xC0=>array('keyword'=>'LEFT$(', 'indent'=>0, 'special'=>false), 0xC1=>array('keyword'=>'MID$(', 'indent'=>0, 'special'=>false), 0xC2=>array('keyword'=>'RIGHT$(', 'indent'=>0, 'special'=>false), 0xC3=>array('keyword'=>'STR$', 'indent'=>0, 'special'=>false), 0xC4=>array('keyword'=>'STRING$(', 'indent'=>0, 'special'=>false), 0xC5=>array('keyword'=>'EOF', 'indent'=>0, 'special'=>false), 0xC6=>array('keyword'=>'SUM', 'indent'=>0, 'special'=>false), 0xC7=>array('keyword'=>'WHILE', 'indent'=>1, 'special'=>false), 0xC8=>array('keyword'=>'CASE', 'indent'=>1, 'special'=>false), // 0xC9=>array('keyword'=>'WHEN', 'indent'=>1, 'special'=>false), 0xC9=>array('keyword'=>'WHEN', 'indent'=>0, 'special'=>false), 0xCA=>array('keyword'=>'OF', 'indent'=>0, 'special'=>false), // 0xCB=>array('keyword'=>'ENDCASE', 'indent'=>-2, 'special'=>false), 0xCB=>array('keyword'=>'ENDCASE', 'indent'=>-1, 'special'=>false), 0xCC=>array('keyword'=>'OTHERWISE', 'indent'=>0, 'special'=>false), 0xCD=>array('keyword'=>'ENDIF', 'indent'=>-1, 'special'=>false), 0xCE=>array('keyword'=>'ENDWHILE', 'indent'=>-1, 'special'=>false), 0xCF=>array('keyword'=>'PTR', 'indent'=>0, 'special'=>false), 0xD0=>array('keyword'=>'PAGE', 'indent'=>0, 'special'=>false), 0xD1=>array('keyword'=>'TIME', 'indent'=>0, 'special'=>false), 0xD2=>array('keyword'=>'LOMEM', 'indent'=>0, 'special'=>false), 0xD3=>array('keyword'=>'HIMEM', 'indent'=>0, 'special'=>false), 0xD4=>array('keyword'=>'SOUND', 'indent'=>0, 'special'=>false), 0xD5=>array('keyword'=>'BPUT', 'indent'=>0, 'special'=>false), 0xD6=>array('keyword'=>'CALL', 'indent'=>0, 'special'=>false), 0xD7=>array('keyword'=>'CHAIN', 'indent'=>0, 'special'=>false), 0xD8=>array('keyword'=>'CLEAR', 'indent'=>0, 'special'=>false), 0xD9=>array('keyword'=>'CLOSE', 'indent'=>0, 'special'=>false), 0xDA=>array('keyword'=>'CLG', 'indent'=>0, 'special'=>false), 0xDB=>array('keyword'=>'CLS', 'indent'=>0, 'special'=>false), 0xDC=>array('keyword'=>'DATA', 'indent'=>0, 'special'=>false), 0xDD=>array('keyword'=>'DEF', 'indent'=>0, 'special'=>true), 0xDE=>array('keyword'=>'DIM', 'indent'=>0, 'special'=>false), 0xDF=>array('keyword'=>'DRAW', 'indent'=>0, 'special'=>false), 0xE0=>array('keyword'=>'END', 'indent'=>0, 'special'=>false), 0xE1=>array('keyword'=>'ENDPROC', 'indent'=>0, 'special'=>false), 0xE2=>array('keyword'=>'ENVELOPE', 'indent'=>0, 'special'=>false), 0xE3=>array('keyword'=>'FOR', 'indent'=>1, 'special'=>false), 0xE4=>array('keyword'=>'GOSUB', 'indent'=>0, 'special'=>false), 0xE5=>array('keyword'=>'GOTO', 'indent'=>0, 'special'=>false), 0xE6=>array('keyword'=>'GCOL', 'indent'=>0, 'special'=>false), 0xE7=>array('keyword'=>'IF', 'indent'=>0, 'special'=>false), 0xE8=>array('keyword'=>'INPUT', 'indent'=>0, 'special'=>false), 0xE9=>array('keyword'=>'LET', 'indent'=>0, 'special'=>false), 0xEA=>array('keyword'=>'LOCAL', 'indent'=>0, 'special'=>false), 0xEB=>array('keyword'=>'MODE', 'indent'=>0, 'special'=>false), 0xEC=>array('keyword'=>'MOVE', 'indent'=>0, 'special'=>false), 0xED=>array('keyword'=>'NEXT', 'indent'=>-1, 'special'=>false), 0xEE=>array('keyword'=>'ON', 'indent'=>0, 'special'=>false), 0xEF=>array('keyword'=>'VDU', 'indent'=>0, 'special'=>false), 0xF0=>array('keyword'=>'PLOT', 'indent'=>0, 'special'=>false), 0xF1=>array('keyword'=>'PRINT', 'indent'=>0, 'special'=>false), 0xF2=>array('keyword'=>'PROC', 'indent'=>0, 'special'=>false), 0xF3=>array('keyword'=>'READ', 'indent'=>0, 'special'=>false), 0xF4=>array('keyword'=>'REM', 'indent'=>0, 'special'=>false), 0xF5=>array('keyword'=>'REPEAT', 'indent'=>1, 'special'=>false), 0xF6=>array('keyword'=>'REPORT', 'indent'=>0, 'special'=>false), 0xF7=>array('keyword'=>'RESTORE', 'indent'=>0, 'special'=>false), 0xF8=>array('keyword'=>'RETURN', 'indent'=>0, 'special'=>false), 0xF9=>array('keyword'=>'RUN', 'indent'=>0, 'special'=>false), 0xFA=>array('keyword'=>'STOP', 'indent'=>0, 'special'=>false), 0xFB=>array('keyword'=>'COLOUR', 'indent'=>0, 'special'=>false), 0xFC=>array('keyword'=>'TRACE', 'indent'=>0, 'special'=>false), 0xFD=>array('keyword'=>'UNTIL', 'indent'=>-1, 'special'=>false), 0xFE=>array('keyword'=>'WIDTH', 'indent'=>0, 'special'=>false), 0xFF=>array('keyword'=>'OSCLI', 'indent'=>0, 'special'=>false), 0x01=>array('keyword'=>'CIRCLE', 'indent'=>0, 'special'=>false), 0x02=>array('keyword'=>'ELLIPSE', 'indent'=>0, 'special'=>false), 0x03=>array('keyword'=>'FILL', 'indent'=>0, 'special'=>false), 0x04=>array('keyword'=>'MOUSE', 'indent'=>0, 'special'=>false), 0x05=>array('keyword'=>'ORIGIN', 'indent'=>0, 'special'=>false), 0x06=>array('keyword'=>'QUIT', 'indent'=>0, 'special'=>false), 0x07=>array('keyword'=>'RECTANGLE', 'indent'=>0, 'special'=>false), 0x08=>array('keyword'=>'SWAP', 'indent'=>0, 'special'=>false), 0x09=>array('keyword'=>'SYS', 'indent'=>0, 'special'=>false), 0x0A=>array('keyword'=>'TINT', 'indent'=>0, 'special'=>false), 0x0B=>array('keyword'=>'WAIT', 'indent'=>0, 'special'=>false), 0x0C=>array('keyword'=>'INSTALL', 'indent'=>0, 'special'=>false), 0x0E=>array('keyword'=>'PRIVATE', 'indent'=>0, 'special'=>false), 0x0F=>array('keyword'=>'BY', 'indent'=>0, 'special'=>false), 0x10=>array('keyword'=>'EXIT', 'indent'=>0, 'special'=>false), // TODO: add immediate tokens 18-1F 0x100=>array('keyword'=>'SUM', 'indent'=>0, 'special'=>false), 0x101=>array('keyword'=>'BEAT', 'indent'=>0, 'special'=>false), 0x102=>array('keyword'=>'ASK', 'indent'=>0, 'special'=>false), 0x103=>array('keyword'=>'ANSWER', 'indent'=>0, 'special'=>false), 0x104=>array('keyword'=>'SFOPENIN', 'indent'=>0, 'special'=>false), 0x105=>array('keyword'=>'SFOPENOUT', 'indent'=>0, 'special'=>false), 0x106=>array('keyword'=>'SFOPENUP', 'indent'=>0, 'special'=>false), 0x107=>array('keyword'=>'SFNAME$', 'indent'=>0, 'special'=>false), 0x108=>array('keyword'=>'MENU', 'indent'=>0, 'special'=>false), 0x120=>array('keyword'=>'APPEND', 'indent'=>0, 'special'=>false), 0x121=>array('keyword'=>'AUTO', 'indent'=>0, 'special'=>false), 0x122=>array('keyword'=>'CRUNCH', 'indent'=>0, 'special'=>false), 0x123=>array('keyword'=>'DELETE', 'indent'=>0, 'special'=>false), 0x124=>array('keyword'=>'EDIT', 'indent'=>0, 'special'=>false), 0x125=>array('keyword'=>'HELP', 'indent'=>0, 'special'=>false), 0x126=>array('keyword'=>'LIST', 'indent'=>0, 'special'=>false), 0x127=>array('keyword'=>'LOAD', 'indent'=>0, 'special'=>false), 0x128=>array('keyword'=>'LVAR', 'indent'=>0, 'special'=>false), 0x129=>array('keyword'=>'NEW', 'indent'=>0, 'special'=>false), 0x12A=>array('keyword'=>'OLD', 'indent'=>0, 'special'=>false), 0x12B=>array('keyword'=>'RENUMBER', 'indent'=>0, 'special'=>false), 0x12C=>array('keyword'=>'SAVE', 'indent'=>0, 'special'=>false), 0x12D=>array('keyword'=>'TEXTLOAD', 'indent'=>0, 'special'=>false), 0x12E=>array('keyword'=>'TEXTSAVE', 'indent'=>0, 'special'=>false), 0x12F=>array('keyword'=>'TWIN', 'indent'=>0, 'special'=>false), 0x130=>array('keyword'=>'TWINO', 'indent'=>0, 'special'=>false), 0x131=>array('keyword'=>'INSTALL', 'indent'=>0, 'special'=>false), 0x140=>array('keyword'=>'CASE', 'indent'=>1, 'special'=>false), 0x141=>array('keyword'=>'CIRCLE', 'indent'=>0, 'special'=>false), 0x142=>array('keyword'=>'FILL', 'indent'=>0, 'special'=>false), 0x143=>array('keyword'=>'ORIGIN', 'indent'=>0, 'special'=>false), 0x144=>array('keyword'=>'POINT', 'indent'=>0, 'special'=>false), 0x145=>array('keyword'=>'RECTANGLE', 'indent'=>0, 'special'=>false), 0x146=>array('keyword'=>'SWAP', 'indent'=>0, 'special'=>false), 0x147=>array('keyword'=>'WHILE', 'indent'=>1, 'special'=>false), 0x148=>array('keyword'=>'WAIT', 'indent'=>0, 'special'=>false), 0x149=>array('keyword'=>'MOUSE', 'indent'=>0, 'special'=>false), 0x14A=>array('keyword'=>'QUIT', 'indent'=>0, 'special'=>false), 0x14B=>array('keyword'=>'SYS', 'indent'=>0, 'special'=>false), 0x14C=>array('keyword'=>'INSTALL', 'indent'=>0, 'special'=>false), 0x14D=>array('keyword'=>'LIBRARY', 'indent'=>0, 'special'=>false), 0x14E=>array('keyword'=>'TINT', 'indent'=>0, 'special'=>false), 0x14F=>array('keyword'=>'ELLIPSE', 'indent'=>0, 'special'=>false), 0x150=>array('keyword'=>'BEATS', 'indent'=>0, 'special'=>false), 0x151=>array('keyword'=>'TEMPO', 'indent'=>0, 'special'=>false), 0x152=>array('keyword'=>'VOICES', 'indent'=>0, 'special'=>false), 0x153=>array('keyword'=>'VOICE', 'indent'=>0, 'special'=>false), 0x154=>array('keyword'=>'STEREO', 'indent'=>0, 'special'=>false), 0x155=>array('keyword'=>'OVERLAY', 'indent'=>0, 'special'=>false), 0x156=>array('keyword'=>'MANDEL', 'indent'=>0, 'special'=>false), 0x157=>array('keyword'=>'PRIVATE', 'indent'=>0, 'special'=>false), 0x158=>array('keyword'=>'EXIT', 'indent'=>0, 'special'=>false), ); } function detokenise($data, $source_file, $settings = null) { if (!$settings) $settings = bbcbasic::get_detokeniser_settings('text'); $result = ''; $token_to_keyword_map = bbcbasic::get_token_to_keyword_map(); // Examine file to determine format $i = 1; $basic80 = false; // Initially assume Acorn BASIC $line_length = unpack('C', $data[0]); $line_length = $line_length[1]; if ($line_length != 13) { $basic80 = true; // If first byte <> 13, must be Russell BASIC line length $i = 0; } else { // If first byte = 13, could be Acorn or 1/256 chance could be Russell line length $line_length = unpack('C', $data[3]); // Look for Acorn line length or first byte of Russell line $line_length = $line_length[1]; $line_length = unpack('C', $data[$line_length]); $line_length = $line_length[1]; if ($line_length != 13) { // If length doesn't points to a , 65535/65536 chance it is Russell BASIC $basic80 = true; // Close enough. :) $i = 0; } } $indent = 0; $in_assembly = false; $data_length = strlen($data); for ($i = $i; $i < $data_length; ++$i) { if ($basic80) { // len, lo, hi, text, cr $line_length = unpack('C', $data[$i++]); $line_number = unpack('v', substr($data, $i, 2)); $i += 2; $line_length = $line_length[1]; $line_number = $line_number[1]; } else { // hi, lo, len, text, cr $line_length = unpack('C', $data[$i++]); $line_number = unpack('C', $data[$i++]); $line_length = $line_length[1]; $line_number = $line_number[1]; $line_number = $line_number + 256 * $line_length; $line_length = unpack('C', $data[$i++]); $line_length = $line_length[1]; } if ($line_length == 0 || $line_number == 0xFFFF) break; // # End-of-file. $result .= $settings['line_prefix']; $line_number_string = ''; if ($line_number != 0) { $line_number_string = $line_number; } if ($settings['indent_line_numbers']) { $line_number_indent = str_repeat($settings['html_entities'] ? ' ' : ' ', 5 - strlen($line_number_string)); $result .= $line_number_indent; } $result .= $settings['line_number_prefix']; $result .= $line_number_string; $result .= $settings['line_number_suffix']; $working_line = ''; $old_indent = $indent; $adjust = 0; if ($in_assembly) $working_line .= $settings['assembly_prefix']; $start_of_line = true; for ($j = 0; $j < $line_length - 4; ++$j, ++$i) { $token = $data[$i]; $token_byte = unpack('C', $token); $token_byte = $token_byte[1]; if ($token == '"') { $working_line .= $settings['string_prefix']; $in_string = false; $iO = $i; $jO = $j; $chars_found = -1; while ($j < $line_length - 4) { if ($data[$i] == '"') { $in_string ^= true; } $working_line .= bbcbasic::decode_char($data[$i]); ++$chars_found; if (!$in_string) { break; } ++$i; ++$j; } $i = $iO + $chars_found; $j = $jO + $chars_found; $working_line .= $settings['string_suffix']; $start_of_line = false; } else if ($start_of_line && $token == '*') { $working_line .= $settings['star_command_prefix']; for (; $j < $line_length - 4; ++$j, ++$i) { $working_line .= bbcbasic::decode_char($data[$i]); } --$i; --$j; $working_line .= $settings['star_command_suffix']; $start_of_line = false; } else if ($token_byte == 0xF4) { $working_line .= $settings['comment_prefix']; $working_line .= 'REM'; ++$i; ++$j; for (; $j < $line_length - 4; ++$j, ++$i) { $working_line .= bbcbasic::decode_char($data[$i]); } --$i; --$j; $working_line .= $settings['comment_suffix']; $start_of_line = false; } else if ($token == '[' && !$in_assembly) { $working_line .= $settings['assembly_prefix']; $working_line .= '['; $in_assembly = true; $start_of_line = false; } else if ($token == ']' && $in_assembly) { $working_line .= ']'; $working_line .= $settings['assembly_suffix']; $in_assembly = false; $start_of_line = false; } else if ($token == ';' && $in_assembly) { $working_line .= $settings['comment_prefix']; $working_line .= $token; ++$i; ++$j; for (; $j < $line_length - 4; ++$j, ++$i) { $working_line .= bbcbasic::decode_char($data[$i]); } --$i; --$j; $working_line .= $settings['comment_suffix']; $start_of_line = false; } else if ($token == ':') { $working_line .= $token; $start_of_line = true; } else { if ($token_byte >= 0xC6 && $token_byte <= 0xC8) { # two-byte tokens $eln = unpack('C', substr($data, $i + 1, 1)); if ($eln[1] >= 0x8E && $eln[1] <= 0xAF) { $token_byte = ($eln[1] - 0x8E + 0x100 + ($token_byte - 0xC6)*32); $i++; $line_length--; } } if ($token_byte == 0xCC) { # RENUMBER, ELSE, OTHERWISE if (!$basic80) $token_byte = 0x8B; } if ($token_byte == 0xCC || $token_byte == 0x7F) { # OTHERWISE $indent = $old_indent - 1; $adjust = 1; } if ($token_byte == 0xC8) { # LOAD or CASE if (!$basic80) $token_byte = 0x127; } if ($token_byte == 0xCD) { # SAVE or ENDIF $eln = unpack('C', substr($data, $i + 1, 1)); if ($eln[1] >= 0x20) $token_byte = 0x12C; } if ($token_byte == 0x8B) { # ELSE $eln = unpack('C', substr($data, $i + 1, 1)); if ($eln[1] == 0x0D) { $indent = $old_indent - 1; $adjust = 1; } } if ($token_byte == 0x8C) { # THEN $eln = unpack('C', substr($data, $i + 1, 1)); if ($eln[1] != 0x0D) --$indent; # Single-line IF } if (array_key_exists($token_byte, $token_to_keyword_map)) { $keyword = $token_to_keyword_map[$token_byte]; if ($keyword['keyword'] == '$LINE$') { $eln = unpack('C3', substr($data, $i + 1, 3)); $encoded_line_number = ((($eln[1] ^ 0x54) & 0x30) << 2) | ((($eln[1] ^ 0x54) & 0x0C) << 12) | ($eln[2] & 0x3F) | (($eln[3] & 0x3F) << 8); $working_line .= $encoded_line_number; $i += 3; $j += 3; } else { $working_line .= $keyword['special'] ? $settings['special_keyword_prefix'] : $settings['keyword_prefix']; $keyword_name = $settings['html_entities'] ? htmlspecialchars($keyword['keyword'], ENT_QUOTES) : $keyword['keyword']; $ends_with_paren = (substr($keyword_name, -1) == '('); if ($ends_with_paren) { $working_line .= substr($keyword_name, 0, -1); } else { $working_line .= $keyword_name; } $working_line .= $keyword['special'] ? $settings['special_keyword_suffix'] : $settings['keyword_suffix']; if ($ends_with_paren) { $working_line .= '('; } $indent += $keyword['indent']; } $start_of_line = false; } else { if ($token == ' ') { $working_line .= ' '; } else { $working_line .= $settings['html_entities'] ? htmlspecialchars($token, ENT_QUOTES) : $token; $start_of_line = false; } } } } if ($in_assembly) $working_line .= $settings['assembly_suffix']; $indent_amount = ($indent > $old_indent ? $old_indent : $indent); for ($indent_i = 0; $indent_i < $indent_amount; ++$indent_i) { $result .= $settings['indent_string']; } $indent = $indent + $adjust; $result .= $working_line; $result .= $settings['line_suffix']; } return $result; } } ?>