File: trans.pl

package info (click to toggle)
efp 1.4-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 88 kB
  • ctags: 110
  • sloc: asm: 692; makefile: 37; perl: 23
file content (47 lines) | stat: -rw-r--r-- 1,040 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/perl -w

while (<>) {

	/processor/ && next;

	# "#[FOO + BAR]" ==> "#(FOO + BAR)"
	s/#\[(.*)\]/#($1)/;

	# "FOO equ BAR" ==> "FOO = BAR"
	s/^\s*(\w+)\s+equ\s+(.*)$/$1 = $2/;

	# "org FOO" ==> "*=FOO"
	s/\s*org\s+/*=/;

	# remove beginning dot (.) from labels
	s/^\.(\w+)/-$1/;
	s/\s+\.(\w+)/ $1/;

	# "FOO subroutine" ==> "FOO"
	s/^\s*(\w+)\s+subroutine/$1/;

	s/\s*SEG(\.U)?\s+/./;

	s/^\s*BYTE\s+([%\$]\w+)/\.byte $1/;
	s/^\s*BYTE\s+(-?[%\$]?[0-9a-fA-F]+)/\.byte $1/;
	s/^\s*WORD\s+(-?[%\$]?[0-9a-fA-F]+)/\.word $1/;
	s/^\s*WORD\s+/.word /;
	s/^\s*BYTE\s+/.byte /;
	s/^\s*ASCII\s+("[-=\w< >]+")/\.asc $1/;
	s/^\s*DSB\s+(\(?[#%\$]?[0-9a-fA-F]+)/\.dsb $1/;

	# "WORD FOO" ==> "FOO .word"
	s/^\s*BYTE\s+([-\w_]+)/$1 \.byte /;
	s/^\s*WORD\s+([-\w+]+)/$1 \.word /;

	# "FOO BYTE" ==> "FOO .byte 0"
	s/(\s*\w+)\s+BYTE/$1 .byte 0/;

	# "LABEL WORD foo,bar,baz" ==> "LABEL .word foo,bar,baz"
	s/(\s*\w+)\s+WORD\s+((\w+)\s*(,\s*\w+)*\s*(;.*)?)$/$1 .word $2/;

	# "FOO WORD" ==> "FOO .word 0"
	s/(\s*\w+)\s+WORD/$1 .word 0/;

	print;
}