public inbox for linux-msdos@vger.kernel.org
 help / color / mirror / Atom feed
* 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