home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / menu / menu1 / origin.asm < prev    next >
Assembly Source File  |  1992-02-24  |  3KB  |  129 lines

  1. ; File......: ORIGIN.ASM
  2. ; Author....: Steve Larsen
  3. ; CIS ID....: 76370,1532
  4. ; Date......: $Date:   15 Aug 1991 23:08:00  $
  5. ; Revision..: $Revision:   1.1  $
  6. ; Log file..: $Logfile:   E:/nanfor/src/origin.asv  $
  7. ;
  8. ; This is an original work by K. Stephan Larsen and is placed in
  9. ; the public domain.
  10. ;
  11. ; Modification history:
  12. ; ---------------------
  13. ;
  14. ; $Log:   E:/nanfor/src/origin.asv  $
  15. ;
  16. ;     REV 1.2   23 Feb 1992            A. D. McDonald
  17. ;  corrected register useage error in DOS PSP get function.
  18. ;  DOS returns the PSP to BX, not AX.
  19. ;  
  20. ;     Rev 1.1   15 Aug 1991 23:08:00   GLENN
  21. ;  Forest Belt proofread/edited/cleaned up doc
  22. ;  
  23. ;     Rev 1.0   09 Jun 1991 00:40:16   GLENN
  24. ;  Initial revision.
  25. ;
  26.  
  27.  
  28.  
  29. ;
  30. ; $DOC$
  31. ; $FUNCNAME$
  32. ;    FT_ORIGIN()
  33. ; $CATEGORY$
  34. ;    Environment
  35. ; $ONELINER$
  36. ;    Report the drive, path and filename of the executing program
  37. ; $SYNTAX$
  38. ;    FT_ORIGIN() -> cString
  39. ; $ARGUMENTS$
  40. ;    None
  41. ; $RETURNS$
  42. ;    A string containing the full drive/directory/filename of
  43. ;    the currently executing file.
  44. ; $DESCRIPTION$
  45. ;    Often users will install multiple copies of application software,
  46. ;    especially on networks and in situations where the user is trying
  47. ;    to get around a copy protection scheme.
  48. ;
  49. ;    This function enables you to learn the name and source location 
  50. ;    of the currently executing file, so that you may take whatever
  51. ;    action you need to.
  52. ;
  53. ;    Requires DOS v3.xx and above.
  54. ; $EXAMPLES$
  55. ;    cMyFile := FT_ORIGIN()
  56. ;    
  57. ;    IF cMyFile <> "C:\APPDIR\MYFILE.EXE"
  58. ;       ?"Incorrect startup file.  Please remove/rename and start again"
  59. ;       QUIT
  60. ;    ENDIF
  61. ; $INCLUDE$
  62. ; $SEEALSO$
  63. ;    FT_WHEREIS() FT_TREE()
  64. ; $END$
  65. ;
  66.  
  67. TITLE ORIGIN.asm
  68.  
  69. PUBLIC FT_ORIGIN
  70.  
  71. EXTRN __retc:far
  72.  
  73. _NANFOR segment word public 'CODE'
  74.     ASSUME CS:_NANFOR
  75.  
  76. FT_ORIGIN       proc    far
  77.         push    ds              ; save Clipper's environment
  78.         push    es
  79.         push    di
  80.         push    si
  81.         push    bp
  82.         mov     bp, sp
  83.  
  84.         mov     ah, 62h         ; fetch segment address of PSP
  85.         int     21h
  86.         cld
  87.         mov     es, bx
  88.         mov     ax, es:[2Ch]    ; environment block seg is at PSP:2Ch
  89.         mov     es, ax          ; Env. Blk top in ES:DI, scan for 0000
  90.         xor     di, di
  91.         xor     ax, ax
  92.         mov     cx, 0FFFFh
  93. lf_1:   repne   scasb           ; scan for a null terminator
  94.         mov     bl, es:[di]     ; found one, now check for 2 nulls in a 
  95.         or      bl, bl          ;   row, means end of env. blk.
  96.         jnz     lf_1
  97.  
  98.         inc     di              ; now test for something, if there, that's
  99.         mov     ax, es:[di]     ;   our path.
  100.         or      ax, ax
  101.         jz      lf_2
  102.         inc     di              ; no path, point to a null
  103.         inc     di
  104.  
  105. lf_2:    push    es              ; save address of path for
  106.     push    di              ;  return to Clipper
  107.         pop     ax
  108.         pop     dx
  109.  
  110.         mov     sp, bp          ; housekeeping
  111.         pop     bp
  112.         pop     si
  113.         pop     di
  114.         pop     es
  115.         pop     ds
  116.  
  117.         push    dx              ; return path string to Clipper
  118.         push    ax
  119.  
  120.     call    __retc
  121.     add    sp,4
  122.  
  123.         ret
  124. FT_ORIGIN       endp
  125.  
  126. _NANFOR    ends
  127.     end
  128. 
  129.