mirror of
https://github.com/thewesker/RASCSI.git
synced 2025-12-23 22:01:09 -05:00
261 lines
9.8 KiB
PHP
261 lines
9.8 KiB
PHP
<!-- PHP source code for controlling the RaSCSI - 68kmla edition with a web interface. -->
|
|
<!-- Copyright (c) 2020 akuker -->
|
|
<!-- Distributed under the BSD-3 Clause License -->
|
|
|
|
<!-- Note: the origina rascsi-php project was under MIT license.-->
|
|
|
|
<?php
|
|
|
|
$DEBUG_ENABLE=0;
|
|
$FILE_PATH='/home/pi/images';
|
|
// Limit the maximum upload file size to 1GB
|
|
$MAX_UPLOAD_FILE_SIZE=1000000000;
|
|
$ALLOWED_FILE_TYPES=array('iso','hda');
|
|
|
|
function html_generate_header(){
|
|
echo ' <table width="100%" >'. PHP_EOL;
|
|
echo ' <tr style="background-color: black;">'. PHP_EOL;
|
|
echo ' <td style="background-color: black;"><a href=http://github.com/akuker/RASCSI><h1>RaSCSI - 68kmla Edition</h1></a></td>'. PHP_EOL;
|
|
echo ' <td style="background-color: black;">'. PHP_EOL;
|
|
echo ' <form action="rascsi.php">'. PHP_EOL;
|
|
echo ' <input type="submit" value="Go Home"/>'. PHP_EOL;
|
|
if($GLOBALS['DEBUG_ENABLE']){
|
|
echo ' <p style="color:#595959">Debug Timestamp: '.time().'</p>'. PHP_EOL;
|
|
}
|
|
echo ' </form>'. PHP_EOL;
|
|
echo ' </td>'. PHP_EOL;
|
|
echo ' </tr>'. PHP_EOL;
|
|
echo ' </table>'. PHP_EOL;
|
|
//echo(exec('whoami'));
|
|
}
|
|
|
|
function html_generate_image_file_select_list(){
|
|
$all_files = get_all_files();
|
|
foreach(explode(PHP_EOL, $all_files) as $this_file){
|
|
if(strpos($this_file, 'total') === 0){
|
|
continue;
|
|
}
|
|
$file_name = file_name_from_ls($this_file);
|
|
if(strlen($file_name) === 0){
|
|
continue;
|
|
}
|
|
// Ignore files that start with a .
|
|
if(strpos($file_name, '.') === 0){
|
|
continue;
|
|
}
|
|
|
|
echo '<option value="'.$file_name.'">'.$file_name.'</option>'.PHP_EOL;
|
|
}
|
|
}
|
|
|
|
|
|
function html_generate_scsi_id_select_list(){
|
|
echo '<select>'. PHP_EOL;
|
|
foreach(range(0,7) as $id){
|
|
echo '<option value="'.$id.'">'.$id.'</option>'. PHP_EOL;
|
|
}
|
|
echo '</select>'. PHP_EOL;
|
|
}
|
|
|
|
function html_generate_scsi_type_select_list(){
|
|
echo '<select name=type>'. PHP_EOL;
|
|
$options = array("Hard Disk", "CD-ROM", "Zip Drive", "Ethernet Tap", "Filesystem Bridge");
|
|
foreach($options as $type){
|
|
echo '<option value="'.$type.'">'.$type.'</option>'. PHP_EOL;
|
|
}
|
|
echo '</select>'. PHP_EOL;
|
|
}
|
|
|
|
function html_generate_warning($message){
|
|
echo ' <table width="100%" >'. PHP_EOL;
|
|
echo ' <tr style="background-color: red;">'. PHP_EOL;
|
|
echo ' <td style="background-color: red;">'. PHP_EOL;
|
|
echo ' <font size=+2>'.$message.'</font>'. PHP_EOL;
|
|
echo ' </td>'. PHP_EOL;
|
|
echo ' </tr>'. PHP_EOL;
|
|
echo ' </table>'. PHP_EOL;
|
|
}
|
|
|
|
function html_generate_success_message($message){
|
|
echo ' <table width="100%" >'. PHP_EOL;
|
|
echo ' <tr style="background-color: green;">'. PHP_EOL;
|
|
echo ' <td style="background-color: green;">'. PHP_EOL;
|
|
echo ' <font size=+2>Success</font>'. PHP_EOL;
|
|
echo ' </td>'. PHP_EOL;
|
|
echo ' </tr>'. PHP_EOL;
|
|
if(strlen($message) > 0){
|
|
echo ' <tr style="background-color: green;">'. PHP_EOL;
|
|
echo ' <td style="background-color: green;">'. PHP_EOL;
|
|
echo ' '.$message.PHP_EOL;
|
|
echo ' </td>'. PHP_EOL;
|
|
echo ' </tr>'. PHP_EOL;
|
|
}
|
|
echo ' </table>'. PHP_EOL;
|
|
}
|
|
|
|
function html_generate_ok_to_go_home(){
|
|
echo ' <form action="rascsi.php">'. PHP_EOL;
|
|
echo ' <input type="submit" value="OK"/>'. PHP_EOL;
|
|
echo ' </form>'. PHP_EOL;
|
|
}
|
|
|
|
|
|
function current_rascsi_config() {
|
|
$raw_output = shell_exec("/usr/local/bin/rasctl -l");
|
|
$rasctl_lines = explode(PHP_EOL, $raw_output);
|
|
|
|
echo ' <br>'. PHP_EOL;
|
|
echo ' <h2>Current RaSCSI Configuration</h2>'. PHP_EOL;
|
|
echo ' <table border="black">'. PHP_EOL;
|
|
echo ' <tr>'. PHP_EOL;
|
|
echo ' <td><b>SCSI ID</b></td>'. PHP_EOL;
|
|
echo ' <td><b>Type</b></td>'. PHP_EOL;
|
|
echo ' <td><b>File</b></td>'. PHP_EOL;
|
|
echo ' <td><b>File Ops</b></td>'. PHP_EOL;
|
|
echo ' <td><b>Device Ops</b></td>'. PHP_EOL;
|
|
echo ' </tr>'. PHP_EOL;
|
|
|
|
$scsi_ids = array();
|
|
|
|
foreach ($rasctl_lines as $current_line)
|
|
{
|
|
if(strlen($current_line) === 0){
|
|
continue;
|
|
}
|
|
if(strpos($current_line, '+----') === 0){
|
|
continue;
|
|
|
|
}
|
|
if(strpos($current_line, '| ID | UN') === 0){
|
|
continue;
|
|
}
|
|
$segments = explode("|", $current_line);
|
|
|
|
$id_config = array();
|
|
$id_config['id'] = trim($segments[1]);
|
|
$id_config['type'] = trim($segments[3]);
|
|
$id_config['file'] = trim($segments[4]);
|
|
|
|
$scsi_ids[$id_config['id']] = $id_config;
|
|
}
|
|
|
|
|
|
foreach (range(0,7) as $id){
|
|
echo ' <tr>'. PHP_EOL;
|
|
echo ' <td style="text-align:center">'.$id.'</td>'. PHP_EOL;
|
|
if(isset($scsi_ids[$id]))
|
|
{
|
|
echo ' <td style="text-align:center">'.$scsi_ids[$id]['type'].'</td>'. PHP_EOL;
|
|
if(strtolower($scsi_ids[$id]['file']) == "no media"){
|
|
echo ' <td>'.PHP_EOL;
|
|
echo ' <form action="rascsi_action.php" method="post">'. PHP_EOL;
|
|
echo ' <select name="file_name">'.PHP_EOL;
|
|
echo ' <option value="None">None</option>'.PHP_EOL;
|
|
html_generate_image_file_select_list();
|
|
echo ' </select>'.PHP_EOL;
|
|
echo ' <input type="hidden" name="command" value="insert_disk" />'. PHP_EOL;
|
|
echo ' <input type="hidden" name="id" value="'.$id.'" />'. PHP_EOL;
|
|
echo ' <input type="hidden" name="file" value="'.$scsi_ids[$id]['file'].'" />'. PHP_EOL;
|
|
echo ' </td><td>'.PHP_EOL;
|
|
echo ' <input type="submit" name="insert_disk" value="Insert" />'. PHP_EOL;
|
|
echo ' </form>'. PHP_EOL;
|
|
echo ' </td>'.PHP_EOL;
|
|
}
|
|
else{
|
|
// rascsi inserts "WRITEPROTECT" for the read-only drives. We want to display that differently.
|
|
echo ' <form action="rascsi_action.php" method="post">'. PHP_EOL;
|
|
echo ' <td>'.str_replace('(WRITEPROTECT)', '', $scsi_ids[$id]['file']). PHP_EOL;
|
|
echo ' </td><td>'.PHP_EOL;
|
|
if(strtolower($scsi_ids[$id]['type']) == 'sccd'){
|
|
echo ' <input type="hidden" name="command" value="eject_disk" />'. PHP_EOL;
|
|
echo ' <input type="hidden" name="id" value="'.$id.'" />'. PHP_EOL;
|
|
echo ' <input type="hidden" name="file" value="'.$scsi_ids[$id]['file'].'" />'. PHP_EOL;
|
|
echo ' <input type="submit" name="eject_disk" value="Eject" />'. PHP_EOL;
|
|
}
|
|
echo ' </td>'.PHP_EOL;
|
|
echo ' </form>'. PHP_EOL;
|
|
}
|
|
echo ' <td>'. PHP_EOL;
|
|
echo ' <form action="rascsi_action.php" method="post">'. PHP_EOL;
|
|
echo ' <input type="hidden" name="command" value="remove_device" />'. PHP_EOL;
|
|
echo ' <input type="hidden" name="id" value="'.$id.'" />'. PHP_EOL;
|
|
echo ' <input type="submit" name="remove_device" value="Disconnect" />'. PHP_EOL;
|
|
echo ' </form>'. PHP_EOL;
|
|
echo ' </td>'. PHP_EOL;
|
|
}
|
|
else
|
|
{
|
|
echo ' <td style="text-align:center">-</td>'. PHP_EOL;
|
|
echo ' <td>-</td>'. PHP_EOL;
|
|
echo ' <td></td>'. PHP_EOL;
|
|
echo ' <td>'. PHP_EOL;
|
|
echo ' <form action="rascsi_action.php" method="post">'. PHP_EOL;
|
|
echo ' <input type="hidden" name="command" value="connect_new_device" />'. PHP_EOL;
|
|
echo ' <input type="hidden" name="id" value="'.$id.'" />'. PHP_EOL;
|
|
echo ' <input type="submit" name="connect_new_device" value="Connect New" />'. PHP_EOL;
|
|
echo ' </form>'. PHP_EOL;
|
|
echo ' </td>'. PHP_EOL;
|
|
|
|
}
|
|
echo ' </form>'. PHP_EOL;
|
|
echo ' </tr>'. PHP_EOL;
|
|
}
|
|
echo '</table>'. PHP_EOL;
|
|
}
|
|
function get_all_files()
|
|
{
|
|
$raw_ls_output = shell_exec('ls --time-style="+\"%Y-%m-%d %H:%M:%S\"" -alh --quoting-style=c '.$GLOBALS['FILE_PATH']);
|
|
return $raw_ls_output;
|
|
}
|
|
|
|
function mod_date_from_ls($value){
|
|
$ls_pieces = explode("\"", $value);
|
|
if(count($ls_pieces)<1){
|
|
return "";
|
|
}
|
|
return $ls_pieces[1];
|
|
}
|
|
function file_name_from_ls($value){
|
|
$ls_pieces = explode("\"", $value);
|
|
if(count($ls_pieces) < 4){
|
|
return "";
|
|
}
|
|
return $ls_pieces[3];
|
|
}
|
|
function file_size_from_ls($value){
|
|
$ls_pieces = explode("\"", $value);
|
|
$file_props = preg_split("/\s+/", $ls_pieces[0]);
|
|
return $file_props[4];
|
|
}
|
|
function file_category_from_file_name($value){
|
|
if(strpos($value,".iso") > 0){
|
|
return "CD-ROM Image";
|
|
}
|
|
if(strpos($value,".hda") > 0){
|
|
return "Hard Disk Image";
|
|
}
|
|
return "Unknown type: " . $value;
|
|
}
|
|
|
|
|
|
|
|
function type_string_to_rasctl_type($typestr){
|
|
if(strcasecmp($typestr,"Hard Disk") == 0){
|
|
return "hd";
|
|
}
|
|
if(strcasecmp($typestr,"CD-ROM") == 0){
|
|
return "cd";
|
|
}
|
|
if(strcasecmp($typestr,"Zip Drive") == 0){
|
|
}
|
|
if(strcasecmp($typestr,"Filesystem bridge") == 0){
|
|
return "bridge";
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
|
|
|
|
?>
|