home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / PJ8_3.ZIP / LNKTBL3.ASM < prev    next >
Assembly Source File  |  1990-02-26  |  1KB  |  69 lines

  1.     title    link time code
  2.     include    asm.inc
  3.  
  4.     .stack
  5.     .data
  6. pre_terminate_text    db    'Pre-terminate code active',13,10,'$'
  7.     .data?
  8.     extrn    argv:dword,argc:word
  9.  
  10. terminate_address    dd    ?
  11.     
  12.     .code
  13.  
  14. _TERM1    segment byte public 'CODE'
  15. _TERM1    ends
  16. _TERM2    segment byte public 'CODE'
  17. _TERM2    ends
  18. CGROUP    group    _TEXT,_TERM1,_TERM2
  19.  
  20.     .code
  21.     assume    cs:CGROUP
  22.     extn    exit_program,startup,outchr_registers
  23.  
  24. ;;    main
  25. ;
  26. main    proc
  27.     mov    ax,@data        ; compensate for MS-LINK bug
  28.     mov    ss,ax
  29.     mov    sp,offset stack
  30.  
  31.     mov    ax,sp            ; initialize segments, argv, argc, etc
  32.     call    startup
  33.  
  34.     mov    ah,30h            ; check dos version
  35.     int    21h
  36.     cmp    al,3
  37.     jb    mai1            ;  if before DOS3
  38.  
  39.     mov    ah,62h            ; get PSP (requires DOS3)
  40.     int    21h
  41.     mov    ds,bx
  42.  
  43.     les    ax,ds:[0Ah]        ; save current terminate address
  44.     mov    wptr terminate_address[bp],ax
  45.     mov    wptr terminate_address[bp+2],es
  46.  
  47.     mov    ds:[0Ch],cs        ; set new termination address
  48.     mov    wptr ds:[0Ah],offset pre_terminate_code
  49.  
  50. mai1:    jmp    exit_program
  51. main    endp
  52.  
  53. _TERM1    segment
  54.     assume    ds:@data,es:nothing,ss:nothing
  55. pre_terminate_code:
  56.     mov    ah,9
  57.     mov    dx,@data
  58.     mov    ds,dx
  59.     lea    dx,pre_terminate_text
  60.     int    21h
  61. _TERM1    ends
  62. _TERM2    segment
  63.     mov    ax,@data
  64.     mov    ds,ax
  65.     jmp    terminate_address
  66. _TERM2    ends
  67.  
  68.     end    main
  69.