home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 September / PCWK996.iso / polskie / victory / analiza.vcf / VC_ENTRY.CH < prev    next >
Text File  |  1996-06-22  |  14KB  |  601 lines

  1. /*       Deklaracje zmiennych i prolog programow
  2.          pisanych w CA-Clipperze 5.2
  3.  
  4.          (C) 1994 by Jacek Janusz. All Rights Reserved.    */
  5.  
  6. // UWAGA: PROGRAMY PISANE SA WYLACZNIE NA KOMPUTERY KLASY AT, VGA, DOS 3.30
  7. //        MUSI BYC DOLACZONA BIBLIOTEKA CA-TOOLS
  8.  
  9. // Sposob uzycia: #include w glownym pliku danego programu.
  10.  
  11. ****************************************************************************
  12.  
  13. // #define TEST
  14.  
  15. // wersja pelna bez zabezpieczen
  16. // #define COMMERCIAL
  17.  
  18. #include "fileio.ch"
  19. #include "ctscan.ch"
  20. #include "setcurs.ch"
  21. #include "vc_def.ch"
  22.  
  23. LOCAL I,Ret,CfgF,CfgBuf,ROMCnt,ROMRead,Own,Pytaj:=.F.,OS,Tit2
  24.  
  25. // zmienne globalne
  26. #ifdef EKRAN_WSTEPNY
  27.   PUBLIC __OF:=GetFont(1) // zapamietuje poprzedni font i odtwarza przy wyjsciu z programu
  28. #endif
  29. PUBLIC MnuTab // tablica, w ktorej sa zapamietane sciezki menu
  30. PUBLIC MainMnu // tablica, w ktorej sa zapamietane nazwy menu glownego
  31.               // wraz z komunikatami oraz blokami kodu
  32.  
  33. PUBLIC BHandle // okno utworzone przez ResBlank()
  34. PUBLIC DCount:=0 // licznik niezamknietych DispBegin() - oryginalny nie dziala
  35.  
  36. // dla Analizy
  37. PUBLIC FHTitle // nazwa indeksu aktualnego helpu
  38. PUBLIC Firm:=0 // identyfikator wybranej firmy
  39. PUBLIC BaseName:={} // fizyczne nazwy baz lokalnych
  40. PUBLIC Font // font CHR
  41.  
  42. /*********** Dane okreslajace wersje DEMO ************/
  43. SET DATE GERMAN
  44. PUBLIC Demo:=.T.
  45. PUBLIC DataOd:=CToD("01.07.1995")
  46. PUBLIC DataDo:=CToD("30.12.1996")
  47. /*****************************************************/
  48.  
  49.  
  50. PRIVATE MyPass:=""
  51.  
  52. ****************************************************************************
  53.  
  54. /* Rozne SETy */
  55.  
  56. SetCancel(.F.) // wlaczyc na .F. przy koncowej kompilacji
  57.  
  58. SET CONFIRM ON
  59. SET SCOREBOARD OFF // wylacza wyswietlanie Ins itp.
  60. SET WRAP ON
  61. SET DELETED ON
  62. SET TALK OFF
  63. SET COLOR TO
  64. SET DATE GERMAN
  65. SET KEY 28 TO
  66. SET DELIMITERS ON
  67. SET DELIMITERS TO "[]"
  68. SET SOFTSEEK ON
  69. #ifdef V28
  70.   Set(_SET_MESSAGE,27)
  71. #else
  72.   Set(_SET_MESSAGE,24)
  73. #endif
  74.  
  75.  
  76. // Teraz pewne sprawy kontrolne i ustawienie parametrow video
  77.  
  78.  
  79. IF !IsAT() // czy komputer AT?
  80.   Suspend(0)
  81.   SetCursor(0)
  82.   SetScrMode(3)
  83.   WBoard(2,0,24,79)
  84.   ? "Program musi byc uruchomiony na komputerze klasy co najmniej PC/AT."
  85.   Inkey(0)
  86.   QUIT
  87. ENDIF
  88.  
  89. IF !IsVGA() // czy karta graficzna VGA?
  90.   Suspend(0)
  91.   SetCursor(0)
  92.   SetScrMode(3)
  93.   WBoard(2,0,24,79)
  94.   ? "Program wymaga karty graficznej VGA."
  95.   Inkey(0)
  96.   QUIT
  97. ENDIF
  98.  
  99. IF OSVer()<"3.30" // czy DOS >= 3.30?
  100.   Suspend(0)
  101.   SetCursor(0)
  102.   SetScrMode(3)
  103.   WBoard(2,0,24,79)
  104.   ? "Program wymaga co najmniej wersji DOS 3.30."
  105.   Inkey(0)
  106.   QUIT
  107. ENDIF
  108.  
  109. #ifdef EKRAN_WSTEPNY
  110.  
  111. SetVGA()
  112.  
  113. Suspend(1)
  114. IF LoadScr("VGA.SCR","VGA.PAL")==0
  115.   SavePal()
  116.   BlackPal()
  117.   Suspend(0)
  118.   Light()
  119.   Inkey(0)
  120. ENDIF
  121.  
  122.  
  123. IF LastKey()!=K_ESC
  124.   GBox(99,381,540,421,15)
  125.   GBox(98,380,541,422,15)
  126.   FOR I:=382 TO 420
  127.     GLine(100,I,539,I,9)
  128.   NEXT
  129.   DispStr("Prosze czekac, trwa otwieranie zbiorów...",158,394,3,0)
  130.   GLine(200,406,202,408,10)
  131.   GLine(201,406,203,408,10)
  132.   GLine(258,395,256,397,10)
  133.   GLine(259,395,257,397,10)
  134. ELSE
  135.   Dark()
  136.   Suspend(1)
  137.   SetCursor(0)
  138.   SetScrMode(3)
  139.   WBoard(2,0,24,79)
  140.   VideoInit()
  141.   RETURN
  142. ENDIF
  143.  
  144. #endif // EKRAN_WSTEPNY
  145.  
  146.  
  147.  
  148. // najpierw sprawdzmy oryginalnosc programu
  149. IF !Demo
  150.   ROMCnt:=CheckROM()
  151. ENDIF
  152.  
  153. // Odczytanie tytulow sciezek menu
  154.  
  155. IF !ReadMnuT(OLD_FONTS) // blad podczas otwarcia bazy MNUTITLE.DBF
  156.   QUIT
  157. ENDIF
  158.  
  159.  
  160. // Odczytanie nazw glownego menu oraz komunikatow
  161.  
  162. IF !ReadMainM(OLD_FONTS) // blad podczas otwarcia MAINMENU.DBF
  163.   QUIT
  164. ENDIF
  165.  
  166.  
  167. // Wstepne otwieranie baz i indeksowanie
  168.  
  169. // Najpierw baza konfiguracyjna
  170. IF !NNetUse("CONFIG",,,,,.F.) // shared, new area
  171.   SetCursor(0)
  172.   SetScrMode(3)
  173.   SetBlink(.F.) // 16 kolorow tla
  174.   WBoard(2,0,24,79)
  175.   ApplError("Brak mozliwosci otwarcia bazy CONFIG.DBF",,,.F.)
  176.   RETURN .F.
  177. ENDIF
  178.  
  179. // teraz pozostale, opisane w bazach DBASE i INDEXES
  180. IF !BaseOpen(OLD_FONTS,IS_OPENING) // blad podczas otwierania lub indeksowania baz
  181.   QUIT
  182. ENDIF
  183.  
  184.  
  185. IF Empty(Font:=ChrFontLoad("SIMPLE.CHR",.F.))
  186.   QUIT
  187. ENDIF
  188.  
  189. // teraz sprawdzimy, czy ktos nie zmodyfikowal wlasciciela w CONFIG.DBF
  190. Own:=0
  191. FOR I:=1 TO Len(CONFIG->Owner)
  192.   Own+=Asc(SubStr(CONFIG->Owner,I,1))
  193. NEXT
  194.  
  195.  
  196.  
  197.  
  198. // Sytuacja: aktywny obszar posiada pierwsza baza w DBASE.DBF
  199.  
  200. #ifdef EKRAN_WSTEPNY
  201.  Dark()
  202. #endif
  203. Suspend(1)
  204. TextMode()
  205. VideoInit()
  206.  
  207. #ifdef V28
  208.   SetCursor(0)
  209.   VGA28() // przejscie w tryb 28 wierszy
  210. #endif
  211.  
  212. SetCursor(0) // wylaczenie kursora
  213. SetBlink(.F.) // 16 kolorow tla
  214.  
  215.  
  216. WBoard(2,0,IF(IFV28,27,24),79)
  217.  
  218.  
  219.  
  220. // teraz ladujemy nowe fonty
  221. #ifdef V28
  222.   IF FontLoad("FONT-014.FNT",1)!=0
  223.     ApplError("Blad podczas ladowania fontow FONT-014.FNT.",,,.F.)
  224.     QUIT
  225.   ENDIF
  226. #else
  227.   IF FontLoad("FONT-016.FNT",1)!=0
  228.     ApplError("Blad podczas ladowania fontow FONT-016.FNT.",,,.F.)
  229.     QUIT
  230.   ENDIF
  231. #endif
  232.  
  233.  
  234.  
  235. // tu sprawdzimy sobie, czy mamy w bazie sume kontrolna dla
  236. // aktualnego komputera
  237.  
  238. IF !Demo
  239.  
  240.   OS:=Select()
  241.   IF !NNetUse("A2.OVL")
  242.     QUIT
  243.   ENDIF
  244.  
  245.   LOCATE FOR ROMCnt==Val(Crypt(W,"VC"+"1995"+"JJ"))
  246.   Pytaj:=!Found()
  247.   USE
  248.   DBSelectAr(OS)
  249.  
  250. ENDIF
  251.  
  252. IF Own!=CONFIG->Level
  253.   SayPirate()
  254.   QUIT
  255. ENDIF
  256.  
  257. Tit2:=0
  258. FOR I:=1 TO Len(CONFIG->Title2)
  259.   Tit2+=Asc(SubStr(CONFIG->Title2,I,1))
  260. NEXT
  261. IF Tit2!=CONFIG->Level2
  262.   SayPirate()
  263.   QUIT
  264. ENDIF
  265.  
  266.  
  267.  
  268.  
  269. // Teraz tworzenie ekranu na podstawie bazy CONFIG
  270.  
  271.  
  272. CLEAR
  273.  
  274. // VGAPalette("R+",63,0,25)
  275. // VGAPalette("R",47,0,0)
  276. SavePal() // zapamietaj palete
  277. BlackPal() // wyzeruj palete
  278. Suspend(1) // wylacz sterownik VGA
  279.  
  280.  
  281. WSetMove(.F.)
  282. BHandle:=ResBlank() // puste okno
  283.  
  284.  
  285.  
  286. WSelect(0)
  287. IF CONFIG->IsTimer
  288.   @ CONFIG->TimerY,CONFIG->TimerX SAY "CZAS:" COLOR "R+/N"
  289.   ShowTime(CONFIG->TimerY,CONFIG->TimerX+6)
  290. ENDIF
  291.  
  292. @ 0,2 SAY AllTrim(CONFIG->LUDisplay) COLOR "R+/N"
  293. ?? " "
  294. ?? Eval(&(CONFIG->LUDFunct))
  295. @ 1,2 SAY AllTrim(CONFIG->PrgName)+": " COLOR "GR+/N"
  296. @ 1,Col() SAY AllTrim(MnuTab[1]) COLOR IF(IsMonoVGA(),"W/N","R/N")
  297.  
  298.  
  299. // wylacznie dla ANALIZY
  300. @ 1,70 SAY "F1 " COLOR "GR+/N"
  301. DispOut("POMOC",IF(IsMonoVGA(),"W/N","R/N"))
  302.  
  303.  
  304.  
  305.  
  306. @ IF(IFV28,27,24),0 SAY PadR(MainMnu[2][1],80) COLOR "N/W" // opis linii menu
  307. IF Demo // zawsze nazwa VICTORY Computing
  308.   @ 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
  309. ELSE
  310.   @ IF(IFV28,25,22),0 SAY PadC(AllTrim(Crypt(CONFIG->Owner,"victory")),80) COLOR "N/BG" // wlasciciel
  311. ENDIF
  312. WSelect(BHandle) // powrot do okna niebieskiego
  313. OtwRamke(0,1,Len(MainMnu[1])+1,1+Len(MainMnu[1][1])+1) // ramka symulujaca menu
  314. ClearWin(2,2,Len(MainMnu[1]),1+Len(MainMnu[1][1]),"N/W") // zmieniamy kolory - bez 1. linii
  315. ClearWin(1,2,1,1+Len(MainMnu[1][1]),"W+*/B") // kolor 1. linii menu ma byc inny
  316. AEval(MainMnu[1],{ |Val,Ind| SayScreen(Val,Ind,2) } ) // wydrukuj linie menu
  317.  
  318.  
  319. IF CONFIG->IsTitle
  320.   OtwRamke(CONFIG->Tit_LUY,CONFIG->Tit_LUX,CONFIG->Tit_RDY,;
  321.            CONFIG->Tit_RDX,,,"BG+*/B")
  322.   @ CONFIG->Tit_LUY+1,CONFIG->Tit_LUX+1 SAY PadC(AllTrim(CONFIG->Title1)+;
  323.     IF(Demo," - demo",""),;
  324.     CONFIG->Tit_RDX-CONFIG->Tit_LUX-1) COLOR "GR+*/B"
  325.   @ CONFIG->Tit_LUY+2,CONFIG->Tit_LUX+1 SAY PadC(AllTrim(Crypt(CONFIG->Title2,"victory")),;
  326.     CONFIG->Tit_RDX-CONFIG->Tit_LUX-1) COLOR "GR+*/B"
  327. ENDIF
  328.  
  329.  
  330.  
  331. IF RIsMouse()
  332.   IF IN->Mysz
  333.     MEmulOn()
  334.   ENDIF
  335. ENDIF
  336.  
  337. Suspend(0) // odblokuj sterownik VGA
  338. Light() // rozjasnij do poziomu zapamietanego przez SavePal()
  339.  
  340.  
  341. DISPB // buforowanie, bo kasujemy czesc ekranu (odpowiednie DISPE bedzie w Menu)
  342.  
  343. IF IN->PLKlawiat==0
  344.   TrapShift("Alt_Key",8) // wlaczenie wychwytywania nacisnietego Alt-a,... (polskie litery)
  345. ELSEIF IN->PLKlawiat==1
  346.   MazoviaRead(.T.) // translacja z zewnetrznego sterownika Mazovii
  347. ENDIF
  348. PrintXlat(IN->PLDrukarka) // translacja znakow na drukarke
  349.  
  350. // zamiana klawisza "." na "," (klawiatura numeryczna) - ulatwienie dla przecinkow
  351. SetKXlat("."+Chr(83),","+Chr(83))
  352.  
  353. SET KEY K_F1 TO FullHelp
  354.  
  355. #ifdef TEST
  356.   SET KEY K_ALT_Q TO NetBusy // emulacja blokady sieci do testowania
  357. #endif
  358.  
  359. TrapAnyKey("JJProc")
  360. Menu(3,2,MainMnu,Ret:=1,.T.)
  361.  
  362.  
  363. WHILE .T.
  364.   FHTitle:=1 // glowne menu
  365.   SayText(1,69)
  366.   Ret:=Menu(,,MainMnu,Ret,.F.)
  367.   IF Pytaj .AND. Ret!=0 .AND. Ret!=Len(MainMnu[1])
  368. // jesli nie wersja komercyjna dla wielu odbiorcow bez zabezpieczenia
  369. #ifndef COMMERCIAL
  370.     IF !CheckOrigin(ROMCnt)
  371.       Ret:=0 // wymuszenie wyjscia
  372.     ELSE
  373.       Pytaj:=.F.
  374.     ENDIF
  375. // wersja pelna bez zabezpieczen
  376. #else
  377.     Pytaj:=.F.
  378. #endif
  379.   ENDIF
  380.  
  381.   TrapAnyKey()
  382.   FOR I:=1 TO Len(MainMnu[1]) // liczba opcji menu
  383.     IF Ret==I .AND. Ret!=Len(MainMnu[1])
  384.       Eval(MainMnu[3][I])
  385.       EXIT
  386.     ENDIF
  387.   NEXT
  388.   IF Ret==0 .OR. Ret==Len(MainMnu[1]) // wyjscie
  389.     ResBlank()
  390.     SayLowLine({ {Chr(24)+Chr(25)+Chr(26)+Chr(27),                  ;
  391.                   " wybór opcji  "},                                ;
  392.                  {"Enter",                                          ;
  393.                   " potwierdzenie wyboru  "},                       ;
  394.                  {"Esc",                                            ;
  395.                   " rezygnacja"} })
  396.  
  397.     SayText(2,69)
  398.     OtwOknoTyt(9,23,15,56,1,,"RG+*/R","R+*/RG","Pytanie")
  399.     SetColor("GR+*/R")
  400.     @ 1,1 SAY PadC("CZY CHCESZ",MaxCol())
  401.     @ 2,1 SAY PadC("ZAKOπCZYÅ PROGRAM?",MaxCol())
  402.     SetColor("G+*/R,GR+*/B")
  403.     @ 4,7 SAY "[   ]"
  404.     @ 4,20 SAY "[   ]"
  405.     @ 4,8 PROMPT "Tak"
  406.     @ 4,21 PROMPT "Nie"
  407.     Ex:=2
  408.     FHTitle:=2 // wyjscie z programu
  409.     MENU TO Ex
  410.     IF Ex==1
  411.       OtwOkno(10,10,12,69,,,"G+/R")
  412.       SetColor("W+/R")
  413.       SaySpread("Prosz⌐ czekaå, trwa zamykanie zbiorów...",20)
  414.       EXIT
  415.     ELSE
  416.       WClose() // pytanie
  417.       WClose() // opcje u dolu
  418.       WClose() // ResBlank
  419.     ENDIF
  420.   ENDIF
  421. ENDDO
  422.  
  423.  
  424. IF RIsMouse()
  425.   MEmulOff()
  426. ENDIF
  427.  
  428.  
  429.  
  430. DBCloseAll() // zamknijmy najpierw wszystkie bazy
  431.  
  432. AEval(BaseName, { |Elem| DeleteFile(Elem+"DBF"),;
  433.                          DeleteFile(Elem+"NTX") }) // usuniecie roboczych baz
  434.  
  435.  
  436.  
  437.  
  438. // teraz znowu je bedziemy otwierac, ale exclusive (PACK!)
  439. Eval(MainMnu[3][Len(MainMnu[1])]) // wykonanie funkcji konczacej
  440.  
  441. DBCloseAll()
  442. TrapShift() // wylaczyc przy wyjsciu
  443. ShowTime() //  wylaczyc przy wyjsciu
  444. VGAPalette()
  445.  
  446. RETURN
  447.  
  448.  
  449.  
  450.  
  451.  
  452. PROCEDURE JJProc(Key)
  453.  
  454.   MyPass:=Right(MyPass,10)+Chr(Key)
  455.   IF MyPass=="JacekJanusz"
  456.     OtwOkno(10,20,12,59,,,"W+*/R")
  457.     @ 0,4 SAY BliSerNum() COLOR "GR+*/R"
  458.     Millisec(3000)
  459.     WClose()
  460.   ELSE
  461.     KeySend(I2Bin(Key),.T.)
  462.   ENDIF
  463.  
  464. RETURN
  465.  
  466.  
  467.  
  468.  
  469.  
  470. // koncowa procedura
  471. PROCEDURE DBFPack()
  472.  
  473.   // NetUse - bez komunikatow o ew. bledzie sieciowym,
  474.   // gdyz straszy to uzytkownikow
  475.  
  476.   IF File("GF01.NTX") // jesli nie ma pliku indeksowego, to nie bylo zmian
  477.     IF NetUse("GF01",,,.F.) // exclusive, dla poindeksowania
  478.       OrdListClear()
  479.       OrdListAdd("GF01") // porzadek
  480.       PACK
  481.       CLOSE
  482.     ENDIF
  483.   ENDIF
  484.  
  485.   IF File("GBIL.NTX")
  486.     IF NetUse("GBIL",,,.F.) // exclusive, dla poindeksowania
  487.       OrdListClear()
  488.       OrdListAdd("GBIL") // porzadek
  489.       PACK
  490.       CLOSE
  491.     ENDIF
  492.   ENDIF
  493.  
  494.   IF File("GBILU.NTX")
  495.     IF NetUse("GBILU",,,.F.) // exclusive, dla poindeksowania
  496.       OrdListClear()
  497.       OrdListAdd("GBILU") // porzadek
  498.       PACK
  499.       CLOSE
  500.     ENDIF
  501.   ENDIF
  502.  
  503.   IF NetUse("FIRMY",,,.F.) // exclusive, dla poindeksowania
  504.     OrdListClear()
  505.     OrdListAdd("FIIDENT") // porzadek
  506.     OrdListAdd("FIMIEJSC")
  507.     OrdListAdd("FINAZSKR")
  508.     PACK
  509.     CLOSE
  510.   ENDIF
  511.  
  512. RETURN
  513.  
  514.  
  515.  
  516.  
  517. PROCEDURE SayPirate()
  518.  
  519.     OtwOknoTyt(5,12,17,67,B_TOP,,"G+*/R","N*/G","Pirat!!!")
  520.     SetColor("W+*/R")
  521.     @ 1,2 SAY "Czy╛by  ktoÿ si⌐ bawiê w pirata?   No nieêadnie..."
  522.     @ 2,2 SAY "Nawet  nie  wiesz,  jakie  ciekawe  rzeczy   mo╛na"
  523.     @ 3,2 SAY "robiå z twardym dyskiem  - formatowanie, kasowanie"
  524.     @ 4,2 SAY "zerowego sektora...  A jeÿli jest serwer sieciowy,"
  525.     @ 5,2 SAY "to mo╛liwoÿci sÑ jeszcze wi⌐ksze..."
  526.     @ 6,2 SAY "Wi⌐c  proponujemy  Ci zaprzestanie tej  zabawy  we"
  527.     @ 7,2 SAY "wêamywacza komputerowego - dla Twojego dobra..."
  528.     @ 10,9 SAY "(╛artowaliÿmy z tym twardym dyskiem)" COLOR "R*/R"
  529.     Inkey(0)
  530.     WClose()
  531.  
  532. RETURN
  533.  
  534.  
  535.  
  536.  
  537. STATIC FUNCTION CheckOrigin(ROMCnt)
  538.  
  539. LOCAL Disks,Stacja,OS:=Select(),Buffer
  540. LOCAL Char1:="V",Char2:="C",Char3:="A",Char4:="N"
  541. LOCAL Char5:="A",Char6:="L"
  542.  
  543.     OtwOknoTyt(5,5,14,74,B_TOP,,"G+*/R","N*/G","Sprawdzenie oryginalnoÿci programu")
  544.     SetColor("GR+*/R")
  545.  
  546.     @ 1,5 SAY "Prosz⌐ wêo╛yå dyskietk⌐ instalacyjnÑ do stacji A: lub B:,"
  547.     @ 2,5 SAY "wybrac t⌐ stacj⌐ przy pomocy klawisza <Tab>,  a nast⌐pnie"
  548.     @ 3,5 SAY "nacisnÑå klawisz <Enter>."
  549.  
  550.     Disks:=NumDiskF()
  551.     Stacja:=1
  552.     
  553.     IF Disks>1
  554.       @ 5,5 SAY "Wybierz nazw⌐ stacji dysków:" GET Stacja COLOR "W+*/R,GR+*/R,,BG+*/R";
  555.          WITH RADIOBUTTONS;
  556.          { "Stacja A:","Stacja B:" } HORIZONTAL
  557.     ELSE
  558.       @ 5,5 SAY "Wybierz nazw⌐ stacji dysków:" GET Stacja COLOR "W+*/R,GR+*/R,,BG+*/R";
  559.          WITH RADIOBUTTONS;
  560.          { "Stacja A:" } HORIZONTAL
  561.     ENDIF
  562.  
  563.     SetCursor(SC_NORMAL)
  564.     READ RADIO
  565.     SetCursor(SC_NONE)
  566.     IF LastKey()==K_ESC
  567.       WClose()
  568.       RETURN .F.
  569.     ENDIF
  570.  
  571.     Buffer:=GetCode(Stacja-1,5) // najpierw 5. sektor
  572.     IF SubStr(Buffer,1,6)!=Char1+Char2+Char3+Char4+Char5+Char6
  573.       ApplError("Niestety, wynik negatywny - program zablokowany!")
  574.       WClose()
  575.       RETURN .F.
  576.     ENDIF
  577.  
  578.     Buffer:=GetCode(Stacja-1,19) // teraz 19. sektor
  579.     IF SubStr(Buffer,1,6)!=Char1+Char2+Char3+Char4+Char5+Char6
  580.       ApplError("Niestety, wynik negatywny - program zablokowany!")
  581.       WClose()
  582.       RETURN .F.
  583.     ELSE
  584.       ApplError("Wynik pozytywny! Mo╛na kontynuowaå prac⌐.")
  585.       WClose()
  586.       IF !NetUse("A2.OVL")
  587.         ApplError("BêÑd przy otwarciu bazy danych! Sprawdzenie b⌐dzie powtórzone.")
  588.         RETURN .F.
  589.       ENDIF
  590.  
  591.       APPEND BLANK
  592.       REPLACE W WITH Crypt(Str(ROMCnt,10),"VC"+"1995"+"JJ") // zapis CRC ROM-u w bazie
  593.       UNLOCK
  594.       USE
  595.  
  596.       DBSelectAr(OS)
  597.       RETURN .T.
  598.     ENDIF
  599.  
  600.  
  601.