summaryrefslogtreecommitdiff
path: root/v4.0/src/MAPPER/WRITE.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/MAPPER/WRITE.ASM')
-rw-r--r--v4.0/src/MAPPER/WRITE.ASM64
1 files changed, 64 insertions, 0 deletions
diff --git a/v4.0/src/MAPPER/WRITE.ASM b/v4.0/src/MAPPER/WRITE.ASM
new file mode 100644
index 0000000..24ebcde
--- /dev/null
+++ b/v4.0/src/MAPPER/WRITE.ASM
@@ -0,0 +1,64 @@
1page 80,132
2
3title CP/DOS DosWrite mapper
4
5dosxxx segment byte public 'dos'
6 assume cs:dosxxx,ds:nothing,es:nothing,ss:nothing
7
8;**********************************************************************
9;*
10;* MODULE: doswrite
11;*
12;* FUNCTION: Write a specified number of bytes to a file
13;*
14;* CALLING SEQUENCE:
15;*
16;* push word file handle
17;* push@ other buffer area
18;* push word buffer length
19;* push@ word bytes written
20;* call doswrite
21;*
22;* MODULES CALLED: PC-DOS Int 21h, ah=40h, write
23;*
24;*********************************************************************
25
26 public doswrite
27 .sall
28 .xlist
29 include macros.inc
30 .list
31
32str struc
33old_bp dw ?
34return dd ?
35Written dd ? ; number of bytes actually written
36Bufflng dw ? ; number of bytes to be written
37Buffer dd ? ; write buffer address
38Handle dw ? ; file handle
39str ends
40
41doswrite proc far
42
43 Enter doswrite ; push registers
44
45 mov bx,[bp].handle ; get handle
46 lds dx,[bp].buffer ; set write buffer
47 mov cx,[bp].bufflng ; number of bytes to be written
48
49 mov ah,40h ; load opcode
50 int 21h ; write bytes to the file
51 jc exit ; jump if error
52
53 lds si,[bp].written ; pointer to return data
54 mov word ptr [si],ax ; save actual number of bytes written
55 sub ax,ax ; set good return code
56
57exit: mexit ; pop registers
58 ret size str - 6 ; return
59
60doswrite endp
61
62dosxxx ends
63
64 end