home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 November / pcwk_11_98a.iso / Wtestowe / Puzzle / Disk1 / TAX.C_ / TAX.C
Text File  |  1998-08-31  |  38KB  |  1,235 lines

  1. ''//'$DEFINE DEBUG  ''Define for script development/debugging
  2.  
  3. '$INCLUDE 'setupapi.inc'
  4. '$INCLUDE 'msdetect.inc'
  5.  
  6. CONST SW_SHOWMAXIMIZED=3
  7.  
  8. DECLARE FUNCTION ShowWindow  LIB "user.exe" (hWnd%,iShow%) AS INTEGER
  9. DECLARE FUNCTION WinExec LIB "kernel.exe" (CmdLine$,CmdShow%) AS INTEGER
  10.  
  11. DECLARE FUNCTION Ctl3dAutoSubclass  LIB "ctl3d.dll" (hInst%) AS INTEGER
  12. DECLARE FUNCTION Ctl3dUnAutoSubclass LIB "ctl3d.dll" (hInst%) AS INTEGER
  13. DECLARE FUNCTION Ctl3dRegister  LIB "ctl3d.dll" (hInst%) AS INTEGER
  14. DECLARE FUNCTION Ctl3dUnregister  LIB "ctl3d.dll" (hInst%) AS INTEGER
  15.  
  16. DECLARE FUNCTION GetFileLang LIB "mscuistf.dll" (lpszFullPath$) AS INTEGER
  17. DECLARE SUB SetHelpName LIB "mscuistf.dll" (lpszHelpName$)           
  18. DECLARE FUNCTION ChangeDirDlg LIB "mscuistf.dll" (hwnd%,lpszDir$) AS INTEGER
  19. DECLARE FUNCTION RegisterDAO LIB "mscuistf.dll" AS INTEGER
  20. DECLARE FUNCTION MakeFile LIB "mscuistf.dll" (lpszFullPath$,lpszLine$) AS INTEGER
  21.  
  22. ''//Dialog ID's
  23. CONST WELCOME      = 100
  24. CONST IDD_LIST     = 10
  25. CONST ASKQUIT      = 200
  26. CONST EXITFAILURE  = 400
  27. CONST EXITQUIT     = 600
  28. CONST EXITSUCCESS  = 700
  29. CONST APPHELP      = 900
  30. CONST CUSTINST     = 6200
  31. CONST TOOBIG       = 6300
  32.  
  33. CONST DB_OPTIONS        = 8100
  34. CONST SEARCH_COMP       = 8200
  35.  
  36. 'CONST AD_CUSTINST       = 8400
  37. CONST WINDOWS30         = 8500
  38.  
  39. CONST IDD_BILLB1    = 8001
  40. CONST IDD_BILLB2    = 8002
  41. CONST IDD_BILLB3    = 8003
  42.  
  43. ''//Language
  44. CONST POLSKI       = 1045
  45.  
  46. ''//Bitmap ID
  47. CONST LOGO         = 1
  48.  
  49. ''//DoMsgBox flags                                                               
  50. CONST MB_ICONEXCLAMATION = 48 
  51. CONST MB_ICONASTERISK    = 64 
  52.  
  53.  
  54. ''//File Types       
  55. CONST DBASE      = 1
  56. CONST TAXPRO     = 2
  57. CONST ADMIN      = 3
  58. CONST HASLO      = 4
  59. CONST BACKUP     = 5
  60. CONST FORMUL     = 6
  61. CONST POMOC1     = 7  ''//Pomoc Prawna
  62. CONST FAKTURA    = 8
  63. CONST IMPORT     = 9
  64.  
  65. CONST CHECKLIMIT = 9
  66.  
  67. CONST INIFILE$         = "TAX.INI"
  68.  
  69. CONST GROUPNAME        = "Adad"
  70. CONST DBNAME          = "main.mdb"
  71.                                   
  72. CONST DBDESTTEXT      = "Instalacja nowej bazy w katalogu "
  73. CONST DBLINKTEXT      = "Po│╣czenie z baz╣ w katalogu "
  74. CONST DBNONETEXT      = "Nie instalowaµ bazy"
  75. CONST BADPATHTEXT     = "Podana £cie┐ka nie jest poprawna lub dysk zabezpieczony przed zapisem."
  76. CONST BADDBDESTPATHTEXT  = "W podanym katalogu baza ju┐ istnieje !"
  77. CONST BADDBLINKPATHTEXT  = "Nie mogΩ znaleƒµ pliku bazy !"
  78. CONST DBNEEDEDTEXT    = "Zaznacz opcjΩ dla bazy..."
  79. CONST NOCHANGE        = "Program instalacyjny nie stwierdzi│ zmian."
  80.  
  81. CONST DBOPT_New   = "1"
  82. CONST DBOPT_Link  = "2"
  83. CONST DBOPT_None  = "3"
  84.  
  85. GLOBAL AdminInCopyList% ''// BOOL - okre£la czy sekcja "Admin" zosta│a ju┐ za│adowana do CopyList
  86.  
  87. GLOBAL WORKPATH$       ''// katalog roboczy programu instalacyjnego          
  88. GLOBAL MAINPATH$           ''// domy£lny katalog docelowy dla plik≤w *.exe
  89. GLOBAL WINDRIVE$       ''// Windows drive letter.
  90. GLOBAL DBLINKPATH$     ''// domy£lny katalog istniej╣cej bazy
  91. GLOBAL DBDESTPATH$     ''// domy£lny katalog docelowy nowej bazy
  92. GLOBAL NewDBLINKPATH$  ''// zmienne pomocnicze do ustawiania 
  93. GLOBAL NewDBDESTPATH$  ''// nowych warto£ci katalog≤w
  94.  
  95. GLOBAL DBOPT$      ''// reprezentuje aktualnie ustawion╣ opcjΩ dla bazy
  96.                          ''// "1" - DBOPT_New (DBDESTPATH);  "2" - DBOPT_Link (DBLINKPATH);
  97.            ''// "3" - DBOPT_None (nie instaluj bazy)
  98. GLOBAL NewDBOPT$   ''// "1" - DBOPT_New (NewDBDESTPATH);  "2" - DBOPT_Link (NewDBLINKPATH)
  99.  
  100. ''//CustInst list symbol names
  101. GLOBAL TAXPRONEEDS$    ''//Option list costs per drive
  102. GLOBAL BAZANEEDS$
  103. GLOBAL ADMINNEEDS$
  104. GLOBAL HASLONEEDS$
  105. GLOBAL BACKUPNEEDS$
  106. GLOBAL FORMULNEEDS$
  107. GLOBAL POMOC1NEEDS$
  108. GLOBAL FAKTURANEEDS$
  109. GLOBAL IMPORTNEEDS$
  110.  
  111. GLOBAL EXTRACOSTS$  ''//List of extra costs to add per drive
  112. GLOBAL FINALCOSTS$
  113. GLOBAL FINALNEEDEDS$
  114.  
  115. GLOBAL CUIDLL$
  116. GLOBAL  hInst%
  117.  
  118. ''//Dialog list symbol names
  119. GLOBAL CHECKSTATES$ ''// lista aktualnych stan≤w checkbox'≤w
  120. GLOBAL STATUSTEXT$
  121. GLOBAL DRIVETEXT$
  122. GLOBAL CONFIRMTEXT$
  123. GLOBAL OPTGREYED$
  124.  
  125. DECLARE SUB AddOptFilesToCopyList (ftype%)
  126. DECLARE SUB AddExtraFilesToCopyList
  127. DECLARE SUB RecalcOptFiles (ftype%)
  128. DECLARE SUB RecalcAllPath
  129. DECLARE SUB RecalcPath (ftype%)
  130. DECLARE SUB SetDriveStatus
  131. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  132. DECLARE FUNCTION GetMin(min%, n1%, n2%, n3%) AS INTEGER
  133. DECLARE SUB WriteToTaxIniFile
  134. DECLARE SUB Calculate(ndrive%, idc1%, idc2%, idc3%)
  135. DECLARE SUB ClearText(idc1%, idc2%, idc3%)
  136. DECLARE SUB RecalcExtraCost
  137. DECLARE SUB CleanCopyList                              
  138. DECLARE SUB GetPathsFromIniFile  
  139. DECLARE SUB CopyLists(TARGET$, SOURCE$)                        
  140. DECLARE FUNCTION TruncPathText(szDir$, nLimit%) AS STRING             
  141. DECLARE FUNCTION GetLongestDir(szDir$) AS STRING
  142. DECLARE SUB InitShare 
  143.  
  144. INIT:
  145.     hInst% = HinstFrame()
  146.     junk% = Ctl3dRegister(hInst%)
  147.     junk% = Ctl3dAutoSubclass(hInst%)
  148.  
  149.     hWnd% = HwndFrame()
  150.     junk% = ShowWindow(hWnd%, SW_SHOWMAXIMIZED)
  151.  
  152.     CUIDLL$ = "mscuistf.dll"            ''//custom user interface dll
  153.     HELPPROC$ = "FHelpDlgProc"          ''//Help dialog procedure
  154.  
  155.     SetBitmap CUIDLL$, LOGO
  156.     SetTitle " Puzzle - Instalacja "
  157.  
  158.     ''// sprawdzenie wersji Windows (drugiego numeru - x.10)
  159.     V% = GetWindowsMinorVersion()
  160.     IF V%<10 THEN
  161.         sz$ = UIStartDlg(CUIDLL$, WINDOWS30, "FInfoDlgProc", APPHELP, HELPPROC$)
  162.         IF sz$ = "EXIT" THEN
  163.             UIPop 1
  164.             END
  165.         END IF
  166.     END IF
  167.  
  168.     ''// sprawdzenie wersji jΩzykowej
  169.     junk% = GetFileLang(MakePath(GetWindowsSysDir(),"user.exe"))
  170.     IF NOT (junk%=POLSKI) THEN
  171.         BADLANGUAGE$ =                "Pakiet Puzzle zaprojektowano dla polskiej" + CHR$(13)
  172.         BADLANGUAGE$ = BADLANGUAGE$ + "wersji Windows." + CHR$(13) + CHR$(13)
  173.         BADLANGUAGE$ = BADLANGUAGE$ + "Aktualnie zainstalowana jest inna wersja." + CHR$(13) + CHR$(13)
  174.         BADLANGUAGE$ = BADLANGUAGE$ + "Radzimy dokonaµ zmiany wersji aby unikn╣µ" + CHR$(13)
  175.         BADLANGUAGE$ = BADLANGUAGE$ + "trudno£ci w u┐ytkowaniu programu."
  176.         jun% = DoMsgBox(BADLANGUAGE$,"Komunikat",MB_OK)
  177.     END IF
  178.  
  179.     WORKPATH$ = GetSymbolValue("STF_CWDDIR")
  180.  
  181.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  182.     IF szInf$ = "" THEN
  183.         szInf$ = GetSymbolValue("STF_CWDDIR") + "TAX.INF"
  184.     END IF
  185.     ReadInfFile szInf$
  186.  
  187.     SetHelpName(GetSymbolValue("STF_CWDDIR")+"SETUP.HLP")
  188.  
  189.     ''//CustInst list symbols
  190.     CHECKSTATES$ = "CheckItemsState"
  191.     STATUSTEXT$  = "StatusItemsText"
  192.     DRIVETEXT$   = "DriveStatusText"
  193.     CONFIRMTEXT$ = "ConfirmTextIn"
  194.     OPTGREYED$   = "OptionsGreyed"
  195.  
  196.     ''//Disk cost list symbols
  197.     TAXPRONEEDS$   = "TaxProNeeds"                       
  198.     BAZANEEDS$     = "BazaNeeds"
  199.     ADMINNEEDS$    = "AdminNeeds"
  200.     HASLONEEDS$    = "HasloNeeds"
  201.     BACKUPNEEDS$   = "BackupNeeds"
  202.     FORMULNEEDS$   = "FormulNeeds"
  203.     POMOC1NEEDS$   = "Pomoc1Needs"
  204.     FAKTURANEEDS$  = "FakturaNeeds"
  205.     IMPORTNEEDS$   = "ImportNeeds"
  206.  
  207.     EXTRACOSTS$   = "ExtraCosts"
  208.     FINALCOSTS$   = "FinalCosts"
  209.     FINALNEEDEDS$ = "FinalNeededs"
  210.  
  211.     AdminInCopyList% = 0
  212.  
  213.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  214.  
  215.     FOR i% = 1 TO CHECKLIMIT STEP 1
  216.         AddListItem STATUSTEXT$, ""
  217.     NEXT i%        
  218.  
  219.     FOR i% = 1 TO 13 STEP 1
  220.         AddListItem DRIVETEXT$, ""
  221.     NEXT i%
  222.  
  223.     FOR i% = 1 TO CHECKLIMIT STEP 1
  224.         AddListItem CHECKSTATES$, "ON"
  225.     NEXT i%
  226.  
  227.     FOR i% = 1 TO 12 STEP 1
  228.         AddListItem CONFIRMTEXT$, ""
  229.     NEXT i%
  230.  
  231.     FOR i% = 1 TO 26 STEP 1
  232.         AddListItem EXTRACOSTS$, "0"
  233.     NEXT i%
  234.  
  235.  
  236.     ''// Pierwsza instalacja 
  237.     sz$ = UIStartDlg(CUIDLL$, SEARCH_COMP, "FCenterDlgProc", APPHELP, HELPPROC$)
  238.     CursorSave% = ShowWaitCursor()
  239.  
  240.     MAINPATH$ = WINDRIVE$ + ":\PUZZLE"
  241.     DBLINKPATH$ = ""
  242.     DBDESTPATH$ = WINDRIVE$ + ":\PUZZLEDB"  
  243.     DBOPT$ = DBOPT_New
  244.  
  245.     GetPathsFromIniFile
  246.  
  247.     ''// gdy w domy£lnym katalogu baza ju┐ istnieje
  248.     IF DoesFileExist(MakePath(DBDESTPATH$, DBNAME$), femExist)=1 THEN
  249.         DBLINKPATH$ = DBDESTPATH$
  250.         DBDESTPATH$ = ""
  251.         DBOPT$ = DBOPT_Link
  252.     END IF                                       
  253.  
  254.     ReplaceListItem DRIVETEXT$, 10, TruncPathText(MAINPATH$,40)
  255.  
  256.     ''// wy£wietlanie aktualnie ustawionej opcji bazy                                                            
  257.     IF DBOPT$=DBOPT_New THEN
  258.         ReplaceListItem DRIVETEXT$, 11, DBDESTTEXT + CHR$(13) + TruncPathText(DBDESTPATH$,40)                                         
  259.     ELSEIF DBOPT$=DBOPT_Link THEN                                           
  260.         ReplaceListItem DRIVETEXT$, 11, DBLINKTEXT + CHR$(13) + TruncPathText(DBLINKPATH$,40)
  261.     END IF
  262.  
  263.     RecalcAllPath
  264.     SetDriveStatus
  265.  
  266.     RestoreCursor CursorSave%
  267.     UIPop 1
  268.  
  269.     GOTO WELCOME
  270.  
  271.  
  272. '$IFDEF DEBUG
  273.     i% = SetSizeCheckMode(scmOnIgnore)    ''// could use scmOff; def = scmOnFatal
  274. '$ENDIF ''//DEBUG
  275.  
  276.  
  277. WELCOME:                                                                  
  278.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc",APPHELP, HELPPROC$)
  279.     IF sz$ = "CONTINUE" THEN
  280.         UIPop 1
  281.     ELSE
  282.         GOSUB ASKQUIT
  283.         GOTO WELCOME
  284.     END IF                               
  285.  
  286.  
  287.  
  288. CUSTINST:
  289.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FTaxDlgProc", APPHELP, HELPPROC$)
  290.  
  291.      IF sz$ = "CONTINUE" THEN
  292.           ''// spr. czy bΩd╣ instalowane komponenty wymagaj╣ce po│╣czenia z baz╣
  293.           anyChecked% = 0
  294.  
  295.           IF GetListItem(CHECKSTATES$, TAXPRO) = "ON" THEN
  296.               anyChecked% = 1
  297.           ELSEIF GetListItem(CHECKSTATES$, ADMIN) = "ON" THEN
  298.               anyChecked% = 1
  299.           ELSEIF GetListItem(CHECKSTATES$, HASLO) = "ON" THEN
  300.               anyChecked% = 1
  301.           ELSEIF GetListItem(CHECKSTATES$, BACKUP) = "ON" THEN
  302.               anyChecked% = 1
  303.           ELSEIF GetListItem(CHECKSTATES$, FAKTURA) = "ON" THEN
  304.               anyChecked% = 1
  305.           ELSEIF GetListItem(CHECKSTATES$, IMPORT) = "ON" THEN
  306.               anyChecked% = 1
  307.           END IF
  308.           
  309.           IF anyChecked% = 1 THEN
  310.           ''// je£li bΩd╣, to sprawdƒ czy jest w│╣czona opcja bazy inna od DBOPT_None - powinna byµ
  311.               IF DBOPT$ = DBOPT_None THEN
  312.                   junk% = DoMsgBox(DBNEEDEDTEXT$, "Komunikat", MB_OK + MB_ICONEXCLAMATION)
  313.                   GOTO CUSTINST
  314.               END IF
  315.           ELSE
  316.           ''// spr. czy w og≤le co£ ma byµ instalowane
  317.               otherChecked% = 0
  318.  
  319.               IF GetListItem(CHECKSTATES$, FORMUL) = "ON" THEN
  320.                   otherChecked% = 1
  321.               ELSEIF GetListItem(CHECKSTATES$, POMOC1) = "ON" THEN
  322.                   otherChecked% = 1
  323.               END IF
  324.               
  325.               IF (otherChecked% = 0) AND (DBOPT$ = DBOPT_None) THEN
  326.               ''// to jest przypadek gdy nic nie jest zaznaczone do instalowania
  327.                   junk% = DoMsgBox(NOCHANGE, "Komunikat", MB_OK)
  328.                   GOTO CUSTINST
  329.               END IF
  330.           END IF
  331.           
  332.           UIPop 1
  333.           GOTO INSTALL
  334.  
  335.      ELSEIF sz$ = "PATH" THEN
  336.           GOTO GETPATH
  337.  
  338.      ELSEIF sz$ = "BTN1" THEN  ''//przycisk 'Zmie± opcjΩ'
  339.           UIPop 1
  340.           GOTO DBOPTDLG
  341.  
  342.      ELSEIF (sz$="CHK2") OR (sz$="CHK3") OR (sz$="CHK4") OR (sz$="CHK5") OR (sz$="CHK6") OR (sz$="CHK7") OR (sz$="CHK8") OR (sz$="CHK9") THEN
  343.           ''// gdy zmiana stanu jednego z checkbox'≤w
  344.           SetDriveStatus
  345.           GOTO CUSTINST
  346.  
  347.      ELSEIF sz$ = "REACTIVATE" THEN
  348.           SetDriveStatus
  349.           GOTO CUSTINST
  350.  
  351.      ELSE
  352.           GOSUB ASKQUIT
  353.           GOTO CUSTINST
  354.     END IF
  355.  
  356. ''//
  357.  
  358. TOOBIG:
  359.     ''// zak│adam, ┐e mam ustawione FINALCOSTS$ i FINALNEEDEDS$
  360.     FOR i% = 1 TO 12 STEP 1
  361.         ReplaceListItem CONFIRMTEXT$, i%, ""
  362.     NEXT i%
  363.  
  364.     itm% = 1
  365.     FOR i%=1 TO 26 STEP 1
  366.         ''// wiem,┐e maksymalnie 3 z 26 dysk≤w
  367.         FNEEDEDS& = VAL(GetListItem(FINALNEEDEDS$,i%))
  368.         IF FNEEDEDS&>0 THEN
  369.             drive$ = CHR$(i% + ASC("A") -1)               
  370.             FCOSTS& = VAL(GetListItem(FINALCOSTS$,i%))
  371.             free& = GetFreeSpaceForDrive(drive$)  
  372.         
  373.             ReplaceListItem  CONFIRMTEXT$, itm%   , drive$ + ":"  
  374.             ReplaceListItem  CONFIRMTEXT$, itm% +1, STR$(FCOSTS& / 1024) + " K"  
  375.             ReplaceListItem  CONFIRMTEXT$, itm% +2, STR$(free& / 1024) + " K"  
  376.             ReplaceListItem  CONFIRMTEXT$, itm% +3, STR$(FNEEDEDS& / 1024) + " K"  
  377.             itm% = itm% + 4
  378.         END IF
  379.     NEXT i%
  380.     
  381.     
  382. TOOBIG1:   
  383.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FConfirmDlgProc",  APPHELP, HELPPROC$)
  384.  
  385.     IF sz$ = "BACK" THEN ''//OR sz$ = "REACTIVATE" THEN
  386.         UIPop 1
  387.         RecalcAllPath
  388.         SetDriveStatus
  389.         GOTO CUSTINST
  390.     ELSEIF sz$ = "EXIT"  THEN
  391.         GOSUB ASKQUIT
  392.         GOTO TOOBIG1
  393.     ELSE
  394.         GOTO TOOBIG1
  395.     END IF
  396.  
  397.  
  398. ''//
  399. ''//  Pierwsza instalacja  
  400. ''//
  401. INSTALL:
  402.     ClearCopyList
  403.  
  404.     FOR i%=2 to CHECKLIMIT STEP 1
  405.         IF GetListItem(CHECKSTATES$,i%)="ON" THEN
  406.             AddOptFilesToCopyList i%
  407.         END IF    
  408.     NEXT i% 
  409.  
  410.     IF DBOPT$=DBOPT_New THEN        
  411.         AddOptFilesToCopyList DBASE
  412.     END IF    
  413.  
  414.     AddExtraFilesToCopyList
  415.  
  416.     Need& = GetCopyListCost("",FINALCOSTS$,FINALNEEDEDS$)
  417.     IF Need& > 0 THEN
  418.         GOTO TOOBIG
  419.     END IF  
  420.  
  421.     AddToBillboardList "mscuistf.dll", IDD_BILLB1, "FModelessDlgProc", 1                                                                            
  422.     AddToBillboardList "mscuistf.dll", IDD_BILLB2, "FModelessDlgProc", 1    
  423.     AddToBillboardList "mscuistf.dll", IDD_BILLB3, "FModelessDlgProc", 1
  424.     SetCopyGaugePosition 160,197
  425.  
  426.     ''//junk% = Ctl3dUnAutoSubclass(hInst%)
  427.     CopyFilesInCopyList
  428.     ''//junk% = Ctl3dAutoSubclass(hInst%)
  429.  
  430.     IF NOT (DBOPT$=DBOPT_None) THEN
  431.         CursorSave% = ShowWaitCursor()
  432.         res% = RegisterDAO()          
  433.         RestoreCursor CursorSave%
  434.         IF res% = 0 THEN
  435.             i% = DoMsgBox("Nie uda│o siΩ zainstalowaµ obs│ugi bazy danych", "Komunikat", MB_ICONEXCLAMATION + MB_OK)
  436.             ERR = 1
  437.             GOTO QUIT
  438.         END IF
  439.     END IF  
  440.  
  441.     IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() < 12) THEN
  442.         InitShare
  443.     END IF
  444.  
  445.     FOR i% = 2 TO CHECKLIMIT STEP 1
  446.         IF GetListItem(CHECKSTATES$, i%) = "ON" THEN 
  447.             GOTO GRUPA
  448.         END IF   
  449.     NEXT i%
  450.     GOTO QUIT
  451.  
  452. GRUPA:
  453.     WriteToTaxIniFile
  454.     CreateProgmanGroup GROUPNAME, "", cmoNone
  455.     ShowProgmanGroup  GROUPNAME, 1, cmoNone
  456.  
  457.     IF GetListItem(CHECKSTATES$, TAXPRO) = "ON" THEN
  458.         CreateProgmanItem GROUPNAME, "Modu│ G│≤wny '98", MakePath(MAINPATH$,"TAX98B.EXE"), "", cmoOverwrite
  459.         CreateProgmanItem GROUPNAME, "Pytania i Odpowiedzi", MakePath(MAINPATH$,"QA.HLP"), "", cmoOverwrite
  460.     END IF
  461.  
  462.     AdminPath$ = MakePath(MAINPATH$, "SECURADM.EXE")
  463.  
  464.     IF GetListItem(CHECKSTATES$, ADMIN) = "ON" THEN
  465.         CreateProgmanItem GROUPNAME, "Administrator DostΩpu", AdminPath$, "", cmoOverwrite
  466.     END IF
  467.  
  468.     IF GetListItem(CHECKSTATES$, HASLO) = "ON" THEN
  469.         CreateProgmanItem GROUPNAME, "Zmiana Has│a", AdminPath$+" /CHPWD", AdminPath$+",1", cmoOverwrite
  470.     END IF
  471.  
  472.     IF GetListItem(CHECKSTATES$, BACKUP) = "ON" THEN
  473.         CreateProgmanItem GROUPNAME, "Archiwizator", MakePath(MAINPATH$,"TAXBKP.EXE"), "", cmoOverwrite
  474.     END IF
  475.  
  476.     IF GetListItem(CHECKSTATES$, FORMUL) = "ON" THEN
  477.         CreateProgmanItem GROUPNAME, "Edytor Formularzy", MakePath(MAINPATH$,"FORMAKER.EXE"), "", cmoOverwrite
  478.     END IF
  479.  
  480.     IF GetListItem(CHECKSTATES$, POMOC1) = "ON" THEN
  481.         CreateProgmanItem GROUPNAME, "Pomoc Prawna 98", MakePath(MAINPATH$,"PPS.EXE PRAWO98.HLP"), "", cmoOverwrite
  482.     END IF
  483.  
  484.     IF GetListItem(CHECKSTATES$, FAKTURA) = "ON" THEN
  485.         CreateProgmanItem GROUPNAME, "Faktura", MakePath(MAINPATH$,"FAKTURA.EXE"), "", cmoOverwrite
  486.     END IF
  487.  
  488.     IF GetListItem(CHECKSTATES$, IMPORT) = "ON" THEN
  489.         CreateProgmanItem GROUPNAME, "Import danych z TAX-PRO DOS", MakePath(MAINPATH$,"DI.EXE"), "", cmoOverwrite
  490.     END IF
  491.  
  492.     GOTO QUIT
  493.  
  494.  
  495. ''//***************************************************************************
  496. ''//***************************************************************************
  497. QUIT:
  498.     ON ERROR GOTO ERRQUIT
  499.  
  500.     IF ERR = 0 THEN
  501.         dlg% = EXITSUCCESS
  502.     ELSEIF ERR = STFQUIT THEN
  503.         dlg% = EXITQUIT
  504.     ELSE
  505.         dlg% = EXITFAILURE
  506.     END IF
  507. QUITL1:
  508.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  509.     IF sz$ = "REACTIVATE" THEN
  510.         GOTO QUITL1
  511.     END IF
  512.     UIPop 1
  513.  
  514.     junk% = Ctl3dUnregister(hInst%)
  515.  
  516.     ''// wy£wietl README.TXT je£li jest
  517.     MsgFile$ = MakePath(GetSymbolValue("STF_SRCDIR"), "README.TXT")
  518.     IF DoesFileExist(MsgFile$, femExist) = 1 THEN
  519.         jun% = WinExec("NOTEPAD.EXE " + MsgFile$, 1)
  520.     END IF
  521.  
  522.     END
  523.  
  524. ERRQUIT:
  525.     i% = DoMsgBox("Setup sources were corrupted", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  526.     junk% = Ctl3dUnregister(hInst%)
  527.     END
  528.  
  529.  
  530. ''/*************************************************************************
  531. ''   Zmiana katalogu MAINPATH$
  532. ''**************************************************************************/
  533. GETPATH:               
  534.     PATH$ = MAINPATH$
  535.  
  536. GETPATHL1: 
  537.     szExistDir$ = GetLongestDir(PATH$)
  538.     SetSymbolValue "EditTextIn", PATH$
  539.  
  540.     res% = ChangeDirDlg(hWnd%,szExistDir$)                                   
  541.  
  542.     IF (res% = 1) THEN
  543.         PATH$ = GetSymbolValue("EditTextOut")
  544.     
  545.         ''//Validate new path.
  546.         IF IsDirWritable(PATH$) = 0 THEN 
  547.             junk% = DoMsgBox(BADPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
  548.             GOTO GETPATHL1
  549.         END IF
  550.     
  551.         ReplaceListItem DRIVETEXT$, 10, TruncPathText(PATH$,40)
  552.                          
  553.                                                      
  554.         ''//Recalc if path changed.
  555.         IF (PATH$ <> MAINPATH$) AND (PATH$ <> MAINPATH$+"\") AND (PATH$+"\" <> MAINPATH$) THEN
  556.             MAINPATH$ = PATH$
  557.             RecalcAllPath
  558.             SetDriveStatus
  559.         END IF
  560.  
  561.         
  562.         PATH$ = ""
  563.         GOTO CUSTINST
  564.     ELSE
  565.         GOTO CUSTINST
  566.     END IF
  567.  
  568. ''/*************************************************************************
  569. ''   Wyb≤r opcji bazy
  570. ''**************************************************************************/
  571. DBOPTDLG:
  572.     NewDBOPT$ = DBOPT$
  573.     NewDBDESTPATH$ = DBDESTPATH$
  574.     NewDBLINKPATH$ = DBLINKPATH$
  575.  
  576.     SetSymbolValue "RadioDefault", NewDBOPT$
  577.     SetSymbolValue "ButtonChecked", NewDBOPT$
  578.  
  579.     ''// gdy  DBOPT$ = DBOPT_None
  580.     SetSymbolValue "DBPath"," "   
  581.  
  582.     IF DBOPT$ = DBOPT_New THEN 
  583.         SetSymbolValue "DBPath", TruncPathText(NewDBDESTPATH$,30)
  584.     ELSEIF  DBOPT$ = DBOPT_Link THEN                               
  585.         SetSymbolValue "DBPath", TruncPathText(NewDBLINKPATH$,30)
  586.     END IF  
  587.  
  588. DATABASE:            
  589.     sz$ = UIStartDlg(CUIDLL$, DB_OPTIONS, "FBaseOptDlgProc", APPHELP, HELPPROC$)
  590.  
  591.     IF sz$ = "CONTINUE" THEN
  592.         ''// wszystko jest na pewno poprawne dlatego od razu zapamiΩtujΩ
  593.         ''// nowe warto£ci we w│a£ciwych zmiennych
  594.         DBOPT$ = GetSymbolValue("ButtonChecked")
  595.               DBDESTPATH$ = NewDBDESTPATH$
  596.         DBLINKPATH$ = NewDBLINKPATH$
  597.         
  598.         IF DBOPT$ = DBOPT_New THEN
  599.             ReplaceListItem DRIVETEXT$, 11, DBDESTTEXT + CHR$(13) + TruncPathText(DBDESTPATH$,40)
  600.         ELSEIF DBOPT$ = DBOPT_Link THEN
  601.             ReplaceListItem DRIVETEXT$, 11, DBLINKTEXT + CHR$(13) + TruncPathText(DBLINKPATH$,40)
  602.         ELSE
  603.             ReplaceListItem DRIVETEXT$, 11, DBNONETEXT
  604.         END IF    
  605.         UIPop 1 
  606.     
  607.         RecalcPath DBASE
  608.         SetDriveStatus
  609.         GOTO CUSTINST
  610.  
  611.     ELSEIF sz$ = "PATH" THEN
  612.         GOTO GETDBPATH
  613.     ELSEIF sz$ = "RAD1" THEN 
  614.         SetSymbolValue "DBPath", TruncPathText(NewDBDESTPATH$,30)
  615.         NewDBOPT$ = GetSymbolValue("ButtonChecked")
  616.         SetSymbolValue "RadioDefault", NewDBOPT$
  617.         GOTO DATABASE
  618.     ELSEIF sz$ = "RAD2" THEN                  
  619.         SetSymbolValue "DBPath", TruncPathText(NewDBLINKPATH$,30)
  620.         NewDBOPT$ = GetSymbolValue("ButtonChecked")
  621.         SetSymbolValue "RadioDefault", NewDBOPT$
  622.         GOTO DATABASE
  623.     ELSEIF sz$ = "RAD3" THEN                  
  624.         SetSymbolValue "DBPath", " "
  625.         NewDBOPT$ = GetSymbolValue("ButtonChecked")
  626.         SetSymbolValue "RadioDefault", NewDBOPT$
  627.         GOTO DATABASE
  628.     
  629.     ELSEIF sz$ = "REACTIVATE" THEN
  630.         GOTO DATABASE
  631.     ELSE      
  632.         UIPop 1
  633.         GOTO CUSTINST
  634.     END IF
  635.  
  636.      
  637.  
  638. ''/*************************************************************************
  639. ''   Zmiana katalogu bazy
  640. ''**************************************************************************/
  641. GETDBPATH:               
  642.     IF NewDBOPT$ = DBOPT_New THEN
  643.         PATH$ = NewDBDESTPATH$
  644.     ELSE                                        
  645.         PATH$ = NewDBLINKPATH$
  646.     END IF    
  647.  
  648. GETDBPATHL1: 
  649.     szExistDir$ = GetLongestDir(PATH$)
  650.     SetSymbolValue "EditTextIn", PATH$
  651.  
  652.     res% = ChangeDirDlg(hWnd%,szExistDir$)                                   
  653.  
  654.     IF (res% = 1) THEN
  655.         PATH$ = GetSymbolValue("EditTextOut")
  656.  
  657.         IF NewDBOPT$ = DBOPT_New THEN
  658.  
  659.                 ''//Validate new path.
  660.                 IF IsDirWritable(PATH$) = 0 THEN
  661.                      junk% = DoMsgBox(BADPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
  662.                      GOTO GETDBPATHL1
  663.                 END IF
  664.  
  665.                 IF DoesFileExist(MakePath(PATH$,DBNAME$), femExist)=1 THEN
  666.                      junk% = DoMsgBox(BADDBDESTPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
  667.                      GOTO GETDBPATHL1
  668.                 END IF
  669.  
  670.  
  671.                 SetSymbolValue "DBPath", TruncPathText(PATH$,30)
  672.                 NewDBDESTPATH$ = PATH$
  673.  
  674.         ELSE  ''//NewDBOPT$ = DBOPT_Link
  675.  
  676.                 ''//Validate new path.
  677.                 IF IsDirWritable(PATH$) = 0 THEN
  678.                      junk% = DoMsgBox(BADPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
  679.                      GOTO GETDBPATHL1
  680.                 END IF
  681.  
  682.                 IF DoesFileExist(MakePath(PATH$,DBNAME$), femExist)=0 THEN
  683.                      junk% = DoMsgBox(BADDBLINKPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
  684.                      GOTO GETDBPATHL1
  685.                 END IF
  686.  
  687.                 SetSymbolValue "DBPath", TruncPathText(PATH$,30)
  688.                 NewDBLINKPATH$ = PATH$
  689.         END IF
  690.  
  691.         PATH$ = ""
  692.         GOTO DATABASE
  693.      ELSE
  694.         GOTO DATABASE
  695.      END IF
  696.  
  697.  
  698.  
  699. ASKQUIT:
  700.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  701.  
  702.     IF sz$ = "EXIT" THEN
  703.         UIPopAll
  704.         ERROR STFQUIT
  705.     ELSEIF sz$ = "REACTIVATE" THEN
  706.         GOTO ASKQUIT
  707.     ELSE
  708.         UIPop 1
  709.     END IF
  710.     RETURN
  711.  
  712.  
  713.  
  714. ''/*
  715. '** Purpose:
  716. '**     Adds the specified option files to the copy list.
  717. '** Arguments:
  718. '**     ftype%  - type of files to add, one of the following:
  719. '**             DBASE, TAXPRO ...
  720. '** Returns:
  721. '**     none.
  722. '*************************************************************************/
  723. SUB AddOptFilesToCopyList (ftype%) STATIC
  724.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  725.  
  726.     SELECT CASE ftype%
  727.     CASE TAXPRO
  728.         AddSectionFilesToCopyList "TaxPro", SrcDir$, MAINPATH$
  729.     CASE DBASE
  730.         IF DBOPT$ = DBOPT_New  THEN
  731.             IF DBDESTPATH$ <> "" THEN
  732.             AddSectionFilesToCopyList "Baza", SrcDir$, DBDESTPATH$
  733.             END IF
  734.         END IF
  735.     CASE ADMIN,HASLO
  736.         IF AdminInCopyList% = 0 THEN
  737.             AddSectionFilesToCopyList "Admin", SrcDir$, MAINPATH$
  738.             AdminInCopyList% = 1
  739.         END IF
  740.     CASE BACKUP
  741.         AddSectionFilesToCopyList "Backup", SrcDir$, MAINPATH$
  742.     CASE FORMUL
  743.         AddSectionFilesToCopyList "Formul", SrcDir$, MAINPATH$
  744.     CASE POMOC1
  745.         AddSectionKeyFileToCopyList "Help", "Pomoc1", SrcDir$, MAINPATH$
  746.         AddSectionKeyFileToCopyList "Help", "Pomoc1RUN", SrcDir$, MAINPATH$
  747.     CASE FAKTURA
  748.         AddSectionFilesToCopyList "Faktura", SrcDir$, MAINPATH$
  749.     CASE IMPORT
  750.         AddSectionFilesToCopyList "Import", SrcDir$, MAINPATH$
  751.     END SELECT
  752.  
  753.     SrcDir$ = ""
  754. END SUB
  755.  
  756.  
  757. ''/*
  758. '** Purpose:
  759. '**     Recalculates disk space for the given option files and sets
  760. '**     the status info symbol "StatusItemsText".
  761. '**
  762. '**             - wylicza bezwzglΩdne (niezale┐nie od stanu ON/OFF) koszty
  763. '**               instalacji dla podanego checkboxa; zapamiΩtuje je w odpowiedniej
  764. '**               li£cie "xxxNeeds" (xxxNEEDS$)
  765. '** Arguments:
  766. '**     ftype% - type of files to add, one of the following:
  767. '**             DBASE, TAXPRO ...
  768. '** Returns:
  769. '**     none.
  770. '*************************************************************************/
  771. SUB RecalcOptFiles (ftype%) STATIC
  772.     CleanCopyList
  773.     AddOptFilesToCopyList ftype%
  774.  
  775.     IF ftype% = TAXPRO THEN
  776.         ListSym$ = TAXPRONEEDS$
  777.     ELSEIF ftype% = DBASE THEN
  778.         ListSym$ = BAZANEEDS$
  779.     ELSEIF ftype% = ADMIN THEN
  780.         ListSym$ = ADMINNEEDS$
  781.     ELSEIF ftype% = HASLO THEN
  782.         ListSym$ = HASLONEEDS$
  783.     ELSEIF ftype% = BACKUP THEN
  784.         ListSym$ = BACKUPNEEDS$
  785.     ELSEIF ftype% = FORMUL THEN
  786.         ListSym$ = FORMULNEEDS$
  787.     ELSEIF ftype% = POMOC1 THEN
  788.         ListSym$ = POMOC1NEEDS$
  789.     ELSEIF ftype% = FAKTURA THEN
  790.         ListSym$ = FAKTURANEEDS$
  791.     ELSEIF ftype% = IMPORT THEN
  792.         ListSym$ = IMPORTNEEDS$
  793.     END IF
  794.  
  795.     StillNeed& = GetCopyListCost("", ListSym$, "")
  796.  
  797.     cost& = 0
  798.     FOR i% = 1 TO 26 STEP 1
  799.         cost& = cost& + VAL(GetListItem(ListSym$, i%))
  800.     NEXT i%
  801.  
  802.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  803.  
  804.     ListSym$ = ""
  805. END SUB
  806.  
  807.  
  808. ''/*
  809. '** Purpose:
  810. '**             - wylicza bezwzglΩdne (niezale┐nie od stanu ON/OFF) koszty
  811. '**               instalacji dla ka┐dego checkboxa; zapamiΩtuje je w odpowiednich
  812. '**               listach "xxxNeeds" (xxxNEEDS$); ustawia elementy listy 
  813. '**               "StatusItemText"
  814. '**             - wylicza koszt instalacji dodatkowych komponent≤w (Extra)
  815. '**               zapamiΩtuje w "ExtraCosts" (EXTRACOSTS$)
  816. '************************************************************************/
  817. SUB RecalcAllPath STATIC
  818.     CursorSave% = ShowWaitCursor()
  819.  
  820.     RecalcOptFiles TAXPRO
  821.     RecalcOptFiles DBASE
  822.     RecalcOptFiles ADMIN
  823.     RecalcOptFiles HASLO
  824.     RecalcOptFiles BACKUP
  825.     RecalcOptFiles FORMUL  
  826.     RecalcOptFiles POMOC1
  827.     RecalcOptFiles FAKTURA
  828.     RecalcOptFiles IMPORT
  829.     RecalcExtraCost
  830.  
  831.     RestoreCursor CursorSave%
  832. END SUB
  833.  
  834. ''/*
  835. ''** Purpose:
  836. ''**     - to samo co RecalcAllPath tyle,┐e dla jednego checkboxa
  837. ''*************************************************************************/
  838. SUB RecalcPath (ftype%) STATIC
  839.     CursorSave% = ShowWaitCursor()
  840.     RecalcOptFiles ftype%
  841.     RecalcExtraCost
  842.     RestoreCursor CursorSave%
  843. END SUB
  844.  
  845.  
  846. ''/*
  847. '**  Je£li jedna z opcji w dialogu CUSTINST lub AD_CUSTINST 
  848. '**  (TAXPRO, ADMIN, HASLO, BACKUP, FORMUL, FAKTURA lub IMPORT) jest zaznaczona
  849. '**  (z wy│╣czeniem bazy) to uwzglΩdniane s╣ koszty instalacji
  850. '**  plik≤w z sekcji [Extra], [MFC Files] i [OLE]
  851. '**
  852. '*************************************************************************/
  853. SUB AddExtraFilesToCopyList STATIC                                                     
  854.     IF ((DBOPT$ = DBOPT_New) AND (DBDESTPATH$<>"")) OR (DBOPT$ = DBOPT_Link) THEN    
  855.         AddSectionFilesToCopyList "DAO", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
  856.     END IF
  857.  
  858.     anyChecked% = 0
  859.  
  860.     IF GetListItem(CHECKSTATES$, TAXPRO) = "ON" THEN
  861.         anyChecked% = 1
  862.     ELSEIF GetListItem(CHECKSTATES$, ADMIN) = "ON" THEN
  863.         anyChecked% = 1
  864.     ELSEIF GetListItem(CHECKSTATES$, HASLO) = "ON" THEN
  865.         anyChecked% = 1
  866.     ELSEIF GetListItem(CHECKSTATES$, BACKUP) = "ON" THEN
  867.         anyChecked% = 1
  868.     ELSEIF GetListItem(CHECKSTATES$, FORMUL) = "ON" THEN
  869.         anyChecked% = 1
  870.     ELSEIF GetListItem(CHESKSTATES$, FAKTURA) = "ON" THEN
  871.         anyChecked% = 1
  872.     ELSEIF GetListItem(CHECKSTATES$, IMPORT) = "ON" THEN
  873.         anyChecked% = 1
  874.     END IF
  875.  
  876.     IF anyChecked% THEN
  877.         AddSectionFilesToCopyList "Extra", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
  878.         AddSectionFilesToCopyList "MFC Files", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
  879.         AddSectionFilesToCopyList "OLE", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
  880.     END IF
  881.  
  882.     FOR i% = 1 TO 26 STEP 1
  883.         ReplaceListItem EXTRACOSTS$,i%,"0"
  884.     NEXT i%
  885. END SUB
  886.                
  887.  
  888. ''/*
  889. '**  Obliczenie koszt≤w dodatkowych instalacji (lista EXTRACOSTS$), np.
  890. '**    - instalacji bibliotek w katalogu systemowym Windows
  891. '**
  892. '*******************************************************************************/
  893. SUB RecalcExtraCost STATIC
  894.     CleanCopyList        
  895.     AddExtraFilesToCopyList
  896.     StillNeed& = GetCopyListCost("", EXTRACOSTS$, "")
  897.     ''//EXTRACOST$ wykorzystywana przez Calculate() do wyliczenia koszt≤w ca│o£ciowych
  898. END SUB
  899.                                        
  900.                                        
  901. ''/*
  902. '** Purpose:
  903. '**     Sets drive status info.
  904. '**     
  905. '*************************************************************************/
  906. SUB SetDriveStatus STATIC
  907.  
  908.     IF DBOPT$ = DBOPT_New AND DBDESTPATH$ <> ""  THEN
  909.       DBDRIVE$ = MID$(DBDESTPATH$, 1, 1)
  910.       nDB% = ASC(ucase$(DBDRIVE$)) - ASC("A") + 1  
  911.     ELSE
  912.       DBDRIVE$ = ""
  913.       nDB% = 0
  914.     END IF  
  915.     
  916.     EXEDRIVE$ = MID$(MAINPATH$, 1, 1)
  917.     nEXE% = ASC(ucase$(EXEDRIVE$)) - ASC("A") + 1  
  918.     nWIN% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1  
  919.  
  920.      ndrive% = 0
  921.      ndrive% = GetMin(ndrive%, nDB, nEXE, nWIN)
  922.      ''// uaktualnienie stanu dysk≤w
  923.      IF ndrive% <> 0 THEN
  924.           Calculate ndrive%, 1, 2, 3
  925.           ndrive% = GetMin(ndrive%, nDB, nEXE, nWIN)
  926.  
  927.           IF ndrive% <> 0 THEN
  928.                 Calculate ndrive%, 4, 5, 6
  929.                 ndrive% = GetMin(ndrive%, nDB, nEXE, nWIN)
  930.  
  931.                 IF ndrive% <> 0 THEN
  932.                      Calculate ndrive%, 7, 8, 9
  933.                 ELSE
  934.                      ClearText 7,8,9
  935.                 END IF
  936.           ELSE
  937.                 ClearText 4,5,6
  938.           END IF
  939.  
  940.      ELSE
  941.           ClearText 1,2,3
  942.      END IF
  943.  
  944. END SUB
  945.  
  946.  
  947. ''/*
  948. '** Purpose:
  949. '**     Appends a file name to the end of a directory path,
  950. '**     inserting a backslash character as needed.
  951. '** Arguments:
  952. '**     szDir$  - full directory path (with optional ending "\")
  953. '**     szFile$ - filename to append to directory
  954. '** Returns:
  955. '**     Resulting fully qualified path name.
  956. '*************************************************************************/
  957. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  958.     IF szDir$ = "" THEN
  959.         MakePath = szFile$
  960.     ELSEIF szFile$ = "" THEN
  961.         MakePath = szDir$
  962.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  963.         MakePath = szDir$ + szFile$
  964.     ELSE
  965.         MakePath = szDir$ + "\" + szFile$
  966.     END IF
  967. END FUNCTION
  968.  
  969.  
  970. ''/***************************************************************
  971. '**
  972. '**  Stworzenie pliku INIFILE$ wraz z odpowiednimi sekcjami
  973. '**    
  974. '*****************************************************************/
  975. SUB WriteToTaxIniFile STATIC
  976.     ini$ = MakePath(GetWindowsDir(), INIFILE$)
  977.  
  978.     IF DBOPT$ = DBOPT_New THEN
  979.         CreateIniKeyValue ini$, "dir", "database", DBDESTPATH$ , cmoOverwrite
  980.     ELSEIF DBOPT$ = DBOPT_Link THEN
  981.         CreateIniKeyValue ini$, "dir", "database", DBLINKPATH$ , cmoOverwrite
  982.     END IF
  983.  
  984.     CreateIniKeyValue ini$, "dir", "exe", MAINPATH$ , cmoOverwrite
  985. END SUB
  986.      
  987.                              
  988. ''/*
  989. '** Dzia│anie:
  990. '**     Wyznaczenie najmniejszej liczby spo£r≤d podanych
  991. '**     z uwzglΩdnieniem warto£ci progowej.
  992. '** Argumenty:
  993. '**     min%  -  warto£µ progowa (wyznaczana liczba musi byµ wiΩksza
  994. '**              od warto£ci progowej) 
  995. '**     n1%,n2%,n3% -  por≤wnywane liczby
  996. '** Wynik:
  997. '**     0 - gdy nie ma liczby wiΩkszej od warto£ci progowej
  998. '**     i - najmniejsza liczba wiΩksza od warto£ci progowej
  999. '**
  1000. '*************************************************************************/
  1001. FUNCTION GetMin(min%, n1%, n2%, n3%) STATIC AS INTEGER
  1002.     ret% = 0
  1003.     IF  n1%>min% THEN 
  1004.       ret% = n1%
  1005.       IF  n2%>min% AND n2%<ret% THEN
  1006.         ret% = n2%
  1007.       END IF  
  1008.       IF  n3%>min% AND n3%<ret% THEN
  1009.         ret% = n3%
  1010.       END IF  
  1011.        
  1012.     ELSEIF n2%>min% THEN
  1013.       ret% = n2%
  1014.         IF  n3%>min% AND n3%<ret% THEN
  1015.             ret% = n3%
  1016.         END IF 
  1017.     ELSEIF n3%>min% THEN
  1018.       ret% = n3%
  1019.     END IF     
  1020.     
  1021.     GetMin = ret%
  1022. END FUNCTION                                                    
  1023.  
  1024.  
  1025. ''/*
  1026. '** Dzia│anie:
  1027. '**     Wyliczenie koszt≤w instalacji dla podanego dysku
  1028. '**     i przypisanie wskazanym elementom z listy DRIVETEXT$
  1029. '**     odpowiednich warto£ci.
  1030. '** Argumenty:
  1031. '**     ndrive% - numer dysku (1 => "A", 2 => "B", itd)
  1032. '**     idc1% - nr elementy listy DRIVETEXT$ <- oznaczenie literowe dysku (np. "A")
  1033. '**     idc2% - nr elementy listy DRIVETEXT$ <- koszt instalacji (w KB)
  1034. '**     idc3% - nr elementy listy DRIVETEXT$ <- wolna przestrze± na dysku (w KB)
  1035. '**
  1036. '*************************************************************************/
  1037. SUB Calculate(ndrive%, idc1%, idc2%, idc3%) STATIC
  1038.     cost& = 0
  1039.  
  1040.     IF DBOPT$=DBOPT_New THEN
  1041.         cost& = cost& + VAL(GetListItem(BAZANEEDS$, ndrive%))
  1042.     END IF
  1043.  
  1044.     IF GetListItem(CHECKSTATES$, TAXPRO)="ON"  THEN
  1045.         cost& = cost& + VAL(GetListItem(TAXPRONEEDS$, ndrive%))
  1046.     END IF
  1047.  
  1048.     ''// ADMIN i HASLO to ten sam program
  1049.     IF (GetListItem(CHECKSTATES$, ADMIN)="ON") OR (GetListItem(CHECKSTATES$, HASLO)="ON") THEN
  1050.         cost& = cost& + VAL(GetListItem(ADMINNEEDS$, ndrive%))
  1051.     END IF
  1052.  
  1053.     IF GetListItem(CHECKSTATES$, BACKUP)="ON"  THEN
  1054.         cost& = cost& + VAL(GetListItem(BACKUPNEEDS$, ndrive%))
  1055.     END IF
  1056.  
  1057.     IF GetListItem(CHECKSTATES$, FORMUL)="ON"  THEN
  1058.         cost& = cost& + VAL(GetListItem(FORMULNEEDS$, ndrive%))
  1059.     END IF
  1060.  
  1061.     IF GetListItem(CHECKSTATES$, POMOC1)="ON"  THEN
  1062.         cost& = cost& + VAL(GetListItem(POMOC1NEEDS$, ndrive%))
  1063.     END IF
  1064.  
  1065.     IF GetListItem(CHECKSTATES$, FAKTURA)="ON"  THEN
  1066.         cost& = cost& + VAL(GetListItem(FAKTURANEEDS$, ndrive%))
  1067.     END IF
  1068.  
  1069.     IF GetListItem(CHECKSTATES$, IMPORT)="ON"  THEN
  1070.         cost& = cost& + VAL(GetListItem(IMPORTNEEDS$, ndrive%))
  1071.     END IF
  1072.  
  1073.     cost& = cost& + VAL(GetListItem(EXTRACOSTS$, ndrive%))
  1074.  
  1075.     drive$ = CHR$(ndrive% + ASC("A") - 1)
  1076.     free& = GetFreeSpaceForDrive(drive$)
  1077.  
  1078.     ReplaceListItem DRIVETEXT$, idc1%, drive$ + ":"
  1079.     ReplaceListItem DRIVETEXT$, idc2%, STR$(cost& / 1024) + " K"
  1080.     ReplaceListItem DRIVETEXT$, idc3%, STR$(free& / 1024) + " K"
  1081. END SUB
  1082.  
  1083. ''/*
  1084. '** Dzia│anie:
  1085. '**     Przypisanie ci╣gu pustego wskazanym elementom listy DRIVETEXT$
  1086. '**
  1087. '*************************************************************************/
  1088. SUB ClearText(idc1%, idc2%, idc3%) STATIC
  1089.     ReplaceListItem DRIVETEXT$, idc1%, ""
  1090.     ReplaceListItem DRIVETEXT$, idc2%, ""
  1091.     ReplaceListItem DRIVETEXT$, idc3%, ""
  1092. END SUB
  1093.  
  1094. ''/*************************************************************************/
  1095. SUB CleanCopyList STATIC
  1096.     AdminInCopyList% = 0
  1097.     ClearCopyList
  1098. END SUB
  1099.  
  1100. ''/*
  1101. '** Dzia│anie:
  1102. '**     Sprawdza czy istnieje plik INIFILE$ oraz czy istniej╣ podane
  1103. '**     w nim katalogi: EXEdir i dir. Ustawia warto£µ zmiennej NEXTINST%
  1104. '** Wynik:
  1105. '**     zwraca warto£µ zmiennej NEXTINST%
  1106. '**
  1107. '***************************************************************************/
  1108. SUB GetPathsFromIniFile STATIC 
  1109.     szFILE$ = MakePath(GetWindowsDir(), INIFILE$)
  1110.     IF DoesFileExist(szFILE$,femExists) THEN
  1111.       IF DoesIniKeyExist(szFILE$,"dir","database") THEN
  1112.          dir$ = GetIniKeyString(szFILE$,"dir","database")
  1113.          IF dir$ <> "" THEN
  1114.            DBOPT$ = DBOPT_New
  1115.            DBDESTPATH$ = dir$
  1116.          END IF
  1117.       END IF
  1118.       IF DoesIniKeyExist(szFILE$,"dir","exe") THEN
  1119.          dir$ = GetIniKeyString(szFILE$,"dir","exe")
  1120.          IF dir$ <> "" THEN
  1121.            MAINPATH$ = dir$
  1122.          END IF
  1123.       END IF
  1124.     END IF
  1125. END SUB
  1126.  
  1127.  
  1128. ''/********************************************************************
  1129. ''   Przepisanie listy SOURCE$ do listy TARGET$
  1130. ''   - musz╣ mieµ tak╣ sam╣ liczbΩ element≤w
  1131. ''********************************************************************/
  1132. SUB CopyLists(TARGET$, SOURCE$)  STATIC
  1133.     limit% = GetListLength(TARGET$)
  1134.     FOR i%=1 TO limit% STEP 1
  1135.         ReplaceListItem TARGET$,i%,GetListItem(SOURCE$,i%)
  1136.     NEXT i%
  1137. END SUB
  1138.  
  1139.  
  1140.  
  1141. FUNCTION TruncPathText( szDir$, nLimit% ) STATIC AS STRING
  1142.     IF LEN(szDir$) > nLimit% THEN
  1143.         TruncPathText = MID$(szDir$, 1, nLimit%)+"..."
  1144.     ELSE
  1145.         TruncPathText = szDir$ 
  1146.     END IF
  1147. END FUNCTION
  1148.  
  1149.  
  1150. FUNCTION GetLongestDir(szDir$) STATIC AS STRING
  1151.    sz$ = szDir$
  1152.    posOK% = 1                                  
  1153.    
  1154.    WHILE  (posOK%<>0) AND (DoesDirExist(sz$)=0)
  1155.       pos% = 1
  1156.       posOK% = 0          
  1157.         
  1158.       WHILE (pos%<>0)
  1159.         pos% = INSTR(pos%+1,sz$,"\")
  1160.         IF (pos%>0) THEN 
  1161.           posOK% = pos%
  1162.         END IF  
  1163.       WEND
  1164.                                                 
  1165.       IF (posOK%<>0) THEN
  1166.         sz$ = MID$(sz$,1,posOK%-1)                 
  1167.       END IF
  1168.    WEND  
  1169.           
  1170.    IF (posOK<>0) THEN          
  1171.       IF LEN(sz$) = 2 THEN
  1172.         sz$ = sz$ + "\"
  1173.       END IF  
  1174.       GetLongestDir = sz$
  1175.    ELSE                    
  1176.       GetLongestDir = ""    
  1177.    END IF    
  1178.                
  1179. END FUNCTION
  1180.  
  1181.  
  1182. ''/*
  1183. '**  odszukuje plik SHARE.EXE, dopisuje linie inicjalizacyjn╣
  1184. '**  do pliku AUTOEXEC.BAT jako pierwsz╣, uprzednio zachowuj╣c
  1185. '**  jego kopiΩ w AUTOEXEC.TAX
  1186. '**
  1187. '*******************************************************************/
  1188. SUB InitShare STATIC                 
  1189.     CursorSave% = ShowWaitCursor()
  1190.  
  1191.     bOK% = 1
  1192.     SharePath$ = FindFileInTree("SHARE.EXE","C:\")
  1193.     IF (SharePath$="") THEN
  1194.         bOK% = 0
  1195.     END IF
  1196.  
  1197.     IF (bOK% = 1) THEN                     
  1198.         szLine$ = SharePath$ + " /L:500 /F:5100" + CHR$(10)     
  1199.  
  1200.         bOK% = 0                                       
  1201.         TempFile$ = WORKPATH$ + "TEMP.BAT"                                        
  1202.         AutoPath$ = "C:\AUTOEXEC.BAT"
  1203.         res% = DoesFileExist(AutoPath$,femReadWrite)
  1204.         IF (res% = 1) THEN     
  1205.             res% = MakeFile(TempFile$, szLine$)
  1206.             IF (res% = 1) THEN
  1207.                 CopyFile AutoPath$, TempFile$, cmoNone, 1
  1208.                 RenameFile AutoPath$,"AUTOEXEC.TAX"
  1209.                 CopyFile TempFile$, AutoPath$, cmoNone, 0
  1210.                 RemoveFile TempFile$, cmoNone
  1211.                 res% = DoesFileExist(AutoPath$,femExists)
  1212.                 IF (res% = 1) THEN
  1213.                     bOK% = 1
  1214.                 ELSE
  1215.                     AutoTax$ = MID$(AutoPath$,1,LEN(AutoPath$)-3) + "TAX"
  1216.                     RenameFile AutoTax$,"AUTOEXEC.BAT"
  1217.                     bOK% = 0
  1218.                 END IF   
  1219.             END IF   
  1220.         END IF
  1221.     END IF
  1222.  
  1223.     RestoreCursor CursorSave%
  1224.  
  1225.     IF (bOK% = 0) THEN                                 
  1226.         NOSHARE$ = "Program instalacyjny nie znalaz│ pliku" + CHR$(13)
  1227.         NOSHARE$ = NOSHARE$ + "SHARE.EXE w Twoim systemie!" + CHR$(13) + CHR$(13)
  1228.         NOSHARE$ = NOSHARE$ + "Zainstaluj go z dyskietki systemowej" + CHR$(13)
  1229.         NOSHARE$ = NOSHARE$ + "i uzupe│nij plik wsadowy AUTOEXEC.BAT" + CHR$(13)
  1230.         NOSHARE$ = NOSHARE$ + "lini╣:" + CHR$(13) + CHR$(13)
  1231.         NOSHARE$ = NOSHARE$ + "      SHARE.EXE  /L:500  /F:5100"
  1232.         junk% = DoMsgBox(NOSHARE$,"Komunikat",MB_OK + MB_ICONASTERISK) 
  1233.     END IF
  1234. END SUB
  1235.