From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Carlos A Silva" Subject: DBUNLOCK (0) Internal Error 19 !!! Date: Sat, 15 Feb 2003 15:32:38 -0300 Sender: linux-msdos-owner@vger.kernel.org Message-ID: <001301c2d520$9ed31aa0$8f67abc8@estaocarlos> Reply-To: "Carlos A Silva" Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0010_01C2D507.789AE660" Return-path: List-Id: To: linux-msdos@vger.kernel.org This is a multi-part message in MIME format. ------=_NextPart_000_0010_01C2D507.789AE660 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit 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 ------=_NextPart_000_0010_01C2D507.789AE660 Content-Type: application/octet-stream; name="Teste.prg" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="Teste.prg" #include "error.ch" SPOOL =3D .f. FRAME =3D "=D5=CD=B8=B3=BE=CD=D4=B3 " SINGLE =3D " " DOUBLE =3D "=C9=CD=BB=BA=BC=CD=C8=BA " ACESSO =3D .f. // senha GIRA_SYS =3D 1 FLECHA =3D chr(26) COLORIDO =3D 1 ACHOICE =3D "+w/b" // menus de consulta a cadastros AVISO =3D "+b/bg,n/w,n,n,gr+/bg" // esc, enter, flechas na L 24 CONF =3D "+w/bg,+bg/n,n,n,b/bg" // confirmacoes COREXTRA =3D "+w/b,*+bg/n,N,N,+W/B" // selecao de horarios FORTE =3D "+bg/b,n/w,n,n,w/n" // linha de mensagens FUNDO =3D "+w/+w" // fundo GRAVE_ =3D "+bg/r" // avisos GRAVES HOTKEY_ =3D "+w/n" // hot-key do menu INV =3D "b/w,+w/n,n,n,b/w" // mensagens MENS =3D "+bg/n,+w/bg,n,n,bg/n" // listar cadastros na tela MENX =3D "+w/n,+w/bg,n,n,bg/n" // destaque sobre cor mens MENU_ =3D "+w/b,+bg/n,n,n,+w/b" // prompts de cadastros NORMAL =3D "n/w,+w/b,n,n,b/w" // telas, gets OBS_ =3D "+b/n" // destaques (antigo titulos) OBS2_ =3D "+b/n" // topo do reebox OBS_PISC =3D "*+gr/bg" // destaques piscando PISCANTE =3D "*+bg/b,+bg/n,N,N,+W/B" // mensagens piscantes QUADRO =3D "b/w" // quadros RED_ =3D "+r/n" // destaque na listagem em tela RODAPE =3D "+w/bg,n/w,n,n,n/bg" // flechas, enter, esc, etc. SAYS =3D "+w/w" // conteudo dos boxes SOMBRA_ =3D 8 // sombra dos boxes TEXTO_ =3D "+w/b,+w/b,n,n,w/b" // memoedit TITULOS =3D "b/bg,+bg/n,N,N,+W/B" // titulos (Linha 0) VI =3D "+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 ",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 =3D " " setcursor(1) @ 05,00 say "digite seu n. : " get NUM pict "9" read DROGA =3D 0 while .T. STOP :=3D inkey() if esc() exit endif unlock set orde to 1 if recc() =3D 0 COD =3D "00000001" else go bott COD =3D val(CODIGO)+1 COD =3D strzero(COD,8) endif @ 10,10 say "vou incluir... "+COD IF COD =3D "99999999" EXIT ENDIF sele TESTE dbsetorder(1) if dbseek(COD) // msg(.f.,"CODIGO JA' CADASTRADO ",0) // msg(.f.,"COMUNIQUE O RESPONSAVEL IMEDIATAMENTE ",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 ************ *=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-= =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D= * * Funcoes para processamento compartilhado em rede. = * * Assumem SET EXCLUSIVE OFF, ou seja, processamento compartilhado = * *=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-= =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D= * /* 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(,,,) 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 =3D .f. endif if type("VEZES") <> "N" VEZES =3D 10 endif Sempre:=3D(Vezes =3D 0) /* Efetua um determinado numero de tentativas para abrir o arquivo ou=20 indefinidamente caso vezes=3D0. Se a tecla 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() 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=3D0 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:=3D(Vezes =3D 0) /* Efetua um determinado numero de tentativas para bloquear o arquivo ou=20 indefinidamente caso vezes=3D0. Se a tecla 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() PROPOSITO A Funcao Tenta bloquear o acesso de outros usuarios ao registro do=20 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=20 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:=3D(Vezes =3D 0) /* Efetua um determinado numero de tentativas para bloquear o registro ou=20 indefinidamente caso vezes=3D0. Se a tecla 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() 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:=3D(Vezes =3D 0) /* Efetua um determinado numero de tentativas para adicionar o novo = registro no=20 arquivo ou indefinidamente caso vezes=3D0. Se a tecla for = pressionanda=20 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 =3D savescreen(23,00,23,79) old_cor =3D setcolor() if type("pisca") =3D "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 =3D alltrim(texto) if len(texto) > 76 texto =3D substr(texto,1,76) endif ci =3D ((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") =3D"U" ok =3D .t. endif if type("tom") =3D"U" tom =3D .f. endif pl =3D 21 old_cor =3D setcolor() pc =3D ((80 - (len(texto)+11)) / 2) - 2 ul =3D pl+2 uc =3D 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 =3D 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 =3D 0 .or. SN =3D 1 .or. SN =3D 2 exit endif enddo set colo to &old_cor. rest scre from tela return if(SN=3D1,.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 =3D setcolor() if type("bord") !=3D "C" bord =3D single endif @ li,ci,lf,cf box bord if type("TIT") =3D "C" TIT =3D upper(substr(TIT,1,1))+lower(substr(TIT,2)) if ! empty(SINGLE) @ li,ci+1+((cf - ci)-(len(TIT)+2))/2 say if(BORD=3DDOUBLE .or. = BORD=3DFRAME,chr(181),chr(180))+tit+if(BORD=3DDOUBLE .or. = BORD=3DFRAME,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 <=3D 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 =3D 78 //::: setattr(li+1,cf+1,lf+1,cf+1,SOMBRA_) //::: setattr(lf+1,ci+1,lf+1,cf+1,SOMBRA_) //:::else //::: if cf <=3D 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() =3D 27) ------=_NextPart_000_0010_01C2D507.789AE660--