
  PROGRAM

OMIT('***')
 * Created with Clarion 8.0
 * User: Mike Duglas
 * Date: 03.07.2013
 * Time: 14:53
****

  MAP
    Main()
    Login(), BOOL
  END

Users               FILE, DRIVER('Topspeed'), CREATE, RECLAIM, PRE(Users)
pkUsers               KEY(Users:Name, Users:Pwd), PRIMARY
                      RECORD
Name                    STRING(20)
Pwd                     STRING(20)
                      END
                    END

Glo:User            LIKE(Users:Name)

  CODE
  Main()
  
Main                PROCEDURE()
  CODE
  IF NOT Login()
    MESSAGE('Bye!', 'Bye', ICON:Application)
    RETURN
  END
  
  MESSAGE('Hello '& CLIP(Glo:User) &'!', 'Hello', ICON:Asterisk)
  
Login               PROCEDURE()
loc:User              LIKE(Users:Name)
loc:Pwd               LIKE(Users:Pwd)
rc                    SIGNED, AUTO
retval                BOOL, AUTO

Window                WINDOW('Login'),AT(,,173,80),CENTER,GRAY
                        PROMPT('User:'),AT(17,20),USE(?lblUser)
                        ENTRY(@s20),AT(58,20),USE(loc:User),REQ
                        PROMPT('Password:'),AT(17,35),USE(?lblPwd)
                        ENTRY(@s20),AT(58,35,59),USE(loc:Pwd),PASSWORD,REQ
                        BUTTON('OK'),AT(62,56),USE(?bOK),REQ,DEFAULT
                        BUTTON('Cancel'),AT(112,56),USE(?bCancel)
                      END

  CODE
  
  retval = FALSE

  LOOP 2 TIMES
    OPEN(Users)
    rc = ERRORCODE()
    IF rc = 0
      BREAK
    END
    
    CASE rc
    OF 2    !-- File not found
      CREATE(Users)
      rc = ERRORCODE()
      IF rc = 0
        CYCLE
      END
      MESSAGE(ERROR(), 'CREATE Error', ICON:Exclamation)
      RETURN FALSE
    ELSE
      MESSAGE(ERROR(), 'OPEN Error', ICON:Exclamation)
      RETURN FALSE
    END
  END
  
  OPEN(Window)
  ACCEPT 
    CASE ACCEPTED()
    OF ?bOK
      Users:Name = loc:User
      Users:Pwd = loc:Pwd
      GET(Users, Users:pkUsers)
      IF NOT ERRORCODE()
        Glo:User = Users:Name
        retval = TRUE
        BREAK
      ELSE
        MESSAGE('Invalid login/password', 'User validation', ICON:Exclamation)
        CLEAR(loc:User)
        CLEAR(loc:Pwd)
        DISPLAY()
        SELECT(?loc:User)
      END
    OF ?bCancel
      BREAK
    END
  END
  
  CLOSE(Users)
  CLOSE(Window)
  RETURN retval
  