Subversion Repositories SvarDOS

Rev

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

Rev 450 Rev 453
Line 36... Line 36...
36
/* returns far pointer to rmod's settings block on success */
36
/* returns far pointer to rmod's settings block on success */
37
struct rmod_props far *rmod_install(unsigned short envsize) {
37
struct rmod_props far *rmod_install(unsigned short envsize) {
38
  char far *myptr, far *mcb;
38
  char far *myptr, far *mcb;
39
  unsigned short far *owner;
39
  unsigned short far *owner;
40
  const unsigned short sizeof_rmodandprops_paras = rmod_len + sizeof(struct rmod_props) + 15 / 16;
40
  const unsigned short sizeof_rmodandprops_paras = rmod_len + sizeof(struct rmod_props) + 15 / 16;
41
  unsigned int rmodseg = 0xffff;
41
  unsigned short rmodseg = 0xffff;
42
  unsigned int envseg = 0;
42
  unsigned short envseg = 0, origenvseg = 0;
43
  struct rmod_props far *res = NULL;
43
  struct rmod_props far *res = NULL;
44
 
44
 
45
  /* read my current env segment from PSP */
45
  /* read my current env segment from PSP and save it */
46
  _asm {
46
  _asm {
47
    push ax
47
    push ax
48
    push bx
48
    push bx
49
    mov bx, 0x2c
49
    mov bx, 0x2c
50
    mov ax, [bx]
50
    mov ax, [bx]
51
    mov envseg, ax
51
    mov envseg, ax
-
 
52
    mov origenvseg, ax
52
    pop bx
53
    pop bx
53
    pop ax
54
    pop ax
54
  }
55
  }
55
 
56
 
56
  /* printf("original (PSP) env buffer at %04X\r\n", envseg); */
57
  /* printf("original (PSP) env buffer at %04X\r\n", envseg); */
Line 141... Line 142...
141
  res = MK_FP(rmodseg, rmod_len);
142
  res = MK_FP(rmodseg, rmod_len);
142
  _fmemset(res, 0, sizeof(*res));  /* zero out */
143
  _fmemset(res, 0, sizeof(*res));  /* zero out */
143
  res->rmodseg = rmodseg;          /* rmod segment */
144
  res->rmodseg = rmodseg;          /* rmod segment */
144
  res->inputbuf[0] = 128;          /* input buffer for INT 0x21, AH=0Ah*/
145
  res->inputbuf[0] = 128;          /* input buffer for INT 0x21, AH=0Ah*/
145
  res->echoflag = 1;               /* ECHO ON */
146
  res->echoflag = 1;               /* ECHO ON */
-
 
147
  res->origenvseg = origenvseg;    /* original environment segment */
146
 
148
 
147
  /* write env segment to rmod buffer */
149
  /* write env segment to rmod buffer */
148
  owner = MK_FP(rmodseg, RMOD_OFFSET_ENVSEG);
150
  owner = MK_FP(rmodseg, RMOD_OFFSET_ENVSEG);
149
  *owner = envseg;
151
  *owner = envseg;
150
 
152