home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
icvt.icn
< prev
next >
Wrap
Text File
|
2001-05-02
|
2KB
|
98 lines
############################################################################
#
# File: icvt.icn
#
# Subject: Program for ASCII/EBCDIC program conversion
#
# Author: Cheyenne Wills, modified by Ralph E. Griswold
#
# Date: May 2, 2001
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# This program converts Icon programs from ASCII syntax to EBCDIC syntax
# or vice versa. The option -a converts to ASCII, while the option
# -e converts to EBCDIC. The program given in standard input is written
# in converted form to standard output.
#
############################################################################
global outf,process,bb,quotechar
global nrbrack,nlbrack,nrbrace,nlbrace,rbrack,lbrack,rbrace,lbrace
procedure main(args)
local line
case map(args[1]) | stop("Usage: icvt -a | -e") of {
"-a" : {
lbrace := "$("; nlbrace := "{"
rbrace := "$)"; nrbrace := "}"
lbrack := "$<"; nlbrack := "["
rbrack := "$>"; nrbrack := "]"
bb := '$'
}
"-e" : {
lbrace := "{"; nlbrace := "$(";
rbrace := "}"; nrbrace := "$)";
lbrack := "["; nlbrack := "$<";
rbrack := "]"; nrbrack := "$>";
bb := '[]{}'
}
default :
stop("Usage: icvt -a | -e")
}
process := standard
while line := read() do {
line ||:= "\n"
line ? while not pos(0) do
process()
}
end
procedure standard()
writes(tab(upto( '"\'#' ++ bb))) | (writes(tab(0)) & return)
if match("#") then {
writes(tab(0))
}
else if any('\'"') then {
process := inquote
quotechar := move(1)
writes(quotechar)
}
else if match(lbrack) then {
move(*lbrack)
writes(nlbrack)
}
else if match(rbrack) then {
move(*rbrack)
writes(nrbrack)
}
else if match(lbrace) then {
move(*lbrace)
writes(nlbrace)
}
else if match(rbrace) then {
move(*rbrace)
writes(nrbrace)
}
else writes(move(1))
return
end
procedure inquote()
writes( tab(upto( quotechar ++ '\\')) ) |
(writes(tab(0)) & return)
writes(="\\") & writes(move(1)) & return
writes( =quotechar )
process := standard
return
end