* DBUNLOCK (0) Internal Error 19 !!!
@ 2003-02-15 18:32 Carlos A Silva
0 siblings, 0 replies; only message in thread
From: Carlos A Silva @ 2003-02-15 18:32 UTC (permalink / raw)
To: linux-msdos
[-- Attachment #1: Type: text/plain, Size: 365 bytes --]
Please, when I try to execute the program CLIPPER in attached, in the
simultaneos sessions of DOSEMU (5 or +), during the proccess
(10000...15000...20000) occurs the follow error:
DBUNLOCK (0) Internal Error 19
I use dosemu-1.1.4.9
r-dos 7.03
kernel 2.4.18
If somebody test for me and try to repeat the error... I wait...
Carlos A Silva
ciclum@uol.com.br
[-- Attachment #2: Teste.prg --]
[-- Type: application/octet-stream, Size: 11708 bytes --]
#include "error.ch"
SPOOL = .f.
FRAME = "Õ͸³¾ÍÔ³ "
SINGLE = " "
DOUBLE = "ÉÍ»º¼ÍȺ "
ACESSO = .f. // senha
GIRA_SYS = 1
FLECHA = chr(26)
COLORIDO = 1
ACHOICE = "+w/b" // menus de consulta a cadastros
AVISO = "+b/bg,n/w,n,n,gr+/bg" // esc, enter, flechas na L 24
CONF = "+w/bg,+bg/n,n,n,b/bg" // confirmacoes
COREXTRA = "+w/b,*+bg/n,N,N,+W/B" // selecao de horarios
FORTE = "+bg/b,n/w,n,n,w/n" // linha de mensagens
FUNDO = "+w/+w" // fundo
GRAVE_ = "+bg/r" // avisos GRAVES
HOTKEY_ = "+w/n" // hot-key do menu
INV = "b/w,+w/n,n,n,b/w" // mensagens
MENS = "+bg/n,+w/bg,n,n,bg/n" // listar cadastros na tela
MENX = "+w/n,+w/bg,n,n,bg/n" // destaque sobre cor mens
MENU_ = "+w/b,+bg/n,n,n,+w/b" // prompts de cadastros
NORMAL = "n/w,+w/b,n,n,b/w" // telas, gets
OBS_ = "+b/n" // destaques (antigo titulos)
OBS2_ = "+b/n" // topo do reebox
OBS_PISC = "*+gr/bg" // destaques piscando
PISCANTE = "*+bg/b,+bg/n,N,N,+W/B" // mensagens piscantes
QUADRO = "b/w" // quadros
RED_ = "+r/n" // destaque na listagem em tela
RODAPE = "+w/bg,n/w,n,n,n/bg" // flechas, enter, esc, etc.
SAYS = "+w/w" // conteudo dos boxes
SOMBRA_ = 8 // sombra dos boxes
TEXTO_ = "+w/b,+w/b,n,n,w/b" // memoedit
TITULOS = "b/bg,+bg/n,N,N,+W/B" // titulos (Linha 0)
VI = "+w/bg,+bg/n,n,n,b/bg" // opcao entre VIDEO e IMPRESSORA
setcolor(MENS)
CLEA
sele 0
if ! abrearq("TESTE","TESTE")
msg(.f.,"ARQUIVO DE TESTE BLOQUEADO - ACESSO NEGADO <ENTER>",0)
clos data
retu
endif
if ! file("TESTE1.NTX")
inde on CODIGO to TESTE1
endif
set inde to TESTE1
go bott
@ 20,10 say "ultimo: "+CODIGO
NUM = " "
setcursor(1)
@ 05,00 say "digite seu n. : " get NUM pict "9"
read
DROGA = 0
while .T.
STOP := inkey()
if esc()
exit
endif
unlock
set orde to 1
if recc() = 0
COD = "00000001"
else
go bott
COD = val(CODIGO)+1
COD = strzero(COD,8)
endif
@ 10,10 say "vou incluir... "+COD
IF COD = "99999999"
EXIT
ENDIF
sele TESTE
dbsetorder(1)
if dbseek(COD)
// msg(.f.,"CODIGO JA' CADASTRADO <ENTER>",0)
// msg(.f.,"COMUNIQUE O RESPONSAVEL IMEDIATAMENTE <ENTER>",0)
// exit
DROGA++
@ 20,50 SAY DROGA
loop
endif
if adireg(10)
repl CODIGO with COD,;
HORA with time(),;
NUMERO with NUM
endif
enddo
clos data
retu
// ::::::::::::::::::::::::::::::::::::::::::::::::::
*********** funcoes de uso multiusuario ************
*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
* Funcoes para processamento compartilhado em rede. *
* Assumem SET EXCLUSIVE OFF, ou seja, processamento compartilhado *
*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*
/* Funcoes para:
Comamdos Proposito
-----------------------------------------------------------------------------
1. USE [EXCLUSIVE][SHARED] Abertura de arquivos.
2. FLOCK() Bloqueio do arquivo em uso.
3. RLOCK()/LOCK() Bloqueio do registro corrente.
4. APPEND BLANK Inclusao de um novo registro.*/
************************************
* function AbreArq(Arq,Ape,Modo,Vezes)
function AbreArq
/* SINTAXE
AbreArq(<nome do arquivo>,<alias>,<modo>,<tentativas>)
PROPOSITO
A Funcao Tenta abrir um arquivo de dados no modo definido, exclusivo
(modo .T.) ou compartilhado (modo .F.), fornecendo o valor logico(.T.)
se for bem-sucedida, ou falso(.F.) em caso contrario.
EXEMPLO
if AbreArq("ARQ","Teste",.F.,10)
SET INDEX TO IND1,IND2
else
? "O Arquivo de dados nao esta disponivel"
inkey(3)
return
endif
*/
para Arq,Ape,Modo,Vezes
priv Sempre,Arq,Ape,Modo,Vezes
//LOCAL Sempre
if type("MODO") <> "L"
MODO = .f.
endif
if type("VEZES") <> "N"
VEZES = 10
endif
Sempre:=(Vezes = 0)
/*
Efetua um determinado numero de tentativas para abrir o arquivo ou
indefinidamente caso vezes=0. Se a tecla <ESC> for pressionanda pelo
Usuario, as tentativas sao interrompidas.
*/
while (Sempre .or. Vezes >0) // .and. inkey() <> 27 // desliguei o esc ...
if Modo
USE (Arq) ALIAS (Ape) EXCLUSIVE NEW // Modo Exclusivo
else
USE (Arq) ALIAS (Ape) SHARED NEW // Modo Compartilhado
endif
if ! NETERR()
msg()
return (.t.) // USE Bem-Sucedido, Arq. Aberto
endif
msg(.t.,"AGUARDE - TENTANDO ACESSO AO ARQUIVO ("+ARQ+")")
inkey(1) // Aguarda 1 segundo.
Vezes-- // Decrementa a variavel vezes
enddo
msg()
return (.F.) // USE Malsucedido, arquivo nao disponivel
***********************
function BloqArq(Vezes)
/* SINTAXE
BloqArq(<tentativas>)
PROPOSITO
A Funcao Tenta bloquear o arquivo de dados que estiver aberto na area
de trabalho selecionada. Se for bem-sucedida, fornece o valor logico (.T.)
tornando o acesso aos dados do arquivo exclusivo para o usuario que a
executou. Em caso contrario fornece o valor falso(.F.)
EXEMPLO
if BloqArq(10)
DELETE FOR Valor=0
UNLOCK // Cancela o bloqueio
else
? "O Arquivo de dados nao esta disponivel"
inkey(3)
return
endif
*/
priv Sempre
//LOCAL Sempre
if FLOCK()
return (.T.) // Arquivo Bloqueado
endif
msg(.t.,"AGUARDE - TENTANDO ACESSO AO ARQUIVO")
Sempre:=(Vezes = 0)
/*
Efetua um determinado numero de tentativas para bloquear o arquivo ou
indefinidamente caso vezes=0. Se a tecla <ESC> for pressionanda pelo
Usuario, as tentativas de bloqueio sao interrompidas.
*/
while (Sempre .or. Vezes >0) // .and. inkey() <> 27 // desliguei o esc ...
inkey(1) // Aguarda 1 segundo.
Vezes-- // Decrementa a variavel vezes
if FLOCK()
msg()
return (.T.) // Arquivo Bloqueado
endif
enddo
msg()
return (.F.) // Arquivo Nao Bloqueado
***********************
function BloqReg(Vezes)
/* SINTAXE
BloqReg(<tentativas>)
PROPOSITO
A Funcao Tenta bloquear o acesso de outros usuarios ao registro do
arquivo de dados em uso no qual esta atualmente posicionado o apontador
de registros, tornando o acesso a seus dados exclusivo para o usuario que a
executou. Se for bem-sucedida, fornece o valor logico (.T.). Em caso
contrario fornece o valor falso(.F.)
EXEMPLO
if BloqReg(10)
DELETE
UNLOCK // Cancela o bloqueio
else
? "O Registro nao esta disponivel"
endif
*/
priv Sempre
// LOCAL Sempre
if RLOCK()
return (.T.) // Registro Bloqueado
endif
msg(.t.,"AGUARDE - TENTANDO ACESSO AO ARQUIVO")
Sempre:=(Vezes = 0)
/*
Efetua um determinado numero de tentativas para bloquear o registro ou
indefinidamente caso vezes=0. Se a tecla <ESC> for pressionanda pelo
Usuario, as tentativas de bloqueio sao interrompidas.
*/
while (Sempre .or. Vezes >0) //.and. inkey() <> 27 desliguei o esc ...
if RLOCK()
msg()
return (.T.) // Registro Bloqueado
endif
inkey(1) // Aguarda 1 segundo.
Vezes-- // Decrementa a variavel vezes
enddo
msg()
return (.F.) // Registro Nao Bloqueado
**********************
function AdiReg(Vezes)
/* SINTAXE
AdiReg(<tentativas>)
PROPOSITO
A Funcao Tenta adicionar um novo registro no arquivo de dados em uso na
area de trabalho selecionanda, fornecendo verdadeiro(.T.) se for
bem-sucedida. Em caso contrario fornece o valor falso(.F.)
EXEMPLO
if AdiReg(10)
REPLACE Codigo WITH "001", Valor WITH 1000
UNLOCK // Cancela o bloqueio
else
? "Erro de Rede, Inclusao Nao Efetuada !"
endif
*/
priv Sempre
//LOCAL Sempre
appe blan
if ! NETERR()
return (.T.) // Novo Registro incluido e bloqueado
endif
msg(.t.,"AGUARDE - TENTANDO ACESSO AO ARQUIVO")
Sempre:=(Vezes = 0)
/*
Efetua um determinado numero de tentativas para adicionar o novo registro no
arquivo ou indefinidamente caso vezes=0. Se a tecla <ESC> for pressionanda
pelo Usuario, as tentativas sao interrompidas.
*/
while (Sempre .or. Vezes >0) // .and. inkey() <> 27 desliguei o esc ...
appe blan
if ! NETERR()
msg()
return (.T.) // Registro Incluido e Bloqueado
endif
inkey(1) // Aguarda 1 segundo.
Vezes-- // Decrementa a variavel vezes
enddo
msg()
return (.F.) // Registro Nao Incluido
************
function msg
para pisca,texto,tempo
priv texto,ci,tempo,pisca,old_cor,tela_auto
tela_auto = savescreen(23,00,23,79)
old_cor = setcolor()
if type("pisca") = "U"
setcolor(FORTE)
@ 23,00
set colo to &OLD_COR.
return .t.
else
if pisca
setcolor(PISCANTE)
else
setcolor(FORTE)
endif
endif
@ 23,00
if type("TEXTO") <> "U"
texto = alltrim(texto)
if len(texto) > 76
texto = substr(texto,1,76)
endif
ci = ((76-len(texto))/2)-2
setcursor(0)
@ 23,ci+2 say chr(17)+" "+texto+" "+chr(16)
if type("TEMPO") <> "U"
tone(1100,1)
inkey(tempo)
@ 23,00
restscreen(23,00,23,79,tela_auto)
endif
endif
set colo to &OLD_COR.
return .t.
*****************
function confirma
para texto,ok,tom
priv texto,pl,tom,pc,ok,ul,uc,tela,sn,old_cor
if type("ok") ="U"
ok = .t.
endif
if type("tom") ="U"
tom = .f.
endif
pl = 21
old_cor = setcolor()
pc = ((80 - (len(texto)+11)) / 2) - 2
ul = pl+2
uc = pc+len(texto)+15
save scre to tela
//if tom
// tone(300,1)
//endif
setcolor(CONF)
reebox(pl,pc,ul,uc)
@ pl+1,pc+2 say texto
sn = if(ok,1,2)
while .t.
@ pl+1,pc+2+len(texto)+1 prom " SIM "
@ pl+1,pc+2+len(texto)+7 prom " NAO "
menu to SN
if SN = 0 .or. SN = 1 .or. SN = 2
exit
endif
enddo
set colo to &old_cor.
rest scre from tela
return if(SN=1,.t.,.f.)
***************
function reebox // desenha box com sombra
para li,ci,lf,cf,bord,tit
priv li,ci,lf,cf,bord,tit,old_cor
old_cor = setcolor()
if type("bord") != "C"
bord = single
endif
@ li,ci,lf,cf box bord
if type("TIT") = "C"
TIT = upper(substr(TIT,1,1))+lower(substr(TIT,2))
if ! empty(SINGLE)
@ li,ci+1+((cf - ci)-(len(TIT)+2))/2 say if(BORD=DOUBLE .or. BORD=FRAME,chr(181),chr(180))+tit+if(BORD=DOUBLE .or. BORD=FRAME,chr(198),chr(195))
else
setcolor(OBS2_)
@ li,ci say space((cf - ci)+1)
@ li,ci+1 say chr(254)+" "+tit
setcolor(old_cor)
endif
endif
//if cf <= 77
// setattr(li+1,cf+1,lf+1,cf+2,SOMBRA_) // opa - funcky.lib ... 05/11/92
//endif
//setattr(lf+1,ci+1,lf+1,if(cf+2 > 79,79,cf+2),SOMBRA_)
//:::if cf = 78
//::: setattr(li+1,cf+1,lf+1,cf+1,SOMBRA_)
//::: setattr(lf+1,ci+1,lf+1,cf+1,SOMBRA_)
//:::else
//::: if cf <= 77
//::: setattr(li+1,cf+1,lf+1,cf+2,SOMBRA_) // opa - funcky.lib ... 05/11/92
//::: setattr(lf+1,ci+1,lf+1,if(cf+2 > 79,79,cf+2),SOMBRA_)
//::: endif
//:::endif
return .t.
************
function esc
return(lastkey() = 27)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-02-15 18:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-02-15 18:32 DBUNLOCK (0) Internal Error 19 !!! Carlos A Silva
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox