Skip to content

Commit b3a931e

Browse files
committed
Updated 7800basic to 0.34
Updated most packages to either latest or almost latest
1 parent 3753907 commit b3a931e

File tree

104 files changed

+1085
-3705
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+1085
-3705
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion

README.md

Lines changed: 1 addition & 1 deletion

contexthelp/7800basic.md

Lines changed: 3 additions & 0 deletions

hovers/7800basic.md

Lines changed: 37 additions & 0 deletions

out/application.js

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

out/application.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

out/bin/compilers/7800basic/7800bas.c

Lines changed: 57 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ extern int currentbank;
1717
extern int currentdmahole;
1818
extern int numredefvars;
1919
extern int numconstants;
20-
extern char constants[MAXCONSTANTS][100];
20+
extern char constants[MAXCONSTANTS][CONSTANTLEN];
2121
extern char incbasepath[500];
2222
extern char redefined_variables[80000][100];
2323
extern char bannerfilenames[1000][100];
@@ -27,8 +27,10 @@ extern int graphicsdatawidth[16];
2727
extern char charactersetchars[257];
2828
extern int passes;
2929
extern int line;
30+
extern int savelevel;
3031
extern int dmaplain;
3132
extern int templabel;
33+
extern int plotlabel;
3234
extern int tallspritecount;
3335
extern int fourbitfade_alreadyused;
3436
extern int zonelocking;
@@ -57,15 +59,18 @@ extern int romsize_already_set;
5759
extern int firstfourbyte;
5860
extern int firstcompress;
5961
extern int dumpgraphics_index;
62+
extern int TIGHTPACKBORDER;
63+
extern int changedmaholescalled;
6064
int maxpasses = 2;
6165

62-
#define BASIC_VERSION_INFO "7800basic v0.33"
66+
#define BASIC_VERSION_INFO "7800basic v0.34"
6367

6468
int main (int argc, char *argv[])
6569
{
6670
char **statement;
6771
char **deallocate_mem;
6872
int i, j, k;
73+
int def_idx;
6974
int unnamed, defcount, defi;
7075
char *c;
7176
char single;
@@ -77,8 +82,8 @@ int main (int argc, char *argv[])
7782
char *filename = "7800basic_variable_redefs.h";
7883
char *prefilename = NULL;
7984
char *path = 0;
80-
char def[250][100];
81-
char defr[250][100];
85+
char def[500][100];
86+
char defr[500][100];
8287
char finalcode[500];
8388
char *codeadd;
8489
char mycode[500];
@@ -117,6 +122,7 @@ int main (int argc, char *argv[])
117122
// we were called without the "-p" switch, so revert to the historic
118123
// single-pass behavior, since the basic source is coming from stdin,
119124
// and we can't rewind stdin.
125+
prwarn ("7800basic was launched without -p. Using single-pass only.");
120126
maxpasses=1;
121127
preprocessedfd = stdin;
122128
}
@@ -161,17 +167,20 @@ int main (int argc, char *argv[])
161167
prout ("%s %s %s\n", BASIC_VERSION_INFO, __DATE__, __TIME__);
162168

163169
// a bunch of vars that should be reset each pass.
170+
changedmaholescalled = 0;
164171
numredefvars = 0;
165172
numconstants = 0;
166173
incbasepath[0] = 0;
167174
currentcharset[0] = 0;
168175
line = 0;
176+
savelevel = 0;
169177
unnamed = 0;
170178
defcount = 0;
171179
multiplespace = 0;
172180
defi = 0;
173181
dmaplain = 0;
174182
templabel = 0;
183+
plotlabel = 0;
175184
currentbank = 0;
176185
branchtargetnumber = 0;
177186
doingfunction = 0;
@@ -200,6 +209,7 @@ int main (int argc, char *argv[])
200209
numthens = 0;
201210
firstfourbyte = 1;
202211
firstcompress = 1;
212+
TIGHTPACKBORDER = 0;
203213

204214
// global variable init...
205215
strcpy (redefined_variables[numredefvars++], "collisionwrap = 1");
@@ -262,32 +272,59 @@ int main (int argc, char *argv[])
262272

263273
// look for defines and remember them
264274
strcpy (mycode, code);
265-
for (i = 0; i < 495; ++i)
266-
if (code[i] == ' ')
275+
int k_def_search;
276+
for (k_def_search = 0; k_def_search < 495; ++k_def_search)
277+
if (code[k_def_search] == ' ')
267278
break;
268-
if (code[i + 1] == 'd' && code[i + 2] == 'e' && code[i + 3] == 'f' && code[i + 4] == ' ')
279+
if (k_def_search < 495 && code[k_def_search] == ' ' &&
280+
(k_def_search + 4 < 499) && code[k_def_search + 1] == 'd' &&
281+
code[k_def_search + 2] == 'e' && code[k_def_search + 3] == 'f' &&
282+
code[k_def_search + 4] == ' ')
269283
{ // found a define
270-
i += 5;
271-
for (j = 0; code[i] != ' '; i++)
284+
int current_pos = k_def_search + 5; // current_pos now points to start of define name.
285+
if (defi >= 499) { // Max 500 defines
286+
fprintf(stderr, "(%d) ERROR: Maximum number of defines (500) reached.\n", bbgetline());
287+
exit(1);
288+
}
289+
for (j = 0; current_pos < 499 && code[current_pos] != ' ' && code[current_pos] != '\0' && code[current_pos] != '\n' && code[current_pos] != '\r'; current_pos++)
272290
{
273-
def[defi][j++] = code[i]; // get the define
291+
if (j >= 99) {
292+
fprintf(stderr, "(%d) ERROR: Define name too long (max 99 chars).\n", bbgetline());
293+
exit(1);
294+
}
295+
def[defi][j++] = code[current_pos];
274296
}
275297
def[defi][j] = '\0';
276298

277-
i += 3;
299+
if (j == 0) { // Empty define name
300+
fprintf(stderr, "(%d) ERROR: Malformed define statement. Empty define name.\n", bbgetline());
301+
exit(1);
302+
}
303+
304+
// Expect " = " sequence after define name
305+
if (!(current_pos < 497 && code[current_pos] == ' ' && code[current_pos+1] == '=' && code[current_pos+2] == ' ')) {
306+
fprintf(stderr, "(%d) ERROR: Malformed define statement. Expected \" = \" after define name '%s'.\n",
307+
bbgetline(), def[defi]);
308+
exit(1);
309+
}
310+
current_pos += 3; // Skip " = "
278311

279-
for (j = 0; code[i] != '\0'; i++)
312+
for (j = 0; current_pos < 499 && code[current_pos] != '\0' && code[current_pos] != '\n' && code[current_pos] != '\r'; current_pos++)
280313
{
281-
defr[defi][j++] = code[i]; // get the definition
314+
if (j >= 99) {
315+
fprintf(stderr, "(%d) ERROR: Define replacement string too long (max 99 chars) for define '%s'.\n", bbgetline(), def[defi]);
316+
exit(1);
317+
}
318+
defr[defi][j++] = code[current_pos];
282319
}
283320
defr[defi][j] = '\0';
284321
removeCR (defr[defi]);
285-
printf (";.%s.%s.\n", def[defi], defr[defi]);
322+
printf (";PARSED_DEFINE: .%s. = .%s.\n", def[defi], defr[defi]);
286323
defi++;
287324
}
288-
else if (defi)
325+
else if (defi) // This 'i' refers to the outer loop variable for iterating through existing defines
289326
{
290-
for (i = 0; i < defi; ++i)
327+
for (def_idx = 0; def_idx < defi; ++def_idx)
291328
{
292329
codeadd = NULL;
293330
finalcode[0] = '\0';
@@ -301,15 +338,15 @@ int main (int argc, char *argv[])
301338
bbgetline ());
302339
exit (1);
303340
}
304-
codeadd = strstr (mycode, def[i]);
341+
codeadd = strstr (mycode, def[def_idx]);
305342
if (codeadd == NULL)
306343
break;
307344
for (j = 0; j < 500; ++j)
308345
finalcode[j] = '\0';
309346
strncpy (finalcode, mycode, 500);
310347
finalcode[(strlen (mycode) - strlen (codeadd))] = 0;
311-
strcat (finalcode, defr[i]);
312-
strcat (finalcode, codeadd + strlen (def[i]));
348+
strcat (finalcode, defr[def_idx]);
349+
strcat (finalcode, codeadd + strlen (def[def_idx]));
313350
strcpy (mycode, finalcode);
314351
}
315352
}
@@ -390,7 +427,7 @@ int main (int argc, char *argv[])
390427
printf (" echo \"######## ERROR: space overflow detected in\",[SPACEOVERFLOW]d,\"areas.\"\n");
391428
printf (" echo \"######## look above for areas with negative ROM space left.\"\n");
392429
printf (" echo \"######## Aborting assembly.\"\n");
393-
printf ("SET SPACEOVERFLOWPASS = (SPACEOVERFLOWPASS + 1)\n");
430+
printf ("SPACEOVERFLOWPASS SET (SPACEOVERFLOWPASS + 1)\n");
394431
printf (" if SPACEOVERFLOWPASS > 0\n");
395432
printf (" ERR\n");
396433
printf (" endif\n");
Binary file not shown.
4.34 KB
Binary file not shown.
4.32 KB
Binary file not shown.

0 commit comments

Comments
 (0)