Skip to content

Commit b2b1f4e

Browse files
committed
reorganize into multiple files allowing c code to be split between resident and non-resident code, all resident data in ASM files
1 parent c440eaa commit b2b1f4e

File tree

15 files changed

+756
-3375
lines changed

15 files changed

+756
-3375
lines changed

src/amishelp.asm

Lines changed: 77 additions & 589 deletions
Large diffs are not rendered by default.

src/amisstub.asm

Lines changed: 115 additions & 961 deletions
Large diffs are not rendered by default.

src/buildme.bat

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
@REM builds updated share
22
nasm -f obj -g -D__WATCOM__ startup.asm -o startup.obj
33
nasm -f obj -g -I ../lmacros/ -D__WATCOM__ amisstub.asm -o amisstub.obj
4-
nasm -f obj -g -D__WATCOM__ messages.asm -o messages.obj
54
wcc -q -0 -ms -btdos -s -os -d3 -fo=sharetsr.obj sharetsr.c
6-
wcc -q -0 -ms -btdos -s -os -d3 -fo=shareprg.obj shareprg.c
7-
wcc -q -0 -ms -btdos -s -os -d3 -I..\kitten -I..\tnyprntf -fo=sharemsg.obj sharemsg.c
5+
nasm -f obj -g -D__WATCOM__ dossup.asm -o dossup.obj
86
wcc -q -0 -ms -btdos -s -os -d3 -fo=clib.obj clib.c
7+
nasm -f obj -g -I ../lmacros/ -D__WATCOM__ amishelp.asm -o amishelp.obj
8+
wcc -q -0 -ms -btdos -s -os -d3 -fo=shareprg.obj shareprg.c
99
wcc -q -0 -ms -btdos -s -os -d3 -fo=tnyprntf.obj ..\tnyprntf\tnyprntf.c
1010
wcc -q -0 -ms -btdos -s -os -d3 -fo=kitten.obj ..\kitten\kitten.c
11+
wcc -q -0 -ms -btdos -s -os -d3 -I..\kitten -I..\tnyprntf -fo=sharemsg.obj sharemsg.c
12+
@rem nasm -f obj -g -D__WATCOM__ messages.asm -o messages.obj
1113
wlink @share.rsp

src/clib.c

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,26 @@ typedef unsigned size_t;
44
int main(int argc, char **argv);
55
int Tprintf(const char * fmt, ...);
66

7-
8-
#if (__WATCOMC__)
9-
//#pragma data_seg ( _DATA_startup, TDATA )
10-
//#pragma code_seg ( _TEXT_startup, TCODE )
11-
#endif
12-
7+
#define NON_RES_TEXT
138

149
/*
15-
__I4M
16-
__U4D
17-
_cstart_
1810
intdos
1911
*/
2012

2113
int _argc = 0;
2214
extern char * _heap;
2315
extern char * _environ;
16+
extern char sstack;
17+
2418

2519
void *malloc(size_t size)
2620
{
2721
char *p = _heap;
22+
if ( (_heap+size) >= (&sstack-0x800) )
23+
{
24+
/* memory exhausted, we are bumping into our stack! */
25+
return NULL;
26+
}
2827
_heap += size;
2928
return p;
3029
}
@@ -45,7 +44,6 @@ int iscntrl(int c)
4544
}
4645

4746
#define isargdelim(c) (isspace(c) || iscntrl(c) || (c==',') || (c==';') || (c=='='))
48-
extern char sstack;
4947

5048
/* returns DOS exit code if doesn't stay resident */
5149
int _cstart(void)
@@ -54,8 +52,7 @@ int _cstart(void)
5452
char *argv[9];
5553
char *p;
5654
int i;
57-
void writechar(char c);
58-
writechar('*');
55+
5956
for (p = cmdline, i = 1, argv[0]=cmdline; *p && (*p!='\r'); p++)
6057
{
6158
register char c = *p;
@@ -138,17 +135,33 @@ char * strchr(const char *str, int c) {
138135
void * memset(void *src, int val, size_t size) {
139136
char *p;
140137
size_t i;
141-
for (p = src, i=0; i < size; i++)
138+
for (p = src, i=0; i < size; i++, p++)
142139
*p = (char)val;
143140
return src;
144141
}
145142

143+
/* Naive implementation of atol(), only decimal digits allowed, no signs */
144+
long atol(const char *s) NON_RES_TEXT;
145+
long atol(const char *s) {
146+
long val;
147+
const char *p;
148+
149+
for (val = 0, p = s; *p; p++) {
150+
if (*p == ' ')
151+
continue;
152+
if (*p < '0' || *p > '9')
153+
break;
154+
val *= 10;
155+
val += *p - '0';
156+
}
157+
158+
return val;
159+
}
146160

147161

148162
// used by kitten
149163

150164
char *getenv(char *s) {return NULL;}
151165

152-
//int open(const char *filename, int mode, ... );
153166
int read(int fileno, int count, int block_size) { return 0; }
154167
int write() {return 0;}

0 commit comments

Comments
 (0)