A coisa é pior do que mostrei....
Pra conseguir alguma coisa, acrescentei aqueles DO CASE, CASE .F., ENDCASE.
Ou seja, fonte que não faz nada.
mVendedor := Space(2)
MsgExclamation( "Aviso antes do DO WHILE" )
DO WHILE .T.
Mensagem( "<F2>Pedidos <F3>Pend <F4>Destino <F5>Consulta <TAB>Plano Pgto" + ;
" <F6>Estoque <F7>Pedido <F8>Localizar <F10>BDI <K>KIT <F11> Sair" )
IF BrowseNavigate( oMyBrowse, @nKey )
DO CASE
CASE .F.
CASE .F.
CASE .F.
ENDCASE
LOOP
ENDIF
MsgExclamation( "Tecla " + Ltrim(Str(nKey)) )
DO CASE
CASE .F.
CASE .F.
CASE .F.
ENDCASE
DO CASE
CASE nKey == K_F2
MsgExclamation( "Apertou F2" )
F2_Pedidos()
oMyBrowse:RefreshAll()
CASE nKey == K_F3
F3_Compra()
oMyBrowse:RefreshAll()
CASE nKey == K_F4
F4_Destino( @pDestino, @aItemList )
oMyBrowse:RefreshAll()
CASE nKey == K_F5
F5_Consulta( @aItemList, oMyBrowse, pDestino, @c_Espec, @mVendedor )
oMyBrowse:RefreshAll()
CASE nKey == K_F6
F6_Estoque()
oMyBrowse:RefreshAll()
CASE nKey == K_F7
F7_Pedido( @aItemList, @c_Espec )
oMyBrowse:refreshAll()
CASE nKey == K_F8
f8_Pesquisa()
oMyBrowse:refreshAll()
CASE nKey == K_F10
F10_Bdi()
CASE Chr( nKey ) $ "kK"
K_Kits( aItemList, oMyBrowse, mVendedor )
oMyBrowse:refreshAll()
CASE nKey == K_TAB
TBPR->( dbSkip(-1) )
IF TBPR->( Bof() )
TBPR->( dbGoBottom() )
ENDIF
oMyBrowse:refreshAll()
CASE nKey == K_F11 .OR. nKey == K_ESC
n_rec := PRO1->( RecNo() )
PRO1->( dbSetOrder(1) )
FOR n_i := 1 TO Len( aItemList )
PRO1->( dbSeek( aItemList[ n_i, 1 ] ) )
PRO1->( RecLock() )
REPLACE pro1->qde_Pe WITH Max( 0, PRO1->qde_pe - aItemList[ n_i, 9 ] )
PRO1->( RecUnlock() )
IF Val( Substr( aItemList[ n_i, 1 ] , 1 , 1 ) ) > 7
KITPRO->( dbSeek( Substr( aItemList[ n_i, 1 ], 3, 3 ) ) )
KITEM->( dbSeek( KITPRO->cod_KIt ) )
DO WHILE ! KITEM->( Eof() ) .AND. KITEM->cod_KIt == KITPRO->cod_Kit
PRO1->( dbSeek( KITEM->cod_pro ) )
PRO1->( RecLock() )
REPLACE pro1->qde_Pe WITH Max( 0, PRO1->qde_pe - aItemList[ n_i, 9 ] )
PRO1->( RecUnlock() )
KITEM->( dbSkip() )
ENDDO
ENDIF
NEXT
PRO1->( dbSetOrder( 1 ) )
PRO1->( dbGoto( n_rec ) )
SetCursor(1)
SetColor( cSays )
EXIT
OTHERWISE
MsgExclamation( "Nenhum CASE" )
ENDCASE
MsgExclamation( "Saiu do DO CASE" )
ENDDO
CLOSE DATABASES
RETURN
FUNCTION F2_Pedidos()
Num resumo:
- mostra a mensagem "antes do do while"
dentro do do while:
- mostra a tecla pressionada
- aciona algo conforme a tecla, sendo que F2 mostra "teclou F2", e nas outras faz outras coisas
- caso não tenha nada pra tecla, aparece "nenhum CASE"
- depois de qualquer tecla, e analisar os CASES, mostra "saiu do case"
- e finalmente ESC sai fora
O que está acontecendo:
- tecla de espaço: ok, mostra o ascii 32, mostra "nenhum case", "saiu do case"
- tecla ESC: ok, mostra o ascii 27, sai fora
- tecla F6: ok, entra no case nKey == K_F6
- teclas F2 a F5: mostra o ascii 27, e sai fora
Isso foi depois dos CASE .F., agora trocou F2 a F5 por retornar código ascii inválido.
sem os CASE .F., aparecia "aviso antes do do while", como se o fonte estivesse chamando ele mesmo ao teclar de F2 a F5.
Pergunta:
Alguém aà experiente, que possa saber o que essas teclas poderiam fazer, ou no Linux, ou no putty?