/usr/lib/mc/extfs.d/hp48+ is in mc 3:4.8.19-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | #!/bin/sh
#
# Written by Christofer Edvardsen <ce@earthling.net>, Feb 1998
#
# This script makes it possible to view and copy files to/from a hp48
# (tested with a HP48G and the emulator x48)
#
# To use the hp48 external filesystem:
# - read the relevant parts of your HP48 manual
# - install kermit
# - connect the HP48 to your computer or start x48
# - below change the line which reflects the serial device you use
# - configure your HP48 (<left shift> - i/o - iopar):
# port: wire
# baud: 9600
# transfer format: binary (fast transfers) or
# ascii (editable on the pc)
# - start the server on the HP48: <left shift> - i/o - srvr - serve
# or the shortcut <right shift> - <right arrow>
# - on MC's commandline enter "cd hp48://"
#
# Make sure you have kermit installed and that it's using the right serial
# device by changing /dev/ttyXX on the next line
AWK=awk
KERMIT=${MC_TEST_EXTFS_LIST_CMD:-"kermit -l /dev/ttyS1 -b 9600"}
NOW=`date +"%m-%d-%Y %H:%M"`
hp48_cmd()
{
$KERMIT -C "SET EXIT WARNING OFF,REMOTE $1,QUIT"
}
hp48_cd()
{
(echo SET EXIT WARNING OFF;echo REMOTE HOST HOME
for HP48_DIR in `echo "$1" | tr '/' ' '`;do
if [ "x$HP48_DIR" != "x." ];then echo REMOTE HOST "$HP48_DIR"; fi
done
echo QUIT)| $KERMIT -B >/dev/null
}
#
# Parses the reply to the DIRECTORY command.
#
# Here's an example reply (taken from [1][2]):
#
# { HOME } 105617
# STRAY 185.5 Directory 29225
# YEN 30.5 Program 53391
# JYTLIGHT 21848.5 String 62692
# IOPAR 37.5 List 61074
#
# The meaning of the fields (according to [3][4]):
#
# { Current_directory } Free_space
# Object_name Object_size_bytes Object_type Object_CRC
# ...
#
# [1] http://newarea48.tripod.com/kermit.html
# [2] http://www.hpmuseum.org/forum/thread-4684.html
# [3] https://groups.google.com/d/msg/comp.sys.hp48/bYTCu9K3k20/YWQfF--W3EEJ
# [4] http://www.columbia.edu/kermit/hp48.html (also has a link to the HP's user manual).
#
hp48_parser()
{
HP48_DIRS=
read -r INPUT
while [ "x$INPUT" != "xEOF" ]
do
set -- $INPUT
obj_name=$1
obj_size=$2
obj_type=$3
obj_size=`echo $obj_size | $AWK '{ print int($0) }'` # Truncates floats to ints; anything else to "0".
if [ "$obj_size" != "0" ]; then # Skips the 1st reply line (purportedly there aren't zero-size files b/c, according to resource [4], the size is "including name").
case "$obj_type" in
Directory)
HP48_DIRS="$HP48_DIRS $obj_name"
printf "%crwxr-xr-x 1 %-8d %-8d %8d %s %s\n" 'd' \
0 0 $obj_size "$NOW" "$HP48_CDIR/$obj_name"
;;
*)
printf "%crw-r--r-- 1 %-8d %-8d %8d %s %s\n" '-' \
0 0 $obj_size "$NOW" "$HP48_CDIR/$obj_name"
;;
esac
fi
read -r INPUT
done
for HP48_DIR in $HP48_DIRS;
do
HP48_PDIR="$HP48_CDIR"
HP48_CDIR="$HP48_CDIR/$HP48_DIR"; hp48_cmd "HOST $HP48_DIR" >/dev/null
hp48_list
HP48_CDIR="$HP48_PDIR"; hp48_cmd "HOST UPDIR" >/dev/null
done
}
hp48_list()
{
# It's hard to see why this "EOF" thing is needed. The loop above can be changed to "while read -r obj_name ...". @TODO.
{ hp48_cmd "DIRECTORY"; echo; echo EOF; } | hp48_parser
}
# override any locale for dates
LC_ALL=C
export LC_ALL
case "$1" in
list) HP48_CDIR=
hp48_cmd "HOST HOME" >/dev/null
hp48_list
exit 0;;
copyout)
cd "`dirname "$4"`"
hp48_cd "`dirname "$3"`"
$KERMIT -B -g "`basename "$3"`" -a "$4" >/dev/null
exit 0;;
copyin)
cd "`dirname "$4"`"
hp48_cd "`dirname "$3"`"
$KERMIT -B -s "$4" -a "`basename "$3"`" >/dev/null
exit 0;;
esac
exit 1
|