Using INTDOSQQ for Password Entry in FORTRAN 5.1

ID: Q93905


The information in this article applies to:
  • Microsoft FORTRAN for MS-DOS, version 5.1


SUMMARY

You can create a program that allows for password entry using Microsoft FORTRAN version 5.1 for MS-DOS. The Microsoft FORTRAN "Reference" manual for version 5.1 explains using the INTDOSQQ and INTDOSXQQ subroutines to invoke MS-DOS system calls using Interrupt 21h. Interrupt 21h Functions 7 and 8 retrieve input from the keyboard without echoing the input to the display. Interrupt 21h Function 7 ignores the CTRL+C and CTRL+BREAK key combinations while Interrupt 21h Function 8 processes these key combinations by terminating the program. For more information about the various functions provided by Interrupt 21h, see the "MS-DOS Encyclopedia" or another reference on programming in the MS-DOS environment.


MORE INFORMATION

The following sample code use MS-DOS Interrupt 21h Function 7 to allow the user to enter a password without echoing the keystrokes to the display. The application uses Interrupt 21h Function 2 to display an asterisk on the screen for each keystroke entered.

Sample Code


C Compiler options required: None

      include 'flib.fi'
      program password
      character*80 pass
      logical get_pass/.true./ 
      integer*2 i, j, getch

      write(*,'(1x,a,\)') 'ENTER PASSWORD > '
      i=1
      do while (get_pass)
         j = getch()            ! Get a character of the password
         if (j .le. 32) then
            if (j .eq. 8 .and. i .gt. 1) then   ! BACKSPACE key pressed
               i = i-1
               call putchar( char(j) )    ! Move cursor back 1 character
               call putchar( ' ' )        ! Write a blank over the asterisk
               call putchar ( char(j) )   ! Move cursor back to blanks
               pass(i:i+1) = '  '
            endif
            if (j .eq. 13) get_pass = .false. ! ENTER key pressed - exit
         else
            call putchar( '*' )           ! Echo asterisk to display
            pass(i:i) = char(j)           ! Add input character to string
            i = i + 1
            if (i .gt. 80) get_pass = .false. ! Don't write past string end
         endif
      enddo
      write(*,*)
      write(*,*) 'password entered > ',pass
      end

C  The GETCH function retrieves a character from the
C  Standard Input without echoing the character to the screen.

      integer*2 function getch
      include 'flib.fd'
      record /regs$info/ in, out
      in.bregs.ah = #07            ! Function 7 - STDIN Input (no echo)
      call intdosqq(in, out)       ! Interrupt 21h
      getch = out.bregs.al         ! Input data returned in AL
      return
      end

C  The PUTCHAR subroutine writes a single character to the screen.

      subroutine putchar( ch )
      include 'flib.fd'
      record /regs$info/ in, out
      character*1 ch
      in.bregs.ah = #02            ! Function 2 - Display Output
      in.bregs.dl = ch             ! character to display goes in DL
      call intdosqq(in, out)       ! Interrupt 21h
      return
      end 

Additional query words: kbinf 5.10 nofps

Keywords :
Version : :5.1
Platform :
Issue type :


Last Reviewed: November 2, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.