Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Apache
: 172.26.7.228 | : 3.137.221.114
Cant Read [ /etc/named.conf ]
5.6.40-24+ubuntu18.04.1+deb.sury.org+1
www-data
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
bin /
[ HOME SHELL ]
Name
Size
Permission
Action
X11
[ DIR ]
drwxr-xr-x
2to3-2.7
96
B
-rwxr-xr-x
NF
963
B
-rwxr-xr-x
VGAuthService
126.22
KB
-rwxr-xr-x
[
50.18
KB
-rwxr-xr-x
a2ping
99.98
KB
-rwxr-xr-x
a5toa4
1.07
KB
-rwxr-xr-x
aa-enabled
22.16
KB
-rwxr-xr-x
aa-exec
22.16
KB
-rwxr-xr-x
ab
54.18
KB
-rwxr-xr-x
aclocal
35.93
KB
-rwxr-xr-x
aclocal-1.15
35.93
KB
-rwxr-xr-x
acpi_listen
14.27
KB
-rwxr-xr-x
acyclic
10
KB
-rwxr-xr-x
add-apt-repository
7.24
KB
-rwxr-xr-x
addpart
22.08
KB
-rwxr-xr-x
addr2line
30.55
KB
-rwxr-xr-x
adhocfilelist
8.41
KB
-rwxr-xr-x
afm2afm
12.7
KB
-rwxr-xr-x
afm2pl
34.34
KB
-rwxr-xr-x
afm2tfm
48.73
KB
-rwxr-xr-x
aleph
527.5
KB
-rwxr-xr-x
allcm
3.4
KB
-rwxr-xr-x
allec
3.4
KB
-rwxr-xr-x
allneeded
903
B
-rwxr-xr-x
apport-bug
2.5
KB
-rwxr-xr-x
apport-cli
13.05
KB
-rwxr-xr-x
apport-collect
2.5
KB
-rwxr-xr-x
apport-unpack
1.81
KB
-rwxr-xr-x
apropos
46.98
KB
-rwxr-xr-x
apt
14.09
KB
-rwxr-xr-x
apt-add-repository
7.24
KB
-rwxr-xr-x
apt-cache
78.16
KB
-rwxr-xr-x
apt-cdrom
22.16
KB
-rwxr-xr-x
apt-config
22.09
KB
-rwxr-xr-x
apt-extracttemplates
22.16
KB
-rwxr-xr-x
apt-ftparchive
234.16
KB
-rwxr-xr-x
apt-get
42.16
KB
-rwxr-xr-x
apt-key
26.75
KB
-rwxr-xr-x
apt-mark
42.16
KB
-rwxr-xr-x
apt-sortpkgs
42.09
KB
-rwxr-xr-x
ar
58.24
KB
-rwxr-xr-x
arara
108
B
-rwxr-xr-x
arch
34.21
KB
-rwxr-xr-x
arlatex
9.74
KB
-rwxr-xr-x
as
895.98
KB
-rwxr-xr-x
at
50.26
KB
-rwsr-sr-x
atq
50.26
KB
-rwsr-sr-x
atrm
50.26
KB
-rwsr-sr-x
authorindex
19.98
KB
-rwxr-xr-x
autoconf
14.42
KB
-rwxr-xr-x
autoheader
8.34
KB
-rwxr-xr-x
autoinst
80.49
KB
-rwxr-xr-x
autom4te
31.91
KB
-rwxr-xr-x
automake
247.38
KB
-rwxr-xr-x
automake-1.15
247.38
KB
-rwxr-xr-x
automat-visualize3
402
B
-rwxr-xr-x
autopoint
25.97
KB
-rwxr-xr-x
autoreconf
20.67
KB
-rwxr-xr-x
autoscan
16.73
KB
-rwxr-xr-x
autosp
38.13
KB
-rwxr-xr-x
autoupdate
33.08
KB
-rwxr-xr-x
awk
642.65
KB
-rwxr-xr-x
aws
815
B
-rwxr-xr-x
aws_completer
1.11
KB
-rwxr-xr-x
b2sum
54.21
KB
-rwxr-xr-x
base32
38.18
KB
-rwxr-xr-x
base64
38.18
KB
-rwxr-xr-x
basename
34.18
KB
-rwxr-xr-x
bashbug
6.95
KB
-rwxr-xr-x
batch
152
B
-rwxr-xr-x
bc
90.7
KB
-rwxr-xr-x
bcomps
14.04
KB
-rwxr-xr-x
bibtex
118.08
KB
-rwxr-xr-x
bibtex.original
118.08
KB
-rwxr-xr-x
bibtex8
142.63
KB
-rwxr-xr-x
bibtexu
146.6
KB
-rwxr-xr-x
bootctl
34.13
KB
-rwxr-xr-x
browse
24.65
KB
-rwxr-xr-x
bsd-from
9.99
KB
-rwxr-xr-x
bsd-write
13.99
KB
-rwxr-sr-x
bundledoc
28.58
KB
-rwxr-xr-x
busctl
66.09
KB
-rwxr-xr-x
byobu
8.07
KB
-rwxr-xr-x
byobu-config
996
B
-rwxr-xr-x
byobu-ctrl-a
4.66
KB
-rwxr-xr-x
byobu-disable
1.26
KB
-rwxr-xr-x
byobu-disable-prompt
1.28
KB
-rwxr-xr-x
byobu-enable
1.15
KB
-rwxr-xr-x
byobu-enable-prompt
1.42
KB
-rwxr-xr-x
byobu-export
1.23
KB
-rwxr-xr-x
byobu-janitor
5.82
KB
-rwxr-xr-x
byobu-keybindings
1.47
KB
-rwxr-xr-x
byobu-launch
3.21
KB
-rwxr-xr-x
byobu-launcher
1.87
KB
-rwxr-xr-x
byobu-launcher-install
2.4
KB
-rwxr-xr-x
byobu-launcher-uninstall
1.52
KB
-rwxr-xr-x
byobu-layout
3.27
KB
-rwxr-xr-x
byobu-prompt
1.13
KB
-rwxr-xr-x
byobu-quiet
1.38
KB
-rwxr-xr-x
byobu-reconnect-sockets
3.22
KB
-rwxr-xr-x
byobu-screen
8.07
KB
-rwxr-xr-x
byobu-select-backend
1.42
KB
-rwxr-xr-x
byobu-select-profile
6.14
KB
-rwxr-xr-x
byobu-select-session
1012
B
-rwxr-xr-x
byobu-shell
1.56
KB
-rwxr-xr-x
byobu-silent
1.28
KB
-rwxr-xr-x
byobu-status
5.87
KB
-rwxr-xr-x
byobu-status-detail
1.18
KB
-rwxr-xr-x
byobu-tmux
8.07
KB
-rwxr-xr-x
byobu-ugraph
4.56
KB
-rwxr-xr-x
byobu-ulevel
11.71
KB
-rwxr-xr-x
c++
1022.94
KB
-rwxr-xr-x
c++filt
26.12
KB
-rwxr-xr-x
c89
428
B
-rwxr-xr-x
c89-gcc
428
B
-rwxr-xr-x
c99
454
B
-rwxr-xr-x
c99-gcc
454
B
-rwxr-xr-x
c_rehash
6.65
KB
-rwxr-xr-x
cachepic
7.79
KB
-rwxr-xr-x
cal
28.79
KB
-rwxr-xr-x
calendar
30.48
KB
-rwxr-xr-x
captoinfo
82.11
KB
-rwxr-xr-x
catchsegv
3.25
KB
-rwxr-xr-x
catman
38.46
KB
-rwxr-xr-x
cautious-launcher
853
B
-rwxr-xr-x
cc
1022.94
KB
-rwxr-xr-x
ccomps
22.04
KB
-rwxr-xr-x
certbot
385
B
-rwxr-xr-x
cftp3
380
B
-rwxr-xr-x
chacl
13.99
KB
-rwxr-xr-x
chage
70.13
KB
-rwxr-sr-x
chardet3
389
B
-rwxr-xr-x
chardetect3
389
B
-rwxr-xr-x
chattr
14
KB
-rwxr-xr-x
chcon
62.18
KB
-rwxr-xr-x
check-language-support
2.71
KB
-rwxr-xr-x
checkgid
5.99
KB
-rwxr-xr-x
checklistings
10.94
KB
-rwxr-xr-x
chfn
74.7
KB
-rwsr-xr-x
chrpath
18.26
KB
-rwxr-xr-x
chrt
30.08
KB
-rwxr-xr-x
chsh
43.48
KB
-rwsr-xr-x
circo
9.99
KB
-rwxr-xr-x
ckbcomp
146.33
KB
-rwxr-xr-x
ckeygen3
386
B
-rwxr-xr-x
cksum
34.18
KB
-rwxr-xr-x
clear
10
KB
-rwxr-xr-x
clear_console
10.07
KB
-rwxr-xr-x
cloud-id
396
B
-rwxr-xr-x
cloud-init
400
B
-rwxr-xr-x
cloud-init-per
2.06
KB
-rwxr-xr-x
cluster
555.3
KB
-rwxr-xr-x
cmp
46.09
KB
-rwxr-xr-x
codepage
13.99
KB
-rwxr-xr-x
col
9.99
KB
-rwxr-xr-x
col1
963
B
-rwxr-xr-x
col2
963
B
-rwxr-xr-x
col3
963
B
-rwxr-xr-x
col4
963
B
-rwxr-xr-x
col5
963
B
-rwxr-xr-x
col6
963
B
-rwxr-xr-x
col7
963
B
-rwxr-xr-x
col8
963
B
-rwxr-xr-x
col9
963
B
-rwxr-xr-x
colcrt
10
KB
-rwxr-xr-x
colrm
9.99
KB
-rwxr-xr-x
column
14.01
KB
-rwxr-xr-x
combinediff
46.58
KB
-rwxr-xr-x
comm
38.21
KB
-rwxr-xr-x
compose
17.74
KB
-rwxr-xr-x
composer
1.54
KB
-rwxr-xr-x
conch3
382
B
-rwxr-xr-x
corelist
12.53
KB
-rwxr-xr-x
cpan
7.96
KB
-rwxr-xr-x
cpan5.26-x86_64-linux-gnu
7.99
KB
-rwxr-xr-x
cpp
1022.94
KB
-rwxr-xr-x
cpp-7
1022.94
KB
-rwxr-xr-x
crc32
1.04
KB
-rwxr-xr-x
crontab
38.43
KB
-rwxr-sr-x
csplit
50.21
KB
-rwxr-xr-x
ctail
958
B
-rwxr-xr-x
ctan-o-mat
19.22
KB
-rwxr-xr-x
ctangle
46.38
KB
-rwxr-xr-x
ctanify
23.76
KB
-rwxr-xr-x
ctanupload
16.4
KB
-rwxr-xr-x
ctie
18.09
KB
-rwxr-xr-x
ctstat
22.35
KB
-rwxr-xr-x
curl
218.07
KB
-rwxr-xr-x
curl-config
5.94
KB
-rwxr-xr-x
cut
42.21
KB
-rwxr-xr-x
cweave
82.41
KB
-rwxr-xr-x
dbus-cleanup-sockets
9.98
KB
-rwxr-xr-x
dbus-daemon
231.04
KB
-rwxr-xr-x
dbus-monitor
21.99
KB
-rwxr-xr-x
dbus-run-session
9.98
KB
-rwxr-xr-x
dbus-send
25.98
KB
-rwxr-xr-x
dbus-update-activation-environ...
13.98
KB
-rwxr-xr-x
dbus-uuidgen
9.98
KB
-rwxr-xr-x
de-macro
33.35
KB
-rwxr-xr-x
deallocvt
10.07
KB
-rwxr-xr-x
deb-systemd-helper
19.67
KB
-rwxr-xr-x
deb-systemd-invoke
4.33
KB
-rwxr-xr-x
debconf
2.79
KB
-rwxr-xr-x
debconf-apt-progress
11.27
KB
-rwxr-xr-x
debconf-communicate
608
B
-rwxr-xr-x
debconf-copydb
1.68
KB
-rwxr-xr-x
debconf-escape
647
B
-rwxr-xr-x
debconf-gettextize
15.97
KB
-rwxr-xr-x
debconf-set-selections
2.87
KB
-rwxr-xr-x
debconf-show
1.78
KB
-rwxr-xr-x
debconf-updatepo
4.46
KB
-rwxr-xr-x
dehtmldiff
1.32
KB
-rwxr-xr-x
delpart
22.08
KB
-rwxr-xr-x
delv
40.86
KB
-rwxr-xr-x
depythontex
801
B
-rwxr-xr-x
depythontex3
275
B
-rwxr-xr-x
derb
22.57
KB
-rwxr-xr-x
detex
54
KB
-rwxr-xr-x
devnag
44.15
KB
-rwxr-xr-x
dh
28.43
KB
-rwxr-xr-x
dh-exec
14.27
KB
-rwxr-xr-x
dh_auto_build
1.35
KB
-rwxr-xr-x
dh_auto_clean
1.49
KB
-rwxr-xr-x
dh_auto_configure
1.6
KB
-rwxr-xr-x
dh_auto_install
2.77
KB
-rwxr-xr-x
dh_auto_test
1.63
KB
-rwxr-xr-x
dh_autoreconf
5.94
KB
-rwxr-xr-x
dh_autoreconf_clean
2.1
KB
-rwxr-xr-x
dh_autotools-dev_restoreconfig
1.79
KB
-rwxr-xr-x
dh_autotools-dev_updateconfig
1.81
KB
-rwxr-xr-x
dh_bash-completion
2.49
KB
-rwxr-xr-x
dh_bugfiles
3.57
KB
-rwxr-xr-x
dh_builddeb
4.96
KB
-rwxr-xr-x
dh_clean
4.89
KB
-rwxr-xr-x
dh_compress
7.05
KB
-rwxr-xr-x
dh_doxygen
4.13
KB
-rwxr-xr-x
dh_dwz
2.9
KB
-rwxr-xr-x
dh_fixperms
5.25
KB
-rwxr-xr-x
dh_gconf
2.62
KB
-rwxr-xr-x
dh_gencontrol
5.85
KB
-rwxr-xr-x
dh_icons
2.03
KB
-rwxr-xr-x
dh_install
11.22
KB
-rwxr-xr-x
dh_installcatalogs
3.23
KB
-rwxr-xr-x
dh_installchangelogs
6.08
KB
-rwxr-xr-x
dh_installcron
1.58
KB
-rwxr-xr-x
dh_installdeb
7.63
KB
-rwxr-xr-x
dh_installdebconf
3.2
KB
-rwxr-xr-x
dh_installdirs
1.95
KB
-rwxr-xr-x
dh_installdocs
14.66
KB
-rwxr-xr-x
dh_installemacsen
3.69
KB
-rwxr-xr-x
dh_installexamples
5.3
KB
-rwxr-xr-x
dh_installgsettings
2.18
KB
-rwxr-xr-x
dh_installifupdown
1.45
KB
-rwxr-xr-x
dh_installinfo
2.85
KB
-rwxr-xr-x
dh_installinit
13.3
KB
-rwxr-xr-x
dh_installlogcheck
1.92
KB
-rwxr-xr-x
dh_installlogrotate
1.12
KB
-rwxr-xr-x
dh_installman
11.04
KB
-rwxr-xr-x
dh_installmanpages
4.89
KB
-rwxr-xr-x
dh_installmenu
2.14
KB
-rwxr-xr-x
dh_installmime
1.29
KB
-rwxr-xr-x
dh_installmodules
2.62
KB
-rwxr-xr-x
dh_installpam
1.12
KB
-rwxr-xr-x
dh_installppp
1.37
KB
-rwxr-xr-x
dh_installsystemd
12.74
KB
-rwxr-xr-x
dh_installtex
17.97
KB
-rwxr-xr-x
dh_installudev
2.04
KB
-rwxr-xr-x
dh_installwm
3.05
KB
-rwxr-xr-x
dh_installxfonts
2.9
KB
-rwxr-xr-x
dh_installxmlcatalogs
9.22
KB
-rwxr-xr-x
dh_kubuntu_l10n_clean
959
B
-rwxr-xr-x
dh_kubuntu_l10n_generate
1.85
KB
-rwxr-xr-x
dh_link
4.23
KB
-rwxr-xr-x
dh_lintian
1.28
KB
-rwxr-xr-x
dh_listpackages
756
B
-rwxr-xr-x
dh_makeshlibs
9.01
KB
-rwxr-xr-x
dh_md5sums
2.99
KB
-rwxr-xr-x
dh_missing
5.99
KB
-rwxr-xr-x
dh_movefiles
4.69
KB
-rwxr-xr-x
dh_movelibkdeinit
4.46
KB
-rwxr-xr-x
dh_nodejs
943
B
-rwxr-xr-x
dh_perl
4.23
KB
-rwxr-xr-x
dh_perl_openssl
1.36
KB
-rwxr-xr-x
dh_prep
1.87
KB
-rwxr-xr-x
dh_python2
1.03
KB
-rwxr-xr-x
dh_qmlcdeps
3.22
KB
-rwxr-xr-x
dh_sameversiondep
17.95
KB
-rwxr-xr-x
dh_shlibdeps
6.13
KB
-rwxr-xr-x
dh_sodeps
3.38
KB
-rwxr-xr-x
dh_strip
13.94
KB
-rwxr-xr-x
dh_strip_nondeterminism
2.67
KB
-rwxr-xr-x
dh_systemd_enable
8.97
KB
-rwxr-xr-x
dh_systemd_start
8.31
KB
-rwxr-xr-x
dh_testdir
1.3
KB
-rwxr-xr-x
dh_testroot
1.91
KB
-rwxr-xr-x
dh_ucf
2.27
KB
-rwxr-xr-x
dh_update_autotools_config
1.84
KB
-rwxr-xr-x
dh_usrlocal
3.68
KB
-rwxr-xr-x
diff
142.34
KB
-rwxr-xr-x
diff3
62.21
KB
-rwxr-xr-x
diffimg
9.99
KB
-rwxr-xr-x
diffstat
42.11
KB
-rwxr-xr-x
dig
146.51
KB
-rwxr-xr-x
dijkstra
14.1
KB
-rwxr-xr-x
dircolors
46.19
KB
-rwxr-xr-x
dirmngr
533.55
KB
-rwxr-xr-x
dirmngr-client
106.76
KB
-rwxr-xr-x
dirname
30.18
KB
-rwxr-xr-x
disdvi
18.01
KB
-rwxr-xr-x
do-release-upgrade
6.77
KB
-rwxr-xr-x
dosepsbin
11.8
KB
-rwxr-xr-x
dot
9.99
KB
-rwxr-xr-x
dot2gxl
34.26
KB
-rwxr-xr-x
dot_builtins
10.1
KB
-rwxr-xr-x
dotty
2.04
KB
-rwxr-xr-x
doxygen
14.23
MB
-rwxr-xr-x
doxyindexer
622.23
KB
-rwxr-xr-x
doxysearch.cgi
46.16
KB
-rwxr-xr-x
dpkg
290.5
KB
-rwxr-xr-x
dpkg-architecture
12.55
KB
-rwxr-xr-x
dpkg-buildflags
7.39
KB
-rwxr-xr-x
dpkg-buildpackage
29.1
KB
-rwxr-xr-x
dpkg-checkbuilddeps
7.33
KB
-rwxr-xr-x
dpkg-deb
150.34
KB
-rwxr-xr-x
dpkg-distaddfile
2.72
KB
-rwxr-xr-x
dpkg-divert
138.41
KB
-rwxr-xr-x
dpkg-genbuildinfo
16.38
KB
-rwxr-xr-x
dpkg-genchanges
17.21
KB
-rwxr-xr-x
dpkg-gencontrol
13.73
KB
-rwxr-xr-x
dpkg-gensymbols
10.38
KB
-rwxr-xr-x
dpkg-maintscript-helper
18.58
KB
-rwxr-xr-x
dpkg-mergechangelogs
8.39
KB
-rwxr-xr-x
dpkg-name
6.63
KB
-rwxr-xr-x
dpkg-parsechangelog
4.33
KB
-rwxr-xr-x
dpkg-query
146.4
KB
-rwxr-xr-x
dpkg-scanpackages
8.23
KB
-rwxr-xr-x
dpkg-scansources
8.95
KB
-rwxr-xr-x
dpkg-shlibdeps
30.63
KB
-rwxr-xr-x
dpkg-source
22.75
KB
-rwxr-xr-x
dpkg-split
118.34
KB
-rwxr-xr-x
dpkg-statoverride
70.25
KB
-rwxr-xr-x
dpkg-trigger
66.26
KB
-rwxr-xr-x
dpkg-vendor
3.19
KB
-rwxr-xr-x
dt2dv
40.3
KB
-rwxr-xr-x
dtxgen
13.41
KB
-rwxr-xr-x
du
98.21
KB
-rwxr-xr-x
dumpkeys
166.52
KB
-rwxr-xr-x
dv2dt
19.54
KB
-rwxr-xr-x
dvi2fax
1.07
KB
-rwxr-xr-x
dvi2tty
58.59
KB
-rwxr-xr-x
dviasm
40.63
KB
-rwxr-xr-x
dvibook
26.69
KB
-rwxr-xr-x
dviconcat
26.78
KB
-rwxr-xr-x
dvicopy
62.09
KB
-rwxr-xr-x
dvihp
4.38
KB
-rwxr-xr-x
dviinfox
9.59
KB
-rwxr-xr-x
dvilj
54.51
KB
-rwxr-xr-x
dvilj2p
54.51
KB
-rwxr-xr-x
dvilj4
62.52
KB
-rwxr-xr-x
dvilj4l
62.52
KB
-rwxr-xr-x
dvilj6
62.52
KB
-rwxr-xr-x
dvilualatex
6.07
MB
-rwxr-xr-x
dviluatex
6.07
MB
-rwxr-xr-x
dvipdf
1023
B
-rwxr-xr-x
dvipdfm
751.77
KB
-rwxr-xr-x
dvipdfmx
751.77
KB
-rwxr-xr-x
dvipdft
2.63
KB
-rwxr-xr-x
dvipos
46.48
KB
-rwxr-xr-x
dvips
219.91
KB
-rwxr-xr-x
dvired
3.01
KB
-rwxr-xr-x
dviselect
26.69
KB
-rwxr-xr-x
dvisvgm
4.4
MB
-rwxr-xr-x
dvitodvi
30.72
KB
-rwxr-xr-x
dvitomp
787.71
KB
-rwxr-xr-x
dvitype
46.12
KB
-rwxr-xr-x
dwp
2.75
MB
-rwxr-xr-x
e2pall
2.66
KB
-rwxr-xr-x
eatmydata
2.74
KB
-rwxr-xr-x
ebb
751.77
KB
-rwxr-xr-x
ec2metadata
7.13
KB
-rwxr-xr-x
edgepaint
419.22
KB
-rwxr-xr-x
edit
17.74
KB
-rwxr-xr-x
editdiff
2.01
KB
-rwxr-xr-x
editor
240.11
KB
-rwxr-xr-x
eject
30.69
KB
-rwxr-xr-x
elfedit
30.45
KB
-rwxr-xr-x
enable-ec2-spot-hibernation
237
B
-rwxr-xr-x
enc2xs
41.17
KB
-rwxr-xr-x
encguess
2.99
KB
-rwxr-xr-x
env
34.18
KB
-rwxr-xr-x
envsubst
34.08
KB
-rwxr-xr-x
eps2eps
639
B
-rwxr-xr-x
epspdf
79.25
KB
-rwxr-xr-x
epspdftk
28.65
KB
-rwxr-xr-x
epstopdf
33.3
KB
-rwxr-xr-x
eptex
483.88
KB
-rwxr-xr-x
eqn
193.19
KB
-rwxr-xr-x
etex
806.43
KB
-rwxr-xr-x
euptex
490.24
KB
-rwxr-xr-x
ex
2.55
MB
-rwxr-xr-x
exceltex
18.53
KB
-rwxr-xr-x
expand
38.21
KB
-rwxr-xr-x
expiry
22.27
KB
-rwxr-sr-x
expr
46.18
KB
-rwxr-xr-x
extractbb
751.77
KB
-rwxr-xr-x
factor
74.21
KB
-rwxr-xr-x
fail2ban-client
1.39
KB
-rwxr-xr-x
fail2ban-python
4.32
MB
-rwxr-xr-x
fail2ban-regex
1.25
KB
-rwxr-xr-x
fail2ban-server
1.39
KB
-rwxr-xr-x
fail2ban-testcases
2.23
KB
-rwxr-xr-x
faillog
18.29
KB
-rwxr-xr-x
faked-sysv
26.11
KB
-rwxr-xr-x
faked-tcp
30.1
KB
-rwxr-xr-x
fakeroot
3.76
KB
-rwxr-xr-x
fakeroot-sysv
3.76
KB
-rwxr-xr-x
fakeroot-tcp
3.76
KB
-rwxr-xr-x
fallocate
26.08
KB
-rwxr-xr-x
fc-cache
14.07
KB
-rwxr-xr-x
fc-cat
14.07
KB
-rwxr-xr-x
fc-list
10.07
KB
-rwxr-xr-x
fc-match
10.07
KB
-rwxr-xr-x
fc-pattern
10.07
KB
-rwxr-xr-x
fc-query
10.07
KB
-rwxr-xr-x
fc-scan
10.07
KB
-rwxr-xr-x
fc-validate
10.07
KB
-rwxr-xr-x
fcgistarter
9.99
KB
-rwxr-xr-x
fdp
9.99
KB
-rwxr-xr-x
fftw-wisdom
39.94
KB
-rwxr-xr-x
fftw-wisdom-to-conf
2.23
KB
-rwxr-xr-x
fftwf-wisdom
39.94
KB
-rwxr-xr-x
fftwl-wisdom
39.94
KB
-rwxr-xr-x
fftwq-wisdom
39.94
KB
-rwxr-xr-x
fig4latex
4.52
KB
-rwxr-xr-x
file
22.26
KB
-rwxr-xr-x
filterdiff
47.15
KB
-rwxr-xr-x
find
232.5
KB
-rwxr-xr-x
findhyph
9.71
KB
-rwxr-xr-x
fixcvsdiff
1.83
KB
-rwxr-xr-x
flipdiff
46.58
KB
-rwxr-xr-x
flock
30.16
KB
-rwxr-xr-x
fmt
42.18
KB
-rwxr-xr-x
fmtutil
47.48
KB
-rwxr-xr-x
fmtutil-sys
929
B
-rwxr-xr-x
fmtutil-user
876
B
-rwxr-xr-x
fold
34.18
KB
-rwxr-xr-x
fontinst
552
B
-rwxr-xr-x
free
18.08
KB
-rwxr-xr-x
freetype-config
4.62
KB
-rwxr-xr-x
from
9.99
KB
-rwxr-xr-x
ftp
98.7
KB
-rwxr-xr-x
funzip
21.99
KB
-rwxr-xr-x
futurize
384
B
-rwxr-xr-x
g++
1022.94
KB
-rwxr-xr-x
g++-7
1022.94
KB
-rwxr-xr-x
gapplication
18.07
KB
-rwxr-xr-x
gawk
642.65
KB
-rwxr-xr-x
gc
14.04
KB
-rwxr-xr-x
gcc
1022.94
KB
-rwxr-xr-x
gcc-7
1022.94
KB
-rwxr-xr-x
gcc-ar
30.47
KB
-rwxr-xr-x
gcc-ar-7
30.47
KB
-rwxr-xr-x
gcc-nm
30.47
KB
-rwxr-xr-x
gcc-nm-7
30.47
KB
-rwxr-xr-x
gcc-ranlib
30.47
KB
-rwxr-xr-x
gcc-ranlib-7
30.47
KB
-rwxr-xr-x
gcov
616.09
KB
-rwxr-xr-x
gcov-7
616.09
KB
-rwxr-xr-x
gcov-dump
499.93
KB
-rwxr-xr-x
gcov-dump-7
499.93
KB
-rwxr-xr-x
gcov-tool
535.99
KB
-rwxr-xr-x
gcov-tool-7
535.99
KB
-rwxr-xr-x
gdbus
42.08
KB
-rwxr-xr-x
gdbus-codegen
2
KB
-rwxr-xr-x
gdk-pixbuf-csource
10.01
KB
-rwxr-xr-x
gdk-pixbuf-pixdata
9.99
KB
-rwxr-xr-x
gdk-pixbuf-query-loaders
13.99
KB
-rwxr-xr-x
genbrk
14.48
KB
-rwxr-xr-x
gencat
22.22
KB
-rwxr-xr-x
gencfu
10.43
KB
-rwxr-xr-x
gencnval
22.32
KB
-rwxr-xr-x
gendict
22.55
KB
-rwxr-xr-x
genrb
147.64
KB
-rwxr-xr-x
geqn
193.19
KB
-rwxr-xr-x
getconf
30.13
KB
-rwxr-xr-x
getent
30.49
KB
-rwxr-xr-x
getfacl
22.62
KB
-rwxr-xr-x
getkeycodes
10.07
KB
-rwxr-xr-x
getmapdl
21.37
KB
-rwxr-xr-x
getopt
14.07
KB
-rwxr-xr-x
gettext
34.08
KB
-rwxr-xr-x
gettext.sh
4.52
KB
-rwxr-xr-x
gettextize
42.73
KB
-rwxr-xr-x
gftodvi
50.09
KB
-rwxr-xr-x
gftopk
26.08
KB
-rwxr-xr-x
gftype
26.09
KB
-rwxr-xr-x
ghostscript
9.99
KB
-rwxr-xr-x
ginstall-info
43.09
KB
-rwxr-xr-x
gio
78.09
KB
-rwxr-xr-x
gio-querymodules
9.99
KB
-rwxr-xr-x
git
2.27
MB
-rwxr-xr-x
git-receive-pack
2.27
MB
-rwxr-xr-x
git-shell
1.26
MB
-rwxr-xr-x
git-upload-archive
2.27
MB
-rwxr-xr-x
git-upload-pack
1.27
MB
-rwxr-xr-x
glib-compile-resources
38.07
KB
-rwxr-xr-x
glib-compile-schemas
42.07
KB
-rwxr-xr-x
glib-genmarshal
39.97
KB
-rwxr-xr-x
glib-gettextize
5.25
KB
-rwxr-xr-x
glib-mkenums
27.15
KB
-rwxr-xr-x
gml2gv
38.27
KB
-rwxr-xr-x
gobject-query
10
KB
-rwxr-xr-x
gold
2.97
MB
-rwxr-xr-x
gpasswd
74.05
KB
-rwsr-xr-x
gpg
997.6
KB
-rwxr-xr-x
gpg-agent
392.7
KB
-rwxr-xr-x
gpg-connect-agent
154.85
KB
-rwxr-xr-x
gpg-wks-server
187.02
KB
-rwxr-xr-x
gpg-zip
3.36
KB
-rwxr-xr-x
gpgconf
166.32
KB
-rwxr-xr-x
gpgparsemail
26.07
KB
-rwxr-xr-x
gpgsm
491.09
KB
-rwxr-xr-x
gpgsplit
78.45
KB
-rwxr-xr-x
gpgv
427.02
KB
-rwxr-xr-x
gpic
204.03
KB
-rwxr-xr-x
gprof
99.73
KB
-rwxr-xr-x
graphml2gv
18.08
KB
-rwxr-xr-x
gregorio
614.55
KB
-rwxr-xr-x
grepdiff
47.15
KB
-rwxr-xr-x
gresource
17.99
KB
-rwxr-xr-x
groff
105.31
KB
-rwxr-xr-x
grog
2.71
KB
-rwxr-xr-x
grops
165.72
KB
-rwxr-xr-x
grotty
121.34
KB
-rwxr-xr-x
groups
34.18
KB
-rwxr-xr-x
growpart
21.37
KB
-rwxr-xr-x
grub-editenv
239.93
KB
-rwxr-xr-x
grub-file
659.79
KB
-rwxr-xr-x
grub-fstest
789.65
KB
-rwxr-xr-x
grub-glue-efi
235.77
KB
-rwxr-xr-x
grub-kbdcomp
1.64
KB
-rwxr-xr-x
grub-menulst2cfg
216.04
KB
-rwxr-xr-x
grub-mkfont
264.34
KB
-rwxr-xr-x
grub-mkimage
328.84
KB
-rwxr-xr-x
grub-mklayout
240.09
KB
-rwxr-xr-x
grub-mknetdir
373.41
KB
-rwxr-xr-x
grub-mkpasswd-pbkdf2
244.12
KB
-rwxr-xr-x
grub-mkrelpath
235.49
KB
-rwxr-xr-x
grub-mkrescue
822.23
KB
-rwxr-xr-x
grub-mkstandalone
449.74
KB
-rwxr-xr-x
grub-mount
608.21
KB
-rwxr-xr-x
grub-ntldr-img
38.16
KB
-rwxr-xr-x
grub-render-label
676.16
KB
-rwxr-xr-x
grub-script-check
259.62
KB
-rwxr-xr-x
grub-syslinux2cfg
624.68
KB
-rwxr-xr-x
gs
9.99
KB
-rwxr-xr-x
gsbj
350
B
-rwxr-xr-x
gsdj
352
B
-rwxr-xr-x
gsdj500
352
B
-rwxr-xr-x
gsettings
26.07
KB
-rwxr-xr-x
gsftopk
30.19
KB
-rwxr-xr-x
gslj
353
B
-rwxr-xr-x
gslp
350
B
-rwxr-xr-x
gsnd
277
B
-rwxr-xr-x
gtbl
126.2
KB
-rwxr-xr-x
gtester
22.01
KB
-rwxr-xr-x
gtester-report
18.39
KB
-rwxr-xr-x
gtk-update-icon-cache
30.47
KB
-rwxr-xr-x
gv2gml
18.04
KB
-rwxr-xr-x
gv2gxl
34.26
KB
-rwxr-xr-x
gvcolor
44.26
KB
-rwxr-xr-x
gvgen
22
KB
-rwxr-xr-x
gvmap
559.3
KB
-rwxr-xr-x
gvmap.sh
2.13
KB
-rwxr-xr-x
gvpack
22.23
KB
-rwxr-xr-x
gvpr
5.99
KB
-rwxr-xr-x
gxl2dot
34.26
KB
-rwxr-xr-x
gxl2gv
34.26
KB
-rwxr-xr-x
gyp
276
B
-rwxr-xr-x
h2ph
28.54
KB
-rwxr-xr-x
h2xs
59.44
KB
-rwxr-xr-x
hd
26.1
KB
-rwxr-xr-x
head
42.21
KB
-rwxr-xr-x
helpztags
2.46
KB
-rwxr-xr-x
hexdump
26.1
KB
-rwxr-xr-x
hibagent
21.65
KB
-rwxr-xr-x
host
126.66
KB
-rwxr-xr-x
hostid
30.18
KB
-rwxr-xr-x
hostnamectl
18.07
KB
-rwxr-xr-x
htcacheclean
30
KB
-rwxr-xr-x
htdbm
21.99
KB
-rwxr-xr-x
htdigest
13.99
KB
-rwxr-xr-x
htop
180.68
KB
-rwxr-xr-x
htpasswd
17.99
KB
-rwxr-xr-x
hwe-support-status
10.58
KB
-rwxr-xr-x
i386
18.34
KB
-rwxr-xr-x
iconv
62.25
KB
-rwxr-xr-x
icuinfo
10.32
KB
-rwxr-xr-x
id
42.21
KB
-rwxr-xr-x
ifnames
4.03
KB
-rwxr-xr-x
igawk
3.11
KB
-rwxr-xr-x
info
245.72
KB
-rwxr-xr-x
infobrowser
245.72
KB
-rwxr-xr-x
infocmp
58.07
KB
-rwxr-xr-x
infotocap
82.11
KB
-rwxr-xr-x
inimf
319.62
KB
-rwxr-xr-x
initex
355.66
KB
-rwxr-xr-x
install
142.25
KB
-rwxr-xr-x
install-info
43.09
KB
-rwxr-xr-x
installfont-tl
18.39
KB
-rwxr-xr-x
instmodsh
4.27
KB
-rwxr-xr-x
interdiff
46.58
KB
-rwxr-xr-x
ionice
26.08
KB
-rwxr-xr-x
ipcmk
26.14
KB
-rwxr-xr-x
ipcrm
26.08
KB
-rwxr-xr-x
ipcs
50.08
KB
-rwxr-xr-x
iptables-xml
92.74
KB
-rwxr-xr-x
ischroot
10.04
KB
-rwxr-xr-x
iscsiadm
381.95
KB
-rwxr-xr-x
join
46.21
KB
-rwxr-xr-x
js
17.52
MB
-rwxr-xr-x
json_pp
3.87
KB
-rwxr-xr-x
jsondiff
1018
B
-rwxr-xr-x
jsonlint-php
2.61
KB
-rwxr-xr-x
jsonpatch
3.58
KB
-rwxr-xr-x
jsonpointer
1.31
KB
-rwxr-xr-x
jsonschema
398
B
-rwxr-xr-x
kbdinfo
14.07
KB
-rwxr-xr-x
kbxutil
158.69
KB
-rwxr-xr-x
keep-one-running
3.51
KB
-rwxr-xr-x
kernel-install
4.4
KB
-rwxr-xr-x
killall
23.15
KB
-rwxr-xr-x
kpseaccess
9.99
KB
-rwxr-xr-x
kpsepath
3.38
KB
-rwxr-xr-x
kpsereadlink
9.99
KB
-rwxr-xr-x
kpsestat
9.99
KB
-rwxr-xr-x
kpsetool
3.38
KB
-rwxr-xr-x
kpsewhere
1.41
KB
-rwxr-xr-x
kpsewhich
22.87
KB
-rwxr-xr-x
kpsexpand
3.38
KB
-rwxr-xr-x
landscape-sysinfo
624
B
-rwxr-xr-x
last
42.08
KB
-rwxr-xr-x
lastb
42.08
KB
-rwxr-xr-x
lastlog
18.07
KB
-rwxr-xr-x
latex
806.43
KB
-rwxr-xr-x
latex-git-log
11.11
KB
-rwxr-xr-x
latex-papersize
9.74
KB
-rwxr-xr-x
latex-wordcount
3.1
KB
-rwxr-xr-x
latex2man
54.37
KB
-rwxr-xr-x
latex2nemeth
131
B
-rwxr-xr-x
latexdef
31.71
KB
-rwxr-xr-x
latexfileversion
3.1
KB
-rwxr-xr-x
latexindent
2.64
KB
-rwxr-xr-x
latexpand
11.31
KB
-rwxr-xr-x
lcf
7.6
KB
-rwxr-xr-x
ld
1.7
MB
-rwxr-xr-x
ld.bfd
1.7
MB
-rwxr-xr-x
ld.gold
2.97
MB
-rwxr-xr-x
ldd
5.29
KB
-rwxr-xr-x
lefty
293.57
KB
-rwxr-xr-x
less
166.76
KB
-rwxr-xr-x
lessecho
10.02
KB
-rwxr-xr-x
lessfile
8.36
KB
-rwxr-xr-x
lesskey
19.39
KB
-rwxr-xr-x
lesspipe
8.36
KB
-rwxr-xr-x
letsencrypt
385
B
-rwxr-xr-x
lexgrog
90.57
KB
-rwxr-xr-x
libnetcfg
15.41
KB
-rwxr-xr-x
libpng-config
2.41
KB
-rwxr-xr-x
libpng16-config
2.41
KB
-rwxr-xr-x
libtool
363.59
KB
-rwxr-xr-x
libtoolize
126.16
KB
-rwxr-xr-x
libwmf-config
2.3
KB
-rwxr-xr-x
link
30.18
KB
-rwxr-xr-x
lintian
10.59
KB
-rwxr-xr-x
lintian-info
10.59
KB
-rwxr-xr-x
lintian-lab-tool
10.59
KB
-rwxr-xr-x
linux-boot-prober
1.54
KB
-rwxr-xr-x
linux-check-removal
3.99
KB
-rwxr-xr-x
linux-update-symlinks
6.17
KB
-rwxr-xr-x
linux-version
2.63
KB
-rwxr-xr-x
linux32
18.34
KB
-rwxr-xr-x
linux64
18.34
KB
-rwxr-xr-x
listings-ext
12.08
KB
-rwxr-xr-x
lneato
1.51
KB
-rwxr-xr-x
lnstat
22.35
KB
-rwxr-xr-x
loadkeys
206.57
KB
-rwxr-xr-x
loadunimap
26.13
KB
-rwxr-xr-x
locale
49.41
KB
-rwxr-xr-x
locale-check
10
KB
-rwxr-xr-x
localectl
22.07
KB
-rwxr-xr-x
localedef
330.8
KB
-rwxr-xr-x
locate
42.08
KB
-rwxr-sr-x
logger
46.67
KB
-rwxr-xr-x
logname
30.18
KB
-rwxr-xr-x
logresolve
10
KB
-rwxr-xr-x
look
10.23
KB
-rwxr-xr-x
lorder
2.82
KB
-rwxr-xr-x
lsattr
10
KB
-rwxr-xr-x
lsb_release
3.55
KB
-rwxr-xr-x
lscpu
70.08
KB
-rwxr-xr-x
lsdiff
47.15
KB
-rwxr-xr-x
lshw
670.95
KB
-rwxr-xr-x
lsinitramfs
625
B
-rwxr-xr-x
lsipc
70.08
KB
-rwxr-xr-x
lslocks
34.41
KB
-rwxr-xr-x
lslogins
62.08
KB
-rwxr-xr-x
lsmem
42.08
KB
-rwxr-xr-x
lsns
38.08
KB
-rwxr-xr-x
lsof
159.4
KB
-rwxr-xr-x
lspci
79.67
KB
-rwxr-xr-x
lspgpot
1.06
KB
-rwxr-xr-x
lsusb
114.43
KB
-rwxr-xr-x
ltrace
325.21
KB
-rwxr-xr-x
ltxfileinfo
13.46
KB
-rwxr-xr-x
ltximg
33.89
KB
-rwxr-xr-x
luajittex
5.97
MB
-rwxr-xr-x
lualatex
6.07
MB
-rwxr-xr-x
luatex
6.07
MB
-rwxr-xr-x
lwarpmk
15.93
KB
-rwxr-xr-x
lxc
9.8
MB
-rwxr-xr-x
lxcfs
18.07
KB
-rwxr-xr-x
lxd
105
B
-rwxr-xr-x
lzcat
74.36
KB
-rwxr-xr-x
lzcmp
6.48
KB
-rwxr-xr-x
lzdiff
6.48
KB
-rwxr-xr-x
lzegrep
5.76
KB
-rwxr-xr-x
lzfgrep
5.76
KB
-rwxr-xr-x
lzgrep
5.76
KB
-rwxr-xr-x
lzless
1.76
KB
-rwxr-xr-x
lzma
74.36
KB
-rwxr-xr-x
lzmainfo
10.07
KB
-rwxr-xr-x
lzmore
2.11
KB
-rwxr-xr-x
m4
154.3
KB
-rwxr-xr-x
mag
10
KB
-rwxr-xr-x
make
217.57
KB
-rwxr-xr-x
make-first-existing-target
4.79
KB
-rwxr-xr-x
make4ht
1.99
KB
-rwxr-xr-x
makeconv
46.8
KB
-rwxr-xr-x
makedtx
24.53
KB
-rwxr-xr-x
makeglossaries
41.96
KB
-rwxr-xr-x
makeglossaries-lite
11.11
KB
-rwxr-xr-x
makeindex
80.29
KB
-rwxr-xr-x
makejvf
34
KB
-rwxr-xr-x
man
104.5
KB
-rwxr-xr-x
mandb
126.72
KB
-rwxr-xr-x
manifest
1.9
KB
-rwxr-xr-x
manpath
30.47
KB
-rwxr-xr-x
mapscrn
22.13
KB
-rwxr-xr-x
match_parens
6.59
KB
-rwxr-xr-x
mathspic
125.53
KB
-rwxr-xr-x
mawk
122.48
KB
-rwxr-xr-x
mcookie
30.14
KB
-rwxr-xr-x
md5sum
42.21
KB
-rwxr-xr-x
md5sum.textutils
42.21
KB
-rwxr-xr-x
mdig
42.13
KB
-rwxr-xr-x
mendex
112.83
KB
-rwxr-xr-x
mesg
10.07
KB
-rwxr-xr-x
mf
319.62
KB
-rwxr-xr-x
mf-nowin
311.25
KB
-rwxr-xr-x
mf2pt1
37.23
KB
-rwxr-xr-x
mflua
375.62
KB
-rwxr-xr-x
mflua-nowin
375.62
KB
-rwxr-xr-x
mfluajit
375.62
KB
-rwxr-xr-x
mfluajit-nowin
375.62
KB
-rwxr-xr-x
mfplain
787.71
KB
-rwxr-xr-x
mft
46.11
KB
-rwxr-xr-x
migrate-pubring-from-classic-g...
2.14
KB
-rwxr-xr-x
mingle
419.45
KB
-rwxr-xr-x
miniterm
34.28
KB
-rwxr-xr-x
mk_modmap
15.78
KB
-rwxr-xr-x
mkfifo
62.18
KB
-rwxr-xr-x
mkindex
947
B
-rwxr-xr-x
mkjobtexmf
23.61
KB
-rwxr-xr-x
mkocp
171
B
-rwxr-xr-x
mkofm
85
B
-rwxr-xr-x
mkpasswd
18.07
KB
-rwxr-xr-x
mkpic
25.11
KB
-rwxr-xr-x
mksquashfs
184.99
KB
-rwxr-xr-x
mkt1font
33.44
KB
-rwxr-xr-x
mktexfmt
47.48
KB
-rwxr-xr-x
mktexlsr
7.59
KB
-rwxr-xr-x
mktexmf
3.87
KB
-rwxr-xr-x
mktexpk
9.59
KB
-rwxr-xr-x
mktextfm
4.93
KB
-rwxr-xr-x
mlocate
42.08
KB
-rwxr-sr-x
mm2gv
94.19
KB
-rwxr-xr-x
mpost
787.71
KB
-rwxr-xr-x
mptopdf
4.05
KB
-rwxr-xr-x
msgattrib
22.07
KB
-rwxr-xr-x
msgcat
22.07
KB
-rwxr-xr-x
msgcmp
22.08
KB
-rwxr-xr-x
msgcomm
22.07
KB
-rwxr-xr-x
msgconv
18.07
KB
-rwxr-xr-x
msgen
18.07
KB
-rwxr-xr-x
msgexec
14.07
KB
-rwxr-xr-x
msgfilter
26.07
KB
-rwxr-xr-x
msgfmt
78.27
KB
-rwxr-xr-x
msggrep
34.19
KB
-rwxr-xr-x
msginit
62.41
KB
-rwxr-xr-x
msgmerge
66.45
KB
-rwxr-xr-x
msgunfmt
30.09
KB
-rwxr-xr-x
msguniq
18.07
KB
-rwxr-xr-x
msxlint
14.02
KB
-rwxr-xr-x
mtr
71.94
KB
-rwxr-xr-x
mtr-packet
25.99
KB
-rwxr-xr-x
mtrace
6.34
KB
-rwxr-xr-x
myisam_ftdump
3.75
MB
-rwxr-xr-x
mysql
3.81
MB
-rwxr-xr-x
mysql_config_editor
3.46
MB
-rwxr-xr-x
mysql_embedded
21.17
MB
-rwxr-xr-x
mysqladmin
3.71
MB
-rwxr-xr-x
mysqlanalyze
3.73
MB
-rwxr-xr-x
mysqlcheck
3.73
MB
-rwxr-xr-x
mysqldump
3.78
MB
-rwxr-xr-x
mysqldumpslow
7.66
KB
-rwxr-xr-x
mysqlimport
3.7
MB
-rwxr-xr-x
mysqloptimize
3.73
MB
-rwxr-xr-x
mysqlpump
4.17
MB
-rwxr-xr-x
mysqlrepair
3.73
MB
-rwxr-xr-x
mysqlreport
38.1
KB
-rwxr-xr-x
mysqlshow
3.7
MB
-rwxr-xr-x
mysqlslap
3.71
MB
-rwxr-xr-x
namei
26.08
KB
-rwxr-xr-x
nawk
642.65
KB
-rwxr-xr-x
ncal
28.79
KB
-rwxr-xr-x
neato
9.99
KB
-rwxr-xr-x
neqn
908
B
-rwxr-xr-x
netkit-ftp
98.7
KB
-rwxr-xr-x
networkd-dispatcher
19.53
KB
-rwxr-xr-x
newgidmap
36.27
KB
-rwsr-xr-x
newgrp
39.4
KB
-rwsr-xr-x
newuidmap
36.27
KB
-rwsr-xr-x
ngettext
34.08
KB
-rwxr-xr-x
nice
34.18
KB
-rwxr-xr-x
nl
42.27
KB
-rwxr-xr-x
nm
43.27
KB
-rwxr-xr-x
node
17.52
MB
-rwxr-xr-x
node-gyp
3.51
KB
-rwxr-xr-x
nodejs
17.52
MB
-rwxr-xr-x
nohup
34.18
KB
-rwxr-xr-x
nop
10.04
KB
-rwxr-xr-x
npm
1.95
KB
-rwxr-xr-x
nproc
34.18
KB
-rwxr-xr-x
nroff
3.25
KB
-rwxr-xr-x
nsenter
30.28
KB
-rwxr-xr-x
nslookup
130.51
KB
-rwxr-xr-x
nstat
26.07
KB
-rwxr-xr-x
nsupdate
66.02
KB
-rwxr-xr-x
ntfsdecrypt
46.12
KB
-rwxr-xr-x
numfmt
62.24
KB
-rwxr-xr-x
objcopy
230.2
KB
-rwxr-xr-x
objdump
404.55
KB
-rwxr-xr-x
od
66.21
KB
-rwxr-xr-x
odvicopy
66.09
KB
-rwxr-xr-x
odvitype
46.12
KB
-rwxr-xr-x
ofm2opl
124.7
KB
-rwxr-xr-x
omfonts
124.7
KB
-rwxr-xr-x
on_ac_power
2.16
KB
-rwxr-xr-x
openssl
706.98
KB
-rwxr-xr-x
opl2ofm
124.7
KB
-rwxr-xr-x
os-prober
4.44
KB
-rwxr-xr-x
osage
9.99
KB
-rwxr-xr-x
ot2kpx
24.65
KB
-rwxr-xr-x
otangle
42.09
KB
-rwxr-xr-x
otp2ocp
34
KB
-rwxr-xr-x
outocp
14.3
KB
-rwxr-xr-x
ovf2ovp
124.7
KB
-rwxr-xr-x
ovp2ovf
124.7
KB
-rwxr-xr-x
pager
166.76
KB
-rwxr-xr-x
pango-view
50.27
KB
-rwxr-xr-x
paperconf
9.99
KB
-rwxr-xr-x
parsechangelog
8.63
KB
-rwxr-xr-x
partx
86.08
KB
-rwxr-xr-x
passwd
58.24
KB
-rwsr-xr-x
paste
34.21
KB
-rwxr-xr-x
pastebinit
16.25
KB
-rwxr-xr-x
pasteurize
388
B
-rwxr-xr-x
patch
178.37
KB
-rwxr-xr-x
patchwork
9.99
KB
-rwxr-xr-x
patgen
38.07
KB
-rwxr-xr-x
pathchk
34.18
KB
-rwxr-xr-x
pbget
2.51
KB
-rwxr-xr-x
pbibtex
122.09
KB
-rwxr-xr-x
pbput
2.51
KB
-rwxr-xr-x
pbputs
2.51
KB
-rwxr-xr-x
pbr
152
B
-rwxr-xr-x
pcimodules
14.13
KB
-rwxr-xr-x
pcre-config
2.29
KB
-rwxr-xr-x
pdb
45.02
KB
-rwxr-xr-x
pdb2.7
45.02
KB
-rwxr-xr-x
pdb3
59.87
KB
-rwxr-xr-x
pdb3.6
59.87
KB
-rwxr-xr-x
pdf180
256
B
-rwxr-xr-x
pdf270
279
B
-rwxr-xr-x
pdf2dsc
698
B
-rwxr-xr-x
pdf2ps
909
B
-rwxr-xr-x
pdf90
275
B
-rwxr-xr-x
pdfannotextractor
11.5
KB
-rwxr-xr-x
pdfatfi
6.29
KB
-rwxr-xr-x
pdfbook
1.04
KB
-rwxr-xr-x
pdfbook2
10.52
KB
-rwxr-xr-x
pdfclose
13.99
KB
-rwxr-xr-x
pdfcrop
37.62
KB
-rwxr-xr-x
pdfetex
806.43
KB
-rwxr-xr-x
pdfflip
265
B
-rwxr-xr-x
pdfjam
39.19
KB
-rwxr-xr-x
pdfjam-pocketmod
1.53
KB
-rwxr-xr-x
pdfjam-slides3up
858
B
-rwxr-xr-x
pdfjam-slides6up
813
B
-rwxr-xr-x
pdfjoin
759
B
-rwxr-xr-x
pdflatex
806.43
KB
-rwxr-xr-x
pdflatexpicscale
7.27
KB
-rwxr-xr-x
pdfnup
924
B
-rwxr-xr-x
pdfopen
22.07
KB
-rwxr-xr-x
pdfpun
1.55
KB
-rwxr-xr-x
pdftex
806.43
KB
-rwxr-xr-x
pdftosrc
14.1
KB
-rwxr-xr-x
pdfxup
26.57
KB
-rwxr-xr-x
pdvitomp
795.76
KB
-rwxr-xr-x
pdvitype
54.13
KB
-rwxr-xr-x
peekfd
10.2
KB
-rwxr-xr-x
perl
2
MB
-rwxr-xr-x
perl5.26-x86_64-linux-gnu
9.98
KB
-rwxr-xr-x
perl5.26.1
2
MB
-rwxr-xr-x
perlbug
44.78
KB
-rwxr-xr-x
perldoc
125
B
-rwxr-xr-x
perlivp
10.61
KB
-rwxr-xr-x
perltex
14.57
KB
-rwxr-xr-x
perlthanks
44.78
KB
-rwxr-xr-x
pf2afm
498
B
-rwxr-xr-x
pfarrei
4.88
KB
-rwxr-xr-x
pfb2pfa
9.99
KB
-rwxr-xr-x
pfbtopfa
516
B
-rwxr-xr-x
pftp
98.7
KB
-rwxr-xr-x
pgrep
26.09
KB
-rwxr-xr-x
phar
14.48
KB
-rwxr-xr-x
phar.phar
14.48
KB
-rwxr-xr-x
phar.phar5.6
14.48
KB
-rwxr-xr-x
phar5.6
14.48
KB
-rwxr-xr-x
php
4.29
MB
-rwxr-xr-x
php-cgi
4.26
MB
-rwxr-xr-x
php-cgi5.6
4.26
MB
-rwxr-xr-x
php5.6
4.29
MB
-rwxr-xr-x
pic
204.03
KB
-rwxr-xr-x
pico
240.11
KB
-rwxr-xr-x
piconv
8.16
KB
-rwxr-xr-x
pinentry
62.49
KB
-rwxr-xr-x
pinentry-curses
62.49
KB
-rwxr-xr-x
pinky
38.21
KB
-rwxr-xr-x
pk2bm
13.99
KB
-rwxr-xr-x
pkaction
13.99
KB
-rwxr-xr-x
pkcheck
18.07
KB
-rwxr-xr-x
pkexec
21.99
KB
-rwsr-xr-x
pkfix
26.76
KB
-rwxr-xr-x
pkfix-helper
55.29
KB
-rwxr-xr-x
pkg-config
50.09
KB
-rwxr-xr-x
pkgdata
47.26
KB
-rwxr-xr-x
pkgkde-debs2symbols
4.39
KB
-rwxr-xr-x
pkgkde-gensymbols
2.11
KB
-rwxr-xr-x
pkgkde-getbuildlogs
10.41
KB
-rwxr-xr-x
pkgkde-git
5.73
KB
-rwxr-xr-x
pkgkde-mark-private-symbols
2.84
KB
-rwxr-xr-x
pkgkde-mark-qt5-private-symbol...
3.13
KB
-rwxr-xr-x
pkgkde-override-sc-dev-latest
10.5
KB
-rwxr-xr-x
pkgkde-symbolshelper
21.42
KB
-rwxr-xr-x
pkgkde-vcs
5.73
KB
-rwxr-xr-x
pkill
26.09
KB
-rwxr-xr-x
pktogf
26.08
KB
-rwxr-xr-x
pkttyagent
13.99
KB
-rwxr-xr-x
pktype
18.07
KB
-rwxr-xr-x
pl2pm
4.43
KB
-rwxr-xr-x
pldd
14.22
KB
-rwxr-xr-x
pltotf
50.08
KB
-rwxr-xr-x
pmap
30.09
KB
-rwxr-xr-x
pmpost
795.76
KB
-rwxr-xr-x
pmxab
542.37
KB
-rwxr-xr-x
pn2pdf
4.14
KB
-rwxr-xr-x
po2debconf
8.47
KB
-rwxr-xr-x
pod2html
4.04
KB
-rwxr-xr-x
pod2man
14.73
KB
-rwxr-xr-x
pod2text
10.72
KB
-rwxr-xr-x
pod2usage
3.86
KB
-rwxr-xr-x
podchecker
3.57
KB
-rwxr-xr-x
podebconf-display-po
12.67
KB
-rwxr-xr-x
podebconf-report-po
31.76
KB
-rwxr-xr-x
podselect
2.47
KB
-rwxr-xr-x
pollinate
8.54
KB
-rwxr-xr-x
pooltype
14.06
KB
-rwxr-xr-x
pphs
404
B
-rwxr-xr-x
ppltotf
62.09
KB
-rwxr-xr-x
pr
70.27
KB
-rwxr-xr-x
preconv
46.2
KB
-rwxr-xr-x
prepmx
135.32
KB
-rwxr-xr-x
print
17.74
KB
-rwxr-xr-x
printafm
395
B
-rwxr-xr-x
printenv
30.18
KB
-rwxr-xr-x
printerbanner
22
KB
-rwxr-xr-x
printf
50.18
KB
-rwxr-xr-x
prlimit
34.59
KB
-rwxr-xr-x
prove
13.27
KB
-rwxr-xr-x
prtstat
14.07
KB
-rwxr-xr-x
prune
14.04
KB
-rwxr-xr-x
ps2ascii
631
B
-rwxr-xr-x
ps2epsi
2.69
KB
-rwxr-xr-x
ps2frag
229
B
-rwxr-xr-x
ps2pdf
272
B
-rwxr-xr-x
ps2pdf12
215
B
-rwxr-xr-x
ps2pdf13
215
B
-rwxr-xr-x
ps2pdf14
215
B
-rwxr-xr-x
ps2pdfwr
1.07
KB
-rwxr-xr-x
ps2pk
145.47
KB
-rwxr-xr-x
ps2ps
647
B
-rwxr-xr-x
ps2ps2
669
B
-rwxr-xr-x
ps2txt
631
B
-rwxr-xr-x
psfaddtable
17.99
KB
-rwxr-xr-x
psfgettable
17.99
KB
-rwxr-xr-x
psfstriptable
17.99
KB
-rwxr-xr-x
psfxtable
17.99
KB
-rwxr-xr-x
pslatex
1.41
KB
-rwxr-xr-x
pslog
9.99
KB
-rwxr-xr-x
pstree
26.95
KB
-rwxr-xr-x
pstree.x11
26.95
KB
-rwxr-xr-x
ptar
3.47
KB
-rwxr-xr-x
ptardiff
2.57
KB
-rwxr-xr-x
ptargrep
4.29
KB
-rwxr-xr-x
ptex
403.81
KB
-rwxr-xr-x
ptftopl
50.12
KB
-rwxr-xr-x
ptx
70.24
KB
-rwxr-xr-x
purge-old-kernels
1.12
KB
-rwxr-xr-x
pwdx
10.07
KB
-rwxr-xr-x
py3clean
7.63
KB
-rwxr-xr-x
py3compile
11.83
KB
-rwxr-xr-x
py3rsa-decrypt
382
B
-rwxr-xr-x
py3rsa-decrypt-bigfile
398
B
-rwxr-xr-x
py3rsa-encrypt
382
B
-rwxr-xr-x
py3rsa-encrypt-bigfile
398
B
-rwxr-xr-x
py3rsa-keygen
380
B
-rwxr-xr-x
py3rsa-priv2pub
384
B
-rwxr-xr-x
py3rsa-sign
376
B
-rwxr-xr-x
py3rsa-verify
380
B
-rwxr-xr-x
py3versions
11.44
KB
-rwxr-xr-x
pyclean
4.03
KB
-rwxr-xr-x
pycompile
11.62
KB
-rwxr-xr-x
pydoc
79
B
-rwxr-xr-x
pydoc2.7
79
B
-rwxr-xr-x
pydoc3
79
B
-rwxr-xr-x
pydoc3.6
79
B
-rwxr-xr-x
pygettext
21.56
KB
-rwxr-xr-x
pygettext2.7
21.56
KB
-rwxr-xr-x
pygettext3
21.04
KB
-rwxr-xr-x
pygettext3.6
21.04
KB
-rwxr-xr-x
pygmentex
16.07
KB
-rwxr-xr-x
pyhtmlizer3
392
B
-rwxr-xr-x
pyjwt3
372
B
-rwxr-xr-x
python
3.47
MB
-rwxr-xr-x
python2
3.47
MB
-rwxr-xr-x
python2.7
3.47
MB
-rwxr-xr-x
python3
4.32
MB
-rwxr-xr-x
python3-futurize
384
B
-rwxr-xr-x
python3-jsondiff
1018
B
-rwxr-xr-x
python3-jsonpatch
3.58
KB
-rwxr-xr-x
python3-jsonpointer
1.31
KB
-rwxr-xr-x
python3-jsonschema
398
B
-rwxr-xr-x
python3-pasteurize
388
B
-rwxr-xr-x
python3-pbr
152
B
-rwxr-xr-x
python3.6
4.32
MB
-rwxr-xr-x
python3.6m
4.32
MB
-rwxr-xr-x
python3m
4.32
MB
-rwxr-xr-x
pythontex
2.95
KB
-rwxr-xr-x
pythontex3
306
B
-rwxr-xr-x
pyversions
14.75
KB
-rwxr-xr-x
ranlib
58.27
KB
-rwxr-xr-x
rcp
98.14
KB
-rwxr-xr-x
rdma
26.07
KB
-rwxr-xr-x
readelf
582.46
KB
-rwxr-xr-x
realpath
46.21
KB
-rwxr-xr-x
recode-sr-latin
14.07
KB
-rwxr-xr-x
recountdiff
3.36
KB
-rwxr-xr-x
rediff
34.11
KB
-rwxr-xr-x
rename.ul
14.07
KB
-rwxr-xr-x
renice
14.07
KB
-rwxr-xr-x
repstopdf
33.3
KB
-rwxr-xr-x
reset
22
KB
-rwxr-xr-x
resizecons
18.13
KB
-rwxr-xr-x
resizepart
38.08
KB
-rwxr-xr-x
rev
10.07
KB
-rwxr-xr-x
rgrep
30
B
-rwxr-xr-x
rimraf
1.17
KB
-rwxr-xr-x
rlogin
710.79
KB
-rwxr-xr-x
rotatelogs
18.07
KB
-rwxr-xr-x
routef
208
B
-rwxr-xr-x
routel
1.62
KB
-rwxr-xr-x
rpcgen
98.53
KB
-rwxr-xr-x
rpdfcrop
37.62
KB
-rwxr-xr-x
rsh
710.79
KB
-rwxr-xr-x
rst-buildhtml
9.73
KB
-rwxr-xr-x
rst2html
594
B
-rwxr-xr-x
rst2html4
714
B
-rwxr-xr-x
rst2html5
1.11
KB
-rwxr-xr-x
rst2latex
791
B
-rwxr-xr-x
rst2man
600
B
-rwxr-xr-x
rst2odt
764
B
-rwxr-xr-x
rst2odt_prepstyles
2.26
KB
-rwxr-xr-x
rst2pseudoxml
601
B
-rwxr-xr-x
rst2s5
637
B
-rwxr-xr-x
rst2xetex
871
B
-rwxr-xr-x
rst2xml
602
B
-rwxr-xr-x
rstpep2html
670
B
-rwxr-xr-x
rsvg-convert
17.99
KB
-rwxr-xr-x
rsvg-view-3
25.99
KB
-rwxr-xr-x
rsync
496.43
KB
-rwxr-xr-x
rtstat
22.35
KB
-rwxr-xr-x
run-mailcap
17.74
KB
-rwxr-xr-x
run-one
3.51
KB
-rwxr-xr-x
run-one-constantly
3.51
KB
-rwxr-xr-x
run-one-until-failure
3.51
KB
-rwxr-xr-x
run-one-until-success
3.51
KB
-rwxr-xr-x
run-this-one
3.51
KB
-rwxr-xr-x
runcon
34.18
KB
-rwxr-xr-x
rview
2.55
MB
-rwxr-xr-x
rvim
2.55
MB
-rwxr-xr-x
s3fs
522.27
KB
-rwxr-xr-x
savelog
10.22
KB
-rwxr-xr-x
sccmap
14.04
KB
-rwxr-xr-x
scor2prt
88.72
KB
-rwxr-xr-x
scp
98.14
KB
-rwxr-xr-x
screen
455.01
KB
-rwxr-xr-x
screendump
9.99
KB
-rwxr-xr-x
script
30.07
KB
-rwxr-xr-x
scriptreplay
26.08
KB
-rwxr-xr-x
sdiff
50.09
KB
-rwxr-xr-x
see
17.74
KB
-rwxr-xr-x
select-editor
2.38
KB
-rwxr-xr-x
semver
4
KB
-rwxr-xr-x
sensible-browser
1.18
KB
-rwxr-xr-x
sensible-editor
1.08
KB
-rwxr-xr-x
sensible-pager
433
B
-rwxr-xr-x
seq
46.18
KB
-rwxr-xr-x
setarch
18.34
KB
-rwxr-xr-x
setfacl
34.68
KB
-rwxr-xr-x
setkeycodes
10.07
KB
-rwxr-xr-x
setleds
14.05
KB
-rwxr-xr-x
setlogcons
10.07
KB
-rwxr-xr-x
setmetamode
10.1
KB
-rwxr-xr-x
setpci
22.08
KB
-rwxr-xr-x
setsid
10.07
KB
-rwxr-xr-x
setterm
42.08
KB
-rwxr-xr-x
sfdp
9.99
KB
-rwxr-xr-x
sftp
150.35
KB
-rwxr-xr-x
sg
39.4
KB
-rwsr-xr-x
sha1sum
46.21
KB
-rwxr-xr-x
sha224sum
54.21
KB
-rwxr-xr-x
sha256sum
54.21
KB
-rwxr-xr-x
sha384sum
58.21
KB
-rwxr-xr-x
sha512sum
58.21
KB
-rwxr-xr-x
shasum
9.15
KB
-rwxr-xr-x
showconsolefont
18.07
KB
-rwxr-xr-x
showkey
14.07
KB
-rwxr-xr-x
shred
58.21
KB
-rwxr-xr-x
shuf
54.18
KB
-rwxr-xr-x
simpdftex
20.9
KB
-rwxr-xr-x
size
30.3
KB
-rwxr-xr-x
skill
26.08
KB
-rwxr-xr-x
slabtop
18.08
KB
-rwxr-xr-x
slogin
710.79
KB
-rwxr-xr-x
snap
23.88
MB
-rwxr-xr-x
snapctl
8.42
MB
-rwxr-xr-x
snapfuse
38.13
KB
-rwxr-xr-x
snice
26.08
KB
-rwxr-xr-x
soelim
30.2
KB
-rwxr-xr-x
sort
110.47
KB
-rwxr-xr-x
sos
596
B
-rwxr-xr-x
sos-collector
1.04
KB
-rwxr-xr-x
sosreport
1.03
KB
-rwxr-xr-x
sotruss
4.21
KB
-rwxr-xr-x
spellintian
10.59
KB
-rwxr-xr-x
splain
18.7
KB
-rwxr-xr-x
split
54.63
KB
-rwxr-xr-x
splitdiff
3.38
KB
-rwxr-xr-x
splitfont
9.99
KB
-rwxr-xr-x
splitindex
6.2
KB
-rwxr-xr-x
sprof
26.21
KB
-rwxr-xr-x
srcredact
11.78
KB
-rwxr-xr-x
ssh
710.79
KB
-rwxr-xr-x
ssh-add
338.13
KB
-rwxr-xr-x
ssh-agent
354.14
KB
-rwxr-sr-x
ssh-argv0
1.42
KB
-rwxr-xr-x
ssh-copy-id
10.41
KB
-rwxr-xr-x
ssh-import-id
1.73
KB
-rwxr-xr-x
ssh-import-id-gh
782
B
-rwxr-xr-x
ssh-import-id-lp
782
B
-rwxr-xr-x
ssh-keygen
410.16
KB
-rwxr-xr-x
ssh-keyscan
410.16
KB
-rwxr-xr-x
stat
78.21
KB
-rwxr-xr-x
stdbuf
46.18
KB
-rwxr-xr-x
strace
1.31
MB
-rwxr-xr-x
strace-log-merge
2.58
KB
-rwxr-xr-x
strings
30.5
KB
-rwxr-xr-x
strip
230.2
KB
-rwxr-xr-x
sty2dtx
29.88
KB
-rwxr-xr-x
sudo
145.59
KB
-rwsr-xr-x
sudoedit
145.59
KB
-rwsr-xr-x
sudoreplay
54.81
KB
-rwxr-xr-x
sum
38.19
KB
-rwxr-xr-x
svn-multi
10.72
KB
-rwxr-xr-x
symcryptrun
110.73
KB
-rwxr-xr-x
synctex
29.99
KB
-rwxr-xr-x
systemd-analyze
1.49
MB
-rwxr-xr-x
systemd-cat
10.07
KB
-rwxr-xr-x
systemd-cgls
14.07
KB
-rwxr-xr-x
systemd-cgtop
30.09
KB
-rwxr-xr-x
systemd-delta
22.07
KB
-rwxr-xr-x
systemd-detect-virt
10.06
KB
-rwxr-xr-x
systemd-mount
42.09
KB
-rwxr-xr-x
systemd-path
10.06
KB
-rwxr-xr-x
systemd-resolve
86.07
KB
-rwxr-xr-x
systemd-run
42.07
KB
-rwxr-xr-x
systemd-socket-activate
18.07
KB
-rwxr-xr-x
systemd-stdio-bridge
14.07
KB
-rwxr-xr-x
systemd-umount
42.09
KB
-rwxr-xr-x
t1ascii
38.23
KB
-rwxr-xr-x
t1asm
43.27
KB
-rwxr-xr-x
t1binary
38.2
KB
-rwxr-xr-x
t1disasm
42.16
KB
-rwxr-xr-x
t1mac
46.3
KB
-rwxr-xr-x
t1unmac
42.37
KB
-rwxr-xr-x
t4ht
30.08
KB
-rwxr-xr-x
tabs
13.99
KB
-rwxr-xr-x
tac
38.18
KB
-rwxr-xr-x
tail
66.24
KB
-rwxr-xr-x
tangle
46.16
KB
-rwxr-xr-x
taskset
30.08
KB
-rwxr-xr-x
tbl
126.2
KB
-rwxr-xr-x
teckit_compile
1.88
MB
-rwxr-xr-x
tee
34.21
KB
-rwxr-xr-x
telnet
108.42
KB
-rwxr-xr-x
telnet.netkit
108.42
KB
-rwxr-xr-x
test
46.18
KB
-rwxr-xr-x
tex
355.66
KB
-rwxr-xr-x
tex4ebook
4.46
KB
-rwxr-xr-x
tex4ht
98.13
KB
-rwxr-xr-x
texcount
132.42
KB
-rwxr-xr-x
texdef
31.71
KB
-rwxr-xr-x
texdiff
18.85
KB
-rwxr-xr-x
texdirflatten
10.77
KB
-rwxr-xr-x
texdoc
202
B
-rwxr-xr-x
texdoctk
60.25
KB
-rwxr-xr-x
texfot
13.64
KB
-rwxr-xr-x
texhash
7.59
KB
-rwxr-xr-x
texliveonfly
16.92
KB
-rwxr-xr-x
texloganalyser
10.92
KB
-rwxr-xr-x
texlua
6.07
MB
-rwxr-xr-x
texluac
6.07
MB
-rwxr-xr-x
texluajit
5.97
MB
-rwxr-xr-x
texluajitc
5.97
MB
-rwxr-xr-x
texosquery
284
B
-rwxr-xr-x
texosquery-jre5
294
B
-rwxr-xr-x
texosquery-jre8
327
B
-rwxr-xr-x
tftopl
42.1
KB
-rwxr-xr-x
thumbpdf
41.72
KB
-rwxr-xr-x
tic
82.11
KB
-rwxr-xr-x
tie
14
KB
-rwxr-xr-x
time
14.38
KB
-rwxr-xr-x
timedatectl
22.07
KB
-rwxr-xr-x
timeout
38.63
KB
-rwxr-xr-x
tkconch3
386
B
-rwxr-xr-x
tl-paper
4.31
KB
-rwxr-xr-x
tlmgr
308.4
KB
-rwxr-xr-x
tload
14.09
KB
-rwxr-xr-x
tmux
563.56
KB
-rwxr-xr-x
toe
13.99
KB
-rwxr-xr-x
top
105.77
KB
-rwxr-xr-x
touch
86.21
KB
-rwxr-xr-x
tpic2pdftex
12.29
KB
-rwxr-xr-x
tput
18.02
KB
-rwxr-xr-x
tr
46.18
KB
-rwxr-xr-x
tracepath
14.01
KB
-rwxr-xr-x
traceroute6
18.02
KB
-rwsr-xr-x
traceroute6.iputils
18.02
KB
-rwsr-xr-x
tred
14.04
KB
-rwxr-xr-x
tree
75.57
KB
-rwxr-xr-x
trial3
382
B
-rwxr-xr-x
troff
719.34
KB
-rwxr-xr-x
truncate
38.18
KB
-rwxr-xr-x
tset
22
KB
-rwxr-xr-x
tsort
34.18
KB
-rwxr-xr-x
ttf2afm
40.09
KB
-rwxr-xr-x
ttf2pk
106.56
KB
-rwxr-xr-x
ttf2tfm
136.89
KB
-rwxr-xr-x
ttfdump
103.2
KB
-rwxr-xr-x
tty
30.18
KB
-rwxr-xr-x
twist3
382
B
-rwxr-xr-x
twistd3
384
B
-rwxr-xr-x
twopi
9.99
KB
-rwxr-xr-x
typeoutfileinfo
2.13
KB
-rwxr-xr-x
tzselect
15.04
KB
-rwxr-xr-x
ua
4.49
KB
-rwxr-xr-x
ubuntu-advantage
4.49
KB
-rwxr-xr-x
ubuntu-bug
2.5
KB
-rwxr-xr-x
ubuntu-core-launcher
127.21
KB
-rwsr-xr-x
ubuntu-support-status
7.84
KB
-rwxr-xr-x
ucf
39.73
KB
-rwxr-xr-x
ucfq
18.91
KB
-rwxr-xr-x
ucfr
10.47
KB
-rwxr-xr-x
uconv
50.6
KB
-rwxr-xr-x
ul
14.01
KB
-rwxr-xr-x
unattended-upgrade
75.38
KB
-rwxr-xr-x
unattended-upgrades
75.38
KB
-rwxr-xr-x
unexpand
38.21
KB
-rwxr-xr-x
unflatten
14.04
KB
-rwxr-xr-x
unicode_stop
530
B
-rwxr-xr-x
uniq
42.21
KB
-rwxr-xr-x
unlink
30.18
KB
-rwxr-xr-x
unlzma
74.36
KB
-rwxr-xr-x
unmkinitramfs
2.79
KB
-rwxr-xr-x
unshare
18.27
KB
-rwxr-xr-x
unsquashfs
99.71
KB
-rwxr-xr-x
unwrapdiff
5.8
KB
-rwxr-xr-x
unxz
74.36
KB
-rwxr-xr-x
unzip
174.13
KB
-rwxr-xr-x
unzipsfx
78.12
KB
-rwxr-xr-x
upbibtex
124.48
KB
-rwxr-xr-x
update-alternatives
46.01
KB
-rwxr-xr-x
update-mime-database
50.19
KB
-rwxr-xr-x
update-perl-sax-parsers
6.03
KB
-rwxr-xr-x
updatedb
46.08
KB
-rwxr-xr-x
updatedb.mlocate
46.08
KB
-rwxr-xr-x
updmap
85.27
KB
-rwxr-xr-x
updmap-sys
925
B
-rwxr-xr-x
updmap-user
873
B
-rwxr-xr-x
updvitomp
795.76
KB
-rwxr-xr-x
updvitype
56.51
KB
-rwxr-xr-x
upmendex
134.89
KB
-rwxr-xr-x
upmpost
795.76
KB
-rwxr-xr-x
uppltotf
64.48
KB
-rwxr-xr-x
uptex
414.18
KB
-rwxr-xr-x
uptftopl
52.51
KB
-rwxr-xr-x
uptime
10.07
KB
-rwxr-xr-x
usb-devices
4.12
KB
-rwxr-xr-x
usbhid-dump
22.08
KB
-rwxr-xr-x
users
34.18
KB
-rwxr-xr-x
utmpdump
22.07
KB
-rwxr-xr-x
uuidgen
14.07
KB
-rwxr-xr-x
uuidparse
34.08
KB
-rwxr-xr-x
validate-json
6.63
KB
-rwxr-xr-x
vcs-run
6.75
KB
-rwxr-xr-x
vftovp
54.11
KB
-rwxr-xr-x
vi
2.55
MB
-rwxr-xr-x
view
2.55
MB
-rwxr-xr-x
vigpg
2.58
KB
-rwxr-xr-x
vim
2.55
MB
-rwxr-xr-x
vim.basic
2.55
MB
-rwxr-xr-x
vim.tiny
1.06
MB
-rwxr-xr-x
vimdiff
2.55
MB
-rwxr-xr-x
vimdot
1.06
KB
-rwxr-xr-x
vimtutor
2.05
KB
-rwxr-xr-x
vlna
18.12
KB
-rwxr-xr-x
vmhgfs-fuse
50.48
KB
-rwxr-xr-x
vmstat
34.09
KB
-rwxr-xr-x
vmtoolsd
54.25
KB
-rwxr-xr-x
vmware-checkvm
10.07
KB
-rwxr-xr-x
vmware-hgfsclient
10.07
KB
-rwxr-xr-x
vmware-namespace-cmd
17.99
KB
-rwxr-xr-x
vmware-rpctool
17.99
KB
-rwxr-xr-x
vmware-toolbox-cmd
38.28
KB
-rwxr-xr-x
vmware-vgauth-cmd
13.99
KB
-rwxr-xr-x
vmware-vgauth-smoketest
18.01
KB
-rwxr-xr-x
vmware-vmblock-fuse
18.41
KB
-rwxr-xr-x
vmware-xferlogs
10.07
KB
-rwxr-xr-x
volname
9.99
KB
-rwxr-xr-x
vpe
9.4
KB
-rwxr-xr-x
vpl2ovp
40.05
KB
-rwxr-xr-x
vpl2vpl
37.07
KB
-rwxr-xr-x
vptovf
66.09
KB
-rwxr-xr-x
w
18.07
KB
-rwxr-xr-x
w.procps
18.07
KB
-rwxr-xr-x
wall
30.08
KB
-rwxr-sr-x
watch
22.41
KB
-rwxr-xr-x
watchgnupg
13.99
KB
-rwxr-xr-x
wc
42.19
KB
-rwxr-xr-x
weave
66.09
KB
-rwxr-xr-x
wget
487.56
KB
-rwxr-xr-x
whatis
46.98
KB
-rwxr-xr-x
whereis
26.51
KB
-rwxr-xr-x
which
946
B
-rwxr-xr-x
who
50.21
KB
-rwxr-xr-x
whoami
30.18
KB
-rwxr-xr-x
whois
148.54
KB
-rwxr-xr-x
wifi-status
2.06
KB
-rwxr-xr-x
wofm2opl
58.1
KB
-rwxr-xr-x
wopl2ofm
118.08
KB
-rwxr-xr-x
wovf2ovp
74.11
KB
-rwxr-xr-x
wovp2ovf
138.09
KB
-rwxr-xr-x
write
13.99
KB
-rwxr-sr-x
x86_64
18.34
KB
-rwxr-xr-x
x86_64-linux-gnu-addr2line
30.55
KB
-rwxr-xr-x
x86_64-linux-gnu-ar
58.24
KB
-rwxr-xr-x
x86_64-linux-gnu-as
895.98
KB
-rwxr-xr-x
x86_64-linux-gnu-c++filt
26.12
KB
-rwxr-xr-x
x86_64-linux-gnu-cpp
1022.94
KB
-rwxr-xr-x
x86_64-linux-gnu-cpp-7
1022.94
KB
-rwxr-xr-x
x86_64-linux-gnu-dwp
2.75
MB
-rwxr-xr-x
x86_64-linux-gnu-elfedit
30.45
KB
-rwxr-xr-x
x86_64-linux-gnu-g++
1022.94
KB
-rwxr-xr-x
x86_64-linux-gnu-g++-7
1022.94
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc
1022.94
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc-7
1022.94
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc-ar
30.47
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc-ar-7
30.47
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc-nm
30.47
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc-nm-7
30.47
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc-ranlib
30.47
KB
-rwxr-xr-x
x86_64-linux-gnu-gcc-ranlib-7
30.47
KB
-rwxr-xr-x
x86_64-linux-gnu-gcov
616.09
KB
-rwxr-xr-x
x86_64-linux-gnu-gcov-7
616.09
KB
-rwxr-xr-x
x86_64-linux-gnu-gcov-dump
499.93
KB
-rwxr-xr-x
x86_64-linux-gnu-gcov-dump-7
499.93
KB
-rwxr-xr-x
x86_64-linux-gnu-gcov-tool
535.99
KB
-rwxr-xr-x
x86_64-linux-gnu-gcov-tool-7
535.99
KB
-rwxr-xr-x
x86_64-linux-gnu-gold
2.97
MB
-rwxr-xr-x
x86_64-linux-gnu-gprof
99.73
KB
-rwxr-xr-x
x86_64-linux-gnu-ld
1.7
MB
-rwxr-xr-x
x86_64-linux-gnu-ld.bfd
1.7
MB
-rwxr-xr-x
x86_64-linux-gnu-ld.gold
2.97
MB
-rwxr-xr-x
x86_64-linux-gnu-nm
43.27
KB
-rwxr-xr-x
x86_64-linux-gnu-objcopy
230.2
KB
-rwxr-xr-x
x86_64-linux-gnu-objdump
404.55
KB
-rwxr-xr-x
x86_64-linux-gnu-pkg-config
2.06
KB
-rwxr-xr-x
x86_64-linux-gnu-ranlib
58.27
KB
-rwxr-xr-x
x86_64-linux-gnu-readelf
582.46
KB
-rwxr-xr-x
x86_64-linux-gnu-size
30.3
KB
-rwxr-xr-x
x86_64-linux-gnu-strings
30.5
KB
-rwxr-xr-x
x86_64-linux-gnu-strip
230.2
KB
-rwxr-xr-x
x86_64-pc-linux-gnu-pkg-config
50.09
KB
-rwxr-xr-x
xargs
70.21
KB
-rwxr-xr-x
xauth
50.81
KB
-rwxr-xr-x
xdelta3
150.3
KB
-rwxr-xr-x
xdg-desktop-icon
20.09
KB
-rwxr-xr-x
xdg-desktop-menu
42.2
KB
-rwxr-xr-x
xdg-email
27.27
KB
-rwxr-xr-x
xdg-icon-resource
29.26
KB
-rwxr-xr-x
xdg-mime
41
KB
-rwxr-xr-x
xdg-open
24.65
KB
-rwxr-xr-x
xdg-screensaver
36.79
KB
-rwxr-xr-x
xdg-settings
36.85
KB
-rwxr-xr-x
xdg-user-dir
234
B
-rwxr-xr-x
xdg-user-dirs-update
18.07
KB
-rwxr-xr-x
xdvi
2.96
KB
-rwxr-xr-x
xdvi-xaw
746.3
KB
-rwxr-xr-x
xdvi.bin
746.3
KB
-rwxr-xr-x
xdvipdfmx
751.77
KB
-rwxr-xr-x
xetex
791.99
KB
-rwxr-xr-x
xgettext
260.64
KB
-rwxr-xr-x
xml2-config
1.77
KB
-rwxr-xr-x
xmlcatalog
17.99
KB
-rwxr-xr-x
xmllint
66.82
KB
-rwxr-xr-x
xsltproc
26.08
KB
-rwxr-xr-x
xsubpp
5.04
KB
-rwxr-xr-x
xxd
18.12
KB
-rwxr-xr-x
xz
74.36
KB
-rwxr-xr-x
xzcat
74.36
KB
-rwxr-xr-x
xzcmp
6.48
KB
-rwxr-xr-x
xzdiff
6.48
KB
-rwxr-xr-x
xzegrep
5.76
KB
-rwxr-xr-x
xzfgrep
5.76
KB
-rwxr-xr-x
xzgrep
5.76
KB
-rwxr-xr-x
xzless
1.76
KB
-rwxr-xr-x
xzmore
2.11
KB
-rwxr-xr-x
yes
30.18
KB
-rwxr-xr-x
yplan
10.75
KB
-rwxr-xr-x
zdump
18.05
KB
-rwxr-xr-x
zip
211.19
KB
-rwxr-xr-x
zipcloak
91.62
KB
-rwxr-xr-x
zipdetails
47.36
KB
-rwxr-xr-x
zipgrep
2.88
KB
-rwxr-xr-x
zipinfo
174.13
KB
-rwxr-xr-x
zipnote
87.39
KB
-rwxr-xr-x
zipsplit
91.39
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : mathspic
#!/usr/bin/perl # #(c) Copyright 2005-2010 VERSION 1.13 April 26, 2010 # Apostolos Syropoulos & R.W.D. Nickalls # asyropoulos@yahoo.com dick@nickalls.org # # This program can be redistributed and/or modified under the terms # of the LaTeX Project Public License Distributed from CTAN # archives in directory macros/latex/base/lppl.txt; either # version 1 of the License, or any later version. # package DummyFH; my $index = 0; sub TIEHANDLE { my $class = shift; my $self= shift; bless $self, $class; } sub READLINE { my $self = shift; #shift @$self; if ($index > $#$self) { $index = 0; return undef; } else { return $self->[$index++]; } } package main; use Math::Trig; our $version_number = "1.13 Apr 26, 2010"; our $commandLineArgs = join(" ", @ARGV); our $command = ""; our $curr_in_file = ""; our %PointTable = (); our %VarTable = (); our %ConstTable = (); our $no_errors = 0; our $xunits = "1pt"; our $yunits = "1pt"; our $units = "pt|pc|in|bp|cm|mm|dd|cc|sp"; our $defaultsymbol = "\$\\bullet\$"; our $defaultLFradius = 0; use constant PI => atan2(1,1)*4; use constant R2D => 180 / PI; use constant D2R => PI / 180; our $arrowLength = 2; our $arrowLengthUnits = "mm"; our $arrowAngleB = 30; our $arrowAngleC = 40; our %DimOfPoint = (); our $GlobalDimOfPoints = 0; our @Macros = (); our $LineThickness = 0.4; sub mpp { my $in_line; chomp($in_line = shift); my $LC = shift; my $out_line = $in_line; my $macro_name = ""; my @macro_param = (); my $macro_code = ""; if ($in_line =~ s/^%def\s*//) { if ($in_line =~ s/^(\w+)\s*//){ $macro_name = $1; } else { PrintErrorMessage("No macro name has been found",$LC); return "" } if ($in_line =~ s/^\(\s*//) { # do nothing } else { PrintErrorMessage("No left parenthesis after macro name has been found",$LC); return ""; } if ($in_line =~ s/^\)//) { # Macro has no parameters! } else { MACROS: while (1) { if ($in_line =~ s/^(\w+)\s*//) { push (@macro_param, $1); } else { PrintErrorMessage("No macro parameter name has been found",$LC); return ""; } if ($in_line =~ s/^,\s*//) { next MACROS; } else { last MACROS; } } if ($in_line =~ s/^\)//) { # do nothing! } else { PrintErrorMessage("No closing parenthesis after macro parameters",$LC); return ""; } } $in_line =~ s/([^%]+)(%.*)/$1/; $macro_code = $in_line; push ( @Macros , { 'macro_name' => $macro_name, 'macro_code' => $macro_code, 'macro_param' => \@macro_param }); return $out_line; } elsif ($in_line =~ s/^%undef\s*//) { if ($in_line =~ s/^(\w+)//) { my $undef_macro = $1; for(my $i = $#Macros; $i >= 0; $i--) { if ($Macros[$i]->{'macro_name'} eq $undef_macro) { splice(@Macros,$i,1); } } } return $out_line; } elsif ($in_line =~ s/^\s*%//) { return $out_line; } else { my $comment = $2 if $in_line =~ s/([^%]+)(%.+)/$1/; EXPANSIONLOOP: while () { my $org_in_line = $in_line; for(my $i = $#Macros; $i >= 0; $i--) { my $macro_name = $Macros[$i]->{'macro_name'}; if ($in_line =~ /&$macro_name\b/) { ############################ my $num_of_macro_args = @{$Macros[$i]->{'macro_param'}}; if ( $num_of_macro_args > 0 ) { # Macro with parameters my $pattern = "&$macro_name\\("; foreach my $p ( 1..$num_of_macro_args ) { my $comma = ($p == $num_of_macro_args) ? "\\s*" : "\\s*,\\s*"; $pattern .= "\\s*[^\\s\\)]+$comma"; } $pattern .= "\\)"; while($in_line =~ /&$macro_name\b/) { if ($in_line =~ /$pattern/) { my $before = $`; my $after = $'; my $match = $&; my $new_code = $Macros[$i]->{'macro_code'}; $match =~ s/^&$macro_name\(\s*//; $match =~ s/\)$//; foreach my $arg ( 0..($num_of_macro_args - 1) ) { my $old = $Macros[$i]->{'macro_param'}->[$arg]; my $comma = ($arg == ($num_of_macro_args - 1)) ? "" : ","; $match =~ s/^\s*([^\s,]+)\s*$comma//; my $new = $1; # 'g': Parameter may occur several times # in $new_code. # '\b': Substitute only whole words # not x in xA $new_code =~ s/\b$old\b/$new/g; } $in_line = "$before$new_code$after"; } else { PrintErrorMessage("Usage of macro &$macro_name does not " . "match its definition", $LC); return ""; } } } else { # Macro without parameters my $replacement = $Macros[$i]->{'macro_code'}; # '\b': Substitute only whole words # not x in xA $in_line =~ s/&$macro_name\b/$replacement/g; } } } last EXPANSIONLOOP if ( $org_in_line eq $in_line ); } return "$in_line$comment"; } } sub PrintErrorMessage { my $errormessage = shift; my $error_line = shift; my ($l,$A); $l = 1+length($command)-length; $A = substr($command,0,$l); $l += 7 +length($error_line); for my $fh (STDOUT, LOG) { print $fh "$curr_in_file", "Line $error_line: $A\n"; print $fh " " x $l ,$_,"***Error: $errormessage\n"; } if ($comments_on) { #print to output file file print OUT "%% *** $curr_in_file", "Line $error_line: $A\n"; print OUT "%% *** "," " x $l ,$_,"%% ... Error: $errormessage\n"; } $no_errors++; } sub PrintWarningMessage { my $warningMessage = shift; my $warning_line = shift; my ($l,$A); $l = 1+length($command)-length; $A = substr($command,0,$l); $l += 7 +length($warning_line); for my $fh (STDOUT, LOG) { print $fh "$curr_in_file", "Line $warning_line: $A\n"; print $fh " " x $l ,$_,"***Warning: $warningMessage\n"; } if ($comments_on) { #print to output file file print OUT "%% *** $curr_in_file", "Line $warning_line: $A\n"; print OUT "%% *** "," " x $l ,$_,"%% ... Warning: $warningMessage\n"; } } sub PrintFatalError { my $FatalMessage = shift; my $fatal_line = shift; my ($l,$A); $l = 1+length($command)-length; $A = substr($command,0,$l); $l += 7 +length($fatal_line); die "$curr_in_file", "Line $fatal_line: $A\n" . (" " x $l) . $_ . "***Fatal Error: $FatalMessage\n"; } sub chk_lparen { my $token = $_[0]; my $lc = $_[1]; s/\s*//; if (/^[^\(]/) { PrintErrorMessage("Missing ( after $token",$lc); } else { s/^\(\s*//; } } sub chk_rparen { my $token = $_[0]; my $lc = $_[1]; s/\s*//; if (s/^\)//) { s/\s*//; } else { PrintErrorMessage("Missing ) after $token",$lc); } } sub chk_lcb { my $token = $_[0]; my $lc = $_[1]; s/\s*//; if ($_ !~ /^\{/) { PrintErrorMessage("Missing { after $token",$lc); } else { s/^{\s*//; } } sub chk_rcb { my $token = $_[0]; my $lc = $_[1]; if ($_ !~ /^\s*\}/) { PrintErrorMessage("Missing } after $token",$lc); } else { s/^\s*}\s*//; } } sub chk_lsb { my $token = $_[0]; my $lc = $_[1]; s/\s*//; if ($_ !~ /^\[/) { PrintErrorMessage("Missing [ after $token",$lc); } else { s/^\[\s*//; } } sub chk_rsb { my $token = $_[0]; my $lc = $_[1]; s/\s*//; if ($_ !~ /^\]/) { PrintErrorMessage("Missing ] after $token",$lc); } else { s/^\]\s*//; } } sub chk_comma { my $lc = $_[0]; s/\s*//; if (/^[^,]/) { PrintErrorMessage("Did not find expected comma",$lc); } else { s/^,\s*//; } } sub chk_comment { my $lc = $_[0]; s/\s*//; if (/^%/) { # do nothing! } elsif (/^[^%]/) { PrintWarningMessage("Trailing text is ignored",$lc); } } sub print_headers { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime; $year+=1900; $mon+=1; $now_string = "$year/" . ($mon>9 ? "$mon/" : "0$mon/") . ($mday>9 ? "$mday " : "0$mday ") . ($hour>9 ? "$hour:" : "0$hour:") . ($min>9 ? "$min:" : "0$min:") . ($sec>9 ? "$sec" : "0$sec"); print OUT "%* -----------------------------------------------\n"; print OUT "%* mathspic (Perl version $version_number)\n"; print OUT "%* A filter program for use with PiCTeX\n"; print OUT "%* Copyright (c) 2005-2010 A Syropoulos & RWD Nickalls \n"; print OUT "%* Command line: $0 $commandLineArgs\n"; print OUT "%* Input filename : $source_file\n"; print OUT "%* Output filename: $out_file\n"; print OUT "%* Date & time: $now_string\n"; print OUT "%* -----------------------------------------------\n"; # print LOG "----\n"; print LOG "$now_string\n"; print LOG "mathspic (Perl version $version_number)\n"; print LOG "Copyright (c) 2005-2010 A Syropoulos & RWD Nickalls \n"; print LOG "Input file = $source_file\n"; print LOG "Output file = $out_file\n"; print LOG "Log file = $log_file\n"; print LOG "----\n"; } sub get_point { my ($lc) = $_[0]; my ($PointName); if (s/^([^\W\d_]\d{0,4})\s*//i) { #point name $PointName = $1; if (!exists($PointTable{lc($PointName)})) { PrintErrorMessage("Undefined point $PointName",$lc); return "_undef_"; } else { return lc($PointName); } } else { PrintErrorMessage("Point name expected",$lc); return "_undef_"; } } sub perpendicular { my ($xP, $yP, $xA, $yA, $xB, $yB) = @_; my ($xF, $yF, $deltax, $deltay, $m1, $m2, $c1, $c2, $factor); $deltax = $xA - $xB; return ($xA, $yP) if abs($deltax) < 0.0000001; $deltay = $yA - $yB; return ($xP, $yA) if abs($deltay) < 0.0000001; $m1 = $deltay / $deltax; eval { $m2 = (-1) / $m1;}; PrintFatalError("Division by zero",$lc) if $@; $c1 = $yA - $m1 * $xA; $c2 = $yP - $m2 * $xP; eval { $factor = 1 / ($m1 - $m2)}; PrintFatalError("Division by zero",$lc) if $@; return (($c2 - $c1) * $factor, ($m1 * $c2 - $m2 * $c1) * $factor); } sub Length { my ($xA, $yA, $xB, $yB)=@_; return sqrt(($xB - $xA)**2 + ($yB - $yA)**2); } sub triangleArea { my ($xA, $yA, $xB, $yB, $xC, $yC)=@_; my ($lenAB, $lenBC, $lenCA, $s); $lenAB = Length($xA,$yA,$xB,$yB); $lenBC = Length($xB,$yB,$xC,$yC); $lenCA = Length($xC,$yC,$xA,$yA); $s = ($lenAB + $lenBC + $lenCA) / 2; return sqrt($s * ($s - $lenAB)*($s - $lenBC)*($s - $lenCA)); } sub pointOnLine { my ($xA, $yA, $xB, $yB, $dist)=@_; my ($deltax, $deltay, $xPol, $yPol); $deltax = $xB - $xA; $deltay = $yB - $yA; $xPol = $xA + ($dist * $deltax / &Length($xA,$yA,$xB,$yB)); $yPol = $yA + ($dist * $deltay / &Length($xA,$yA,$xB,$yB)); return ($xPol, $yPol); } sub circumCircleCenter { my ($xA, $yA, $xB, $yB, $xC, $yC, $lc)=@_; my ($deltay12, $deltax12, $xs12, $ys12); my ($deltay23, $deltax23, $xs23, $ys23); my ($xcc, $ycc); my ($m23, $mr23, $c23, $m12, $mr12, $c12); my ($sideA, $sideB, $sideC, $a, $radius); if (abs(triangleArea($xA, $yA, $xB, $yB, $xC, $yC)) < 0.0000001) { PrintErrorMessage("Area of triangle is zero!",$lc); return (0,0,0); } $deltay12 = $yB - $yA; $deltax12 = $xB - $xA; $xs12 = $xA + $deltax12 / 2; $ys12 = $yA + $deltay12 / 2; # $deltay23 = $yC - $yB; $deltax23 = $xC - $xB; $xs23 = $xB + $deltax23 / 2; $ys23 = $yB + $deltay23 / 2; # CCXYLINE:{ if (abs($deltay12) < 0.0000001) { $xcc = $xs12; if (abs($deltax23) < 0.0000001) { $ycc = $ys23; last CCXYLINE; } else { $m23 = $deltay23 / $deltax23; $mr23 = -1 / $m23; $c23 = $ys23 - $mr23 * $xs23; $ycc = $mr23 * $xs12 + $c23; last CCXYLINE; } } if (abs($deltax12) < 0.0000001) { $ycc = $ys12; if (abs($deltay23) < 0.0000001) { $xcc = $xs23; last CCXYLINE; } else { $m23 = $deltay23 / $deltax23; $mr23 = -1 / $m23; $c23 = $ys23 - $mr23 * $xs23; $xcc = ($ys12 - $c23) / $mr23; last CCXYLINE; } } if (abs($deltay23) < 0.0000001) { $xcc = $xs23; if (abs($deltax12) < 0.0000001) { $ycc = $ys12; last CCXYLINE; } else { $m12 = $deltay12 / $deltax12; $mr12 = -1 / $m12; $c12 = $ys12 - $mr12 * $xs12; $ycc = $mr12 * $xcc + $c12; last CCXYLINE; } } if (abs($deltax23) < 0.0000001) { $ycc = $ys23; if (abs($deltay12) < 0.0000001) { $xcc = $xs12; last CCXYLINE; } else { $m12 = $deltay12 / $deltax12; $mr12 = -1 / $m12; $c12 = $ys12 - $mr12 * $xs12; $xcc = ($ycc - $c12) / $mr12; last CCXYLINE; } } $m12 = $deltay12 / $deltax12; $mr12 = -1 / $m12; $c12 = $ys12 - $mr12 * $xs12; #----- $m23 = $deltay23 / $deltax23; $mr23 = -1 / $m23; $c23 = $ys23 - $mr23 * $xs23; $xcc = ($c23 - $c12) / ($mr12 - $mr23); $ycc = ($c23 * $mr12 - $c12 * $mr23) / ($mr12 - $mr23); } # $sideA = &Length($xA,$yA,$xB,$yB); $sideB = &Length($xB,$yB,$xC,$yC); $sideC = &Length($xC,$yC,$xA,$yA); $a = triangleArea($xA, $yA, $xB, $yB, $xC, $yC); $radius = ($sideA * $sideB * $sideC) / (4 * $a); # return ($xcc, $ycc, $radius); } sub ComputeDist { my ($lc) = $_[0]; my ($v1, $v2); if (s/^((\+|-)?\d+(\.\d+)?([eE](\+|-)?\d+)?)//) #is it a number? { return ($1, 1); } elsif (/^[^\W\d_]\d{0,4}[^\W\d_]\d{0,4}/) #it is a pair of IDs? { s/^([^\W\d_]\d{0,4})//i; $v1 = $1; if (!exists($PointTable{lc($v1)})) { if (exists($VarTable{lc($v1)})) { return ($VarTable{lc($v1)}, 1); } PrintErrorMessage("Point $v1 has not been defined", $lc); s/^\s*[^\W\d_]\d{0,4}//i; return (0,0); } $v1 = lc($v1); s/^\s*([^\W\d_]\d{0,4})//i; $v2 = $1; if (!exists($PointTable{lc($v2)})) { PrintErrorMessage("Point $v2 has not been defined", $lc); return (0,0); } $v2 = lc($v2); my ($x1,$y1,$pSV1,$pS1) = unpack("d3A*",$PointTable{$v1}); my ($x2,$y2,$pSV2,$pS2) = unpack("d3A*",$PointTable{$v2}); return (Length($x1,$y1,$x2,$y2), 1); } elsif (s/^([^\W\d_]\d{0,4})//i) # it is a single id { $v1 = $1; if (!exists($VarTable{lc($v1)})) #it isn't a variable { PrintErrorMessage("Variable $v1 has not been defined", $lc); return (0,0); } return ($VarTable{lc($v1)}, 1); } else { PrintErrorMessage("Unexpected token", $lc); return (0,0); } } sub intersection4points { my ($x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4) = @_; my ($deltay12, $deltax12, $deltay34, $deltax34); my ($xcc, $ycc, $m34, $c34, $m12, $c12); $deltay12 = $y2 - $y1; $deltax12 = $x2 - $x1; # $deltay34 = $y4 - $y3; $deltax34 = $x4 - $x3; I4PXYLINE:{ if (abs($deltay12) < 0.0000001) { $ycc = $y1; if (abs($deltax34) < 0.0000001) { $xcc = $x3; last I4PXYLINE; } else { $m34 = $deltay34 / $deltax34; $c34 = $y3 - $m34 * $x3; $xcc = ($ycc - $c34) / $m34; last I4PXYLINE; } } if (abs($deltax12) < 0.0000001) { $xcc = $x1; if (abs($deltay34) < 0.0000001) { $ycc = $y3; last I4PXYLINE; } else { $m34 = $deltay34 / $deltax34; $c34 = $y3 - $m34 * $x3; $ycc = $m34 * $xcc + $c34; last I4PXYLINE; } } if (abs($deltay34) < 0.0000001) { $ycc = $y3; if (abs($deltax12) < 0.0000001) { $xcc = $x1; last I4PXYLINE; } else { $m12 = $deltay12 / $deltax12; $c12 = $y1 - $m12 * $x1; $xcc = ($ycc - $c12) / $m12; last I4PXYLINE; } } if (abs($deltax34) < 0.0000001) { $xcc = $x3; if (abs($deltay12) < 0.0000001) { $ycc = $y1; last I4PXYLINE; } else { $m12 = $deltay12 / $deltax12; $c12 = $y1 - $m12 * $x1; $ycc = $m12 * $xcc + $c12; last I4PXYLINE; } } $m12 = $deltay12 / $deltax12; $c12 = $y1 - $m12 * $x1; $m34 = $deltay34 / $deltax34; $c34 = $y3 - $m34 * $x3; $xcc = ($c34 - $c12) / ($m12 - $m34); $ycc = ($c34 * $m12 - $c12 * $m34) / ($m12 - $m34); } return ($xcc, $ycc); } sub IncircleCenter { my ($Ax, $Ay, $Bx, $By, $Cx, $Cy) = @_; my ($sideA, $sideB, $sideC); my ($ba1, $xA1, $yA1, $cb1, $ac1, $xB1, $yB1, $xC1, $yC1, $a, $s, $r); #determine the lengths of the sides $sideA = Length($Bx, $By, $Cx, $Cy); $sideB = Length($Cx, $Cy, $Ax, $Ay); $sideC = Length($Ax, $Ay, $Bx, $By); # $ba1 = ($sideC * $sideA) / ($sideB + $sideC); ($xA1, $yA1) = pointOnLine($Bx, $By, $Cx, $Cy, $ba1); $cb1 = ($sideA * $sideB) / ($sideC + $sideA); ($xB1, $yB1) = pointOnLine($Cx, $Cy, $Ax, $Ay, $cb1); $ac1 = ($sideB * $sideC) / ($sideA + $sideB); ($xC1, $yC1) = pointOnLine($Ax, $Ay, $Bx, $By, $ac1); ($xcenter, $ycenter) = &intersection4points($Ax, $Ay, $xA1, $yA1, $Bx, $By, $xB1, $yB1); # get radius $a = &triangleArea($Ax, $Ay, $Bx, $By, $Cx, $Cy); $s = ($sideA + $sideB +$sideC) / 2; $r = $a / $s; return ($xcenter, $ycenter, $r); } sub Angle { my ($Ax, $Ay, $Bx, $By, $Cx, $Cy) = @_; my ($RAx, $RAy, $RBx, $RBy, $RCx, $RCy, $deltax, $deltay); my ($lineBA, $lineBC, $lineAC, $k, $kk, $angle); my ($T, $cosT, $sinT) = (0.3, cos(0.3), sin(0.3)); $RAx = $Ax * $cosT + $Ay * $sinT; $RAy = -$Ax * $sinT + $Ay * $cosT; $RBx = $Bx * $cosT + $By * $sinT; $RBy = -$Bx * $sinT + $By * $cosT; $RCx = $Cx * $cosT + $Cy * $sinT; $RCy = -$Cx * $sinT + $Cy * $cosT; $deltax = $RBx - $RAx; $deltay = $RBy - $RAy; $lineBA = sqrt($deltax*$deltax + $deltay*$deltay); if ($lineBA < 0.0000001) { return -500; } $deltax = $RBx - $RCx; $deltay = $RBy - $RCy; $lineBC = sqrt($deltax*$deltax + $deltay*$deltay); if ($lineBC < 0.0000001) { return -500; } $deltax = $RAx - $RCx; $deltay = $RAy - $RCy; $lineAC = sqrt($deltax*$deltax + $deltay*$deltay); if ($lineAC < 0.0000001) { return -500; } $k = ($lineBA*$lineBA + $lineBC*$lineBC - $lineAC*$lineAC ) / (2 * $lineBA * $lineBC); $k = -1 if $k < -0.99999; $k = 1 if $k > 0.99999; $kk = $k * $k; if (($kk * $kk) == 1) { $angle = PI if $k == -1; $angle = 0 if $k == 1; } else { $angle = (PI / 2) - atan2($k / sqrt(1 - $kk),1); } return $angle * 180 / PI; } sub excircle { my ($A, $B, $C, $D, $E) = @_; my ($Ax,$Ay,$Bx,$By,$Dx,$Dy,$Ex,$Ey,$ASVA,$ASA); ($Ax,$Ay,$ASVA,$ASA)=unpack("d3A*",$PointTable{$A}); ($Bx,$By,$ASVA,$ASA)=unpack("d3A*",$PointTable{$B}); ($Cx,$Cy,$ASVA,$ASA)=unpack("d3A*",$PointTable{$C}); ($Dx,$Dy,$ASVA,$ASA)=unpack("d3A*",$PointTable{$D}); ($Ex,$Ey,$ASVA,$ASA)=unpack("d3A*",$PointTable{$E}); my ($sideA, $sideB, $sideC, $s, $R, $theAdeg, $d); my ($Xmypoint, $Ymypoint, $deltax, $deltay, $mylength, $xc, $yc); $sideA = &Length($Bx, $By, $Cx, $Cy); $sideB = &Length($Cx, $Cy, $Ax, $Ay); $sideC = &Length($Ax, $Ay, $Bx, $By); $s = ($sideA + $sideB + $sideC) / 2; $R = triangleArea($Ax, $Ay, $Bx, $By, $Cx, $Cy) / ($s - &Length($Dx, $Dy, $Ex, $Ey)); if (($D eq $A && $E eq $B) || ($D eq $B && $E eq $A)) { $theAdeg = &Angle($Bx, $By, $Cx, $Cy, $Ax, $Ay); $Xmypoint = $Cx; $Ymypoint = $Cy; } elsif (($D eq $B && $E eq $C) || ($D eq $C && $E eq $B)) { $theAdeg = &Angle($Cx, $Cy, $Ax, $Ay, $Bx, $By); $Xmypoint = $Ax; $Ymypoint = $Ay; } elsif (($D eq $C && $E eq $A) || ($D eq $A && $E eq $C)) { $theAdeg = &Angle($Ax, $Ay, $Bx, $By, $Cx, $Cy); $Xmypoint = $Bx; $Ymypoint = $By; } else { return (0,0,0); } $d = $R / sin($theAdeg * PI / 180 / 2); my ($xIn, $yIn, $rin) = &IncircleCenter($Ax, $Ay, $Bx, $By, $Cx, $Cy); $deltax = $xIn - $Xmypoint; $deltay = $yIn - $Ymypoint; $mylength = sqrt($deltax*$deltax + $deltay*$deltay); $xc = $Xmypoint + $d * $deltax / $mylength; $yc = $Ymypoint + $d * $deltay / $mylength; return ($xc, $yc, $R); } sub DrawLineOrArrow { my $draw_Line = shift; my $lc = shift; my $lineLength = -1; my $stacklen = 0; my @PP = (); # if ($draw_Line != 2) { # s/\s*//; # if (s/^\[\s*//) { # optional length specifier # $lineLength = expr($lc); # if ($lineLength <= 0) { # PrintErrorMessage("length must greater than zero",$lc); # $lineLength = -1; # } # chk_rsb("optional part",$lc); # } # } chk_lparen("$cmd",$lc); DRAWLINES:while(1) { @PP = () ; while(1) { if (s/^([^\W\d_]\d{0,4})\s*//i) { #point name $P = $1; if (!exists($PointTable{lc($P)})) { PrintErrorMessage("Undefined point $P",$lc); } else { push (@PP,$P); } } else { $stacklen = @PP; if ($draw_Line != 2) { if ($stacklen <= 1) { PrintErrorMessage("Wrong number of points",$lc); } else { push(@PP,$lc); if ($draw_Line == 0) { drawarrows(@PP); } elsif ($draw_Line == 1) { drawlines(@PP); } } } if (s/^,\s*// and $draw_Line != 2) { next DRAWLINES; } else { last DRAWLINES; } } } } if ($draw_Line == 2) { $stacklen = @PP; if ($stacklen < 2) { PrintErrorMessage("Wrong number of points",$lc); } elsif ($stacklen % 2 == 0) { PrintErrorMessage("Number of points must be odd",$lc); } else { drawCurve(@PP); } } chk_rparen("arguments of $cmd",$lc); chk_comment($lc); } sub drawarrows { my ($NoArgs); $NoArgs = @_; my ($lc) = $_[$NoArgs-1]; #line number is the last argument my ($NumberOfPoints, $p, $q, $r12, $d12); my ($px,$py,$pSV,$pS, $qx,$qy,$qSV,$qS); $NumberOfPoints = $NoArgs - 1; LOOP: for(my $i=0; $i < $NumberOfPoints - 1; $i++) { $p = $_[$i]; $q = $_[$i+1]; ($px,$py,$pSV,$pS) = unpack("d3A*",$PointTable{lc($p)}); ($qx,$qy,$qSV,$qS) = unpack("d3A*",$PointTable{lc($q)}); $pSV = $defaultLFradius if $pSV == 0; $qSV = $defaultLFradius if $qSV == 0; $r12 = $pSV + $qSV; $d12 = Length($px,$py,$qx,$qy); if ($d12 <= $r12) { if($d12 == 0) { PrintErrorMessage("points $p and $q are the same", $lc); next LOOP; } PrintWarningMessage("arrow $p$q not drawn: points too close or ". "radii too big", $lc); next LOOP; } ($px, $py) = pointOnLine($px, $py, $qx, $qy, $pSV) if $pSV > 0; ($qx, $qy) = pointOnLine($qx, $qy, $px, $py, $qSV) if $qSV > 0; my ($beta, $gamma); $beta = tan($arrowAngleB * D2R / 2); $gamma = 2 * tan($arrowAngleC * D2R / 2); printf OUT "\\arrow <%.5f%s> [%.5f,%.5f] from %.5f %.5f to %.5f %.5f\n", $arrowLength, $arrowLengthUnits, $beta, $gamma, $px, $py, $qx, $qy; } } sub drawlines { my ($NoArgs); $NoArgs = @_; my ($lc) = $_[$NoArgs-1]; #line number is the last argument my ($NumberOfPoints, $p, $q, $r12, $d12); my ($px,$py,$pSV,$pS, $qx,$qy,$qSV,$qS); $NumberOfPoints = $NoArgs - 1; LOOP: for(my $i=0; $i < $NumberOfPoints - 1; $i++) { $p = $_[$i]; $q = $_[$i+1]; ($px,$py,$pSV,$pS) = unpack("d3A*",$PointTable{lc($p)}); ($qx,$qy,$qSV,$qS) = unpack("d3A*",$PointTable{lc($q)}); $pSV = $defaultLFradius if $pSV == 0; $qSV = $defaultLFradius if $qSV == 0; $r12 = $pSV + $qSV; $d12 = Length($px,$py,$qx,$qy); if ($d12 <= $r12) { if($d12 == 0) { PrintErrorMessage("points $p and $q are the same", $lc); next LOOP; } PrintWarningMessage("line $p$q not drawn: points too close or ". "radii too big", $lc); next LOOP; } ($px, $py) = pointOnLine($px, $py, $qx, $qy, $pSV) if $pSV > 0; ($qx, $qy) = pointOnLine($qx, $qy, $px, $py, $qSV) if $qSV > 0; if ($px == $qx || $py == $qy) { printf OUT "\\putrule from %.5f %.5f to %.5f %.5f %%%% %s%s\n", $px,$py,$qx,$qy,$p,$q; } else { printf OUT "\\plot %.5f %.5f\t%.5f %.5f / %%%% %s%s\n", $px, $py,$qx,$qy,$p,$q; } } } sub drawCurve { my ($NoArgs); $NoArgs = @_; my ($lc) = $_[$NoArgs-1]; #line number is the last argument my ($NumberOfPoints, $p); $NumberOfPoints = $NoArgs - 1; print OUT "\\setquadratic\n\\plot\n"; for(my $i=0; $i <= $NumberOfPoints; $i++) { $p = $_[$i]; my ($px,$py,$pSV,$pS) = unpack("d3A*",$PointTable{lc($p)}); printf OUT "\t%0.5f %0.5f", $px, $py; print OUT (($i == $NumberOfPoints) ? " / %$p\n" : " %$p\n"); } print OUT "\\setlinear\n"; } sub drawpoints { my ($NumberOfPoints,$p); $NumberOfPoints = @_; my ($px,$py,$pSV,$pS); for($i=0; $i < $NumberOfPoints; $i++) { $p = $_[$i]; ($px,$py,$pSV,$pS) = unpack("d3A*",$PointTable{lc($p)}); if ($pS eq "" and $defaultsymbol =~ /circle|square/) { $pS = $defaultsymbol; } POINTSWITCH: { if ($pS eq "") # no plot symbol specified { printf OUT "\\put {%s} at %.5f %.5f %%%% %s\n", $defaultsymbol, $px, $py, $p; last POINTSWITCH; } if ($pS eq "circle") # plot symbol is a circle { my $radius = (defined($DimOfPoint{lc($p)})) ? $DimOfPoint{lc($p)} : $GlobalDimOfPoints; if ($radius > 0) # draw a circle using the current units { if ($radius == 1.5) # use \bigcirc { printf OUT "\\put {\$\\bigcirc\$} at %.5f %.5f %%%% %s\n", $px, $py, $p; } else { printf OUT "\\circulararc 360 degrees from %.5f %.5f center at %.5f %.5f %%%% %s\n", $px+$radius, $py, $px, $py, $p; } } else #use \circ symbol { printf OUT "\\put {\$\\circ\$} at %.5f %.5f %%%% %s\n", $px,$py,$p; } last POINTSWITCH; } if ($pS eq "square") { my $side = (defined($DimOfPoint{lc($p)})) ? $DimOfPoint{lc($p)} : $GlobalDimOfPoints; printf OUT "\\put {%s} at %.5f %.5f %%%% %s\n", drawsquare($side), $px, $py, $p; last POINTSWITCH; } printf OUT "\\put {%s} at %.5f %.5f %%%% %s\n", $pS,$px,$py,$p; } } } sub drawAngleArc { my ($P1, $P2, $P3, $radius, $inout, $direction) = @_; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$P1}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$P2}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$P3}); my $internalAngle = Angle($x1, $y1, $x2, $y2, $x3, $y3); my $externalAngle = 360 - $internalAngle; my ($x, $y) = pointOnLine($x2, $y2, $x1, $y1, $radius); my $code = ""; if ($inout eq "internal" and $direction eq "clockwise" ) { $code = sprintf "\\circulararc %.5f degrees from %.5f %.5f center at %.5f %.5f\n", -1 * $internalAngle, $x, $y, $x2, $y2; } elsif ($inout eq "internal" and $direction eq "anticlockwise" ) { $code = sprintf "\\circulararc %.5f degrees from %.5f %.5f center at %.5f %.5f\n", $internalAngle, $x, $y, $x2, $y2; } elsif ($inout eq "external" and $direction eq "clockwise" ) { $code = sprintf "\\circulararc %.5f degrees from %.5f %.5f center at %.5f %.5f\n", -1 * $externalAngle, $x, $y, $x2, $y2; } elsif ($inout eq "external" and $direction eq "anticlockwise" ) { $code = sprintf "\\circulararc %.5f degrees from %.5f %.5f center at %.5f %.5f\n", $externalAngle, $x, $y, $x2, $y2; } return $code; } sub drawAngleArrow { my ($P1, $P2, $P3, $radius, $inout, $direction) = @_; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$P1}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$P2}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$P3}); my $code = drawAngleArc($P1, $P2, $P3, $radius, $inout, $direction); my ($xqp, $yqp) = pointOnLine($x2, $y2, $x1, $y1, $radius); my ($deltax, $deltay) = ($x1 - $x2, $y1 - $y2); my $AL; if ($xunits =~ /mm/) { $AL = 1; } elsif ($xunits =~ /cm/) { $AL = 0.1; } elsif ($xunits =~ /pt/) { $AL = 2.845; } elsif ($xunits =~ /bp/) { $AL = 2.835; } elsif ($xunits =~ /pc/) { $AL = 0.2371; } elsif ($xunits =~ /in/) { $AL = 0.03937; } elsif ($xunits =~ /dd/) { $AL = 2.659; } elsif ($xunits =~ /cc/) { $AL = 0.2216; } elsif ($xunits =~ /sp/) { $AL = 186467.98; } my $halfAL = $AL / 2; my $d = sqrt($radius * $radius - $halfAL * $halfAL); my $alpha = atan2($d / $halfAL, 1) * R2D; my $beta = 2 * (90 - $alpha); my $thetaqr; if (abs($deltay) < 0.00001) { if ($deltax > 0 ) {$thetaqr = 0 } elsif ($deltax < 0) {$thetaqr = -180} } else { if (abs($deltax) < 0.00001) { $thetaqr = 90; } else { $thetaqr = atan2($deltay / $deltax, 1) * R2D; } } my ($xqr, $yqr) = pointOnLine($x2, $y2, $x3, $y3, $radius); $deltax = $x3 - $x2; $deltay = $y3 - $y2; $alpha = atan2(sqrt($radius * $radius - $halfAL * $halfAL) / $halfAL, 1) / D2R; $beta = 2 * (90 - $alpha); LINE2 : { if (abs($deltax) < 0.00001) { if ($deltay > 0) { $thetaqr = 90 } elsif ($deltay < 0) { $thetaqr = - 90 } last LINE2; } else { $thetaqr = atan2($deltay / $deltax, 1) * R2D; } if (abs($deltay) < 0.00001) { if ($deltax > 0) { $thetaqr = 0 } elsif ($deltax < 0) { $thetaqr = -180 } last LINE2; } else { $thetaqr = atan2($deltay / $deltax, 1) * R2D; } if ($deltax < 0 and $deltay > 0) { $thetaqr += 180 } elsif ($deltax < 0 and $deltay < 0) { $thetaqr += 180 } elsif ($deltax > 0 and $deltay < 0) { $thetaqr += 360 } } my $xqrleft = $x2 + $radius * cos(($thetaqr + $beta) * D2R); my $yqrleft = $y2 + $radius * sin(($thetaqr + $beta) * D2R); my $xqrright = $x2 + $radius * cos(($thetaqr - $beta) * D2R); my $yqrright = $y2 + $radius * sin(($thetaqr - $beta) * D2R); if ($inout eq "internal" and $direction eq "clockwise") { $code .= sprintf "\\arrow <1.5mm> [0.5, 1] from %.5f %.5f to %.5f %.5f\n", $xqrleft, $yqrleft, $xqr, $yqr; } elsif ($inout eq "internal" and $direction eq "anticlockwise") { $code .= sprintf "\\arrow <1.5mm> [0.5, 1] from %.5f %.5f to %.5f %.5f\n", $xqrright, $yqrright, $xqr, $yqr; } elsif ($inout eq "external" and $direction eq "clockwise") { $code .= sprintf "\\arrow <1.5mm> [0.5, 1] from %.5f %.5f to %.5f %.5f\n", $xqrleft, $yqrleft, $xqr, $yqr; } elsif ($inout eq "external" and $direction eq "anticlockwise") { $code .= sprintf "\\arrow <1.5mm> [0.5, 1] from %.5f %.5f to %.5f %.5f\n", $xqrright, $yqrright, $xqr, $yqr; } return $code; } sub expr { my $lc = $_[0]; my($left,$op,$right); $left = term($lc); while ($op = addop()) { $right = term($lc); if ($op eq '+') { $left += $right } else { $left -= $right } } return $left; } sub addop { s/^([+-])// && $1; } sub term { my $lc = $_[0]; my ($left, $op, $right); $left = factor($lc); while ($op = mulop()) { $right = factor($lc); if ($op eq '*') { $left *= $right } elsif ($op =~ /rem/i) { eval {$left %= $right}; PrintFatalError("Division by zero", $lc) if $@; } else { eval {$left /= $right}; PrintFatalError("Division by zero", $lc) if $@; } } return $left; } sub mulop { (s#^([*/])## || s/^(rem)//i) && lc($1); } sub factor { my $lc = $_[0]; my ($left); $left = primitive($lc); if (s/^\*\*//) { $left **= factor($lc); } return $left; } sub primitive { my $lc = $_[0]; my $val; s/\s*//; if (s/^\(//) { #is it an expr in parentheses $val = expr($lc); s/^\)// || PrintErrorMessage("Missing right parenthesis", $lc); } elsif (s/^-//) { # is it a negated primitive $val = - primitive(); } elsif (s/^\+//) { # is it a positive primitive $val = primitive(); } elsif (s/^angledeg//i) { chk_lparen("angledeg",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); my $point_3 = get_point($lc); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point_3}); my $d12 = Length($x1, $y1, $x2, $y2); my $d23 = Length($x2, $y2, $x3, $y3); my $d31 = Length($x3, $y3, $x1, $y1); if ( $d12 == 0 ) { PrintErrorMessage("points `$point_1' and `$point_2' are the same", $lc); $val = 0; } elsif ( $d23 == 0 ) { PrintErrorMessage("points `$point_2' and `$point_3' are the same", $lc); $val = 0; } elsif ( $d31 == 0 ) { PrintErrorMessage("points `$point_1' and `$point_3' are the same", $lc); $val = 0; } else { $val = Angle($x1, $y1, $x2, $y2, $x3, $y3); $val = 0 if $val == -500; } chk_rparen("Missing right parenthesis", $lc); } elsif (s/^angle//i) { chk_lparen("angle",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); my $point_3 = get_point($lc); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point_3}); my $d12 = Length($x1, $y1, $x2, $y2); my $d23 = Length($x2, $y2, $x3, $y3); my $d31 = Length($x3, $y3, $x1, $y1); if ( $d12 == 0 ) { PrintErrorMessage("points `$point_1' and `$point_2' are the same", $lc); $val = 0; } elsif ( $d23 == 0 ) { PrintErrorMessage("points `$point_2' and `$point_3' are the same", $lc); $val = 0; } elsif ( $d31 == 0 ) { PrintErrorMessage("points `$point_1' and `$point_3' are the same", $lc); $val = 0; } else { $val = Angle($x1, $y1, $x2, $y2, $x3, $y3); if ($val == -500) { $val = 0; } else { $val = D2R * $val; } } chk_rparen("Missing right parenthesis", $lc); } elsif (s/^area//i) { chk_lparen("angledeg",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); my $point_3 = get_point($lc); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point_3}); $val = triangleArea($x1, $y1, $x2, $y2, $x3, $y3); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^asin//i) { chk_lparen("asin"); $val = expr(); PrintFatalError("Can't take asin of $val", $lc) if $val < -1 || $val > 1; $val = asin($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^acos//i) { chk_lparen("acos"); $val = expr(); PrintFatalError("Can't take acos of $val", $lc) if $val < -1 || $val > 1 ; $val = acos($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^atan//i) { chk_lparen("atan"); $val = expr(); $val = atan($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^cos//i) { chk_lparen("cos"); $val = expr(); $val = cos($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^directiondeg//i) { chk_lparen("directiondeg",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); my $x3 = $x1+1; if ( ($y2 - $y1) >= 0) { $val = Angle($x3, $y1, $x1, $y1, $x2, $y2); $val = 0 if $val == -500; } else { $val = 360 - Angle($x3, $y1, $x1, $y1, $x2, $y2); $val = 0 if $val == -500; } chk_rparen("Missing right parenthesis", $lc); } elsif (s/^direction//i) { chk_lparen("direction",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); my $x3 = $x1+1; if ( ($y2 - $y1) >= 0) { $val = Angle($x3, $y1, $x1, $y1, $x2, $y2); $val = 0 if $val == -500; $val = D2R * $val; } else { $val = 360 - Angle($x3, $y1, $x1, $y1, $x2, $y2); $val = 0 if $val == -500; $val = D2R * $val; } chk_rparen("Missing right parenthesis", $lc); } elsif (s/^exp//i) { chk_lparen("exp"); $val = expr(); $val = exp($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^int//i) { chk_lparen("int"); $val = expr(); $val = int($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^log//i) { chk_lparen("log"); $val = expr(); PrintFatalError("Can't take log of $val", $lc) if $val <= 0; $val = log($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^sin//i) { chk_lparen("sin"); $val = expr(); $val = sin($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^sgn//i) { chk_lparen("sgn"); $val = expr(); if ($val > 0) { $val = 1; } elsif ($val == 0) { $val = 0; } else { $val = -1; } chk_rparen("Missing right parenthesis", $lc); } elsif (s/^sqrt//i) { chk_lparen("sqrt"); $val = expr(); $val = sqrt($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^tan//i) { chk_lparen("tan"); $val = expr(); $val = sin($val)/cos($val); chk_rparen("Missing right parenthesis", $lc); } elsif (s/^xcoord//i) { chk_lparen("xcoord"); my $point_name = get_point; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_name}); $val = $x1; chk_rparen("Missing right parenthesis", $lc); } elsif (s/^ycoord//i) { chk_lparen("ycoord"); my $point_name = get_point; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_name}); $val = $y1; chk_rparen("Missing right parenthesis", $lc); } elsif (s/^_pi_//i) { $val = PI; } elsif (s/^_e_//i) { $val = 2.71828182845905; } elsif (s/^_linethickness_//i) { $val = $LineThickness / $xunits; } else { my $err_code; ($val,$err_code) = ComputeDist($lc); } s/\s*//; return $val; } sub memberOf { my $elem = shift(@_); my $found = 0; foreach $item (@_){ if ($item eq $elem){ $found = 1; last; } } return $found; } sub midpoint { my ($x1, $y1, $x2, $y2)=@_; return ($x1 + ($x2 - $x1)/2, $y1 + ($y2 - $y1)/2); } sub tand { my $d = $_[0]; $d = $d * PI / 180; return sin($d)/cos($d); } sub get_string { my $string = shift; my $lc = shift; $string =~ s/^\s+//; if ($string !~ s/^\"//) { PrintErrorMessage("No starting \" found",$lc); return (1,$string,$string); } my @ch = split //,$string; my @cmd; while (@ch and $ch[0] ne "\"") { if ($ch[0] eq "\\" and (defined $ch[1]) and $ch[1] eq "\"") { shift @ch; push @cmd, $ch[0]; shift @ch; } else { push @cmd, $ch[0]; shift @ch; } } if (! defined $ch[0]) { PrintErrorMessage("No closing \" found",$lc); return (1,join("",@cmd), join("",@ch)) } else { shift @ch; return (0, join("",@cmd), join("",@ch)) } } sub is_tainted { my $arg = shift; my $nada = substr($arg,0,0); local $@; eval { eval "# $nada"}; return length($@) != 0; } sub noOfDigits { my $num = $_[0]; if ($num =~ /^[\+-]?\d+(?!\.)/) { return 0; } elsif ($num =~ /^[\+-]\d+\.(\d+)?/) { return length($1); } } sub drawsquare { my $s = $_[0]; #$s *= sqrt(2); $s = sprintf "%.5f", $s; my $code = "\\setlength{\\unitlength}{$xunits}%\n"; $code .= "\\begin{picture}($s,$s)\\put(0,0)" . "{\\framebox($s,$s){}}\\end{picture}"; return $code; } sub X2sp { my $LT = shift; my $units = shift; if ($units eq "pc") { return $LT * 786432; } elsif ($units eq "pt") { return $LT * 65536; } elsif ($units eq "in") { return $LT * 4736286.72; } elsif ($units eq "bp") { return $LT * 65781.76; } elsif ($units eq "cm") { return $LT * 1864679.811023622; } elsif ($units eq "mm") { return $LT * 186467.981102362; } elsif ($units eq "dd") { return $LT * 70124.086430424; } elsif ($units eq "cc") { return $LT * 841489.037165082; } elsif ($units eq "sp") { return $LT; } } sub sp2X { my $LT = shift; my $units = shift; if ($units eq "pc") { return $LT / 786432; } elsif ($units eq "pt") { return $LT / 65536; } elsif ($units eq "in") { return $LT / 4736286.72; } elsif ($units eq "bp") { return $LT / 65781.76; } elsif ($units eq "cm") { return $LT / 1864679.811023622; } elsif ($units eq "mm") { return $LT / 186467.981102362; } elsif ($units eq "dd") { return $LT / 70124.086430424; } elsif ($units eq "cc") { return $LT / 841489.037165082; } elsif ($units eq "sp") { return $LT; } } sub setLineThickness { my $Xunits = shift; my $LT = shift; $Xunits =~ s/^((\+|-)?\d+(\.\d+)?([eE](\+|-)?\d+)?)//; my $xlength = "$1"; $Xunits =~ s/^\s*($units)//; my $x_in_units = $1; $LT =~ s/^((\+|-)?\d+(\.\d+)?([eE](\+|-)?\d+)?)//; my $LTlength = "$1"; $LT =~ s/^\s*($units)//; my $LT_in_units = $1; $LTlength = X2sp($LTlength,$LT_in_units); $LTlength = sp2X($LTlength,$x_in_units); return $LTlength; } sub process_input { my ($INFILE,$currInFile) = @_; my $lc = 0; my $no_output = 0; $curr_in_file = $currInFile; LINE: while(<$INFILE>) { $lc++; chomp($command = $_); s/^\s+//; if (/^beginSkip\s*/i) { $no_output = 1; print OUT "%%$_" if $comments_on; next LINE; } elsif (/^endSkip\s*/i) { if ($no_output == 0) { PrintErrorMessage("endSkip without beginSkip",$lc); } else { $no_output = 0; } print OUT "%%$_" if $comments_on and !$no_output; next LINE; } elsif ($no_output == 1) { next LINE; } else { if (/^[^\\]/) { my $out_line = mpp($command,$lc) unless /^\\/; #call macro pre-processor $_ = "$out_line\n"; } if (/^\s*%/) { print OUT "$_" if $comments_on; } elsif (s/^\s*(beginloop(?=\W))//i) { s/\s+//; my $times = expr($lc); print OUT "%% BEGINLOOP $times\n" if $comments_on; my @C = (); REPEATCOMMS: while (<$INFILE>) { if (/^\s*endloop/i) { last REPEATCOMMS; } else { push @C, $_; } } if (! /^\s*endloop/i) { PrintFatalError("unexpected end of file",$lc); } else { s/^\s*endloop//i; for(my $i=1; $i<=$times; $i++) { tie *DUMMY, 'DummyFH', \@C; process_input(DUMMY, $currInFile); untie *DUMMY; } print OUT "%% ENDLOOP\n" if $comments_on; } } elsif (s/^\s*(ArrowShape(?=\W))//i) { my $cmd = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("$cmd",$lc); if (s/^default//i) { $arrowLength = 2; $arrowLengthUnits = "mm"; $arrowAngleB = 30; $arrowAngleC = 40; } else { my ($LocalArrowLength, $LocalArrowAngleB ,$LocalArrowAngleC) = (0,0,0); $LocalArrowLength = expr($lc); if (s/^\s*($units)//i) { $arrowLengthUnits = "$1"; } else { $xunits =~ /(\d+(\.\d+)?)\s*($units)/; $LocalArrowLength *= $1; $arrowLengthUnits = "$3"; } chk_comma($lc); $LocalArrowAngleB = expr($lc); chk_comma($lc); $LocalArrowAngleC = expr($lc); $arrowLength = ($LocalArrowLength == 0 ? 2 : $LocalArrowLength); $arrowLengthUnits = ($LocalArrowLength == 0 ? "mm" : $arrowLengthUnits); $arrowAngleB = ($LocalArrowAngleB == 0 ? 30 : $LocalArrowAngleB); $arrowAngleC = ($LocalArrowAngleC == 0 ? 40 : $LocalArrowAngleC); } chk_rparen("after $cmd arguments",$lc); chk_comment("after $cmd command",$lc); print OUT "%% arrowLength = $arrowLength$arrowLengthUnits, ", "arrowAngleB = $arrowAngleB ", "and arrowAngleC = $arrowAngleC\n" if $comments_on; } elsif (s/^\s*(const(?=\W))//i) { print OUT "%% $1$_" if $comments_on; do{ s/\s*//; PrintErrorMessage("no identifier found after token const",$lc) if $_ !~ s/^([^\W\d_]\d{0,4})//i; my $Constname = $1; my $constname = lc($Constname); if (exists $ConstTable{$constname}) { PrintErrorMessage("Redefinition of constant $constname",$lc); } s/\s*//; #remove leading white space PrintErrorMessage("did not find expected = sign",$lc) if $_ !~ s/^[=]//i; my $val = expr($lc); $VarTable{$constname} = $val; $ConstTable{$constname} = 1; print OUT "%% $Constname = $val\n" if $comments_on; }while (s/^,//); chk_comment($lc); s/\s*//; if (/^[^%]/) { PrintWarningMessage("Trailing text is ignored",$lc); } } elsif (s/^\s*(dasharray(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen($cmd,$lc); my @DashArray = (); my $dash = ""; my $dashpattern = ""; PATTERN: while (1) { $dash = sprintf("%.5f", expr($lc)); if (s/^\s*($units)//i) { push (@DashArray, "$dash$1"); } else { PrintErrorMessage("Did not found unit after expression", $lc); } s/\s*//; if (/^[^,]/) { last PATTERN; } else { s/^,\s*//; } } print OUT "\\setdashpattern <"; while (@DashArray) { $dashpattern .= shift @DashArray; $dashpattern .= ","; } $dashpattern =~ s/,$//; print OUT $dashpattern, ">\n"; chk_rparen("arguments of $cmd",$lc); chk_comment($lc); } elsif (s/^\s*(drawAngleArc(?=\W))//i or s/^\s*(drawAngleArrow(?=\W))//i ) { my $cmd = $1; print OUT "%% $cmd$_" if $comments_on; chk_lcb($cmd,$lc); my ($P1, $P2, $P3); if (s/^angle(?=\W)//i) { chk_lparen("token angle of command $cmd",$lc); $P1 = get_point($lc); next LINE if $P1 eq "_undef_"; $P2 = get_point($lc); next LINE if $P2 eq "_undef_"; $P3 = get_point($lc); next LINE if $P3 eq "_undef_"; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$P1}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$P2}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$P3}); my $Angle = Angle($x1, $y1, $x2, $y2, $x3, $y3); if ($Angle <= 0) { if ($Angle == 0) { PrintErrorMessage("Angle is equal to zero",$lc); next LINE; } elsif ($Angle < -400) { PrintErrorMessage("Something is wrong with the points",$lc); next LINE; } } chk_rparen("angle part of command $cmd",$lc); } else { PrintErrorMessage("Did not find expected angle part",$lc); next LINE; } s/^,\s*// or s/\s*//; #parse optional comma my $radius; if (s/^radius(?=\W)//i) { chk_lparen("token radius of command $cmd",$lc); $radius = expr($lc); chk_rparen("radius part of command $cmd",$lc); } else { PrintErrorMessage("Did not found expected angle part",$lc); next LINE; } s/^,\s*// or s/\s*//; #parse optional comma my $inout = ""; if (s/^(internal(?=\W))//i or s/^(external(?=\W))//i) { $inout = $1; } else { PrintErrorMessage("Did not find expected 'internal' specifier", $lc); next LINE; } s/^,\s*// or s/\s*//; #parse optional comma my $direction = ""; if (s/^(clockwise(?=\W))//i or s/^(anticlockwise(?=\W))//i) { $direction = $1; } else { PrintErrorMessage("Did not find expected 'direction' specifier", $lc); next LINE; } chk_rcb("arguments of $cmd",$lc); chk_comment($lc); my $code; if (lc($cmd) eq "drawanglearc") { $code = drawAngleArc($P1, $P2, $P3, $radius, $inout, $direction); } else { $code = drawAngleArrow($P1, $P2, $P3, $radius, $inout, $direction); } print OUT $code if $code ne ""; } elsif (s/^\s*(drawArrow(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; DrawLineOrArrow(0,$lc); } elsif (s/^\s*(drawcircle(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("drawcircle",$lc); my $Point = get_point($lc); next LINE if $Point eq "_undef_"; chk_comma($lc); my $R = expr($lc); if ($R <= 0) { PrintErrorMessage("Radius must be greater than zero",$lc); next LINE; } my ($x,$y,$pSV,$pS)=unpack("d3A*",$PointTable{lc($Point)}); printf OUT "\\circulararc 360 degrees from %.5f %.5f center at %.5f %.5f\n", $x+$R, $y, $x, $y; chk_rparen("arguments of $cmd",$lc); chk_comment($lc); } elsif (s/^\s*(drawcurve(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; DrawLineOrArrow(2,$lc); } elsif (s/^\s*(drawcircumcircle(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("drawcircumcircle",$lc); my $point1 = get_point($lc); next LINE if $point1 eq "_undef_"; my $point2 = get_point($lc); next LINE if $point2 eq "_undef_"; my $point3 = get_point($lc); next LINE if $point3 eq "_undef_"; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point1}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point2}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point3}); my ($xc, $yc,$r) = circumCircleCenter($x1,$y1,$x2,$y2,$x3,$y3,$lc); next LINE if $xc == 0 and $yc == 0 and $r == 0; print OUT "%% circumcircle center = ($xc,$yc), radius = $r\n" if $comments_on; printf OUT "\\circulararc 360 degrees from %.5f %.5f center at %.5f %.5f\n", $xc+$r, $yc, $xc, $yc; chk_rparen("arguments of $cmd",$lc); chk_comment($lc); } elsif (s/^\s*(drawexcircle(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("drawexcircle",$lc); my $point1 = get_point($lc); next LINE if $point1 eq "_undef_"; my $point2 = get_point($lc); next LINE if $point2 eq "_undef_"; my $point3 = get_point($lc); next LINE if $point3 eq "_undef_"; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point1}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point2}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point3}); if (triangleArea($x1, $y1, $x2, $y2, $x3, $y3) < 0.0001) { PrintErrorMessage("Area of triangle is zero!",$lc); next LINE; } chk_comma($lc); my $point4 = get_point($lc); if (!memberOf($point4, $point1, $point2, $point3)) { PrintErrorMessage("Current point isn't a side point",$lc); next LINE; } next LINE if $point4 eq "_undef_"; my $point5 = get_point($lc); next LINE if $point5 eq "_undef_"; if (!memberOf($point5, $point1, $point2, $point3)) { PrintErrorMessage("Current point isn't a side point",$lc); next LINE; } if ($point4 eq $point5) { PrintErrorMessage("Side points are identical",$lc); next LINE; } chk_rparen("arguments of $cmd",$lc); my ($xc, $yc, $r) = excircle($point1, $point2, $point3, $point4, $point5); my $R=$r; if (s/^\s*\[\s*//) { $R += expr($lc); if ($R < 0.0001) { PrintErrorMessage("Radius has become equal to zero!",$lc); next LINE; } chk_rsb($lc); } if ($R > (500 / 2.845)) { PrintErrorMessage("Radius is greater than 175mm!",$lc); next LINE; } print OUT "%% excircle center = ($xc,$yc) radius = $R\n" if $comments_on; printf OUT "\\circulararc 360 degrees from %.5f %.5f center at %.5f %.5f\n", $xc+$R, $yc, $xc, $yc; chk_comment($lc); } elsif (s/^\s*(drawincircle(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("drawincircle",$lc); my $point1 = get_point($lc); next LINE if $point1 eq "_undef_"; my $point2 = get_point($lc); next LINE if $point2 eq "_undef_"; my $point3 = get_point($lc); next LINE if $point3 eq "_undef_"; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point1}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point2}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point3}); if (triangleArea($x1, $y1, $x2, $y2, $x3, $y3) < 0.0001) { PrintErrorMessage("Area of triangle is zero!",$lc); next LINE; } my ($xc, $yc, $r) = IncircleCenter($x1,$y1,$x2,$y2,$x3,$y3); my $R=$r; if (s/^\s*\[\s*//) { $R += expr($lc); if ($R < 0.0001) { PrintErrorMessage("Radius has become equal to zero!",$lc); next LINE; } chk_rsb($lc); } if ($R > (500 / 2.845)) { PrintErrorMessage("Radius is greater than 175mm!",$lc); next LINE; } print OUT "%% incircle center = ($xc,$yc) radius = $R\n" if $comments_on; printf OUT "\\circulararc 360 degrees from %.5f %.5f center at %.5f %.5f\n", $xc+$R, $yc, $xc, $yc; chk_rparen("arguments of $cmd",$lc); chk_comment($lc); } elsif (s/^\s*(drawline(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; DrawLineOrArrow(1,$lc); } elsif (s/^\s*(drawthickarrow(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; print OUT "\\setplotsymbol ({\\usefont{OT1}{cmr}{m}{n}\\large .})%\n"; print OUT "{\\setbox1=\\hbox{\\usefont{OT1}{cmr}{m}{n}\\large .}%\n"; print OUT " \\global\\linethickness=0.31\\wd1}%\n"; DrawLineOrArrow(0,$lc); print OUT "\\setlength{\\linethickness}{0.4pt}%\n"; print OUT "\\setplotsymbol ({\\usefont{OT1}{cmr}{m}{n}\\tiny .})%\n"; } elsif (s/^\s*(drawthickline(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; print OUT "\\setplotsymbol ({\\usefont{OT1}{cmr}{m}{n}\\large .})%\n"; print OUT "{\\setbox1=\\hbox{\\usefont{OT1}{cmr}{m}{n}\\large .}%\n"; print OUT " \\global\\linethickness=0.31\\wd1}%\n"; DrawLineOrArrow(1,$lc); print OUT "\\setlength{\\linethickness}{0.4pt}%\n"; print OUT "\\setplotsymbol ({\\usefont{OT1}{cmr}{m}{n}\\tiny .})%\n"; } elsif (s/^\s*(drawperpendicular(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen($cmd,$lc); my $A = get_point($lc); next LINE if $A eq "_undef_"; chk_comma($lc); my $B = get_point($lc); next LINE if $A eq "_undef_"; s/\s*//; #ignore white space my $C = get_point($lc); next LINE if $A eq "_undef_"; chk_rparen("arguments of $cmd",$lc); chk_comment($lc); # #start actual computation # my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$A}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$B}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$C}); my ($xF, $yF) = perpendicular($x1, $y1, $x2, $y2, $x3, $y3); printf OUT "\\plot %.5f %.5f %.5f %.5f /\n", $x1, $y1, $xF, $yF; } elsif (s/^\s*(drawpoint(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; my ($stacklen); chk_lparen("$cmd",$lc); if (/^\)/) { PrintErrorMessage("There are no point to draw",$lc); next LINE; } my(@PP); DRAWPOINTS:while(1) { if (s/^([^\W\d_]\d{0,4})//i) { #point name $P = $1; if (!exists($PointTable{lc($P)})) { PrintErrorMessage("Undefined point $P",$lc); next DRAWPOINTS; } else { push (@PP,$P); s/\s*//; } } else { last DRAWPOINTS; } } drawpoints(@PP); chk_rparen("arguments of $cmd",$lc); chk_comment($lc); } elsif (s/^\s*(drawRightAngle(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("drawRightAngle",$lc); my $point1 = get_point($lc); next LINE if $point1 eq "_undef_"; my $point2 = get_point($lc); next LINE if $point2 eq "_undef_"; my $point3 = get_point($lc); next LINE if $point3 eq "_undef_"; my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point1}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point2}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point3}); chk_comma($lc); my $dist = expr($lc); chk_rparen("arguments of $cmd",$lc); chk_comment($lc); # #actual computation # my ($Px, $Py) = pointOnLine($x2, $y2, $x1, $y1, $dist); my ($Qx, $Qy) = pointOnLine($x2, $y2, $x3, $y3, $dist); my ($Tx, $Ty) = midpoint($Px, $Py, $Qx, $Qy); my ($Ux, $Uy) = pointOnLine($x2, $y2, $Tx, $Ty, 2*Length($x2, $y2, $Tx, $Ty)); if ($Px == $Ux || $Py == $Uy) { printf OUT "\\putrule from %.5f %.5f to %.5f %.5f \n", $Px,$Py,$Ux,$Uy; } else { printf OUT "\\plot %.5f %.5f\t%.5f %.5f / \n", $Px, $Py,$Ux,$Uy; } if ($Ux == $Qx || $Uy == $Qy) { printf OUT "\\putrule from %.5f %.5f to %.5f %.5f \n", $Ux,$Uy,$Qx,$Qy; } else { printf OUT "\\plot %.5f %.5f\t%.5f %.5f / \n", $Ux, $Uy,$Qx,$Qy; } } elsif (s/^\s*(drawsquare(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("drawSquare",$lc); my $p = get_point($lc); chk_comma($lc); my $side = expr($lc); $side = $side - (1.1 * $LineThickness/$xunits); #Suggested by RWDN my ($x,$y,$pSV,$pS) = unpack("d3A*",$PointTable{$p}); printf OUT "\\put {%s} at %.5f %.5f %%drawsquare\n", drawsquare($side), $x, $y; chk_rparen("arguments of $cmd",$lc); chk_comment($lc); } elsif (s/^\s*inputfile\*//i) { chk_lparen("inputfile*",$lc); my $row_in = ""; if (s/^((\w|-|\.)+)//) { $row_in = $1; } else { PrintErrorMessage("No input file name found",$lc); next LINE; } if (!(-e $row_in)) { PrintErrorMessage("File $row_in does not exist",$lc); next LINE; } open(ROW, "$row_in")|| die "Can't open file $row_in\n"; while (defined($in_line=<ROW>)) { print OUT $in_line; } print OUT "%% ... end of input file <$row_in>\n"; close ROW; chk_rparen("input file name",$lc); chk_comment($lc); } elsif (s/^\s*(inputfile(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("inputfile",$lc); my $comm_in = ""; if (s/^((\w|-|\.)+)//) { $comm_in = $1; } else { PrintErrorMessage("No input file name found",$lc); next LINE; } if (!(-e $comm_in)) { PrintErrorMessage("File $comm_in does not exist",$lc); next LINE; } chk_rparen("input file name",$lc); my $input_times = 1; #default value if (s/^\[//) { $input_times = expr($lc); chk_rsb("optional argument",$lc); } print OUT "%% ... start of file <$comm_in> loop [$input_times]\n"; for (my $i=0; $i<int($input_times); $i++) { open(COMM,"$comm_in") or die "Can't open file $comm_in\n"; print OUT "%%% Iteration number: ",$i+1,"\n"; my $old_file_name = $curr_in_file; process_input(COMM,"File $comm_in, "); $curr_in_file = $old_file_name; close COMM; } print OUT "%% ... end of file <$comm_in> loop [$input_times]\n"; chk_comment($lc); } elsif (s/^\s*(linethickness(?=\W))//i) { my $cmd = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("linethickness", $lc); if (s/^default//i) { print OUT "\\linethickness=0.4pt\\Linethickness{0.4pt}%%\n"; print OUT "\\setplotsymbol ({\\usefont{OT1}{cmr}{m}{n}\\tiny .})%\n"; $LineThickness = setLineThickness($xunits,"0.4pt"); } else { my $length = expr($lc); if (s/^\s*($units)//i) { my $units = $1; printf OUT "\\linethickness=%.5f%s\\Linethickness{%.5f%s}%%\n", $length, $units, $length, $units; $LineThickness = setLineThickness($xunits,"$length$units"); my $mag; if ($units eq "pc") { $mag = $length * 12; } elsif ($units eq "in") { $mag = $length * 72.27; } elsif ($units eq "bp") { $mag = $length * 1.00375; } elsif ($units eq "cm") { $mag = $length * 28.45275; } elsif ($units eq "mm") { $mag = $length * 2.845275; } elsif ($units eq "dd") { $mag = $length * 1.07001; } elsif ($units eq "cc") { $mag = $length * 0.08917; } elsif ($units eq "sp") { $mag = $length * 0.000015259; } elsif ($units eq "pt") { $mag = $length; } $mag = 10 * $mag / 1.00278219; printf OUT "\\font\\CM=cmr10 at %.5fpt%%\n", $mag; print OUT "\\setplotsymbol ({\\CM .})%\n"; } else { PrintErrorMessage("Did not found expect units part",$lc); } } chk_rparen("linethickness", $lc); chk_comment($lc); } elsif (s/^\s*(paper(?=\W))//i) { my ($cmd) = $1; print OUT "%% $cmd$_" if $comments_on; chk_lcb("paper", $lc); if (s/^units(?=\W)//i) { chk_lparen("units",$lc); if(s/^\)//) { PrintWarningMessage("Missing value in \"units\"--default is 1pt", $lc); $xunits = "1pt"; } else { $xunits = expr($lc); s/\s*//; if (s/^($units)//i) { $xunits .= "$1"; $LineThickness = setLineThickness($xunits,"0.4pt"); } elsif(s/^(\w)+//i) { PrintErrorMessage("$1 is not a valid mathspic unit",$lc); $xunits = "1pt"; } else { PrintErrorMessage("No x-units found",$lc); $xunits = "1pt"; } s/\s*//; #ignore white space if (s/^,//) { # there is a comma so expect an y-units s/\s*//; #ignore white space $yunits = expr($lc); s/\s*//; #ignore white space if (s/^($units)//i) { $yunits .= "$1"; } elsif(s/^(\w)+//i) { PrintErrorMessage("$1 is not a valid mathspic unit",$lc); $yunits = "1pt"; } else { PrintErrorMessage("No y-units found",$lc); $yunits = $xunits; } } else { $yunits = $xunits; } chk_rparen("units",$lc); } $nounits = 0; } else { $nounits = 1; } s/^,\s*// or s/\s*//; if (s/^xrange//i) { chk_lparen("xrange",$lc); my $ec; ($xlow,$ec) = ComputeDist($lc); next LINE if $ec == 0; chk_comma($lc); ($xhigh,$ec) = ComputeDist($lc); next LINE if $ec == 0; if ($xlow >= $xhigh) { PrintErrorMessage("xlow >= xhigh in xrange",$lc); next LINE; } chk_rparen("$xhigh",$lc); $noxrange = 0; } else { $noxrange = 1; } s/^,\s*// or s/\s*//; if (s/^yrange//i) { chk_lparen("yrange",$lc); my $ec; ($ylow,$ec) = ComputeDist($lc); next LINE if $ec == 0; chk_comma($lc); ($yhigh,$ec) = ComputeDist($lc); next LINE if $ec == 0; if ($ylow >= $yhigh) { PrintErrorMessage("ylow >= yhigh in yrange",$lc); next LINE; } chk_rparen("$yhigh",$lc); $noyrange = 0; } else { $noyrange = 1; } if (!$nounits) { printf OUT "\\setcoordinatesystem units <%s,%s>\n", $xunits,$yunits; } if(!$noxrange && !$noyrange) { printf OUT "\\setplotarea x from %.5f to %.5f, y from %.5f to %.5f\n", $xlow, $xhigh, $ylow, $yhigh; } s/^,\s*// or s/\s*//; $axis = ""; if (s/^ax[ei]s(?=\W)//i) { chk_lparen("axis",$lc); while(/^[^\)]/) { if (s/^([lrtbxy]{1}\*?)//i) { $axis .= $1; } elsif (s/^([^lrtbxy])//i) { PrintErrorMessage("Non-valid character \"$1\" in axis()",$lc); } s/\s*//; } chk_rparen("axis(arguments",$lc); } $axis = uc($axis); s/^,\s*// or s/\s*//; if (s/^ticks(?=\W)//i) { chk_lparen("ticks",$lc); my $ec; ($xticks,$ec) = ComputeDist($lc); next LINE if $ec == 0; chk_comma($lc); ($yticks,$ec) = ComputeDist($lc); next LINE if $ec == 0; chk_rparen("ticks(arguments",$lc); } else { $xticks = $yticks = 0; } chk_rcb("paper", $lc); YBRANCH: { if (index($axis, "Y")>-1) { if (index($axis, "Y*")>-1) { print OUT "\\axis left shiftedto x=0 / \n"; last YBRANCH; } if ($yticks > 0) { if (index($axis, "T")>-1 && index($axis, "B")==-1) { print OUT "\\axis left shiftedto x=0 ticks numbered from "; print OUT "$ylow to -$yticks by $yticks\n from $yticks to "; print OUT $yhigh-$yticks," by $yticks /\n"; } elsif (index($axis, "T")==-1 && index($axis, "B")>-1) { print OUT "\\axis left shiftedto x=0 ticks numbered from "; print OUT $ylow+$yticks," to -$yticks by $yticks\n from "; print OUT "$yticks to $yhigh by $yticks /\n"; } elsif (index($axis, "T")>-1 && index($axis, "B")>-1) { print OUT "\\axis left shiftedto x=0 ticks numbered from "; print OUT $ylow+$yticks," to -$yticks by $yticks\n from "; print OUT "$yticks to ",$yhigh-$yticks," by $yticks /\n"; } else { print OUT "\\axis left shiftedto x=0 ticks numbered from "; print OUT "$ylow to -$yticks by $yticks\n from "; print OUT "$yticks to $yhigh by $yticks /\n"; } } else { print OUT "\\axis left shiftedto x=0 /\n"; } } } XBRANCH: { if (index($axis, "X")>-1) { if (index($axis, "X*")>-1) { print OUT "\\axis bottom shiftedto y=0 /\n"; last XBRANCH; } if ($xticks > 0) { if (index($axis, "L")>-1 && index($axis, "R")==1) { print OUT "\\axis bottom shiftedto y=0 ticks numbered from "; print OUT $xlow + $xticks," to -$xticks by $xticks\n from"; print OUT " $xticks to $xhigh by $xticks /\n"; } elsif (index($axis, "L")==-1 && index($axis, "R")>-1) { print OUT "\\axis bottom shiftedto y=0 ticks numbered from "; print OUT "$xlow to -$xticks by $xticks\n from "; print OUT "$xticks to ",$xhigh-$xticks," by $xticks /\n"; } elsif (index($axis, "L")>-1 && index($axis, "R")>-1) { print OUT "\\axis bottom shiftedto y=0 ticks numbered from "; print OUT $xlow + $xticks," to -$xticks by $xticks\n from "; print OUT "$xticks to ",$xhigh - $xticks," by $xticks /\n"; } else { print OUT "\\axis bottom shiftedto y=0 ticks numbered from "; print OUT "$xlow to -$xticks by $xticks\n from "; print OUT "$xticks to $xhigh by $xticks /\n"; } } else { print OUT "\\axis bottom shiftedto y=0 /\n"; } } } LBRANCH: {if (index($axis, "L")>-1) { if (index($axis, "L")>-1) { if (index($axis, "L*")>-1) { print OUT "\\axis left /\n"; last LBRANCH; } if ($yticks > 0) { print OUT "\\axis left ticks numbered from "; print OUT "$ylow to $yhigh by $yticks /\n"; } else { print OUT "\\axis left /\n"; } } } } RBRANCH: { if (index($axis, "R")>-1) { if (index($axis, "R*")>-1) { print OUT "\\axis right /\n"; last RBRANCH; } if ($yticks > 0) { print OUT "\\axis right ticks numbered from $ylow to $yhigh by "; print OUT "$yticks /\n"; } else { print OUT "\\axis right /\n"; } } } TBRANCH: { if (index($axis, "T")>-1) { if (index($axis, "T*")>-1) { print OUT "\\axis top /\n"; last TBRANCH; } if ($xticks > 0) { print OUT "\\axis top ticks numbered from $xlow to $xhigh by "; print OUT "$xticks /\n"; } else { print OUT "\\axis top /\n"; } } } BBRANCH: { if (index($axis, "B")>-1) { if (index($axis, "B*")>-1) { print OUT "\\axis bottom /\n"; last BBRANCH; } if ($xticks > 0) { print OUT "\\axis bottom ticks numbered from $xlow to $xhigh by "; print OUT "$xticks /\n"; } else { print OUT "\\axis bottom /\n"; } } } chk_comment($lc); } elsif (s/^\s*(PointSymbol(?=\W))//i) { my $cmd = $1; print OUT "%% $cmd$_" if $comments_on; chk_lparen("$cmd",$lc); if (s/^default//i) #default point symbol { $defaultsymbol = "\$\\bullet\$"; } elsif (s/^(circle|square)//i) { $defaultsymbol = $1; chk_lparen($defaultsymbol, $lc); $GlobalDimOfPoints = expr($lc); chk_rparen("expression", $lc); } elsif (s/^(((\\,){1}|(\\\)){1}|(\\\s){1}|[^\),\s])+)//) #arbitrary LaTeX point { $defaultsymbol = $1; $defaultsymbol=~ s/\\\)/\)/g; $defaultsymbol=~ s/\\,/,/g; $defaultsymbol=~ s/\\ / /g; } else { PrintErrorMessage("unrecognized point symbol",$lc); } if (s/\s*,\s*//) { $defaultLFradius = expr($lc); } chk_rparen("after $cmd arguments",$lc); chk_comment("after $cmd command",$lc); } elsif (s/^\s*point(?=\W)//i) { my ($Point_Line); chomp($Point_Line=$_); my ($pointStar, $PointName, $origPN); $pointStar = 0; # default value: he have a point command $pointStar = 1 if s/^\*//; chk_lparen("point" . (($pointStar)?"*":""),$lc); if (s/^([^\W\d_](?![^\W\d_])\d{0,4})//i) { # # Note: the regular expression (foo)(?!bar) means that we are # looking a foo not followed by a bar. Moreover, the regular # expression [^\W\d_] means that we are looking for letter. # $origPN = $1; $PointName = lc($1); } else { PrintErrorMessage("Invalid point name",$lc); next LINE; } #if ($pointStar and !exists($PointTable{$PointName})) { # PrintWarningMessage("Point $origPN has not been defined",$lc); #} if (!$pointStar and exists($PointTable{$PointName})) { PrintWarningMessage("Point $origPN has been used already",$lc); } chk_rparen("point" . (($pointStar)?"*":""). "($origPN",$lc); chk_lcb("point" . (($pointStar)?"*":""). "($origPN)",$lc); my ($Px, $Py); if (s/^perpendicular(?=\W)//i) { chk_lparen("perpendicular",$lc); my $FirstPoint = &get_point($lc); next LINE if $FirstPoint eq "_undef_"; chk_comma($lc); my $SecondPoint = &get_point($lc); next LINE if $SecondPoint eq "_undef_"; my $ThirdPoint = &get_point($lc); next LINE if $ThirdPoint eq "_undef_"; chk_rparen("No closing parenthesis found",$lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$FirstPoint}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$SecondPoint}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$ThirdPoint}); ($Px, $Py) = perpendicular($x1,$y1,$x2,$y2,$x3,$y3); } elsif (s/^intersection(?=\W)//i) { chk_lparen("intersection",$lc); my $FirstPoint = get_point($lc); next LINE if $FirstPoint eq "_undef_"; my $SecondPoint = get_point($lc); next LINE if $SecondPoint eq "_undef_"; chk_comma($lc); my $ThirdPoint = get_point($lc); next LINE if $ThirdPoint eq "_undef_"; my $ForthPoint = get_point($lc); next LINE if $ForthPoint eq "_undef_"; chk_rparen("No closing parenthesis found",$lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$FirstPoint}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$SecondPoint}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$ThirdPoint}); my ($x4,$y4,$pSV4,$pS4)=unpack("d3A*",$PointTable{$ForthPoint}); ($Px, $Py) = intersection4points($x1,$y1,$x2,$y2,$x3,$y3,$x4,$y4); } elsif (s/^midpoint(?=\W)//i) { chk_lparen("midpoint",$lc); my $FirstPoint = &get_point($lc); next LINE if $FirstPoint eq "_undef_"; my $SecondPoint = &get_point($lc); next LINE if $SecondPoint eq "_undef_"; chk_rparen("No closing parenthesis found",$lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$FirstPoint}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$SecondPoint}); ($Px, $Py) = midpoint($x1, $y1, $x2, $y2); } elsif (s/^pointonline(?=\W)//i) { chk_lparen("pointonline",$lc); my $FirstPoint = &get_point($lc); next LINE if $FirstPoint eq "_undef_"; my $SecondPoint = &get_point($lc); next LINE if $SecondPoint eq "_undef_"; chk_comma($lc); # now get the distance my $distance = expr($lc); chk_rparen("No closing parenthesis found",$lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$FirstPoint}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$SecondPoint}); ($Px, $Py) = pointOnLine($x1,$y1,$x2,$y2,$distance); } elsif (s/^circumcircleCenter(?=\W)//i) { chk_lparen("circumCircleCenter",$lc); my $FirstPoint = &get_point($lc); next LINE if $FirstPoint eq "_undef_"; my $SecondPoint = &get_point($lc); next LINE if $SecondPoint eq "_undef_"; my $ThirdPoint = &get_point($lc); next LINE if $ThirdPoint eq "_undef_"; chk_rparen("No closing parenthesis found",$lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$FirstPoint}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$SecondPoint}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$ThirdPoint}); ($Px, $Py,$r) = &circumCircleCenter($x1,$y1,$x2,$y2,$x3,$y3,$lc); next LINE if $Px == 0 and $Py == 0 and $r == 0; } elsif (s/^IncircleCenter(?=\W)//i) { chk_lparen("IncircleCenter",$lc); my $FirstPoint = &get_point($lc); next LINE if $FirstPoint eq "_undef_"; my $SecondPoint = &get_point($lc); next LINE if $SecondPoint eq "_undef_"; my $ThirdPoint = &get_point($lc); next LINE if $ThirdPoint eq "_undef_"; chk_rparen("No closing parenthesis found",$lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$FirstPoint}); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$SecondPoint}); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$ThirdPoint}); ($Px, $Py, $r) = IncircleCenter($x1,$y1,$x2,$y2,$x3,$y3); } elsif (s/^ExcircleCenter(?=\W)//i) { chk_lparen("ExcircleCenter",$lc); my $PointA = get_point($lc); next LINE if $PointA eq "_undef_"; my $PointB = get_point($lc); next LINE if $PointB eq "_undef_"; my $PointC = get_point($lc); next LINE if $PointC eq "_undef_"; chk_comma($lc); my $PointD = &get_point($lc); next LINE if $PointD eq "_undef_"; if (!memberOf($PointD, $PointA, $PointB, $PointC)) { PrintErrorMessage("Current point isn't a side point",$lc); next LINE; } my $PointE = get_point($lc); next LINE if $PointE eq "_undef_"; if (!memberOf($PointE, $PointA, $PointB, $PointC)) { PrintErrorMessage("Current point isn't a side point",$lc); next LINE; } if ($PointD eq $PointE) { PrintErrorMessage("Side points are identical",$lc); next LINE; } ($Px, $Py, $r) = excircle($PointA, $PointB, $PointC, $PointD, $PointE); chk_rparen("after coordinates part",$lc); } elsif (/^[^\W\d_]\d{0,4}\s*[^,\w]/) { m/^([^\W\d_]\d{0,4})\s*/i; if (exists($PointTable{lc($1)})) { my $Tcoord = get_point($lc); my ($x,$y,$pSV,$pS)=unpack("d3A*",$PointTable{$Tcoord}); $Px = $x; $Py = $y; } else { $Px = expr(); chk_comma($lc); $Py = expr(); } } elsif (/[^\W\d_]\d{0,4}\s*,\s*shift|polar|rotate|vector/i) { #a point? s/^([^\W\d_]\d{0,4})//i; my $PointA = $1; if (exists($PointTable{lc($PointA)})) { s/\s*//; if (s/^,//) { s/\s*//; if (s/^shift(?=\W)//i) { chk_lparen("shift",$lc); my $dist1 = expr($lc); chk_comma($lc); my $dist2 = expr($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{lc($PointA)}); $Px = $x1 + $dist1; $Py = $y1 + $dist2; chk_rparen("shift part",$lc); } elsif (s/^polar(?=\W)//i) { chk_lparen("polar",$lc); my ($R1, $Theta1); $R1 = expr($lc); chk_comma($lc); $Theta1 = expr($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{lc($PointA)}); s/\s*//; if (s/^rad(?=\W)//i) { # do nothing! } elsif (s/^deg(?=\W)//i) { $Theta1 = $Theta1 * PI / 180; } else { #$Theta1 = $Theta1 * PI / 180; } $Px = $x1 + $R1 * cos($Theta1); $Py = $y1 + $R1 * sin($Theta1); chk_rparen("after polar part",$lc); } elsif (s/^rotate(?=\W)//i) { chk_lparen("rotate",$lc); my $Q = lc($PointA); my $P = get_point($lc); next LINE if $P eq "_undef_"; chk_comma($lc); my $Theta1 = expr($lc); my ($xP,$yP,$pSV1,$pS1)=unpack("d3A*",$PointTable{$P}); my ($xQ,$yQ,$pSV2,$pS2)=unpack("d3A*",$PointTable{$Q}); s/\s*//; if (s/^rad(?=\W)//i) { # do nothing! } elsif (s/^deg(?=\W)//i) { $Theta1 = $Theta1 * PI / 180; } else { $Theta1 = $Theta1 * PI / 180; } # shift origin to P $xQ -= $xP; $yQ -= $yP; # do the rotation $Px = $xQ * cos($Theta1) - $yQ * sin($Theta1); $Py = $xQ * sin($Theta1) + $yQ * cos($Theta1); # return origin back to original origin $Px += $xP; $Py += $yP; chk_rparen("after rotate part",$lc); } elsif (s/^vector(?=\W)//i) { chk_lparen("vector",$lc); my ($x0,$y0,$pSV0,$pS0) = unpack("d3A*",$PointTable{lc($PointA)}); my $P = get_point($lc); my $Q = get_point($lc); my ($x1,$y1,$pSV1,$pS1) = unpack("d3A*",$PointTable{$P}); my ($x2,$y2,$pSV2,$pS2) = unpack("d3A*",$PointTable{$Q}); $Px = $x0 + $x2 - $x1; $Py = $y0 + $y2 - $y1; chk_rparen("vector part",$lc); } else { PrintErrorMessage("unexpected token",$lc); next LINE; } } else { my ($xA,$yA,$pSVA,$pSA)=unpack("d3A*",$PointTable{lc($PointA)}); $Px = $xA; $Py = $yA; } } else { PrintErrorMessage("Undefined point $PointA",$lc); next LINE; } } else { $Px = expr(); chk_comma($lc); $Py = expr(); } chk_rcb("coordinates part",$lc); my $sv = $defaultsymbol; my $sh = $defaultLFradius; my $side_or_radius = undef; if (s/^\[\s*//) { # the user has opted to specify the optional part if (/^(symbol|radius|side)\s*/i) { my @previous_options = (); my $number_of_options = 1; my $symbol_set = 0; while (s/^(symbol|radius)\s*//i and $number_of_options <= 2) { my $option = lc($1); if (s/^=\s*//) { if (memberOf($option,@previous_options)) { PrintErrorMessage("Option \"$option\" has been already defined", $lc); my $dummy = expr($lc); } elsif ($option eq "radius") { $sh = expr($lc); $sv = $defaultsymbol if ! $symbol_set; } elsif ($option eq "symbol") { if (s/^circle\s*//i) { $sv = "circle"; chk_lparen("after token circle",$lc); $side_or_radius = expr($lc); chk_rparen("expression",$lc); } elsif (s/^square\s*//i) { $sv = "square"; chk_lparen("after token square",$lc); $side_or_radius = expr($lc); chk_rparen("expression",$lc); } elsif (s/^(((\\\]){1}|(\\,){1}|(\\\s){1}|[^\],\s])+)//) { $sv = $1; $sv =~ s/\\\]/\]/g; $sv =~ s/\\,/,/g; $sv =~ s/\\ / /g; s/\s*//; } $symbol_set = 1; } } else { PrintErrorMessage("unexpected token", $lc); next LINE; } $number_of_options++; push (@previous_options, $option); s/^,\s*//; } } else { PrintErrorMessage("unexpected token", $lc); next LINE; } chk_rsb("optional part",$lc); } # to avoid truncation problems introduced by the pack function, we # round each number up to five decimal digits $Px = sprintf("%.5f", $Px); $Py = sprintf("%.5f", $Py); print OUT "%% point$Point_Line \t$origPN = ($Px, $Py)\n" if $comments_on; chk_comment($lc); $PointTable{$PointName} = pack("d3A*",$Px,$Py,$sh,$sv); if (defined($side_or_radius)) { $DimOfPoint{$PointName} = $side_or_radius; } } elsif (/^\s*setPointNumber(?=\W)/i) { PrintWarningMessage("Command setPointNumber is ignored",$lc); next LINE; } elsif (s/^\s*(showAngle(?=\W))//i) { chk_lparen("showangle",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); my $point_3 = get_point($lc); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point_3}); my $angle = Angle($x1, $y1, $x2, $y2, $x3, $y3); $angle = 0 if $angle == -500; printf OUT "%%%% angle(%s%s%s) = %.5f deg ( %.5f rad)\n", $point_1, $point_2, $point_3, $angle, $angle*D2R; chk_rparen("Missing right parenthesis", $lc); } elsif (s/^\s*(showArea(?=\W))//i) { chk_lparen("showarea",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); my $point_3 = get_point($lc); my ($x3,$y3,$pSV3,$pS3)=unpack("d3A*",$PointTable{$point_3}); print OUT "%% area($point_1$point_2$point_3) = ", triangleArea($x1, $y1, $x2, $y2, $x3, $y3), "\n"; chk_rparen("Missing right parenthesis", $lc); } elsif (s/^\s*(showLength(?=\W))//i) { chk_lparen("showlength",$lc); my $point_1 = get_point($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{$point_1}); my $point_2 = get_point($lc); my ($x2,$y2,$pSV2,$pS2)=unpack("d3A*",$PointTable{$point_2}); print OUT "%% length($point_1$point_2) = ", Length($x1, $y1, $x2, $y2), "\n"; chk_rparen("Missing right parenthesis", $lc); } elsif (/^\s*showPoints(?=\W)/i) { print OUT "%%-------------------------------------------------\n"; print OUT "%% L I S T O F P O I N T S \n"; print OUT "%%-------------------------------------------------\n"; foreach my $p (keys(%PointTable)) { my ($x, $y, $pSV, $pS) = unpack("d3A*",$PointTable{$p}); printf OUT "%%%%\t%s\t= ( %.5f, %.5f ), LF-radius = %.5f, symbol = %s\n", $p, $x, $y, $pSV, $pS; } print OUT "%%-------------------------------------------------\n"; print OUT "%% E N D O F L I S T O F P O I N T S \n"; print OUT "%%-------------------------------------------------\n"; next LINE; } elsif (/^\s*showVariables(?=\W)/i) { print OUT "%%-------------------------------------------------\n"; print OUT "%% L I S T O F V A R I A B L E S \n"; print OUT "%%-------------------------------------------------\n"; foreach my $var (keys(%VarTable)) { print OUT "%%\t", $var, "\t=\t", $VarTable{$var}, "\n"; } print OUT "%%-------------------------------------------------\n"; print OUT "%% E N D O F L I S T O F V A R I A B L E S \n"; print OUT "%%-------------------------------------------------\n"; next LINE; } elsif (s/^\s*(system(?=\W))//i) { print OUT "%% $1$_" if $comments_on; chk_lparen("$cmd",$lc); my ($error, $command, $rest) = get_string($_); next LINE if $error == 1; $_ = $rest; if (! is_tainted($command)) { system($command); } else { PrintErrorMessage("String \"$command\" has tainted data", $lc); next LINE; } chk_rparen("after $cmd arguments",$lc); chk_comment("after $cmd command",$lc); } elsif (s/^\s*(text(?=\W))//i) { print OUT "%% $1$_" if $comments_on; chk_lparen("text",$lc); my ($level,$text)=(1,""); TEXTLOOP: while (1) { $level++ if /^\(/; $level-- if /^\)/; s/^(.)//; last TEXTLOOP if $level==0; $text .= $1; } chk_lcb("text part",$lc); my ($Px, $Py,$dummy,$pos); $pos=""; s/\s*//; if (/^[^\W\d_]\d{0,4}\s*[^,\w]/) { my $Tcoord = get_point($lc); my ($x,$y,$pSV,$pS)=unpack("d3A*",$PointTable{$Tcoord}); $Px = $x; $Py = $y; } elsif (/[^\W\d_]\d{0,4}\s*,\s*shift|polar/i) { s/^([^\W\d_]\d{0,4})//i; my $PointA = $1; if (exists($PointTable{lc($PointA)})) { s/\s*//; if (s/^,//) { s/\s*//; if (s/^shift(?=\W)//i) { chk_lparen("shift",$lc); my $dist1 = expr($lc); chk_comma($lc); my $dist2 = expr($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{lc($PointA)}); $Px = $x1 + $dist1; $Py = $y1 + $dist2; chk_rparen("shift part",$lc); } elsif (s/^polar(?=\W)//i) { chk_lparen("polar",$lc); my ($R1, $Theta1); $R1 = expr($lc); chk_comma($lc); $Theta1 = expr($lc); my ($x1,$y1,$pSV1,$pS1)=unpack("d3A*",$PointTable{lc($PointA)}); s/\s*//; if (s/^rad(?=\W)//i) { # do nothing! } elsif (s/^deg(?=\W)//i) { $Theta1 = $Theta1 * PI / 180; } else { #$Theta1 = $Theta1 * PI / 180; } $Px = $x1 + $R1 * cos($Theta1); $Py = $y1 + $R1 * sin($Theta1); chk_rparen("after polar part",$lc); } } } else { PrintErrorMessage("undefined point/var",$lc); next LINE; } } else { $Px = expr(); chk_comma($lc); $Py = expr(); } chk_rcb("coordinates part of text command",$lc); if (s/^\[//) { s/\s*//; if (s/^(\w{1})\s*//) { $pos .= $1; if (memberOf($pos, "l", "r")) { if (s/^(\w{1})\s*//) { my $np = $1; if (memberOf($np, "t", "b", "B")) { $pos .= $np; } else { if (memberOf($np, "l", "r")) { PrintErrorMessage("$np can't follow 'l' or 'r'", $lc); } else { PrintErrorMessage("$np is not a valid positioning option", $lc); } next LINE; } } } elsif (memberOf($pos, "t", "b", "B")) { if (s/^(\w{1})\s*//) { my $np = $1; if (memberOf($np, "l", "r")) { $pos .= $np; } else { if (memberOf($np, "t", "b", "B")) { PrintErrorMessage("$np can't follow 't', 'b', or 'B'", $lc); } else { PrintErrorMessage("$np is not a valid positioning option", $lc); } next LINE; } } } else { PrintErrorMessage("$pos is not a valid positioning option", $lc); next LINE; } } else { PrintErrorMessage("illegal token in optional part of text command",$lc); next LINE; } s/\s*//; chk_rsb("optional part of text command",$lc); } chk_comment($lc); if ($pos eq "") { printf OUT "\\put {%s} at %f %f\n", $text, $Px, $Py; } else { printf OUT "\\put {%s} [%s] at %f %f\n", $text, $pos, $Px, $Py; } } elsif (s/^\s*(var(?=\W))//i) { print OUT "%% $1$_" if $comments_on; do{ s/\s*//; PrintErrorMessage("no identifier found after token var",$lc) if $_ !~ s/^([^\W\d_]\d{0,4})//i; my $Varname = $1; my $varname = lc($Varname); if (exists $ConstTable{$varname}) { PrintErrorMessage("Redefinition of constant $varname",$lc); } s/\s*//; #remove leading white space PrintErrorMessage("did not find expected = sign",$lc) if $_ !~ s/^[=]//i; my $val = expr($lc); $VarTable{$varname} = $val; print OUT "%% $Varname = $val\n" if $comments_on; }while (s/^,//); chk_comment($lc); s/\s*//; if (/^[^%]/) { PrintWarningMessage("Trailing text is ignored",$lc); } } elsif (/^\s*\\(.+)/) { my $line = $1; if ($line =~ /^\s+(.+)/) { print OUT " $line\n"; } else { print OUT "\\$line\n"; } next LINE; } elsif (0==length) #empty line { next LINE; } else { PrintErrorMessage("command not recognized",$lc); next LINE; } } } } our $alarm=""; our $comments_on=1; our $out_file="default"; our $argc=@ARGV; if ($argc == 0 || $argc > 5 ){ # no command line arguments or more than 4 # arguments die "\nmathspic version $version_number\n" . "Usage: mathspic [-h] [-b] [-c] [-o <out file>] <in file>\n\n"; } else { our $file = ""; SWITCHES: while($_ = $ARGV[0]) { shift; if (/^-h$/) { die "\nThis is mathspic version $version_number\n" . "Type \"man mathspic\" for detailed help\n". "Usage:\tmathspic [-h] [-b] [-c] [-o <out file>] <in file>\n" . "\twhere,\n" . "\t[-b]\tenables bell sound if error exists\n" . "\t[-c]\tdisables comments in output file\n" . "\t[-h]\tgives this help listing\n" . "\t[-o]\tcreates specified output file\n\n"; } elsif (/^-b$/) { $alarm = chr(7); } elsif (/^-c$/) { $comments_on = 0; } elsif (/^-o$/) { die "No output file specified!\n" if !@ARGV; $out_file = $ARGV[0]; shift; } elsif (/^-\w+/) { die "$_: Illegal command line switch!\n"; } else { $file = $_; } }my ($xA, $yA, $xB, $yB, $dist)=@_; die "No input file specified!\n" if $file eq ""; print "This is mathspic version $version_number\n"; } our ($source_file, $log_file); if (! -e $file) { die "$file: no such file!\n" if (! (-e "$file.m")); $source_file = "$file.m"; } else { $source_file = $file; $file = $1 if $file =~ /(\w[\w-\.]+)\.\w+/; } $out_file= "$file.mt" if $out_file eq "default"; $log_file= "$file.mlg"; open(IN,"$source_file")||die "Can't open source file: $source_file\n"; open(OUT,">$out_file")||die "Can't open output file: $out_file\n"; open(LOG,">$log_file")||die "Can't open log file: $log_file\n"; print_headers; process_input(IN,""); print $alarm if $no_errors > 0; __END__
Close