Subversion Repositories SvarDOS

Compare Revisions

Ignore whitespace Rev 1577 → Rev 1576

//sved/trunk/libc.c
0,0 → 1,44
/*
* replacement for a couple of libc functions
*/
 
#include <i86.h>
#include <stddef.h>
 
#include "libc.h"
 
 
unsigned short mdr_dos_write(unsigned short handle, const void far *buf, unsigned short count, unsigned short *bytes) {
unsigned short res = 0;
unsigned short resax = 0;
unsigned short buf_seg = FP_SEG(buf);
unsigned short buf_off = FP_OFF(buf);
 
_asm {
push bx
push cx
push dx
 
mov ah, 0x40
mov bx, handle
mov cx, count
mov dx, buf_off
push ds
mov ds, buf_seg
 
int 0x21
pop ds
jnc done
mov res, ax
 
done:
mov resax, ax
 
pop dx
pop cx
pop bx
}
 
*bytes = resax;
return(res);
}
//sved/trunk/libc.h
0,0 → 1,7
 
#ifndef LIBC_H
#define LIBC_H
 
unsigned short mdr_dos_write(unsigned short handle, const void far *buf, unsigned short count, unsigned short *bytes);
 
#endif
//sved/trunk/makefile
14,7 → 14,7
 
all: sved.com
 
sved.com: sved.obj deflang.obj
sved.com: sved.obj deflang.obj libc.obj
wasm startup.asm
wlink @sved.lnk
upx -9 --8086 sved.com
//sved/trunk/sved.c
25,6 → 25,8
 
#include <i86.h> /* MK_FP() */
 
#include "libc.h"
 
#include "mdr\bios.h"
#include "mdr\cout.h"
#include "mdr\dos.h"
155,42 → 157,6
*****************************************************************************/
 
 
static unsigned short dos_write(unsigned short handle, const void far *buf, unsigned short count, unsigned short *bytes) {
unsigned short res = 0;
unsigned short resax = 0;
unsigned short buf_seg = FP_SEG(buf);
unsigned short buf_off = FP_OFF(buf);
 
_asm {
push bx
push cx
push dx
 
mov ah, 0x40
mov bx, handle
mov cx, count
mov dx, buf_off
push ds
mov ds, buf_seg
 
int 0x21
pop ds
jnc done
mov res, ax
 
done:
mov resax, ax
 
pop dx
pop cx
pop bx
}
 
*bytes = resax;
return(res);
}
 
 
static size_t strlen(const char *s) {
const char *ptr = s;
while (*ptr != 0) ptr++;
392,11 → 358,11
while (l) {
/* do not write the last empty line, it is only useful for edition */
if (l->len != 0) {
errflag |= dos_write(fd, l->payload, l->len, &bytes);
errflag |= mdr_dos_write(fd, l->payload, l->len, &bytes);
} else if (l->next == NULL) {
break;
}
errflag |= dos_write(fd, eolbuf, eollen, &bytes);
errflag |= mdr_dos_write(fd, eolbuf, eollen, &bytes);
l = l->next;
}
 
//sved/trunk/sved.lnk
5,5 → 5,6
file startup
file sved
file deflang
file libc
lib svarlang\svarlngs
lib mdr\mdrs2024.lib