Jump to content
IGNORED

found a potentially usable basic spreadsheet program for the 600xl...but not written in Atari basic


newTIboyRob

Recommended Posts

If anyone is interested, here is a site with all of the SofTalk magazines, and the several I've looked at are really clean scans.  Might be easier to OCR?  I've always enjoyed reading the mags of other systems, and SofTalk looks like a good one.  (BasiCalc is listed in Vol 2, #11)

 

https://vintageapple.org/softalk/

  • Like 2
Link to comment
Share on other sites

5 hours ago, newTIboyRob said:

 

 

Since I haven't had any luck with trying.. could someone else try the process slx suggested to see about how much K this program actually would be using?  Hopefully it's not over 16k! (I won't proceed further until we know.)

You‘ll probably have to cut it down to individual columns and maybe do a bit of image processing before to get rid of the dark background. Are you limited to online services or do you have a PC/Mac to try this on?

Link to comment
Share on other sites

42 minutes ago, newTIboyRob said:

Yes, thanks Larry. I am not an "Apple" guy per se, but there were articles in that magazine, little pieces occasionally, that were just amazing, especially by the columnist who wrote Basicalc!

He wrote a book on 6502 assembly as well which is on IA. 

Link to comment
Share on other sites

18 minutes ago, Fuji-Man said:

Here is a floppy disk image that contains BASICALC on archive.org

https://archive.org/details/LOGIC_AppleII_Disk-DOS088

You can open this up in CiderPress (a PC application for viewing Apple II disk-image contents) and view/export the BASIC code as text.

 

  • Like 2
Link to comment
Share on other sites

 1  REM  CHANGES IN:
 2  REM    2104, 2109, 2256   
 10  REM **************************
 11  REM *                        *
 12  REM * ELECTRONIC WORKSHEET   *
 13  REM *                        *
 14  REM * COPYRIGHT (C) 1982     *
 15  REM *  WILLIAM V R SMITH     *
 16  REM *                        *
 17  REM **************************
 18  REM 
 19  CLEAR : DIM A$(70,10),B$(70,10),CW(12),IV(50)
 20 SY = 1:XM = 1:YM = 1:SX = 1
 30  FOR X = 1 TO 12:CW(X) = 9: NEXT X
 35 S$ = "                   "
 37 T$ = "ABCDEFGHIJKLMNO"
 38 T1$ = "*********************"
 99  GOTO 2000
 100  REM  *******************
 101  REM  * VARABLE PARCER  *
 102  REM  *******************
 103 L =  LEN (A$(Y,X)):F = 2:A1 = 0:A2 = 0:P = 1:H$ = "":OF = 1
 105  IF L = 0 THEN 400
 110  IF P > L THEN 400
 115  GOSUB 500
 130  IF C > 64 THEN  GOSUB 450: IF P > L THEN  RETURN 
 135  IF C = 46 THEN 170
 140  IF C > 41 AND C < 48 THEN  GOSUB 200:F = C - 41: GOTO 110
 150  IF C = 38 THEN 700
 160  IF C > 47 AND C < 58 THEN 170
 162  IF C = 58 THEN 900
 165  GOTO 400
 170 H$ = H$ +  CHR$ (C): IF P > L THEN  GOSUB 200: GOTO 600
 180  GOSUB 500: GOTO 130
 200 A2 =  VAL (H$):H$ = "": GOSUB 300: REM  FUNCTION
 210  RETURN 
 220  REM * INPUT STATEMENT **
 225 IV = 1:I$ = "": GOTO 235
 230  IF  LEN (I$) = 0 THEN A$ = "": RETURN 
 235  GET A$
 240  IF A$ =  CHR$ (8) THEN L =  LEN (I$):I$ =  MID$ (" " + I$,2,L - 1): HTAB 1: PRINT I$;: CALL  - 868: GOTO 230
 245  IF A$ =  CHR$ (21) THEN 275
 250  IF A$ =  CHR$ (13) THEN 280
 255  IF  ASC (A$) < 31 THEN 235
 256  IF A$ =  CHR$ (34) THEN 235
 260 I$ = I$ + A$
 265  HTAB 1: PRINT I$;
 270 IV = IV + 1: GOTO 235
 275 A$ =  MID$ (A$(Y,X),IV,1): GOTO 260
 280  IF IV = 1 THEN A$ = "": RETURN 
 285 A$ = I$: RETURN 
 300  REM *********************
 301  REM *
 302  REM * PERFORM MATH FUNCTION  
 303  REM *
 304  REM *********************
 305 F1 = F:F = 2
 310  ON F1 GOSUB 330,340,320,350,320,370
 320  RETURN 
 330 A1 = A1 * A2: RETURN 
 340 A1 = A1 + A2: RETURN 
 350 A1 = A1 - A2: RETURN 
 370  IF A2 <  > 0 THEN A1 = A1 / A2
 380  RETURN 
 399  END 
 400 H$ =  MID$ (A$(Y,X),1,L) + "                         "
 405 H$ =  LEFT$ (H$,CW(X))
 406  IF H$ = B$(Y,X) THEN  RETURN 
 407 B$(Y,X) = H$
 409  GOSUB 680: REM   * XM AND YM TEST
 410  RETURN 
 440  REM *****************
 441  REM *
 442  REM * FIND MATH VALUE
 443  REM * OF SCREEN
 444  REM *****************
 450 X3 = C - 64
 451  IF X3 > 15 THEN  GOSUB 400: RETURN 
 452 H$ = "": IF L = 1 THEN 400
 453  GOSUB 500: IF C < 48 OR C > 57 THEN  GOTO 400
 454  GOTO 460
 455  GOSUB 500
 460  IF C < 48 OR C > 57 THEN 470
 465 H$ = H$ +  CHR$ (C)
 466  IF P > L THEN 470
 467  GOTO 455
 470 Y3 =  VAL (H$)
 475  IF Y3 > 70 OR X3 > 15 THEN H$ = "ERROR":P = L + 1: GOTO 620
 480 H$ = B$(Y3,X3)
 485  GOSUB 200
 490  IF P > L THEN  GOSUB 600: RETURN 
 495  RETURN 
 500  REM *** PARCE LINE FOR CHAR
 510 C =  ASC ( MID$ (A$(Y,X),P,1)):P = P + 1
 520  RETURN 
 600  REM *******************
 601  REM *
 602  REM * ASSIGN ANSWER
 603  REM *
 604  REM *******************
 610  IF A$(Y,X) = "" THEN  RETURN 
 615  IF  LEN ( STR$ ( INT (A1))) > CW(X) THEN H$ = "ERROR"
 620  ON OF GOSUB 640,650,660,670
 625  IF OF = 4 OR OF = 1 THEN 675
 630 B$(Y,X) =  RIGHT$ ("                                " +  STR$ (A1),CW(X))
 635  GOTO 675
 640 A3 =  INT (A1):A1 = (A1 - A3) + 1.001:H$ =  STR$ (A3) + "." +  MID$ ( STR$ (A1),3,2)
 645 B$(Y,X) =  RIGHT$ (S$ + H$,CW(X)): RETURN 
 650 A1 =  INT (A1): RETURN 
 660  RETURN 
 670 A1 =  INT (A1): IF A1 > 20 THEN A1 = 20
 671  IF A1 < 1 THEN A1 = 1
 672 B$(Y,X) =  LEFT$ ( LEFT$ (T1$,A1) + "                   ",CW(X))
 673  RETURN 
 675 OF = 1
 680  IF X > XM THEN XM = X
 681  IF Y > YM THEN YM = Y
 690  RETURN 
 700  REM **** SUM(FUNCTION)
 710 P = P + 4: GOSUB 500
 720  GOSUB 450:Y4 = Y3:X4 = X3
 730  GOSUB 500: GOSUB 450
 740 A1 = 0:A2 = 0:X5 = X3:Y5 = Y3
 750  IF Y4 = Y5 THEN 800
 760 X3 = X4: FOR Y3 = Y4 TO Y5
 765 P = 1
 770  GOSUB 480
 780  NEXT Y3
 790  GOSUB 600: RETURN 
 800 Y3 = Y4: FOR X3 = X4 TO X5
 805 P = 1
 810  GOSUB 480
 820  NEXT X3
 830  GOSUB 600: RETURN 
 900  REM * OUTPUT FORMAT *
 905  GOSUB 200: GOSUB 500
 910  IF C = 36 THEN OF = 1: GOTO 600
 920  IF C = 73 THEN OF = 2: GOTO 600
 930  IF C = 70 THEN OF = 3: GOTO 600
 940  IF C = 42 THEN OF = 4: GOTO 600
 950  GOTO 600
 1000  REM ********************
 1001  REM * VIDEO SCREEN LAYOUT
 1002  REM ********************
 1099  NORMAL 
 1100  FOR Y1 = 1 TO 70
 1103  VTAB 1: HTAB 25: FLASH : PRINT "WORKING";
 1105  IF Y1 > YM THEN Y1 = 100: GOTO 1180
 1110  FOR X1 = 1 TO 9
 1111  IF A$(Y1,X1) = "" THEN  NEXT X1: GOTO 1180
 1112  VTAB 1: HTAB 34: PRINT  MID$ (T$,X1,1);Y1;" "
 1115  IF X1 > XM THEN X1 = 100: GOTO 1170
 1121 X2 = X:Y2 = Y
 1122 X = X1:Y = Y1
 1125  GOSUB 100
 1140 X = X2:Y = Y2
 1170  NEXT X1
 1180  NEXT Y1
 1185  GOSUB 1500
 1186  VTAB 1: HTAB 25: CALL  - 868
 1190  RETURN 
 1300  REM ********************
 1301  REM * SCREEN VALUE PRINTER
 1302  REM ********************
 1305 CW(0) = 0
 1306  IF CW(X) <  >  LEN (B$(Y,X)) THEN  GOSUB 100
 1307  IF X = SX THEN CO = 3: GOTO 1330
 1310 CO = 0: FOR X2 = SX TO X - 1:CO = CO + CW(X2): NEXT X2:CO = CO + 3
 1330  VTAB Y + 5 - SY: HTAB CO
 1340  PRINT B$(Y,X);
 1399  RETURN 
 1500  REM *****************************
 1501  REM *
 1502  REM * SCREEN PRINT
 1503  REM *
 1504  REM *****************************
 1550  VTAB 4: HTAB 1
 1600  INVERSE 
 1602  PRINT "  ";:MT = 10
 1603 PP = 0: FOR FX = SX TO 10:PP = PP + CW(FX): IF PP > 37 THEN MT = FX - 1:FX = 11
 1604  NEXT FX
 1605  FOR FX = SX TO MT
 1606 H = CW(FX) / 2:H1 =  INT (H):H2 =  INT (H - .2)
 1609 H$ =  LEFT$ (S$,H1) +  MID$ (T$,FX,1) +  LEFT$ (S$,H2)
 1610  PRINT H$;
 1612  NEXT FX
 1613  CALL  - 868
 1614  VTAB 5: HTAB 1
 1615  FOR FX = SY TO 18 + SY: PRINT FX;: IF FX < 10 THEN  PRINT " ";
 1616  PRINT : NEXT FX
 1617  VTAB 5
 1618  NORMAL : POKE 32,2: POKE 33,38: VTAB 5: CALL  - 958: POKE 32,0: POKE 33,40
 1619 A = SX:T = 3
 1620  VTAB 5
 1621  FOR X1 = 0 TO 18
 1625  HTAB T: PRINT B$(SY + X1,A)
 1800  NEXT X1
 1850 T = T + CW(A):A = A + 1: IF A =  < MT THEN 1620
 1999  RETURN 
 2000  REM **************
 2001  REM *
 2002  REM * PROMPT OF INPUT
 2003  REM *
 2004  REM **************
 2005 DF = 1
 2006  HOME 
 2010  GOSUB 1500
 2020 X = 1:Y = 1
 2030  VTAB 1: HTAB 1: PRINT  MID$ (T$,X,1);Y;"   "
 2035  VTAB 2: HTAB 1: PRINT A$(Y,X);
 2050  INVERSE 
 2060  GOSUB 1300
 2070  NORMAL 
 2080  GOTO 2220
 2090  REM ***************
 2091  REM *
 2092  REM * INPUT AND PERFORM
 2093  REM *
 2094  REM ***************
 2100 A =  PEEK ( - 16384): IF A < 127 THEN 2100
 2102 A = A - 128:A$ =  CHR$ (A)
 2103  IF A = 47 THEN 4000
 2104  IF A = 64 THEN 2256
 2105  IF A = 33 THEN  GOSUB 1300: GOSUB 1000: GOTO 2050
 2106  IF A = 21 THEN 2113
 2107  IF A = 8 THEN 2160
 2108  IF A = 32 THEN 2200
 2109  IF A > 43 THEN 2255
 2110  IF A = 38 THEN 2300
 2111  IF A = 34 THEN  GET A$: GOTO 2255
 2112  GET A$: GOTO 2090
 2113  GOSUB 1300
 2114  ON DF + 2 GOTO 2115,2140,2130
 2115 X = X + 1: IF X > 10 THEN X = 10: INVERSE : GOSUB 1300: NORMAL : GOTO 2900
 2116  IF X > MT THEN SX = SX + 1: GOSUB 1500: GOTO 2116
 2120  INVERSE : GOSUB 1300: NORMAL : GOTO 2900
 2130 Y = Y + 1: IF Y > 69 THEN Y = 69: GOTO 2135
 2133  IF Y > 18 + SY THEN X3 =  - 1:SY = SY + 10:Y = SY + 18: IF Y > 69 THEN Y = 69:SY = 69 - 18
 2134  IF X3 =  - 1 THEN  GOSUB 1500:X3 = 0
 2135  INVERSE : GOSUB 1300: NORMAL 
 2140  GOTO 2900
 2150  REM 
 2160  ON DF + 2 GOTO 2170,2190,2180
 2170  GOSUB 1300
 2175 X = X - 1: IF X >  = SX THEN  INVERSE : GOSUB 1300: NORMAL : GOTO 2900
 2176 SX = SX - 1: IF X = 0 THEN X = 1:SX = 1: GOTO 2179
 2177  GOSUB 1500
 2179  INVERSE : GOSUB 1300: NORMAL : GOTO 2900
 2180  GOSUB 1300
 2182 Y = Y - 1: IF Y =  > SY THEN  INVERSE : GOSUB 1300: NORMAL : GOTO 2900
 2183 SY = SY - 10:Y = SY: IF Y <  = 0 THEN Y = 1:SY = 1
 2184  GOSUB 1500
 2185  INVERSE : GOSUB 1300: NORMAL : GOTO 2900
 2190  REM 
 2200  REM ********************
 2201  REM *
 2202  REM * SHOW CURSOR DIRECTION
 2203  REM *
 2204  REM ********************
 2205  REM 
 2210 DF = DF *  - 1
 2220  VTAB 1: HTAB 38
 2230  ON DF + 2 GOTO 2231,2240,2235
 2231  PRINT "-";: GOTO 2240
 2235  PRINT "!";: GOTO 2240
 2240  GOTO 2900
 2250  REM ** INPUT STRING FOR PAGE
 2251  REM 
 2252  GOTO 4000
 2254  IF A$ = "&" THEN 2300
 2255  VTAB 2: HTAB 1: PRINT A$(Y,X);: VTAB 2: HTAB 1: GOSUB 220
 2256 AA$ = "                                       ": IF A$ = "@" THEN A$(Y,X) =  LEFT$ (AA$,CW(X)): GOTO 2260
 2257  IF A$ = "" THEN 2270
 2258 A$(Y,X) = A$
 2260  GOSUB 100
 2270  GOTO 2030
 2300  REM ** SUM STATEMENT **
 2310  POKE  - 16368,0
 2320  VTAB 1: HTAB 1: CALL  - 868
 2330  VTAB 2: INPUT "SUM(START = ";A$
 2350  VTAB 2: CALL  - 868: PRINT "SUM(";A$;" THRU ";: INPUT "";B$
 2360  VTAB 2: HTAB 1: PRINT "SUM(";A$;" THRU "B$;")"
 2365  IF A$ = "" OR B$ = "" THEN 2900
 2370 A$(Y,X) = "&SUM(" + A$ + "-" + B$ + ")"
 2380  GOSUB 100: GOTO 2030
 2900  VTAB 1: HTAB 1: PRINT  MID$ (T$,X,1);Y;"   "
 2904  VTAB 2: HTAB 1: PRINT A$(Y,X);
 2905  CALL  - 868
 2907  POKE  - 16368,0
 2910  GOTO 2100
 4000  REM *****************
 4001  REM *
 4002  REM * HANDLE GLOBAL COMMAND
 4003  REM *
 4004  REM ******************
 4005  POKE  - 16368,0
 4006  VTAB 2: HTAB 1: CALL  - 868
 4010  INPUT "1-WIDTH  2-SAVE  3-LOAD  4-CLEAR        5-GOTO LOCATION  6 - PRINT";A$
 4015  ON  VAL (A$) GOTO 4020,5000,5500,19,6000,7000
 4016  GOTO 6000
 4020  VTAB 2: CALL  - 868: INPUT "WIDTH = ";A$:A =  VAL (A$): IF A > 30 THEN 4020
 4030 CW(X) = A
 4040 YH = Y
 4050  FOR Y = 1 TO YM: GOSUB 400: NEXT Y
 4060 Y = YH
 4140  GOSUB 1100
 4150  GOSUB 5900: GOTO 2030
 5000  REM ***********
 5001  REM *
 5002  REM * DISK I/O
 5003  REM *
 5004  REM ***********
 5100  REM * FILE OUT *
 5105  GOSUB 5900
 5110  VTAB 2: HTAB 1: CALL  - 868
 5120  PRINT "SAVE FILE TO DISK  FILENAME = "
 5130  INPUT "";A$
 5140  IF A$ = "" THEN  GOSUB 5900: GOTO 2030
 5146  VTAB 1: HTAB 1: PRINT 
 5150  PRINT  CHR$ (4);"OPEN  ";A$
 5160  PRINT  CHR$ (4);"WRITE ";A$
 5165  PRINT XM: PRINT YM
 5170  FOR X = 1 TO XM
 5180  PRINT CW(X)
 5190  FOR Y = 1 TO YM
 5200  PRINT  CHR$ (34);A$(Y,X); CHR$ (34)
 5210  NEXT Y
 5220  PRINT "<>"
 5230  NEXT X
 5240  PRINT "<>"
 5250  PRINT  CHR$ (4);"CLOSE"
 5255 Y = 1:X = 1
 5260  GOTO 7230
 5500  REM * FILE IN *
 5510  HOME : PRINT  CHR$ (4);"CATALOG"
 5549  VTAB 1: HTAB 1
 5550  PRINT "READ FILE FROM DISK  FILENAME = "
 5560  GOSUB 220: PRINT "": IF A$ = "" THEN  GOSUB 5900: GOTO 2030
 5565  PRINT  CHR$ (4);"UNLOCK";A$
 5570  PRINT  CHR$ (4);"OPEN ";A$
 5580  PRINT  CHR$ (4);"READ ";A$
 5590  INPUT XM: INPUT YM
 5600  FOR X = 1 TO XM
 5610  INPUT CW(X)
 5620  FOR Y = 1 TO YM
 5630  INPUT A$(Y,X)
 5640  NEXT Y
 5650  INPUT B$: REM  ERROR IF NOT <>
 5660  NEXT X
 5670  INPUT B$: REM  ERROR IF NOT <> 
 5675  PRINT  CHR$ (4);"CLOSE"
 5677  GOSUB 5900
 5678 X = 1:Y = 1
 5680  GOSUB 1000: GOTO 2020
 5900  VTAB 1: HTAB 1: CALL  - 868
 5910  VTAB 2: HTAB 1: CALL  - 868
 5920  VTAB 3: HTAB 1: CALL  - 868
 5930  RETURN 
 6000  REM ** GOTO LOCATION
 6005  GOSUB 6010: GOTO 2030
 6010  GOSUB 5900
 6030  VTAB 2: HTAB 1: INPUT "GO TO PAGE LOCATION :";A$
 6040  GOSUB 6200
 6050  IF X1 + Y1 = 0 THEN  RETURN 
 6180 X = X1:SX = X1:Y = Y1:SY = Y1
 6185  GOSUB 1500
 6190  INVERSE : GOSUB 1300: NORMAL : RETURN 
 6200 L =  LEN (A$): IF L < 2 THEN X1 = 0:Y1 = 0: RETURN 
 6210 X1 =  ASC ( LEFT$ (A$,1)) - 64
 6220  IF X1 < 1 OR X1 > 10 THEN X1 = 0: RETURN 
 6230 Y1 =  VAL ( RIGHT$ (A$,L - 1))
 6240  IF Y1 < 1 OR Y1 > 50 THEN X1 = 0:Y1 = 0
 6250  RETURN 
 7000  REM *** PRINT OUT
 7100  GOSUB 5900
 7110  VTAB 2: HTAB 1: INPUT "UPPER/LEFT CORNER:";A$: GOSUB 6200
 7120 X3 = X1:Y3 = Y1
 7130  VTAB 2: HTAB 1: INPUT "LOWER/RIGHT CORNER :";A$: GOSUB 6200
 7140 X4 = X1:Y4 = Y1
 7150  PRINT  CHR$ (4);"PR#1"
 7160  FOR Y1 = Y3 TO Y4
 7170  FOR X1 = X3 TO X4
 7180  PRINT  LEFT$ (B$(Y1,X1) + S$,CW(X1));
 7190  NEXT X1
 7200  PRINT 
 7210  NEXT Y1
 7220  PRINT  CHR$ (4);"PR#0"
 7230 X1 = 1:Y1 = 1: GOSUB 6180: GOTO 2030

 

  • Like 5
  • Thanks 1
Link to comment
Share on other sites

Doc, I tried cutting and pasting the basic program above into that Emulator, but it didn't take. There was also a mention of Ciderpress. I don't understand how all this comes into play and works together. It may be easy to understand and perform for you guys who have done it, but if you have you ever felt like someone was speaking a foreign language to you and you are just trying to follow... that is me here with these emulators.

Link to comment
Share on other sites

6 minutes ago, invisible kid said:

type that shit in lol, convert it to atari as you go, laugh at the funny bugs until you get it working

Exactly.  You can't type in APPLE BASIC into ATARI BASIC and get an idea of the size.  Any syntax errors or invalid statements, won't be accepted.  You are going to have to type this in and convert as you go.  And I hate to be "that guy" - but there's a 99.9% chance it won't work as you want, because of the constraints of 16kB and cassette only.  Sorry to keep beating that drum, but please get a 64kB upgrade and a cheap SIO2PC device and you'll have access to 95% of all Atari software ever made.  With your current, you may have access to 0.5% of anything useful.

 

We're not advocating you get the latest Ultimate 1MB, VBXE upgrades.  We're saying that even back in 1982 (when I could throw a football over those mountains) a 16kB machine with cassette was all but unusable.

  • Like 1
Link to comment
Share on other sites

3 hours ago, newTIboyRob said:

Also, Mr. Fish, you posted the entire basic program without the ads  I see... but was that only to show the couple of changes in the REM statements, or was it also for some other purpose related to above?  (Thank you by the way for doing that.)

I always like to have the biggest post in any thread. So, there it is... I win!! :D

 

 

Link to comment
Share on other sites

 

So I started typing, and I got as far as the end of the first page, which didn't take long at all, but, 6 errors, already. As I reflected on my original thought, which was my pre-knowledge that Atari's way of handling strings was more complex/involved and not like those of other basics (e.g. no A$=B$+C$), I foresee even rougher waters ahead. I also foresee that it would take a programmer at a way higher skill level to get in there and help me with all those, not to mention the unforeseen and detailed translations which are likely to occur and need attention. I found those 11, but I would bet the ranch that there are going to be way more than that as I go, especially in the revamp-these-strings-area.

 

Yes, I could still type the entire program in, with all its current errors and its utter uselessness at that stage, and then ask someone to try to go back and help me debug all the many spots that will need string translation and work. To be frank, highly doubtful anyone is really going to want to do that. When you couple that with some of the recent comments above, I realize it would take someone not sarcastic nor condescending, but someone very patient and highly knowledgeable in the ins and outs of Atari basic programming and its idiosyncrasies, and especially someone who wants to work with me on this, either by email or here (but that would likely annoy many people), to actually fix and adapt things in those certain spots for the glory of a finished and working product...  but all of this would be a VERY tall order.  I've been working across other platforms as well, so at this point I would have even settled on typing it all in and then paying someone to fix the things I truly feel, actually know, that I wouldn't be able to circumnavigate without tons of more extensive research so in the end I would have a working product. But again, even that looks like a less tall, but still tall, order. (Even my segue investigation into mapping, trying to get a simple blinking was way more complicated than Applesoft's one word basic command: FLASH.)

 

So, in short, unless anything here resonates, I give up. That quickly. And I am someone who usually never gives up, on anything, whether that's good or bad. That gives you an indication how frustrated I've found all this, particularly after having really dug through the annals and finally myself, and found a program that still had quite a bit of promise in it to get the only 1 thing I ever wanted to do currently on this limited capacity 16 K 600 XL: a basic though still functionable/usable even 1st grader-like spreadsheet. If you go back and really read my initial intention you will see what I am talking about here. But then again, my giving up probably brings a sigh of relief to many of you who are reading this.

 

C'est la vie I suppose. I appreciate the contributions of all, and especially those of slx and Mr. Fish in trying to point me in the right direction.

  • Like 1
  • Sad 1
Link to comment
Share on other sites

I agree it is probably a bit rough of a road, but people here will help you until it's going. If the string processing(A$=B$+C$) is problematic, maybe try just making a version that works with numbers first. But that might not help things either. Maybe someone who is a bit more familiar with coding will give it a go.

 

The other day what got me through something was knowing it was going to be a slog, and just being very patient. Set a goal of 5 lines a day. Maybe report the errors as they come up and people can offer insight on each error.

 

Reading other comments, sorry for encouraging you to just jump in! Didn't think the BASIC versions were as different as they are. Hope you are able to get something going. Maybe try coding one up from scratch.

Edited by invisible kid
Link to comment
Share on other sites

3 hours ago, newTIboyRob said:

A$=B$+C$),

In ATARI Basic it's unfortunately more steps i.e.

C$=A$:C$(LEN(C$)+1)=B$

 

Also looking at the program with Atari Basic not having multi-dimension string arrays, you would probably need a

numeric array to index a large string, which would mean using even more memory.

 

I also noticed it's using a lot of strings that are not DIM'd, so you would have to find them all and dimension them

before use.

 

This list goes on, CALL - you would need to find what these do to find equivalent in Atari, there's so much more too.

 

I think you're right to give up, it would be a big task even for someone who knows Atari BASIC without

knowing Apple BASIC, not impossible, but a really big task

  • Like 1
Link to comment
Share on other sites

7 hours ago, newTIboyRob said:

 

So I started typing, and I got as far as the end of the first page, which didn't take long at all, but, 6 errors, already. As I reflected on my original thought, which was my pre-knowledge that Atari's way of handling strings was more complex/involved and not like those of other basics (e.g. no A$=B$+C$), I foresee even rougher waters ahead. I also foresee that it would take a programmer at a way higher skill level to get in there and help me with all those, not to mention the unforeseen and detailed translations which are likely to occur and need attention. I found those 11, but I would bet the ranch that there are going to be way more than that as I go, especially in the revamp-these-strings-area.

 

Yes, I could still type the entire program in, with all its current errors and its utter uselessness at that stage, and then ask someone to try to go back and help me debug all the many spots that will need string translation and work. To be frank, highly doubtful anyone is really going to want to do that. When you couple that with some of the recent comments above, I realize it would take someone not sarcastic nor condescending, but someone very patient and highly knowledgeable in the ins and outs of Atari basic programming and its idiosyncrasies, and especially someone who wants to work with me on this, either by email or here (but that would likely annoy many people), to actually fix and adapt things in those certain spots for the glory of a finished and working product...  but all of this would be a VERY tall order.  I've been working across other platforms as well, so at this point I would have even settled on typing it all in and then paying someone to fix the things I truly feel, actually know, that I wouldn't be able to circumnavigate without tons of more extensive research so in the end I would have a working product. But again, even that looks like a less tall, but still tall, order. (Even my segue investigation into mapping, trying to get a simple blinking was way more complicated than Applesoft's one word basic command: FLASH.)

 

So, in short, unless anything here resonates, I give up. That quickly. And I am someone who usually never gives up, on anything, whether that's good or bad. That gives you an indication how frustrated I've found all this, particularly after having really dug through the annals and finally myself, and found a program that still had quite a bit of promise in it to get the only 1 thing I ever wanted to do currently on this limited capacity 16 K 600 XL: a basic though still functionable/usable even 1st grader-like spreadsheet. If you go back and really read my initial intention you will see what I am talking about here. But then again, my giving up probably brings a sigh of relief to many of you who are reading this.

 

C'est la vie I suppose. I appreciate the contributions of all, and especially those of slx and Mr. Fish in trying to point me in the right direction.

I wouldn't give up on it.  I know I am interested to see if it can be done after all.

  • Like 1
Link to comment
Share on other sites

ATASCII is pretty awesome for text. Your 'CALL -868' clear line can be simulated as such. All you need to do is set the POSITION for the line you wanted to erase, then print the clear line string which deletes the line then inserts a blank one. Could be used for clearing multiple lines with a for next loop.

 

5 POKE 82,0:? CHR$(125): REM SET LEFT MARGIN AND CLEAR SCREEN
8 DIM CL$(2):CL$(1)=CHR$(156):CL$(2)=CHR$(157):REM CLEAR LINE STRING
9 REM DRAW THE SAMPLE SCREEN
10 FOR X=1 TO 15:? X;" ";
20 FOR Y=1 TO 35
30 PRINT CHR$(64+Y);
40 NEXT Y:PRINT :NEXT X
50 POSITION 0,10:? CL$:REM CLEAR LINE 10
60 POSITION 0,18
70 END

 

PS: CALL -868 is clear from cursor to end of line. Above may not work.

https://www.vintagecomputer.net/browse_thread.cfm?id=790

Edited by Fuji-Man
Link to comment
Share on other sites

23 minutes ago, Forrest said:

I would load Altirra, set your machine type to a 16K XL computer with Atari Basic enabled. Then copy and paste the program listed above - to determine if the program fits into memory.

In it's current form it takes about 10K and that's without any DIM'd strings etc. which get allocated at runtime, just a quick glance

says there's about 2K or more for variable types and there's a lot of lines not tokenised because of the errors, so it will possibly

be using more than that once all the errors are ironed out.

 

All that before making changes to the code where differences between the 2 BASIC's have to be made and of course we lose

1792 bytes for the OS stuff, I know some of that could be used, maybe save about 512 bytes of base memory.

 

So even before running the program your up to getting on for 14K+ memory used

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...