* Protecao do sistema e bloqueio por inadimplencia Function Bloqueio(FLAG) * Variaveis de protecao do sistema e bloqueio por inadimplencia Privat memo_Diario := if(type("memo_Diario" ) = "U", ctod(" / / "), memo_Diario ) Privat memo_Vencimento := if(type("memo_Vencimento") = "U", ctod(" / / "), memo_Vencimento ) Privat memo_Executa := if(type("memo_Executa" ) = "U", 0 , memo_Executa ) If File("MEMO.MEM") // Arquivo memoria configuracoes de variaveis do sistema Restore From MEMO Additive endif * Verifica se contador if senha1 = "ZERA" + STRZERO(DAY(DATE()) + MONTH(DATE()) - 1, 2) //.and. file("SCG1000.DBF") .and. file("PROTECAO.MEM") .and. date() < ctod("01/06/2003") // Contador para versoes demonstrativas memo_Executa := 0 * Save all like memo_* to MEMO elseif memo_Executa >= 365 //.or. date() > ctod("10/06/2004") .or. !file("SCG1000.DBF") .or. !file("PROTECAO.MEM") cls @ 00,00 say "Programa muito grande para ser alocado na mem¢ria" inkey(0) Inicia("finaliza") quit elseif memo_Executa <= 365 memo_Executa ++ * Save all like memo_* to MEMO endif * Inicia variavel de vencimento e diario e grava arquivo /* if senha1 == "ZERA" + STRZERO(DAY(DATE()) + MONTH(DATE()) - 1, 2) .and. memo_Vencimento < memo_Diario memo_Vencimento := if(empty(memo_Vencimento), addmonth(date(),+1), addmonth(memo_Vencimento,+1)) memo_Diario := date() save all like memo_* to MEMO.mem endif */ * Atualiza data diario e grava arquivo if empty(memo_Diario) .or. memo_Diario < date() //.and. (memo_Diario+1 == date() .or. memo_Diario+2 == date() .or. memo_Diario+3 == date()) memo_Diario := date() save all like memo_* to MEMO.mem endif * Verifica se data compitador foi alterada para data inferior a diario if memo_Diario # date() Aviso("Verifique a data do computador.",05) QUIT endif * Verifica se data ultrapassou vencimento // if memo_Vencimento+15 < memo_Diario .or. (memo_Vencimento < memo_Diario .and. FLAG # NIL) //.or. memo_Diario # date() if memo_Vencimento < memo_Diario .or. (memo_Vencimento < memo_Diario .and. FLAG # NIL) //.or. memo_Diario # date() * Apos 10 dias do vencimento, mostra mensagem de bloqueio total E BLOQUEAR TOTALMENTE O SISTEMA blo_nAno := val(right(dtoc(date()),2)) blo_nMes := month(date()) blo_nL1 := asc(subs(UPPER(MesAtu()),1,1)) blo_nL2 := asc(subs(UPPER(MesAtu()),2,1)) blo_nL3 := asc(subs(UPPER(MesAtu()),3,1)) blo_Senha1 := strzero(blo_nL1 * (blo_nMes * blo_nAno), 4) + strzero(blo_nL1 * (blo_nAno+1) * (blo_nMes+1), 4) blo_Senha2 := strzero(blo_nL2 * (blo_nMes * blo_nAno), 4) + strzero(blo_nL2 * (blo_nAno+2) * (blo_nMes+2), 4) blo_Senha3 := strzero(blo_nL3 * (blo_nMes * blo_nAno), 4) + strzero(blo_nL3 * (blo_nAno+3) * (blo_nMes+3), 4) blo_D1 := Digito(blo_Senha1) blo_D2 := Digito(blo_Senha2) blo_D3 := Digito(blo_Senha3) blo_Crip1 := space(08) blo_Crip2 := space(08) blo_Crip3 := space(08) blo_DCri1 := space(01) blo_DCri2 := space(01) blo_DCri3 := space(01) jan(11,10,38,70,"w+/w","n+/w",.T.) @ 11,12 say "DESBLOQUEIO" color "gr/w" Aviso(" SISTEMA BLOQUEADO ! ",10) Quadro(21,20,08,"Senha:") // Quadro(21,35,08,"") // Quadro(21,50,08,"") Quadro(21,30,01,"") // Quadro(21,45,01,"") // Quadro(21,60,01,"") @ 28,12 say "þ Sistema Bloqueado. " color "w+/w" @ 30,12 say " Entre em contato com o suporte, para solitita‡„o de" color "w+/w" @ 31,12 say " senha para desbloqueio. " color "w+/w" @ 34,12 say " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ" color "w+/w" @ 35,12 say " Suporte: (85)8859.9770 (85)9941.1991 (85)3279.7006" color "w+/w" @ 22,21 get blo_Crip1 pict "@!" @ 22,31 get blo_DCri1 pict "!" /* @ 22,36 get blo_Crip2 pict "@!" @ 22,46 get blo_DCri2 pict "!" @ 22,51 get blo_Crip3 pict "@!" @ 22,61 get blo_DCri3 pict "!" */ if senha1 == "SUPERVISOR" + STRZERO(DAY(DATE()) + MONTH(DATE()) - 1, 2) + "èëì" @ 24,21 say blo_Senha1 pict "@!" @ 24,36 say blo_Senha2 pict "@!" @ 24,51 say blo_Senha3 pict "@!" @ 24,31 say blo_D1 pict "@!" @ 24,46 say blo_D2 pict "@!" @ 24,61 say blo_D3 pict "@!" endif read // if blo_Crip1 = blo_Senha1 .and. blo_Crip2 = blo_Senha2 .and. blo_Crip3 = blo_Senha3 .and. ; // blo_DCri1 = blo_D1 .and. blo_DCri2 = blo_D2 .and. blo_DCri3 = blo_D3 if blo_Crip1 = blo_Senha1 .and. blo_DCri1 = blo_D1 memo_Vencimento := if(empty(memo_Vencimento), addmonth(date(),+1), addmonth(memo_Vencimento,+1)) memo_Diario := date() memo_Executa := 0 save all like memo_* to MEMO.mem else aviso(" Senha incorreta ! ",5) setcolor("bg+/b") cls @ 04,02 say "Sistema Bloqueado no dia " + dtoc(memo_Diario) color "bg+/b" @ 05,02 to 05,77 color "bg+/b" @ 06,02 say "Entre em contato com o suporte, para solitita‡„o de senha para desbloqueio." color "bg+/b" @ 44,02 to 44,77 color "bg+/b" @ 45,02 say "Suporte: (85)8859.9770 (85)3279.7006" color "bg+/b" inkey(0) // Inicia("finaliza") QUIT endif elseif memo_Vencimento+10 < memo_Diario // Apos 10 dias do vencimento, mostra mensagem de bloqueio total * Desloca(" Faltam " + str(memo_Vencimento + 15 - memo_Diario,1) + " dias para o bloqueio total do sistema." ,46,"r/w") elseif memo_Vencimento+05 < memo_Diario // Apos 05 dias do vencimento, mostra mensagem de bloqueio parcial * Desloca(" Faltam " + str(memo_Vencimento + 10 - memo_Diario,1) + " dias para o bloqueio parcial do sistema." ,46,"gr*/w") endif * Retira variaveis da memoria Release all like memo_* Release all like blo_* Return (.T.) Function Digito(m_codigo,m_digito) privat m_digver,d,df1,df2,df3,resto m_codigo := m_codigo + repl("0",12-len(trim(m_codigo))) for I := 1 to 12 d := StrZero(I,2) d1&d. := val(subs(m_codigo,I,1)) next df1 := 0 for I := 5 to 2 step -1 D := STRZERO(5-I+1,2) DF1 := DF1 + I * D1&D. next for I := 9 to 2 STEP -1 D := StrZero(9-I+5,2) DF1 := DF1 + I * D1&D. next DF2 := DF1 / 11 ; DF3 := INT(DF2) * 11 ; resto := DF1 - DF3 m_digver := iif(resto=0.OR.resto=1,str(0,1),str(11-resto,1)) if m_digito # NIL if m_digver # m_digito aviso("Digito n„o confere...",3) return(.F.) else return(.T.) endif endif if m_digito = NIL Return m_digver endif Return(.F.) Function Aviso(msg, tempo) local TelaAguarde local ci local cf local nWinNum if !empty(msg) msg := if(msg=NIL," Processando...Aguarde! ",msg) ci := int(40-(len(msg)/2)-5) cf := int(40+(len(msg)/2)+5) TelaAguarde := if(tempo # NIL, savescreen(22,ci,26,cf), "") * Som(1) If tempo # NIL #IFDEF __GTWVW__ nWinNum := znewwindow("ÚÄ¿³ÙÄÀ³",22,ci,26,cf,"Informacao") WVW_drawboxgroup(nWinNum,23,ci+1,25,cf-1) @ 24,ci+1 say padc(msg,len(msg)+2) color "r/w" #ELSE Jan(22,ci,26,cf,"w+/w","n+/w",.T. ) @ 24,ci+1 say padc(msg,len(msg)+2) color "r*/w" #ENDIF Else Jan(22,ci,26,cf,"w+/w","n+/w",.T. ) @ 24,ci+1 say padc(msg,len(msg)+2) color "r*/w" Endif If tempo # NIL Inkey(tempo) TelaAguarde := restscreen(22,ci,26,cf,TelaAguarde) #IFDEF __GTWVW__ zrevwindow() #ENDIF Endif @ 48,78 Say "" endif Return(.T.) Function MesAtu(nMes) // Funcao que retorna mes por extenso local cMes local aMes := {"Janeiro","Fevereiro","Marco" ,"Abril" ,"Maio" ,"Junho" , "Julho" ,"Agosto" ,"Setembro","Outubro","Novembro","Dezembro"} nMes := if(nMes = NIL, month(date()), nMes) cMes := aMes[nMes] Return (cMes) Function Jan(li,ci,lf,cf,linhaS,linhaI,fundo) local CorJan := SetColor() * local nWin if fundo = .T. && se .T. limpa a tela e coloca cor de fundos setColor(linhaS) && cor de fundo @ li,ci clear to lf,cf && limpa quadro setColor(CorJan) endif && fecha if /* #IFDEF __GTWVW__ if linhaS = "w+/w" AddMiscObjects( nWin, {|nWindow| WVW_drawboxraised(nWin,li+1,ci+1,lf-1,cf-1,.F.) } ) * WVW_drawboxraised(nWin,li+1,ci+1,lf-1,cf-1,.F.) else AddMiscObjects( nWin, {|nWindow| WVW_drawboxrecessed(nWin,li+1,ci+1,lf-1,cf-1,.F.) } ) * WVW_drawboxrecessed(nWin,li+1,ci+1,lf-1,cf-1,.F.) endif #ENDIF #IFNDEF __GTWVW__ */ @ li,ci to lf,cf Color linhaS && faz um quadro @ lf,ci to lf,cf Color linhaI && linha inferior @ li,cf to lf,cf Color linhaI && linha direita @ li,cf say "¿" Color linhaI && canto superior direito @ lf,cf say "Ù" Color linhaI && canto inferior direito @ lf,ci say "À" Color linhaS && canto inferior esquerdo @ 48,78 say "" // #ENDIF SetColor(CorJan) Return NIL Function Quadro(li,ci,tam,texto,linhaS,linhaI) local cf := (ci+tam+1) local ct := (ci - (len(texto) )) ct := if(ct < 0, 0, ct) linhaS := if(linhaS = NIL, "w+/w", linhaS) linhaI := if(linhaI = NIL, "n+/w", linhaI) @ li+1,ct say if(ci <= 10, left(texto,12), texto) color "b/w" /* #IFDEF __GTWVW__ WVW_drawboxget(nWin,li+1,ci+1,tam) * WVW_drawboxrecessed(nWin,li+1,ci+1,li+1,cf-1,.F.) #ENDIF #IFNDEF __GTWVW__ */ Jan(li,ci,li+2,cf,linhaS,linhaI,.T.) // #ENDIF RETURN NIL