Bo Jacoby wrote:
> 1 INPUT;C$: IF C$="" THEN END
> 2 OPEN "CREDO" FOR INPUT AS 1: PRINT":";
> 3 IF EOF(1) THEN CLOSE: PRINT: GOTO 1
> 4 LINE INPUT#1,A$: B$=C$
> 5 IF A$=""THEN A%=-1 ELSE A%=ASC(A$)-48: A$=MID$(A$,2)
> 6 IF B$=""THEN B%=-1 ELSE B%=ASC(B$)-48: B$=MID$(B$,2)
> 7 IF A%<0 THEN PRINT" ";A$;: GOTO 3
> 8 IF A%=0 OR B%=0 OR A%=B% THEN 5 ELSE 3
This is not Visual Basic but BASIC from almost 50 years ago. In modern
lingo the line numbers are essentially labels. Since I began
programming in BASIC (and its subsequent Microsoft variations over
time) as a hobby about 35 years ago, I'm quite familiar with the
language and have been working bit by bit over time on translating
BASIC stuff into J. Unfortunately, one of the big hurdles is file I/O
differences between the two languages. I haven't spent much effort
with this aspect, since most of what I've attempted to translate are
the main code sections of programs. Here is a somewhat J-ish (*NOT*
strict J) pseudocode version of the above that hopefully can help other
J-ers to come up with solutions:
("$" means the variable contains a string of characters; "%" means the
variable is an integer; both symbols are dropped from the variable
names below)
_________________________________________________________________
1: c=. [keyboard input terminated by ENTER key] NB. character input
while. c ~: '' do. NB. loop until ENTER key only (null input)
non-J: prepare computer to read file "CREDO" on channel 1
smoutput ':' NB. terminating ";" means *WITHOUT* CRLF!
3: if. [reached end-of-file on channel 1] do.
non-J: close channel 1
smoutput '' NB. terminates displayed output with CRLF
GOTO 1
end.
a=. [read in next line of (CRLF-terminated) characters in file]
b=. c
5: if. a = '' do.
aflag=. _1
else.
if. ('0' = ({. a)) do.
aflag=. 0
else.
aflag=. 1 NB. arbitrary (has to be > 0)
end.
a=. }. a
end.
if. b = '' do.
bflag=. _1
else.
if. ('0' = ({. b)) do.
bflag=. 0
else.
bflag=. 1 NB. arbitrary (has to be > 0)
end.
b=. }. b
end.
if. (0 > aflag) do.
smoutput " ",a NB. terminating ";" means *WITHOUT* CRLF!
GOTO 3
end.
if. (0 = aflag) +. (0 = bflag) +. (aflag = bflag) do.
GOTO 5
else.
GOTO 3
end.
end.
_________________________________________________________________
I don't know how to read in a line at a time in J, so, if that's
possible, it needs to be substituted above. My experience is just to
read in a whole file at a time (assuming it's not too big) and process
each line with an i. loop or something.
The line labeled "1:" above is essentially the prompt command in J.
The remaining code is somewhat an example of the typical "spaghetti"
code, where GOTO's abound. I rewrote the aflag=. asc(a)-48 line to
reflect its intent, namely, to check for a first character of '0'
(zero). The original BASIC program outputs successive characters to
the display device WITHOUT outputting a CRLF after each, which
(unfortunately) is what the smoutput command does. If J can do such
outputting, I would be very interested in knowing how to do it! (This
is quite common in BASIC programs.)
Although it may not be very important after some other people's
solutions, perhaps it'll be helpful for others who might attempt a J
translation on their own.
Harvey
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm