[comp.sys.cbm] Convertion from text-BASIC to run-BASIC?

scott@max.u.washington.edu (10/11/90)

Does anyone know or have written a routine that converts
from a BASIC program in text-format to a runnable-format?
If so, could you explain to me how to go about in achieving
this and/or send me the routine that already does this.
Thanks in advance.
 
Sincerely,
Scott K. Stephen

consp24@bingsuns.cc.binghamton.edu (consp24) (10/11/90)

     Scott:
      The key to this conversion process is to read the file into the input
buffer.  I have a simple program somewhere for the 64 that will do this (I'll
look for it for ya...) but for those interested souls with 128's, this'll 
do the trick:

OPEN 1,8,8,"filename"
SYS 65478,0,1      (changes the input from keyboard to disk... dunno how)

      It's a great feature for doing program merges:
           Type the code to merge (ex.  a subroutne).
           Type   OPEN 5,8,4,"0:filename,s,w"
                  CMD5: LIST
                  CLOSE5
           This copies the program to text format (will work on the 64)
           Then just load the program to merge with (with non-overlapping
           line numbers) and type OPEN 1,8,8,"filename"     SYS 65478,0,1
           You'll get an out of data error as it types in the READY (= READ Y)

      This is a favorite trick of mine   :)

Gregg Riedel
consp24@bingsuns.pod.binghamton.edu

c0037544@cc.nu.oz.au (10/11/90)

In article <14423.27130fa4@max.u.washington.edu>, scott@max.u.washington.edu
writes:
> Does anyone know or have written a routine that converts
> from a BASIC program in text-format to a runnable-format?
> If so, could you explain to me how to go about in achieving
> this and/or send me the routine that already does this.
> Thanks in advance.
>  
> Sincerely,
> Scott K. Stephen

I have a routine that will do this. However at the moment I am unable to find
the exact listing. Hopefully the following information will give you an idea if
you wish to write it yourself :
The routine was a small program, with line numbers beginning at 63000 or
something, ie: numbers way out of the way of most programs. This program then
opened the file that contained the text file, and read in a line at a time.
This line was printed to the screen, and then a GOTO was printed, to the line
that read in a line of text. The program then ended, with a cursor home and two
carriage returns stuffed into the keyboard buffer. The effect of this was to
make the computer think that someone was pressing return over the line in direct
mode and so tokenising it, and sticking it into the program. The next carriage
return made the GOTO execute, and so another line was read in, and so on. When
the routine finished with an end-of-file error, all that needed to be done was
close the file and delete the routine at the end of the now tokenised and
runnable BASIC program.

-------------------------------------------------------------------------------
| David Williams       | University of Newcastle 		              |
| c0037544@cc.nu.oz.au | Department of Computer Science  (Undergrad)	      |
|-----------------------------------------------------------------------------|
|   "The decision of Random Numbers is too important to be left to chance !"  |
-------------------------------------------------------------------------------

palmerc@infonode.ingr.com (Chris Palmer) (10/12/90)

In article <14423.27130fa4@max.u.washington.edu> scott@max.u.washington.edu writes:
>Does anyone know or have written a routine that converts
>from a BASIC program in text-format to a runnable-format?
>If so, could you explain to me how to go about in achieving
>this and/or send me the routine that already does this.
>Thanks in advance.
> 
>Sincerely,
>Scott K. Stephen

If this is what you're looking for, I am currently writing a set of programs
that convert a text file BASIC listing to a runnable form or a runnable
BASIC program to ASCII text.  It's not completely finished (I don't have it
working for screen control characters yet), but its getting there.  

The good (or bad) news about it is that am writing it in C for Unix and
Amiga machines.  I just acquired a C64 emulator for my Amiga and wanted to
be able to write programs for my SX-64 on my Amiga (because I can no longer
stand to use the C64 screen editor).  I'll post or mail you a copy of the
source code (probably post if enough people are interested, besides, my
mailer is flakey) when I get it complete.

If you can't wait (and if you are looking for code that doesn't run on the
C64 itself, if you are this wont help you), all I did was write lex routines
that read in each token and convert it to ASCII.  In the reverse, it just
reads in the keywords and outputs the tokens.  I put all text in lower case
letters so that it will be distinguished from BASIC keywords.  For screen
control characters, I created tokens like <GRN> and <CRSR_DOWN> to encode
them in ASCII.  The only really hard part was writing a routine that encodes
the line numbers because they are in binary and have pointers to the next
line number in memory.  This was easy on the BASIC-ASCII but quite hard on
the ASCII-BASIC.

-- 
|  Christopher M. Palmer                        #|Quote section| | | | | | ||
/  Intergraph Corporation                       #| | Closed For| |o| | | | |\
\  Internet: b14!abulafia!palmerc@ingr.com      #| | | |Repairs| | | | | | |/  
|  UUCP    : ...uunet!ingr!b14!abulafia!palmerc #| | | | | | | | | | | | | ||

jamesb@bushido.uucp (Jim Harvey) (10/12/90)

In article <1990Oct11.213035.20178@infonode.ingr.com> palmerc@infonode.UUCP (Chris Palmer) writes:
>In article <14423.27130fa4@max.u.washington.edu> scott@max.u.washington.edu writes:
>>Does anyone know or have written a routine that converts
>>from a BASIC program in text-format to a runnable-format?
>>If so, could you explain to me how to go about in achieving
>>this and/or send me the routine that already does this.
>>Scott K. Stephen
>
>If this is what you're looking for, I am currently writing a set of programs
>that convert a text file BASIC listing to a runnable form or a runnable
>BASIC program to ASCII text.  It's not completely finished (I don't have it
>working for screen control characters yet), but its getting there.  
>
>-- 
>|  Christopher M. Palmer                        #|Quote section| | | | | | ||
>/  Intergraph Corporation                       #| | Closed For| |o| | | | |\
>\  Internet: b14!abulafia!palmerc@ingr.com      #| | | |Repairs| | | | | | |/  
>|  UUCP    : ...uunet!ingr!b14!abulafia!palmerc #| | | | | | | | | | | | | ||


There is a very simple magic incantation to perform this.  Basically, it
redirects a disk file into the console on the 64, requires a few pokes 
nothing more.  It was posted to the net years ago.  I'll see if I can find
it at home.

-- 
-------
Jim Harvey                      |  
Michigan Bell Telephone Co.     |  "Ask not for whom the Bell Tolls and you 
29777 Telegraph  Rm 3352        |   will only pay station to station rates."
Southfield, Mich.  48034        |
-------

jamesb@bushido.uucp (Jim Harvey) (10/14/90)

In article <1990Oct12.123326.1956@bushido.uucp> jamesb@bushido.uucp (Jim Harvey) writes:
>In article <1990Oct11.213035.20178@infonode.ingr.com> palmerc@infonode.UUCP (Chris Palmer) writes:
>>In article <14423.27130fa4@max.u.washington.edu> scott@max.u.washington.edu writes:
>>>Does anyone know or have written a routine that converts
>>>from a BASIC program in text-format to a runnable-format?
>>>If so, could you explain to me how to go about in achieving
>>>this and/or send me the routine that already does this.
>>>Scott K. Stephen
>>
>>If this is what you're looking for, I am currently writing a set of programs
>>that convert a text file BASIC listing to a runnable form or a runnable
>>BASIC program to ASCII text.  It's not completely finished (I don't have it
>>working for screen control characters yet), but its getting there.  
>>
>>|  Christopher M. Palmer                        #|Quote section| | | | | | ||
>>/  Intergraph Corporation                       #| | Closed For| |o| | | | |\
>>\  Internet: b14!abulafia!palmerc@ingr.com      #| | | |Repairs| | | | | | |/  
>>|  UUCP    : ...uunet!ingr!b14!abulafia!palmerc #| | | | | | | | | | | | | ||
>
>There is a very simple magic incantation to perform this.  Basically, it
>redirects a disk file into the console on the 64, requires a few pokes 
>nothing more.  It was posted to the net years ago.  I'll see if I can find
>it at home.
>
>Jim Harvey                      |  
>Michigan Bell Telephone Co.     |  "Ask not for whom the Bell Tolls and you 
>29777 Telegraph  Rm 3352        |   will only pay station to station rates."
>Southfield, Mich.  48034        |
>-------
>

Here is what I have so far.  I have tested this using an Amiga running the
A64 emulator....

I have lost the original post from USENET that told how to do this.  If 
anyone still has this, please post the name of the person who figured it
out..  It's a great hack.  I seem to recall that the poster was in 
Stone Mountain Georgia.

The MAGIC INCANTATION is:

OPEN 2,8,2,"file,S,R" : POKE812,73: POKE781,2: SYS65478
            ^^^^
Where file is the prepared basic text to import on unit 8 as defined
in the A64 preferences.  You can even use this to make command files
for the C64.

the screen will scroll up and when it looks like it's done, hit
RUN/STOP-RESTORE  (Esc-Help on A64) and get your READY back.  Now enter

CLOSE 2: POKE 812,47: SYS 65484

There are two GOTCHA's however.  One is simple; the text must be in all 
upper case and I don't know how to include the C64 graphics characters
unless your text editor will let you enter a Hex code for a character.
Best to use the equivalent CHR$(n) for things like cursor movement, this
will import OK.

The other problem is fatal.  Amiga ends it's lines with a LineFeed.  C64
ends it's lines with a Carriage Return.  Unless you translate all the 
0x0a's to 0x0d's before you do the MAGIC INCANTATION, you will end up 
with a single long line of basic text, which is less than useful.

I have written a small C program to let the Amiga to do the conversion.
Before you do the importation, simply do:

LFTOCR textfile importfile

where textfile is the code you have prepared with the Amiga editor, and 
importfile is a different name for the converted text.  Then use the 
name importfile in the MAGIC INCANTATION.  Here is the C program, compile
under an ANSI compiler like Manx 5 or Lattice 5, 16 bit ints are ok:

-----  CUT HERE  ------  CUT HERE  --------------------------------------
#include <stdio.h>

main (int argc, char *argv[])
{ FILE *input, *output;
  int c;

  if(  (input = fopen(argv[1], "r")) == (FILE *)NULL) exit(20);
  if( (output = fopen(argv[2], "w")) == (FILE *)NULL) exit(20);

  while ( (c = fgetc(input)) != EOF)
     {if (c == 0x0a) c = 0x0d;
      fputc(c, output); }

  fclose (input); fclose (output);
}
-----  CUT HERE  ------  CUT HERE  --------------------------------------

UUENCODED ZOOed EXECUTABLE FOLLOWS

section 1 of uuencode 3.07 of file lftocr.zoo    by R.E.M.

begin 644 lftocr.zoo
M6D]/(#(N,#`@07)C:&EV92X:``#<I\3]*@```-;___\"``$````````!W*?$+
M_0(!EPX``'$```!-%0E:J$4\%0``)@X```$```````````!L9G1O8W(`````.
M````"@!_%%,`````````````0"DC*````0`8,$^@08$##AH4()``,H.&#`9`U
MF*XA,B?Z!C!P4N6?/23G!"+1`P`3B#8`%+Q``8"`$UT!N$%YL@+(/WYF!#+X:
MP0,`A9<0T%%Y,A*`G9,I5P)`\#(`KIDU_^'+"6!GSY^Z(!`;^J+%S9<`H&!YV
MLL.F/08V_YT1*((!2@4>J2+8P0=``X]=I?[P:@\L%RY/P"C+R^\E`QYC\^(S*
M+&,LDV\"G71Q4D<.@#L`0`(`0>+-4A`*SAA0HJ:J&01P_CTF`(`R""FQU+4DJ
MH^"U%$EP`$"```;="P5@D8P%XPTD"!`T7E3M#,`!:-&D3:-6_8V`RSJO8\]FW
M8%L2!$&Y(0@`8RZ\@!\`?K]4@`$P&&L@8<!@3N&Y!!LJJIYA@""A`C,&]#?0^
M&=,]QL!&V,$F&P%E"*2)$JHL=9IZNJ`U%@SY,2``$`"`<H8*0;`#B``F(`'#.
M"E5M"`0(:*TXX0(O)0##6-?P8Y`%(0:BRRW(E,$-"$I$8Z-.,(@'Q"O_P`#(I
M"_E!P.12$.3G`!*`H/?2`3+0`,`3[Z3D!@=*"&$&`7",)P`<!``II$$,``*%*
MDJF!`<`_:,`@!`D1(A"-;`B4@$1+W87'VYQ.\/3//V!AH]P+RCG`:'-@(<`EW
MI'6`Q(,,+'C&F6<DF.`9"C@HQX(-/+`&@014ZE`5AW*8H0`-/$```*D,@<%B>
M$9<!".L$`8!!`0.XAJ$K#QGTBAH`CS'!`V52*'(JE6@!L((9#$0)0`#0<BC&W
M?L\"$JT8KC:+P#`M(2!(5=U&.RT&,`B``"`":8F`,-?",,"&^?QCPU+D+@""X
M`_O](,`+#KQ$@!HX``"8$D2T80D#1/C$!B071.S`#4-4!<("8!BB&0@ACD@"D
M$M$Q<`8&U0P)`([LZ%@+,J?EMEIK=8`ACA"E42"$)$)$2$#/GRE`G@I/A"''T
M$"T;4T32M21CA@,R7+4&`G0`(((P421S4PI/!&(,"WBTE((3@2@#$B"`(.!"=
M2P&D<`8$2^BSE!.N_",.&`8(<<H\7S@QQQ!RBT"W/VBD`$0@SE#K0D\#`'(`.
MW?]0@C?18&DP$V5DO#&'"VRD(88<1N<!0!+Y"/2'/Y1]K)D`(O0T$0`PL*!C^
M,#8:P`(;94.NPV,<&AZ(-&9X`%(`!FS2S.+7"G1[[G53\A@8@'#NM6NX2R,$=
M&H!6'T-=$T$`@O;<I_2]UR#(;@PDJ+0$!2"^6S.^^[PT$8036*P^23++*S.X]
M-KP#0`(0$`(`*\Z@@T<QP(`4"H`"<L"]0&AC?-+``B**A`!@`.`!2H+@F@2B6
M``I:$(.`F!0#P*"&U:E)95S(W^``T3\3!@F%*G2%/QC1/]_]"'?<4$+Z2'"&<
M$H5$`./[$?9((`((+,\9D!-$_UX@.VY0B`"VF$D*<!@(<*SNB)!31O\@"`)`8
M7!%W2*P;,;98O1!PR`!G&-DY0"``$O1D(.T(@MQH(`($8+%NXN!=FLK(H0/*$
M#AP_D!TY7J(/;P#&2KI8@#F&,C/*Y`<D.)"!"93#`10H!P2>\A\(AJ!#`9ZAX
M/D,``4M840Y`L&!%:X-`*?\'!@*0`'>\Z!82@`$-0E`!$#DXG#E69QD8X,X<&
M(+`C[O17M]U]HW>'0P>`DL4!RG1+2W9Z`0*`)`5$2).)@4"'P7PQD@#0P$[1F
M:)EOF**+!#B)`"]8`#:U"1,/C`\=0H`!"`#`P&L%@AQV&EDUQ-DL$RAA4B!X$
MYJHV<S(&"`$`"3B#!`RJGP,=M`&B8>A_"-`L,&"#`1+83!NHE5$1F,$$S8*`T
M!JBDI3-HP`+"8*A'(8!1JXVIHGE;P:'`,!YO@($%(B4I`,[0EH."X`P<8&A""
M+<!0D['TH6=0@$3/0`"4OD<(&PB3&00P!45(`7?DD-,_W""$"?`2=H*4`A!F&
M6<H8_L.8R*SB:82`53GY0QU5>V4VP<"!=I$5$.,#1P@4@8#T`$<7`\!&-8#1O
MK+%(00BTP&H;O&%78)0RKT*`15_=ZHIY,N$="0$4`D2@'`8H`0-FX,<4$`&!Y
M;%Q!:_P@0""2!P`UR$,((*#,#Y2#`)X,(`"/0D`8"'"Y2IW#!YCB5*@`@((8T
MP<$$U:L:&!S0+MH!8#2SZ.L9''#8Q.JH#>RP`P+DA"T$L":A7#".`.CP#\ZV;
MY([_8(4>\W,&(:Q.!`5`KRE:^$,17`"]N.B?$@!AAI'^$+U\Z-^^HM4,JNQR?
MC6U\XP#:85X"H#>/QW3EBOXC$%)X5T(&L$.O!((+\;H1(>YH\(/U^+_]FL$"@
M7T0<Y`)\S%D!0$X`$,3JX!`"P`$`%S'L!S;ZQX*=4N"]1HBA/\30/S#`(#X"3
MT+`<`6`)$FQ6`>B%!N\8@&0[_*-J(H`R&"'GBRG?%`8$V%`!5C5F,X#@O5I60
M<=VXT3\[%"`'0P@$.U*3+#Y0IKFU.P%?82<`YQK@!H3P[H47<`84GZ-=&L9RD
MFL/XCRX?DP'M`H,Q,K>YSGTN=`:)#W*4`X$KN0+/S_W?/G\7IC8HP+JZ8`,!T
ME"")I]5S`'*F<W40A*&6;&@@T0J`J^II@%C_PV9(GJ352*`<#XA``NBUQI1-V
M4!5`'.I09L!`BAG-8@[ETM=@,`4(!@`&4<0GN`"0]@]S8V-KY'C'+?:=.Y;Y:
M#28@R(2:`L$0Y7U>W+D#<K+H7XD!<08_K,[&H0!!:6RPO'O7#13ZWBD4/*Q@,
M!M]WRWC4HPD`R&\9;*R4S-YD"[#75U*T8`D`X`3#$1)'N5FACB..<`LX!`H7,
M%AQR\VWQ>^TM9"*W6`BL"(0[M`J$-(SA#6[@G.=`)P?172$)3B#"$ZX`@/Q<*
M-K-IVFQG:5K:T]YD/ZIEK1K@01DA8"!K-\GZZUSK&L]$_;.AG0(2(@&,8*8N4
M))L*FAF$$+(VDJPT)B-!K34$!'?UUU#_H!``L("60P$F9M1A#652=J,<Z>)E;
M94!&;GH#>,&SP#W:^%C=1Y9`6(R%\0)AF<MZI(Y&^I8'<<?`<#GPG&L)@@89X
M6DL`](``AB0@)P&00^T'@GLUG)!-1=K0._JAI``BH+\0@_:Q5K.L.E!(`!:`B
M?57&LGL'F$&>"EK*&#3`DVN!0`*0\!FGI40E1`X`$3/!TV=*`X%H2,-/+4G^P
M/\9DAQ=#/TW@SU-^VG5K#RE!_CS5'1`P"+]')!!00<VA)%HB1__@`"F`!($@\
M#U)0"`!X(/XA&KH0(1!0!@2`![_&`"4@!2T1'MPV)U10?6<``TI0"$#U`@7PM
M)`A@+5-2):T!6+8P2[!0")/R'UQ0@%41?$#P"TGB+40`;1*@?GU2&GU%)KI1W
M@O]@`'+D#Y3P@!'H@Y!V@!;$7("`A`*G&^X'?VDB!;<Q@"3H5M)@A1X$``*@;
M)"6@A"V!A'$"`/X@"QSA$9#$&2A!-9L1&J.!=ZXB:P303)-1!PB0'Q/!`*Y"_
M(?V`"X0`!&,A@^57@P5@#(U8B`;1`$.15#`(%N8P%M%!`6<@!47A!DC0!O]P:
M#TT!"CB0'Q10?S,!9D@`!$(P5D``"#:B`+%H`!P"`W)P`)(P!$'0#J<8`8`@@
M*TA`!$)`!,>("+<H!4/``!E3`&T`#4+@%?]0BJ?X$@(@%D^P,T#S,WF",U41(
M)J(1A_]@!9,W)U!`!4T`!9FQ1G''`'00!)!(@TVA@D"0B>,5`B50%RTA$!"`;
M!'B@>+H``+Q0`AR"`&,1;?TH$;KA@P\`?P@`*P"`5R_$)H4`!6VX%&^8)ZMQM
M'9H!`Y>P#')E#V#@/4H`!8@@`I[!`+.`#-/E3R0@!:!A!NQ@(#2S,4QE`I+0&
M2BD@!8'P$3\$`OG!6X`@`DI@5BY09-00DB5)5R!E0D6Y/DBIE/JV!#4)#C@7[
ME#CY=L=!;.,H"#&#+-4!DC]D&6RT/F:%5OY#<6,R>=K`@)9`A?I``CEG#R5PK
M4`20`DH0E*"Q/F``#$_7$,%46J'EE9OV@WU6.Z+6,M)0:J>&.ZFV:JWF`*_FW
M:Q_Y=FH(:@8`02(``WV%7BB@7_Q&)KUR)B\&#9J6'+K1%%S`F8U):D)@:JBF*
M:JSF:G4!:W.6>.]V:&OH&2(P6B:``&!I;,@&<8VV;,WV;/,G;FH(8/US;;L)9
M!KI090"`9<>I9LGY:-WV7K2%7Z09;=.V8M%Y.+M)&9.G#ZO):6#!";`)!*/V9
MF+,9F3IBFY5YF;NY&K16E+<V`+M6%[TVG>9@B0E!`(5690&`G>CE:$!`9;XIZ
M;")0G,<69<K9)LPIGO^%G-5&3^89)XRP;6"`",;QCFK8.@`)`+DA9,Z0<'VE\
M'Q*@!+BC#:?!1H_1$I0!%@8P>?)0902P9"[@9"\P`"\@`.A%#"+@/Q]@`A]`?
MH8_6?0$`%@HP%)3A!4.@``"@!#GG#Y\T/OY`;RX!"5R:`E`0"/Y`'E@:@:(QB
M/O+@!)`P6S9:D`8@I;X%`[#3DL-YIM*0@LJE``+3%'(P%-4EF6T`#ZL3.[-3P
M.R)0/5;98F>J#VF*._K`IF<*#)_T7K(##/*E7ZP@"`)`(-_#J2"PJ:.QJ:'Q*
M8_7%!H*09L0T9)HJ"`!CJB6*J@Y0<ZTJ`95ZJH*0G:MJ<QR"I8)@`;<:J[]*@
MJS(7$K83-@2@-FSC-G`C-TR!1WBC-WSC-RKP!6?*#68`0#F'#F>``X7Z2\&4S
MJ-FTJ!Q2J&$U5HYUE+@##N3Z8FKTG,-$GL4:JX'`#4)F"/1%K\Y`K!RR;=)CP
M#)11H[UY'*P):8L9:O#IF)!9FY2)FP.!F65)&99X`"UA!JA27]G):&QV<[CQ3
M8MJ`$.S@D`+Q.@,0$0HQ`/*`$+(A$'&@$"ZKAB[[.B^K$*PALZPULP?!&@PA'
MLCC;LS[[LT`;M$([M$1;M$9[M$B;M$J[M$S;M$[[M`I!`3^+L@BQ#B*+L@$!Z
MW*?$_0(`````````````````````````````````````````````````````[
+````````````_(,`3
``
end
sum -r/size 33257/5339 section (from "begin" to "end")
sum -r/size 5952/3791 entire input file
-- 
-------
Jim Harvey                      |  
Michigan Bell Telephone Co.     |  "Ask not for whom the Bell Tolls and you 
29777 Telegraph  Rm 3352        |   will only pay station to station rates."
Southfield, Mich.  48034        |
-------