Subversion Repositories SvarDOS

Rev

Rev 1578 | Rev 1580 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1578 Rev 1579
Line 155... Line 155...
155
 
155
 
156
 
156
 
157
unsigned short dos_write(unsigned short handle, unsigned short count, unsigned short *bytes, const void far *buf);
157
unsigned short dos_write(unsigned short handle, unsigned short count, unsigned short *bytes, const void far *buf);
158
/* NOTE: last parameter (far pointer buf) is passed on the stack */
158
/* NOTE: last parameter (far pointer buf) is passed on the stack */
159
#pragma aux dos_write = \
159
#pragma aux dos_write = \
160
"push ds" \
160
"push ds"   /* save DS into AX */ \
161
"pop ax" \
161
"pop ax" \
162
"pop dx" \
162
"pop dx" \
163
"pop ds" \
163
"pop ds" \
164
"push ax" \
164
"push ax"   /* save DS into stack for later restoration */ \
165
"mov ah, 0x40" \
165
"mov ah, 0x40" \
166
"int 0x21" \
166
"int 0x21" \
167
"pop ds" \
167
"pop ds" \
168
"jc done" \
168
"jc done" \
169
"mov [di], ax" \
169
"mov [di], ax" \
Line 193... Line 193...
193
    len--;
193
    len--;
194
  }
194
  }
195
}
195
}
196
 
196
 
197
 
197
 
198
/* TODO this function does not handle overlapping strings well! */
-
 
199
static void fmemmove(void far *dst, const void far *src, size_t len) {
198
static void fmemmove(void far *dst, const void far *src, size_t len) {
-
 
199
  short delta = 1;
-
 
200
  /* detect possible overlap in the forward direction */
-
 
201
  if (dst >= src) {
-
 
202
    dst = (char far *)dst + len - 1;
-
 
203
    src = (char far *)src + len - 1;
-
 
204
    delta = -1;
-
 
205
  }
200
  while (len-- > 0) {
206
  while (len-- > 0) {
201
    *(char far *)dst = *(char far *)src;
207
    *(char far *)dst = *(char far *)src;
202
    dst = (char far *)dst + 1;
208
    dst = (char far *)dst + delta;
203
    src = (char far *)src + 1;
209
    src = (char far *)src + delta;
204
  }
210
  }
205
}
211
}
206
 
212
 
207
 
213
 
208
static struct line far *line_calloc(unsigned short siz) {
214
static struct line far *line_calloc(unsigned short siz) {