home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1996 September
/
PCWK996.iso
/
polskie
/
victory
/
analiza.vcf
/
VC_ENTRY.CH
< prev
next >
Wrap
Text File
|
1996-06-22
|
14KB
|
601 lines
/* Deklaracje zmiennych i prolog programow
pisanych w CA-Clipperze 5.2
(C) 1994 by Jacek Janusz. All Rights Reserved. */
// UWAGA: PROGRAMY PISANE SA WYLACZNIE NA KOMPUTERY KLASY AT, VGA, DOS 3.30
// MUSI BYC DOLACZONA BIBLIOTEKA CA-TOOLS
// Sposob uzycia: #include w glownym pliku danego programu.
****************************************************************************
// #define TEST
// wersja pelna bez zabezpieczen
// #define COMMERCIAL
#include "fileio.ch"
#include "ctscan.ch"
#include "setcurs.ch"
#include "vc_def.ch"
LOCAL I,Ret,CfgF,CfgBuf,ROMCnt,ROMRead,Own,Pytaj:=.F.,OS,Tit2
// zmienne globalne
#ifdef EKRAN_WSTEPNY
PUBLIC __OF:=GetFont(1) // zapamietuje poprzedni font i odtwarza przy wyjsciu z programu
#endif
PUBLIC MnuTab // tablica, w ktorej sa zapamietane sciezki menu
PUBLIC MainMnu // tablica, w ktorej sa zapamietane nazwy menu glownego
// wraz z komunikatami oraz blokami kodu
PUBLIC BHandle // okno utworzone przez ResBlank()
PUBLIC DCount:=0 // licznik niezamknietych DispBegin() - oryginalny nie dziala
// dla Analizy
PUBLIC FHTitle // nazwa indeksu aktualnego helpu
PUBLIC Firm:=0 // identyfikator wybranej firmy
PUBLIC BaseName:={} // fizyczne nazwy baz lokalnych
PUBLIC Font // font CHR
/*********** Dane okreslajace wersje DEMO ************/
SET DATE GERMAN
PUBLIC Demo:=.T.
PUBLIC DataOd:=CToD("01.07.1995")
PUBLIC DataDo:=CToD("30.12.1996")
/*****************************************************/
PRIVATE MyPass:=""
****************************************************************************
/* Rozne SETy */
SetCancel(.F.) // wlaczyc na .F. przy koncowej kompilacji
SET CONFIRM ON
SET SCOREBOARD OFF // wylacza wyswietlanie Ins itp.
SET WRAP ON
SET DELETED ON
SET TALK OFF
SET COLOR TO
SET DATE GERMAN
SET KEY 28 TO
SET DELIMITERS ON
SET DELIMITERS TO "[]"
SET SOFTSEEK ON
#ifdef V28
Set(_SET_MESSAGE,27)
#else
Set(_SET_MESSAGE,24)
#endif
// Teraz pewne sprawy kontrolne i ustawienie parametrow video
IF !IsAT() // czy komputer AT?
Suspend(0)
SetCursor(0)
SetScrMode(3)
WBoard(2,0,24,79)
? "Program musi byc uruchomiony na komputerze klasy co najmniej PC/AT."
Inkey(0)
QUIT
ENDIF
IF !IsVGA() // czy karta graficzna VGA?
Suspend(0)
SetCursor(0)
SetScrMode(3)
WBoard(2,0,24,79)
? "Program wymaga karty graficznej VGA."
Inkey(0)
QUIT
ENDIF
IF OSVer()<"3.30" // czy DOS >= 3.30?
Suspend(0)
SetCursor(0)
SetScrMode(3)
WBoard(2,0,24,79)
? "Program wymaga co najmniej wersji DOS 3.30."
Inkey(0)
QUIT
ENDIF
#ifdef EKRAN_WSTEPNY
SetVGA()
Suspend(1)
IF LoadScr("VGA.SCR","VGA.PAL")==0
SavePal()
BlackPal()
Suspend(0)
Light()
Inkey(0)
ENDIF
IF LastKey()!=K_ESC
GBox(99,381,540,421,15)
GBox(98,380,541,422,15)
FOR I:=382 TO 420
GLine(100,I,539,I,9)
NEXT
DispStr("Prosze czekac, trwa otwieranie zbiorów...",158,394,3,0)
GLine(200,406,202,408,10)
GLine(201,406,203,408,10)
GLine(258,395,256,397,10)
GLine(259,395,257,397,10)
ELSE
Dark()
Suspend(1)
SetCursor(0)
SetScrMode(3)
WBoard(2,0,24,79)
VideoInit()
RETURN
ENDIF
#endif // EKRAN_WSTEPNY
// najpierw sprawdzmy oryginalnosc programu
IF !Demo
ROMCnt:=CheckROM()
ENDIF
// Odczytanie tytulow sciezek menu
IF !ReadMnuT(OLD_FONTS) // blad podczas otwarcia bazy MNUTITLE.DBF
QUIT
ENDIF
// Odczytanie nazw glownego menu oraz komunikatow
IF !ReadMainM(OLD_FONTS) // blad podczas otwarcia MAINMENU.DBF
QUIT
ENDIF
// Wstepne otwieranie baz i indeksowanie
// Najpierw baza konfiguracyjna
IF !NNetUse("CONFIG",,,,,.F.) // shared, new area
SetCursor(0)
SetScrMode(3)
SetBlink(.F.) // 16 kolorow tla
WBoard(2,0,24,79)
ApplError("Brak mozliwosci otwarcia bazy CONFIG.DBF",,,.F.)
RETURN .F.
ENDIF
// teraz pozostale, opisane w bazach DBASE i INDEXES
IF !BaseOpen(OLD_FONTS,IS_OPENING) // blad podczas otwierania lub indeksowania baz
QUIT
ENDIF
IF Empty(Font:=ChrFontLoad("SIMPLE.CHR",.F.))
QUIT
ENDIF
// teraz sprawdzimy, czy ktos nie zmodyfikowal wlasciciela w CONFIG.DBF
Own:=0
FOR I:=1 TO Len(CONFIG->Owner)
Own+=Asc(SubStr(CONFIG->Owner,I,1))
NEXT
// Sytuacja: aktywny obszar posiada pierwsza baza w DBASE.DBF
#ifdef EKRAN_WSTEPNY
Dark()
#endif
Suspend(1)
TextMode()
VideoInit()
#ifdef V28
SetCursor(0)
VGA28() // przejscie w tryb 28 wierszy
#endif
SetCursor(0) // wylaczenie kursora
SetBlink(.F.) // 16 kolorow tla
WBoard(2,0,IF(IFV28,27,24),79)
// teraz ladujemy nowe fonty
#ifdef V28
IF FontLoad("FONT-014.FNT",1)!=0
ApplError("Blad podczas ladowania fontow FONT-014.FNT.",,,.F.)
QUIT
ENDIF
#else
IF FontLoad("FONT-016.FNT",1)!=0
ApplError("Blad podczas ladowania fontow FONT-016.FNT.",,,.F.)
QUIT
ENDIF
#endif
// tu sprawdzimy sobie, czy mamy w bazie sume kontrolna dla
// aktualnego komputera
IF !Demo
OS:=Select()
IF !NNetUse("A2.OVL")
QUIT
ENDIF
LOCATE FOR ROMCnt==Val(Crypt(W,"VC"+"1995"+"JJ"))
Pytaj:=!Found()
USE
DBSelectAr(OS)
ENDIF
IF Own!=CONFIG->Level
SayPirate()
QUIT
ENDIF
Tit2:=0
FOR I:=1 TO Len(CONFIG->Title2)
Tit2+=Asc(SubStr(CONFIG->Title2,I,1))
NEXT
IF Tit2!=CONFIG->Level2
SayPirate()
QUIT
ENDIF
// Teraz tworzenie ekranu na podstawie bazy CONFIG
CLEAR
// VGAPalette("R+",63,0,25)
// VGAPalette("R",47,0,0)
SavePal() // zapamietaj palete
BlackPal() // wyzeruj palete
Suspend(1) // wylacz sterownik VGA
WSetMove(.F.)
BHandle:=ResBlank() // puste okno
WSelect(0)
IF CONFIG->IsTimer
@ CONFIG->TimerY,CONFIG->TimerX SAY "CZAS:" COLOR "R+/N"
ShowTime(CONFIG->TimerY,CONFIG->TimerX+6)
ENDIF
@ 0,2 SAY AllTrim(CONFIG->LUDisplay) COLOR "R+/N"
?? " "
?? Eval(&(CONFIG->LUDFunct))
@ 1,2 SAY AllTrim(CONFIG->PrgName)+": " COLOR "GR+/N"
@ 1,Col() SAY AllTrim(MnuTab[1]) COLOR IF(IsMonoVGA(),"W/N","R/N")
// wylacznie dla ANALIZY
@ 1,70 SAY "F1 " COLOR "GR+/N"
DispOut("POMOC",IF(IsMonoVGA(),"W/N","R/N"))
@ IF(IFV28,27,24),0 SAY PadR(MainMnu[2][1],80) COLOR "N/W" // opis linii menu
IF Demo // zawsze nazwa VICTORY Computing
@ IF(IFV28,25,22),0 SAY PadC("VICTORY Computing, ul. Pomnikowa 18/16, 47-400 Racibórz, tel. (0-36) 154840",80) COLOR "N/BG" // wlasciciel
ELSE
@ IF(IFV28,25,22),0 SAY PadC(AllTrim(Crypt(CONFIG->Owner,"victory")),80) COLOR "N/BG" // wlasciciel
ENDIF
WSelect(BHandle) // powrot do okna niebieskiego
OtwRamke(0,1,Len(MainMnu[1])+1,1+Len(MainMnu[1][1])+1) // ramka symulujaca menu
ClearWin(2,2,Len(MainMnu[1]),1+Len(MainMnu[1][1]),"N/W") // zmieniamy kolory - bez 1. linii
ClearWin(1,2,1,1+Len(MainMnu[1][1]),"W+*/B") // kolor 1. linii menu ma byc inny
AEval(MainMnu[1],{ |Val,Ind| SayScreen(Val,Ind,2) } ) // wydrukuj linie menu
IF CONFIG->IsTitle
OtwRamke(CONFIG->Tit_LUY,CONFIG->Tit_LUX,CONFIG->Tit_RDY,;
CONFIG->Tit_RDX,,,"BG+*/B")
@ CONFIG->Tit_LUY+1,CONFIG->Tit_LUX+1 SAY PadC(AllTrim(CONFIG->Title1)+;
IF(Demo," - demo",""),;
CONFIG->Tit_RDX-CONFIG->Tit_LUX-1) COLOR "GR+*/B"
@ CONFIG->Tit_LUY+2,CONFIG->Tit_LUX+1 SAY PadC(AllTrim(Crypt(CONFIG->Title2,"victory")),;
CONFIG->Tit_RDX-CONFIG->Tit_LUX-1) COLOR "GR+*/B"
ENDIF
IF RIsMouse()
IF IN->Mysz
MEmulOn()
ENDIF
ENDIF
Suspend(0) // odblokuj sterownik VGA
Light() // rozjasnij do poziomu zapamietanego przez SavePal()
DISPB // buforowanie, bo kasujemy czesc ekranu (odpowiednie DISPE bedzie w Menu)
IF IN->PLKlawiat==0
TrapShift("Alt_Key",8) // wlaczenie wychwytywania nacisnietego Alt-a,... (polskie litery)
ELSEIF IN->PLKlawiat==1
MazoviaRead(.T.) // translacja z zewnetrznego sterownika Mazovii
ENDIF
PrintXlat(IN->PLDrukarka) // translacja znakow na drukarke
// zamiana klawisza "." na "," (klawiatura numeryczna) - ulatwienie dla przecinkow
SetKXlat("."+Chr(83),","+Chr(83))
SET KEY K_F1 TO FullHelp
#ifdef TEST
SET KEY K_ALT_Q TO NetBusy // emulacja blokady sieci do testowania
#endif
TrapAnyKey("JJProc")
Menu(3,2,MainMnu,Ret:=1,.T.)
WHILE .T.
FHTitle:=1 // glowne menu
SayText(1,69)
Ret:=Menu(,,MainMnu,Ret,.F.)
IF Pytaj .AND. Ret!=0 .AND. Ret!=Len(MainMnu[1])
// jesli nie wersja komercyjna dla wielu odbiorcow bez zabezpieczenia
#ifndef COMMERCIAL
IF !CheckOrigin(ROMCnt)
Ret:=0 // wymuszenie wyjscia
ELSE
Pytaj:=.F.
ENDIF
// wersja pelna bez zabezpieczen
#else
Pytaj:=.F.
#endif
ENDIF
TrapAnyKey()
FOR I:=1 TO Len(MainMnu[1]) // liczba opcji menu
IF Ret==I .AND. Ret!=Len(MainMnu[1])
Eval(MainMnu[3][I])
EXIT
ENDIF
NEXT
IF Ret==0 .OR. Ret==Len(MainMnu[1]) // wyjscie
ResBlank()
SayLowLine({ {Chr(24)+Chr(25)+Chr(26)+Chr(27), ;
" wybór opcji "}, ;
{"Enter", ;
" potwierdzenie wyboru "}, ;
{"Esc", ;
" rezygnacja"} })
SayText(2,69)
OtwOknoTyt(9,23,15,56,1,,"RG+*/R","R+*/RG","Pytanie")
SetColor("GR+*/R")
@ 1,1 SAY PadC("CZY CHCESZ",MaxCol())
@ 2,1 SAY PadC("ZAKOπCZYÅ PROGRAM?",MaxCol())
SetColor("G+*/R,GR+*/B")
@ 4,7 SAY "[ ]"
@ 4,20 SAY "[ ]"
@ 4,8 PROMPT "Tak"
@ 4,21 PROMPT "Nie"
Ex:=2
FHTitle:=2 // wyjscie z programu
MENU TO Ex
IF Ex==1
OtwOkno(10,10,12,69,,,"G+/R")
SetColor("W+/R")
SaySpread("Prosz⌐ czekaå, trwa zamykanie zbiorów...",20)
EXIT
ELSE
WClose() // pytanie
WClose() // opcje u dolu
WClose() // ResBlank
ENDIF
ENDIF
ENDDO
IF RIsMouse()
MEmulOff()
ENDIF
DBCloseAll() // zamknijmy najpierw wszystkie bazy
AEval(BaseName, { |Elem| DeleteFile(Elem+"DBF"),;
DeleteFile(Elem+"NTX") }) // usuniecie roboczych baz
// teraz znowu je bedziemy otwierac, ale exclusive (PACK!)
Eval(MainMnu[3][Len(MainMnu[1])]) // wykonanie funkcji konczacej
DBCloseAll()
TrapShift() // wylaczyc przy wyjsciu
ShowTime() // wylaczyc przy wyjsciu
VGAPalette()
RETURN
PROCEDURE JJProc(Key)
MyPass:=Right(MyPass,10)+Chr(Key)
IF MyPass=="JacekJanusz"
OtwOkno(10,20,12,59,,,"W+*/R")
@ 0,4 SAY BliSerNum() COLOR "GR+*/R"
Millisec(3000)
WClose()
ELSE
KeySend(I2Bin(Key),.T.)
ENDIF
RETURN
// koncowa procedura
PROCEDURE DBFPack()
// NetUse - bez komunikatow o ew. bledzie sieciowym,
// gdyz straszy to uzytkownikow
IF File("GF01.NTX") // jesli nie ma pliku indeksowego, to nie bylo zmian
IF NetUse("GF01",,,.F.) // exclusive, dla poindeksowania
OrdListClear()
OrdListAdd("GF01") // porzadek
PACK
CLOSE
ENDIF
ENDIF
IF File("GBIL.NTX")
IF NetUse("GBIL",,,.F.) // exclusive, dla poindeksowania
OrdListClear()
OrdListAdd("GBIL") // porzadek
PACK
CLOSE
ENDIF
ENDIF
IF File("GBILU.NTX")
IF NetUse("GBILU",,,.F.) // exclusive, dla poindeksowania
OrdListClear()
OrdListAdd("GBILU") // porzadek
PACK
CLOSE
ENDIF
ENDIF
IF NetUse("FIRMY",,,.F.) // exclusive, dla poindeksowania
OrdListClear()
OrdListAdd("FIIDENT") // porzadek
OrdListAdd("FIMIEJSC")
OrdListAdd("FINAZSKR")
PACK
CLOSE
ENDIF
RETURN
PROCEDURE SayPirate()
OtwOknoTyt(5,12,17,67,B_TOP,,"G+*/R","N*/G","Pirat!!!")
SetColor("W+*/R")
@ 1,2 SAY "Czy╛by ktoÿ si⌐ bawiê w pirata? No nieêadnie..."
@ 2,2 SAY "Nawet nie wiesz, jakie ciekawe rzeczy mo╛na"
@ 3,2 SAY "robiå z twardym dyskiem - formatowanie, kasowanie"
@ 4,2 SAY "zerowego sektora... A jeÿli jest serwer sieciowy,"
@ 5,2 SAY "to mo╛liwoÿci sÑ jeszcze wi⌐ksze..."
@ 6,2 SAY "Wi⌐c proponujemy Ci zaprzestanie tej zabawy we"
@ 7,2 SAY "wêamywacza komputerowego - dla Twojego dobra..."
@ 10,9 SAY "(╛artowaliÿmy z tym twardym dyskiem)" COLOR "R*/R"
Inkey(0)
WClose()
RETURN
STATIC FUNCTION CheckOrigin(ROMCnt)
LOCAL Disks,Stacja,OS:=Select(),Buffer
LOCAL Char1:="V",Char2:="C",Char3:="A",Char4:="N"
LOCAL Char5:="A",Char6:="L"
OtwOknoTyt(5,5,14,74,B_TOP,,"G+*/R","N*/G","Sprawdzenie oryginalnoÿci programu")
SetColor("GR+*/R")
@ 1,5 SAY "Prosz⌐ wêo╛yå dyskietk⌐ instalacyjnÑ do stacji A: lub B:,"
@ 2,5 SAY "wybrac t⌐ stacj⌐ przy pomocy klawisza <Tab>, a nast⌐pnie"
@ 3,5 SAY "nacisnÑå klawisz <Enter>."
Disks:=NumDiskF()
Stacja:=1
IF Disks>1
@ 5,5 SAY "Wybierz nazw⌐ stacji dysków:" GET Stacja COLOR "W+*/R,GR+*/R,,BG+*/R";
WITH RADIOBUTTONS;
{ "Stacja A:","Stacja B:" } HORIZONTAL
ELSE
@ 5,5 SAY "Wybierz nazw⌐ stacji dysków:" GET Stacja COLOR "W+*/R,GR+*/R,,BG+*/R";
WITH RADIOBUTTONS;
{ "Stacja A:" } HORIZONTAL
ENDIF
SetCursor(SC_NORMAL)
READ RADIO
SetCursor(SC_NONE)
IF LastKey()==K_ESC
WClose()
RETURN .F.
ENDIF
Buffer:=GetCode(Stacja-1,5) // najpierw 5. sektor
IF SubStr(Buffer,1,6)!=Char1+Char2+Char3+Char4+Char5+Char6
ApplError("Niestety, wynik negatywny - program zablokowany!")
WClose()
RETURN .F.
ENDIF
Buffer:=GetCode(Stacja-1,19) // teraz 19. sektor
IF SubStr(Buffer,1,6)!=Char1+Char2+Char3+Char4+Char5+Char6
ApplError("Niestety, wynik negatywny - program zablokowany!")
WClose()
RETURN .F.
ELSE
ApplError("Wynik pozytywny! Mo╛na kontynuowaå prac⌐.")
WClose()
IF !NetUse("A2.OVL")
ApplError("BêÑd przy otwarciu bazy danych! Sprawdzenie b⌐dzie powtórzone.")
RETURN .F.
ENDIF
APPEND BLANK
REPLACE W WITH Crypt(Str(ROMCnt,10),"VC"+"1995"+"JJ") // zapis CRC ROM-u w bazie
UNLOCK
USE
DBSelectAr(OS)
RETURN .T.
ENDIF