home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / msj / msjv4_4 / overlays / ovasm.asm < prev    next >
Encoding:
Assembly Source File  |  1989-01-30  |  2.8 KB  |  83 lines

  1.                 extrn   _errputs:far, p1:far, p2:far
  2.                 extrn   _executable_name:byte
  3. _text           segment public 'CODE'
  4. _text           ends
  5. _data           segment public 'DATA'
  6. _data           ends
  7.  
  8.                 public  fill_exe_name,ENVSEG,main_msg,call_loop,envstr_loop
  9.                 public  fname_loop
  10.  
  11. ENVSEG          equ     2CH                             ;loc'n of environment pointer
  12. DGROUP          group   _data,_stack        
  13. _text           segment
  14.                 assume  cs:_text,ds:DGROUP,ss:DGROUP
  15. _main           proc    far
  16.                 mov     ax,DGROUP
  17.                 mov     ds,ax
  18.                 call    far ptr fill_exe_name
  19.                 lea     ax,main_msg
  20.                 push    ds
  21.                 push    ax
  22.                 call    far ptr _errputs
  23.                 add     sp,4
  24.                 mov     cx,1000
  25. call_loop:
  26.                 call    far ptr p1
  27.                 call    far ptr p2
  28.                 loop    call_loop
  29.                 mov     ax,4c00h
  30.                 int     21h
  31. _main           endp
  32.  
  33. fill_exe_name   proc    far
  34.                 push    es
  35.                 push    di
  36.                 push    ds
  37.                 push    si
  38.                 push    ax
  39.                 
  40.                 mov     ax,es
  41.                 mov     ds,ax
  42.                 mov     ax,DGROUP:ENVSEG                ;point at env
  43.                 mov     ds,ax
  44.                 mov     si,0
  45.                 mov     ax,seg _executable_name         ;point at dest string
  46.                 mov     es,ax
  47.                 lea     di,DGROUP:_executable_name
  48. envstr_loop:
  49.                 lodsb                                   ;get first env
  50.                 cmp     al,0                            ;end of string?
  51.                 jnz     envstr_loop                     ;no, keep looking
  52.                 cmp     byte ptr ds:[si],0              ;end of env?
  53.                 jnz     envstr_loop                     ;no, get another string
  54.                 add     si,3                            ;yes: go past, 2 more
  55. fname_loop:     movsb                                   ;move a byte    
  56.                 cmp     byte ptr ds:[si],0              ;end of name?
  57.                 jnz     fname_loop                      ;no, keep it up
  58.                 mov     byte ptr es:[di],0              ;store zero terminator
  59.  
  60.                 pop     ax
  61.                 pop     si
  62.                 pop     ds
  63.                 pop     di
  64.                 pop     es
  65.                 ret
  66. fill_exe_name   endp
  67.  
  68. _text           ends
  69.  
  70.  
  71. _data           segment
  72. main_msg        db      'This is main...',13,10,0
  73. _data           ends
  74.  
  75.  
  76. _stack          segment stack 'STACK'
  77.                 dw      200 dup (?)
  78. _stack          ends
  79.  
  80.                 end     _main
  81.  
  82.  
  83.