home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / pcmag / vol12n03.zip / GETPASS.ASM < prev    next >
Assembly Source File  |  1993-01-11  |  2KB  |  83 lines

  1. ;==========================================================================
  2. ; GETPASS.ASM - A routine to as for a password
  3. ;==========================================================================
  4. code    segment
  5.         assume    cs:code
  6.         org    100h
  7. main:        jmp    main_1
  8. current_pass    db    "PC Magazine",0
  9. promptmsg    db    "Enter Password:",13,10,"$"
  10. rightmsg    db    "Correct password!",13,10,"$"
  11. wrongmsg    db    "Incorrect password!",13,10,"$"
  12. main_1:
  13.         cld                    ;Set string dir up
  14.         mov    ah,9
  15.         mov    dx,offset promptmsg
  16.         int    21h
  17.         add    sp,4                ;Clean up stack.
  18.         push    cs
  19.         mov    ax,offset current_pass
  20.         push    ax
  21.         call    GetPassword
  22.         mov    dx,offset rightmsg
  23.         or    ax,ax
  24.         je    main_2
  25.         mov    dx,offset wrongmsg
  26. main_2:
  27.         push    ax                ;Save return code
  28.         mov    ah,9                ;DOS print string
  29.         int    21h
  30.         pop    ax
  31.         mov    ah,4ch                ;DOS Terminate
  32.         int    21h
  33. ;-------------------------------------------------------------------------
  34. ; GetPassword - Read a password from the user and compare to current PW.
  35. ; Entry: Long pointer to current ASCIIZ password on stack.
  36. ; Exit:  AX = 0 if correct password entered.
  37. ; Parameters must be removed from the stack by the calling procedure
  38. ;-------------------------------------------------------------------------
  39. GetPassword    proc    near
  40.         assume    cs:code
  41.         push    bp
  42.         mov    bp,sp                ;Create stack frame
  43.         push    bx                ;Save registers.
  44.         push    dx
  45.         push    di
  46.         push    es
  47.         mov    di,ss:[bp+6]            ;Get ptr to password
  48.         mov    es,di
  49.         mov    di,ss:[bp+4]
  50.         xor    bx,bx                ;Clear PW good flag
  51. GetPW_1:
  52.         mov    ah,7                ;DOS Console I/O
  53.         mov    dl,-1
  54.         int    21h
  55.         or    al,al                ;See if extended key
  56.         jne    GetPW_2
  57.         
  58.         mov    ah,7                ;Get extended key, ignore,
  59.         int    21h                ;  and replace with 
  60.         mov    al,1                ;  1 value.
  61. GetPW_2:
  62.         cmp    al,13                ;See if return
  63.         je    GetPW_3
  64.         sub    al,es:[di]            ;Compare characters
  65.         or    bl,al                ;OR into pass flag
  66.         cmp    byte ptr es:[di],0        ;See if at end of PW
  67.         je    GetPW_1
  68.         inc    di                ;No, inc pointer
  69.         jmp    short GetPW_1
  70. GetPW_3:        
  71.         or    bl,es:[di]            ;OR Terminating zero.
  72.         mov    ax,bx                ;Copy pass flag
  73.         pop    es
  74.         pop    di
  75.         pop    dx
  76.         pop    bx
  77.         mov    sp,bp
  78.         pop    bp
  79.         ret
  80. GetPassword    endp
  81. code        ends
  82. end        main
  83.