function decodeLength($fd, $length, &$json, $level = 0) { $pad = str_pad("", $level * 4, " "); $rest = 0; while ($rest + 5 < $length) { $type = readByte($fd); $nlen = readByte($fd); $dlen = readInt($fd, 4); $name = readString($fd, $nlen); $rest += 6 + $nlen + $dlen; if ($type == 1 || $type == 5) { $subj = array(); decodeLength($fd, $dlen, $subj, $level + 1); if ($name == "") { $json[] = $subj; } else { $json[$name] = $subj; } //echo "$pad$type $nlen $dlen $name\n"; continue; } if ($type == 2) { $number = readNumber($fd, $dlen); if ($name == "") { $json[] = $number; } else { $json[$name] = $number; } //echo "$pad$type $nlen $dlen $name => " . gmp_strval($number) . "\n"; continue; } if ($type == 3) { $data = readString($fd, $dlen); if ($name == "") { $json[] = $data; } else { $json[$name] = $data; } //echo "$pad$type $nlen $dlen $name => $data\n"; continue; } $data = readString($fd, $dlen); $dump = ""; for ($inx = 0; $inx < strlen($data); $inx++) { $dump .= ord($data[$inx]) . " "; } echo "=========================={$type} {$nlen} {$dlen} {$name} {$dump}\n"; exit(0); } }
/** * Show numered menu and return user choice */ function showMenu($itemsRef) { $functionsRef = array(); print "\n"; $i = 0; foreach ($itemsRef as $key => $value) { $i++; print $i . ' ' . $key . "\n"; $functionsRef[$i] = $value; } $i++; print $i . " Exit\n"; $functionsRef[$i] = 'exitOk'; $choice = readNumber("Your choice ({$i})"); if (!$choice || !isset($functionsRef[$choice])) { $function = $functionsRef[$i]; } else { $function = $functionsRef[$choice]; } $function(); }