home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1998 November
/
pcwk_11_98a.iso
/
Wtestowe
/
Puzzle
/
Disk1
/
TAX.C_
/
TAX.C
Wrap
Text File
|
1998-08-31
|
38KB
|
1,235 lines
''//'$DEFINE DEBUG ''Define for script development/debugging
'$INCLUDE 'setupapi.inc'
'$INCLUDE 'msdetect.inc'
CONST SW_SHOWMAXIMIZED=3
DECLARE FUNCTION ShowWindow LIB "user.exe" (hWnd%,iShow%) AS INTEGER
DECLARE FUNCTION WinExec LIB "kernel.exe" (CmdLine$,CmdShow%) AS INTEGER
DECLARE FUNCTION Ctl3dAutoSubclass LIB "ctl3d.dll" (hInst%) AS INTEGER
DECLARE FUNCTION Ctl3dUnAutoSubclass LIB "ctl3d.dll" (hInst%) AS INTEGER
DECLARE FUNCTION Ctl3dRegister LIB "ctl3d.dll" (hInst%) AS INTEGER
DECLARE FUNCTION Ctl3dUnregister LIB "ctl3d.dll" (hInst%) AS INTEGER
DECLARE FUNCTION GetFileLang LIB "mscuistf.dll" (lpszFullPath$) AS INTEGER
DECLARE SUB SetHelpName LIB "mscuistf.dll" (lpszHelpName$)
DECLARE FUNCTION ChangeDirDlg LIB "mscuistf.dll" (hwnd%,lpszDir$) AS INTEGER
DECLARE FUNCTION RegisterDAO LIB "mscuistf.dll" AS INTEGER
DECLARE FUNCTION MakeFile LIB "mscuistf.dll" (lpszFullPath$,lpszLine$) AS INTEGER
''//Dialog ID's
CONST WELCOME = 100
CONST IDD_LIST = 10
CONST ASKQUIT = 200
CONST EXITFAILURE = 400
CONST EXITQUIT = 600
CONST EXITSUCCESS = 700
CONST APPHELP = 900
CONST CUSTINST = 6200
CONST TOOBIG = 6300
CONST DB_OPTIONS = 8100
CONST SEARCH_COMP = 8200
'CONST AD_CUSTINST = 8400
CONST WINDOWS30 = 8500
CONST IDD_BILLB1 = 8001
CONST IDD_BILLB2 = 8002
CONST IDD_BILLB3 = 8003
''//Language
CONST POLSKI = 1045
''//Bitmap ID
CONST LOGO = 1
''//DoMsgBox flags
CONST MB_ICONEXCLAMATION = 48
CONST MB_ICONASTERISK = 64
''//File Types
CONST DBASE = 1
CONST TAXPRO = 2
CONST ADMIN = 3
CONST HASLO = 4
CONST BACKUP = 5
CONST FORMUL = 6
CONST POMOC1 = 7 ''//Pomoc Prawna
CONST FAKTURA = 8
CONST IMPORT = 9
CONST CHECKLIMIT = 9
CONST INIFILE$ = "TAX.INI"
CONST GROUPNAME = "Adad"
CONST DBNAME = "main.mdb"
CONST DBDESTTEXT = "Instalacja nowej bazy w katalogu "
CONST DBLINKTEXT = "Po│╣czenie z baz╣ w katalogu "
CONST DBNONETEXT = "Nie instalowaµ bazy"
CONST BADPATHTEXT = "Podana £cie┐ka nie jest poprawna lub dysk zabezpieczony przed zapisem."
CONST BADDBDESTPATHTEXT = "W podanym katalogu baza ju┐ istnieje !"
CONST BADDBLINKPATHTEXT = "Nie mogΩ znaleƒµ pliku bazy !"
CONST DBNEEDEDTEXT = "Zaznacz opcjΩ dla bazy..."
CONST NOCHANGE = "Program instalacyjny nie stwierdzi│ zmian."
CONST DBOPT_New = "1"
CONST DBOPT_Link = "2"
CONST DBOPT_None = "3"
GLOBAL AdminInCopyList% ''// BOOL - okre£la czy sekcja "Admin" zosta│a ju┐ za│adowana do CopyList
GLOBAL WORKPATH$ ''// katalog roboczy programu instalacyjnego
GLOBAL MAINPATH$ ''// domy£lny katalog docelowy dla plik≤w *.exe
GLOBAL WINDRIVE$ ''// Windows drive letter.
GLOBAL DBLINKPATH$ ''// domy£lny katalog istniej╣cej bazy
GLOBAL DBDESTPATH$ ''// domy£lny katalog docelowy nowej bazy
GLOBAL NewDBLINKPATH$ ''// zmienne pomocnicze do ustawiania
GLOBAL NewDBDESTPATH$ ''// nowych warto£ci katalog≤w
GLOBAL DBOPT$ ''// reprezentuje aktualnie ustawion╣ opcjΩ dla bazy
''// "1" - DBOPT_New (DBDESTPATH); "2" - DBOPT_Link (DBLINKPATH);
''// "3" - DBOPT_None (nie instaluj bazy)
GLOBAL NewDBOPT$ ''// "1" - DBOPT_New (NewDBDESTPATH); "2" - DBOPT_Link (NewDBLINKPATH)
''//CustInst list symbol names
GLOBAL TAXPRONEEDS$ ''//Option list costs per drive
GLOBAL BAZANEEDS$
GLOBAL ADMINNEEDS$
GLOBAL HASLONEEDS$
GLOBAL BACKUPNEEDS$
GLOBAL FORMULNEEDS$
GLOBAL POMOC1NEEDS$
GLOBAL FAKTURANEEDS$
GLOBAL IMPORTNEEDS$
GLOBAL EXTRACOSTS$ ''//List of extra costs to add per drive
GLOBAL FINALCOSTS$
GLOBAL FINALNEEDEDS$
GLOBAL CUIDLL$
GLOBAL hInst%
''//Dialog list symbol names
GLOBAL CHECKSTATES$ ''// lista aktualnych stan≤w checkbox'≤w
GLOBAL STATUSTEXT$
GLOBAL DRIVETEXT$
GLOBAL CONFIRMTEXT$
GLOBAL OPTGREYED$
DECLARE SUB AddOptFilesToCopyList (ftype%)
DECLARE SUB AddExtraFilesToCopyList
DECLARE SUB RecalcOptFiles (ftype%)
DECLARE SUB RecalcAllPath
DECLARE SUB RecalcPath (ftype%)
DECLARE SUB SetDriveStatus
DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
DECLARE FUNCTION GetMin(min%, n1%, n2%, n3%) AS INTEGER
DECLARE SUB WriteToTaxIniFile
DECLARE SUB Calculate(ndrive%, idc1%, idc2%, idc3%)
DECLARE SUB ClearText(idc1%, idc2%, idc3%)
DECLARE SUB RecalcExtraCost
DECLARE SUB CleanCopyList
DECLARE SUB GetPathsFromIniFile
DECLARE SUB CopyLists(TARGET$, SOURCE$)
DECLARE FUNCTION TruncPathText(szDir$, nLimit%) AS STRING
DECLARE FUNCTION GetLongestDir(szDir$) AS STRING
DECLARE SUB InitShare
INIT:
hInst% = HinstFrame()
junk% = Ctl3dRegister(hInst%)
junk% = Ctl3dAutoSubclass(hInst%)
hWnd% = HwndFrame()
junk% = ShowWindow(hWnd%, SW_SHOWMAXIMIZED)
CUIDLL$ = "mscuistf.dll" ''//custom user interface dll
HELPPROC$ = "FHelpDlgProc" ''//Help dialog procedure
SetBitmap CUIDLL$, LOGO
SetTitle " Puzzle - Instalacja "
''// sprawdzenie wersji Windows (drugiego numeru - x.10)
V% = GetWindowsMinorVersion()
IF V%<10 THEN
sz$ = UIStartDlg(CUIDLL$, WINDOWS30, "FInfoDlgProc", APPHELP, HELPPROC$)
IF sz$ = "EXIT" THEN
UIPop 1
END
END IF
END IF
''// sprawdzenie wersji jΩzykowej
junk% = GetFileLang(MakePath(GetWindowsSysDir(),"user.exe"))
IF NOT (junk%=POLSKI) THEN
BADLANGUAGE$ = "Pakiet Puzzle zaprojektowano dla polskiej" + CHR$(13)
BADLANGUAGE$ = BADLANGUAGE$ + "wersji Windows." + CHR$(13) + CHR$(13)
BADLANGUAGE$ = BADLANGUAGE$ + "Aktualnie zainstalowana jest inna wersja." + CHR$(13) + CHR$(13)
BADLANGUAGE$ = BADLANGUAGE$ + "Radzimy dokonaµ zmiany wersji aby unikn╣µ" + CHR$(13)
BADLANGUAGE$ = BADLANGUAGE$ + "trudno£ci w u┐ytkowaniu programu."
jun% = DoMsgBox(BADLANGUAGE$,"Komunikat",MB_OK)
END IF
WORKPATH$ = GetSymbolValue("STF_CWDDIR")
szInf$ = GetSymbolValue("STF_SRCINFPATH")
IF szInf$ = "" THEN
szInf$ = GetSymbolValue("STF_CWDDIR") + "TAX.INF"
END IF
ReadInfFile szInf$
SetHelpName(GetSymbolValue("STF_CWDDIR")+"SETUP.HLP")
''//CustInst list symbols
CHECKSTATES$ = "CheckItemsState"
STATUSTEXT$ = "StatusItemsText"
DRIVETEXT$ = "DriveStatusText"
CONFIRMTEXT$ = "ConfirmTextIn"
OPTGREYED$ = "OptionsGreyed"
''//Disk cost list symbols
TAXPRONEEDS$ = "TaxProNeeds"
BAZANEEDS$ = "BazaNeeds"
ADMINNEEDS$ = "AdminNeeds"
HASLONEEDS$ = "HasloNeeds"
BACKUPNEEDS$ = "BackupNeeds"
FORMULNEEDS$ = "FormulNeeds"
POMOC1NEEDS$ = "Pomoc1Needs"
FAKTURANEEDS$ = "FakturaNeeds"
IMPORTNEEDS$ = "ImportNeeds"
EXTRACOSTS$ = "ExtraCosts"
FINALCOSTS$ = "FinalCosts"
FINALNEEDEDS$ = "FinalNeededs"
AdminInCopyList% = 0
WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
FOR i% = 1 TO CHECKLIMIT STEP 1
AddListItem STATUSTEXT$, ""
NEXT i%
FOR i% = 1 TO 13 STEP 1
AddListItem DRIVETEXT$, ""
NEXT i%
FOR i% = 1 TO CHECKLIMIT STEP 1
AddListItem CHECKSTATES$, "ON"
NEXT i%
FOR i% = 1 TO 12 STEP 1
AddListItem CONFIRMTEXT$, ""
NEXT i%
FOR i% = 1 TO 26 STEP 1
AddListItem EXTRACOSTS$, "0"
NEXT i%
''// Pierwsza instalacja
sz$ = UIStartDlg(CUIDLL$, SEARCH_COMP, "FCenterDlgProc", APPHELP, HELPPROC$)
CursorSave% = ShowWaitCursor()
MAINPATH$ = WINDRIVE$ + ":\PUZZLE"
DBLINKPATH$ = ""
DBDESTPATH$ = WINDRIVE$ + ":\PUZZLEDB"
DBOPT$ = DBOPT_New
GetPathsFromIniFile
''// gdy w domy£lnym katalogu baza ju┐ istnieje
IF DoesFileExist(MakePath(DBDESTPATH$, DBNAME$), femExist)=1 THEN
DBLINKPATH$ = DBDESTPATH$
DBDESTPATH$ = ""
DBOPT$ = DBOPT_Link
END IF
ReplaceListItem DRIVETEXT$, 10, TruncPathText(MAINPATH$,40)
''// wy£wietlanie aktualnie ustawionej opcji bazy
IF DBOPT$=DBOPT_New THEN
ReplaceListItem DRIVETEXT$, 11, DBDESTTEXT + CHR$(13) + TruncPathText(DBDESTPATH$,40)
ELSEIF DBOPT$=DBOPT_Link THEN
ReplaceListItem DRIVETEXT$, 11, DBLINKTEXT + CHR$(13) + TruncPathText(DBLINKPATH$,40)
END IF
RecalcAllPath
SetDriveStatus
RestoreCursor CursorSave%
UIPop 1
GOTO WELCOME
'$IFDEF DEBUG
i% = SetSizeCheckMode(scmOnIgnore) ''// could use scmOff; def = scmOnFatal
'$ENDIF ''//DEBUG
WELCOME:
sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc",APPHELP, HELPPROC$)
IF sz$ = "CONTINUE" THEN
UIPop 1
ELSE
GOSUB ASKQUIT
GOTO WELCOME
END IF
CUSTINST:
sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FTaxDlgProc", APPHELP, HELPPROC$)
IF sz$ = "CONTINUE" THEN
''// spr. czy bΩd╣ instalowane komponenty wymagaj╣ce po│╣czenia z baz╣
anyChecked% = 0
IF GetListItem(CHECKSTATES$, TAXPRO) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, ADMIN) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, HASLO) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, BACKUP) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, FAKTURA) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, IMPORT) = "ON" THEN
anyChecked% = 1
END IF
IF anyChecked% = 1 THEN
''// je£li bΩd╣, to sprawdƒ czy jest w│╣czona opcja bazy inna od DBOPT_None - powinna byµ
IF DBOPT$ = DBOPT_None THEN
junk% = DoMsgBox(DBNEEDEDTEXT$, "Komunikat", MB_OK + MB_ICONEXCLAMATION)
GOTO CUSTINST
END IF
ELSE
''// spr. czy w og≤le co£ ma byµ instalowane
otherChecked% = 0
IF GetListItem(CHECKSTATES$, FORMUL) = "ON" THEN
otherChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, POMOC1) = "ON" THEN
otherChecked% = 1
END IF
IF (otherChecked% = 0) AND (DBOPT$ = DBOPT_None) THEN
''// to jest przypadek gdy nic nie jest zaznaczone do instalowania
junk% = DoMsgBox(NOCHANGE, "Komunikat", MB_OK)
GOTO CUSTINST
END IF
END IF
UIPop 1
GOTO INSTALL
ELSEIF sz$ = "PATH" THEN
GOTO GETPATH
ELSEIF sz$ = "BTN1" THEN ''//przycisk 'Zmie± opcjΩ'
UIPop 1
GOTO DBOPTDLG
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
''// gdy zmiana stanu jednego z checkbox'≤w
SetDriveStatus
GOTO CUSTINST
ELSEIF sz$ = "REACTIVATE" THEN
SetDriveStatus
GOTO CUSTINST
ELSE
GOSUB ASKQUIT
GOTO CUSTINST
END IF
''//
TOOBIG:
''// zak│adam, ┐e mam ustawione FINALCOSTS$ i FINALNEEDEDS$
FOR i% = 1 TO 12 STEP 1
ReplaceListItem CONFIRMTEXT$, i%, ""
NEXT i%
itm% = 1
FOR i%=1 TO 26 STEP 1
''// wiem,┐e maksymalnie 3 z 26 dysk≤w
FNEEDEDS& = VAL(GetListItem(FINALNEEDEDS$,i%))
IF FNEEDEDS&>0 THEN
drive$ = CHR$(i% + ASC("A") -1)
FCOSTS& = VAL(GetListItem(FINALCOSTS$,i%))
free& = GetFreeSpaceForDrive(drive$)
ReplaceListItem CONFIRMTEXT$, itm% , drive$ + ":"
ReplaceListItem CONFIRMTEXT$, itm% +1, STR$(FCOSTS& / 1024) + " K"
ReplaceListItem CONFIRMTEXT$, itm% +2, STR$(free& / 1024) + " K"
ReplaceListItem CONFIRMTEXT$, itm% +3, STR$(FNEEDEDS& / 1024) + " K"
itm% = itm% + 4
END IF
NEXT i%
TOOBIG1:
sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FConfirmDlgProc", APPHELP, HELPPROC$)
IF sz$ = "BACK" THEN ''//OR sz$ = "REACTIVATE" THEN
UIPop 1
RecalcAllPath
SetDriveStatus
GOTO CUSTINST
ELSEIF sz$ = "EXIT" THEN
GOSUB ASKQUIT
GOTO TOOBIG1
ELSE
GOTO TOOBIG1
END IF
''//
''// Pierwsza instalacja
''//
INSTALL:
ClearCopyList
FOR i%=2 to CHECKLIMIT STEP 1
IF GetListItem(CHECKSTATES$,i%)="ON" THEN
AddOptFilesToCopyList i%
END IF
NEXT i%
IF DBOPT$=DBOPT_New THEN
AddOptFilesToCopyList DBASE
END IF
AddExtraFilesToCopyList
Need& = GetCopyListCost("",FINALCOSTS$,FINALNEEDEDS$)
IF Need& > 0 THEN
GOTO TOOBIG
END IF
AddToBillboardList "mscuistf.dll", IDD_BILLB1, "FModelessDlgProc", 1
AddToBillboardList "mscuistf.dll", IDD_BILLB2, "FModelessDlgProc", 1
AddToBillboardList "mscuistf.dll", IDD_BILLB3, "FModelessDlgProc", 1
SetCopyGaugePosition 160,197
''//junk% = Ctl3dUnAutoSubclass(hInst%)
CopyFilesInCopyList
''//junk% = Ctl3dAutoSubclass(hInst%)
IF NOT (DBOPT$=DBOPT_None) THEN
CursorSave% = ShowWaitCursor()
res% = RegisterDAO()
RestoreCursor CursorSave%
IF res% = 0 THEN
i% = DoMsgBox("Nie uda│o siΩ zainstalowaµ obs│ugi bazy danych", "Komunikat", MB_ICONEXCLAMATION + MB_OK)
ERR = 1
GOTO QUIT
END IF
END IF
IF (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion() < 12) THEN
InitShare
END IF
FOR i% = 2 TO CHECKLIMIT STEP 1
IF GetListItem(CHECKSTATES$, i%) = "ON" THEN
GOTO GRUPA
END IF
NEXT i%
GOTO QUIT
GRUPA:
WriteToTaxIniFile
CreateProgmanGroup GROUPNAME, "", cmoNone
ShowProgmanGroup GROUPNAME, 1, cmoNone
IF GetListItem(CHECKSTATES$, TAXPRO) = "ON" THEN
CreateProgmanItem GROUPNAME, "Modu│ G│≤wny '98", MakePath(MAINPATH$,"TAX98B.EXE"), "", cmoOverwrite
CreateProgmanItem GROUPNAME, "Pytania i Odpowiedzi", MakePath(MAINPATH$,"QA.HLP"), "", cmoOverwrite
END IF
AdminPath$ = MakePath(MAINPATH$, "SECURADM.EXE")
IF GetListItem(CHECKSTATES$, ADMIN) = "ON" THEN
CreateProgmanItem GROUPNAME, "Administrator DostΩpu", AdminPath$, "", cmoOverwrite
END IF
IF GetListItem(CHECKSTATES$, HASLO) = "ON" THEN
CreateProgmanItem GROUPNAME, "Zmiana Has│a", AdminPath$+" /CHPWD", AdminPath$+",1", cmoOverwrite
END IF
IF GetListItem(CHECKSTATES$, BACKUP) = "ON" THEN
CreateProgmanItem GROUPNAME, "Archiwizator", MakePath(MAINPATH$,"TAXBKP.EXE"), "", cmoOverwrite
END IF
IF GetListItem(CHECKSTATES$, FORMUL) = "ON" THEN
CreateProgmanItem GROUPNAME, "Edytor Formularzy", MakePath(MAINPATH$,"FORMAKER.EXE"), "", cmoOverwrite
END IF
IF GetListItem(CHECKSTATES$, POMOC1) = "ON" THEN
CreateProgmanItem GROUPNAME, "Pomoc Prawna 98", MakePath(MAINPATH$,"PPS.EXE PRAWO98.HLP"), "", cmoOverwrite
END IF
IF GetListItem(CHECKSTATES$, FAKTURA) = "ON" THEN
CreateProgmanItem GROUPNAME, "Faktura", MakePath(MAINPATH$,"FAKTURA.EXE"), "", cmoOverwrite
END IF
IF GetListItem(CHECKSTATES$, IMPORT) = "ON" THEN
CreateProgmanItem GROUPNAME, "Import danych z TAX-PRO DOS", MakePath(MAINPATH$,"DI.EXE"), "", cmoOverwrite
END IF
GOTO QUIT
''//***************************************************************************
''//***************************************************************************
QUIT:
ON ERROR GOTO ERRQUIT
IF ERR = 0 THEN
dlg% = EXITSUCCESS
ELSEIF ERR = STFQUIT THEN
dlg% = EXITQUIT
ELSE
dlg% = EXITFAILURE
END IF
QUITL1:
sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
IF sz$ = "REACTIVATE" THEN
GOTO QUITL1
END IF
UIPop 1
junk% = Ctl3dUnregister(hInst%)
''// wy£wietl README.TXT je£li jest
MsgFile$ = MakePath(GetSymbolValue("STF_SRCDIR"), "README.TXT")
IF DoesFileExist(MsgFile$, femExist) = 1 THEN
jun% = WinExec("NOTEPAD.EXE " + MsgFile$, 1)
END IF
END
ERRQUIT:
i% = DoMsgBox("Setup sources were corrupted", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
junk% = Ctl3dUnregister(hInst%)
END
''/*************************************************************************
'' Zmiana katalogu MAINPATH$
''**************************************************************************/
GETPATH:
PATH$ = MAINPATH$
GETPATHL1:
szExistDir$ = GetLongestDir(PATH$)
SetSymbolValue "EditTextIn", PATH$
res% = ChangeDirDlg(hWnd%,szExistDir$)
IF (res% = 1) THEN
PATH$ = GetSymbolValue("EditTextOut")
''//Validate new path.
IF IsDirWritable(PATH$) = 0 THEN
junk% = DoMsgBox(BADPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
GOTO GETPATHL1
END IF
ReplaceListItem DRIVETEXT$, 10, TruncPathText(PATH$,40)
''//Recalc if path changed.
IF (PATH$ <> MAINPATH$) AND (PATH$ <> MAINPATH$+"\") AND (PATH$+"\" <> MAINPATH$) THEN
MAINPATH$ = PATH$
RecalcAllPath
SetDriveStatus
END IF
PATH$ = ""
GOTO CUSTINST
ELSE
GOTO CUSTINST
END IF
''/*************************************************************************
'' Wyb≤r opcji bazy
''**************************************************************************/
DBOPTDLG:
NewDBOPT$ = DBOPT$
NewDBDESTPATH$ = DBDESTPATH$
NewDBLINKPATH$ = DBLINKPATH$
SetSymbolValue "RadioDefault", NewDBOPT$
SetSymbolValue "ButtonChecked", NewDBOPT$
''// gdy DBOPT$ = DBOPT_None
SetSymbolValue "DBPath"," "
IF DBOPT$ = DBOPT_New THEN
SetSymbolValue "DBPath", TruncPathText(NewDBDESTPATH$,30)
ELSEIF DBOPT$ = DBOPT_Link THEN
SetSymbolValue "DBPath", TruncPathText(NewDBLINKPATH$,30)
END IF
DATABASE:
sz$ = UIStartDlg(CUIDLL$, DB_OPTIONS, "FBaseOptDlgProc", APPHELP, HELPPROC$)
IF sz$ = "CONTINUE" THEN
''// wszystko jest na pewno poprawne dlatego od razu zapamiΩtujΩ
''// nowe warto£ci we w│a£ciwych zmiennych
DBOPT$ = GetSymbolValue("ButtonChecked")
DBDESTPATH$ = NewDBDESTPATH$
DBLINKPATH$ = NewDBLINKPATH$
IF DBOPT$ = DBOPT_New THEN
ReplaceListItem DRIVETEXT$, 11, DBDESTTEXT + CHR$(13) + TruncPathText(DBDESTPATH$,40)
ELSEIF DBOPT$ = DBOPT_Link THEN
ReplaceListItem DRIVETEXT$, 11, DBLINKTEXT + CHR$(13) + TruncPathText(DBLINKPATH$,40)
ELSE
ReplaceListItem DRIVETEXT$, 11, DBNONETEXT
END IF
UIPop 1
RecalcPath DBASE
SetDriveStatus
GOTO CUSTINST
ELSEIF sz$ = "PATH" THEN
GOTO GETDBPATH
ELSEIF sz$ = "RAD1" THEN
SetSymbolValue "DBPath", TruncPathText(NewDBDESTPATH$,30)
NewDBOPT$ = GetSymbolValue("ButtonChecked")
SetSymbolValue "RadioDefault", NewDBOPT$
GOTO DATABASE
ELSEIF sz$ = "RAD2" THEN
SetSymbolValue "DBPath", TruncPathText(NewDBLINKPATH$,30)
NewDBOPT$ = GetSymbolValue("ButtonChecked")
SetSymbolValue "RadioDefault", NewDBOPT$
GOTO DATABASE
ELSEIF sz$ = "RAD3" THEN
SetSymbolValue "DBPath", " "
NewDBOPT$ = GetSymbolValue("ButtonChecked")
SetSymbolValue "RadioDefault", NewDBOPT$
GOTO DATABASE
ELSEIF sz$ = "REACTIVATE" THEN
GOTO DATABASE
ELSE
UIPop 1
GOTO CUSTINST
END IF
''/*************************************************************************
'' Zmiana katalogu bazy
''**************************************************************************/
GETDBPATH:
IF NewDBOPT$ = DBOPT_New THEN
PATH$ = NewDBDESTPATH$
ELSE
PATH$ = NewDBLINKPATH$
END IF
GETDBPATHL1:
szExistDir$ = GetLongestDir(PATH$)
SetSymbolValue "EditTextIn", PATH$
res% = ChangeDirDlg(hWnd%,szExistDir$)
IF (res% = 1) THEN
PATH$ = GetSymbolValue("EditTextOut")
IF NewDBOPT$ = DBOPT_New THEN
''//Validate new path.
IF IsDirWritable(PATH$) = 0 THEN
junk% = DoMsgBox(BADPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
GOTO GETDBPATHL1
END IF
IF DoesFileExist(MakePath(PATH$,DBNAME$), femExist)=1 THEN
junk% = DoMsgBox(BADDBDESTPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
GOTO GETDBPATHL1
END IF
SetSymbolValue "DBPath", TruncPathText(PATH$,30)
NewDBDESTPATH$ = PATH$
ELSE ''//NewDBOPT$ = DBOPT_Link
''//Validate new path.
IF IsDirWritable(PATH$) = 0 THEN
junk% = DoMsgBox(BADPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
GOTO GETDBPATHL1
END IF
IF DoesFileExist(MakePath(PATH$,DBNAME$), femExist)=0 THEN
junk% = DoMsgBox(BADDBLINKPATHTEXT,"Komunikat",MB_OK + MB_ICONEXCLAMATION)
GOTO GETDBPATHL1
END IF
SetSymbolValue "DBPath", TruncPathText(PATH$,30)
NewDBLINKPATH$ = PATH$
END IF
PATH$ = ""
GOTO DATABASE
ELSE
GOTO DATABASE
END IF
ASKQUIT:
sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
IF sz$ = "EXIT" THEN
UIPopAll
ERROR STFQUIT
ELSEIF sz$ = "REACTIVATE" THEN
GOTO ASKQUIT
ELSE
UIPop 1
END IF
RETURN
''/*
'** Purpose:
'** Adds the specified option files to the copy list.
'** Arguments:
'** ftype% - type of files to add, one of the following:
'** DBASE, TAXPRO ...
'** Returns:
'** none.
'*************************************************************************/
SUB AddOptFilesToCopyList (ftype%) STATIC
SrcDir$ = GetSymbolValue("STF_SRCDIR")
SELECT CASE ftype%
CASE TAXPRO
AddSectionFilesToCopyList "TaxPro", SrcDir$, MAINPATH$
CASE DBASE
IF DBOPT$ = DBOPT_New THEN
IF DBDESTPATH$ <> "" THEN
AddSectionFilesToCopyList "Baza", SrcDir$, DBDESTPATH$
END IF
END IF
CASE ADMIN,HASLO
IF AdminInCopyList% = 0 THEN
AddSectionFilesToCopyList "Admin", SrcDir$, MAINPATH$
AdminInCopyList% = 1
END IF
CASE BACKUP
AddSectionFilesToCopyList "Backup", SrcDir$, MAINPATH$
CASE FORMUL
AddSectionFilesToCopyList "Formul", SrcDir$, MAINPATH$
CASE POMOC1
AddSectionKeyFileToCopyList "Help", "Pomoc1", SrcDir$, MAINPATH$
AddSectionKeyFileToCopyList "Help", "Pomoc1RUN", SrcDir$, MAINPATH$
CASE FAKTURA
AddSectionFilesToCopyList "Faktura", SrcDir$, MAINPATH$
CASE IMPORT
AddSectionFilesToCopyList "Import", SrcDir$, MAINPATH$
END SELECT
SrcDir$ = ""
END SUB
''/*
'** Purpose:
'** Recalculates disk space for the given option files and sets
'** the status info symbol "StatusItemsText".
'**
'** - wylicza bezwzglΩdne (niezale┐nie od stanu ON/OFF) koszty
'** instalacji dla podanego checkboxa; zapamiΩtuje je w odpowiedniej
'** li£cie "xxxNeeds" (xxxNEEDS$)
'** Arguments:
'** ftype% - type of files to add, one of the following:
'** DBASE, TAXPRO ...
'** Returns:
'** none.
'*************************************************************************/
SUB RecalcOptFiles (ftype%) STATIC
CleanCopyList
AddOptFilesToCopyList ftype%
IF ftype% = TAXPRO THEN
ListSym$ = TAXPRONEEDS$
ELSEIF ftype% = DBASE THEN
ListSym$ = BAZANEEDS$
ELSEIF ftype% = ADMIN THEN
ListSym$ = ADMINNEEDS$
ELSEIF ftype% = HASLO THEN
ListSym$ = HASLONEEDS$
ELSEIF ftype% = BACKUP THEN
ListSym$ = BACKUPNEEDS$
ELSEIF ftype% = FORMUL THEN
ListSym$ = FORMULNEEDS$
ELSEIF ftype% = POMOC1 THEN
ListSym$ = POMOC1NEEDS$
ELSEIF ftype% = FAKTURA THEN
ListSym$ = FAKTURANEEDS$
ELSEIF ftype% = IMPORT THEN
ListSym$ = IMPORTNEEDS$
END IF
StillNeed& = GetCopyListCost("", ListSym$, "")
cost& = 0
FOR i% = 1 TO 26 STEP 1
cost& = cost& + VAL(GetListItem(ListSym$, i%))
NEXT i%
ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
ListSym$ = ""
END SUB
''/*
'** Purpose:
'** - wylicza bezwzglΩdne (niezale┐nie od stanu ON/OFF) koszty
'** instalacji dla ka┐dego checkboxa; zapamiΩtuje je w odpowiednich
'** listach "xxxNeeds" (xxxNEEDS$); ustawia elementy listy
'** "StatusItemText"
'** - wylicza koszt instalacji dodatkowych komponent≤w (Extra)
'** zapamiΩtuje w "ExtraCosts" (EXTRACOSTS$)
'************************************************************************/
SUB RecalcAllPath STATIC
CursorSave% = ShowWaitCursor()
RecalcOptFiles TAXPRO
RecalcOptFiles DBASE
RecalcOptFiles ADMIN
RecalcOptFiles HASLO
RecalcOptFiles BACKUP
RecalcOptFiles FORMUL
RecalcOptFiles POMOC1
RecalcOptFiles FAKTURA
RecalcOptFiles IMPORT
RecalcExtraCost
RestoreCursor CursorSave%
END SUB
''/*
''** Purpose:
''** - to samo co RecalcAllPath tyle,┐e dla jednego checkboxa
''*************************************************************************/
SUB RecalcPath (ftype%) STATIC
CursorSave% = ShowWaitCursor()
RecalcOptFiles ftype%
RecalcExtraCost
RestoreCursor CursorSave%
END SUB
''/*
'** Je£li jedna z opcji w dialogu CUSTINST lub AD_CUSTINST
'** (TAXPRO, ADMIN, HASLO, BACKUP, FORMUL, FAKTURA lub IMPORT) jest zaznaczona
'** (z wy│╣czeniem bazy) to uwzglΩdniane s╣ koszty instalacji
'** plik≤w z sekcji [Extra], [MFC Files] i [OLE]
'**
'*************************************************************************/
SUB AddExtraFilesToCopyList STATIC
IF ((DBOPT$ = DBOPT_New) AND (DBDESTPATH$<>"")) OR (DBOPT$ = DBOPT_Link) THEN
AddSectionFilesToCopyList "DAO", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
END IF
anyChecked% = 0
IF GetListItem(CHECKSTATES$, TAXPRO) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, ADMIN) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, HASLO) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, BACKUP) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, FORMUL) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHESKSTATES$, FAKTURA) = "ON" THEN
anyChecked% = 1
ELSEIF GetListItem(CHECKSTATES$, IMPORT) = "ON" THEN
anyChecked% = 1
END IF
IF anyChecked% THEN
AddSectionFilesToCopyList "Extra", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
AddSectionFilesToCopyList "MFC Files", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
AddSectionFilesToCopyList "OLE", GetSymbolValue("STF_SRCDIR"), GetWindowsSysDir()
END IF
FOR i% = 1 TO 26 STEP 1
ReplaceListItem EXTRACOSTS$,i%,"0"
NEXT i%
END SUB
''/*
'** Obliczenie koszt≤w dodatkowych instalacji (lista EXTRACOSTS$), np.
'** - instalacji bibliotek w katalogu systemowym Windows
'**
'*******************************************************************************/
SUB RecalcExtraCost STATIC
CleanCopyList
AddExtraFilesToCopyList
StillNeed& = GetCopyListCost("", EXTRACOSTS$, "")
''//EXTRACOST$ wykorzystywana przez Calculate() do wyliczenia koszt≤w ca│o£ciowych
END SUB
''/*
'** Purpose:
'** Sets drive status info.
'**
'*************************************************************************/
SUB SetDriveStatus STATIC
IF DBOPT$ = DBOPT_New AND DBDESTPATH$ <> "" THEN
DBDRIVE$ = MID$(DBDESTPATH$, 1, 1)
nDB% = ASC(ucase$(DBDRIVE$)) - ASC("A") + 1
ELSE
DBDRIVE$ = ""
nDB% = 0
END IF
EXEDRIVE$ = MID$(MAINPATH$, 1, 1)
nEXE% = ASC(ucase$(EXEDRIVE$)) - ASC("A") + 1
nWIN% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
ndrive% = 0
ndrive% = GetMin(ndrive%, nDB, nEXE, nWIN)
''// uaktualnienie stanu dysk≤w
IF ndrive% <> 0 THEN
Calculate ndrive%, 1, 2, 3
ndrive% = GetMin(ndrive%, nDB, nEXE, nWIN)
IF ndrive% <> 0 THEN
Calculate ndrive%, 4, 5, 6
ndrive% = GetMin(ndrive%, nDB, nEXE, nWIN)
IF ndrive% <> 0 THEN
Calculate ndrive%, 7, 8, 9
ELSE
ClearText 7,8,9
END IF
ELSE
ClearText 4,5,6
END IF
ELSE
ClearText 1,2,3
END IF
END SUB
''/*
'** Purpose:
'** Appends a file name to the end of a directory path,
'** inserting a backslash character as needed.
'** Arguments:
'** szDir$ - full directory path (with optional ending "\")
'** szFile$ - filename to append to directory
'** Returns:
'** Resulting fully qualified path name.
'*************************************************************************/
FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
IF szDir$ = "" THEN
MakePath = szFile$
ELSEIF szFile$ = "" THEN
MakePath = szDir$
ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
MakePath = szDir$ + szFile$
ELSE
MakePath = szDir$ + "\" + szFile$
END IF
END FUNCTION
''/***************************************************************
'**
'** Stworzenie pliku INIFILE$ wraz z odpowiednimi sekcjami
'**
'*****************************************************************/
SUB WriteToTaxIniFile STATIC
ini$ = MakePath(GetWindowsDir(), INIFILE$)
IF DBOPT$ = DBOPT_New THEN
CreateIniKeyValue ini$, "dir", "database", DBDESTPATH$ , cmoOverwrite
ELSEIF DBOPT$ = DBOPT_Link THEN
CreateIniKeyValue ini$, "dir", "database", DBLINKPATH$ , cmoOverwrite
END IF
CreateIniKeyValue ini$, "dir", "exe", MAINPATH$ , cmoOverwrite
END SUB
''/*
'** Dzia│anie:
'** Wyznaczenie najmniejszej liczby spo£r≤d podanych
'** z uwzglΩdnieniem warto£ci progowej.
'** Argumenty:
'** min% - warto£µ progowa (wyznaczana liczba musi byµ wiΩksza
'** od warto£ci progowej)
'** n1%,n2%,n3% - por≤wnywane liczby
'** Wynik:
'** 0 - gdy nie ma liczby wiΩkszej od warto£ci progowej
'** i - najmniejsza liczba wiΩksza od warto£ci progowej
'**
'*************************************************************************/
FUNCTION GetMin(min%, n1%, n2%, n3%) STATIC AS INTEGER
ret% = 0
IF n1%>min% THEN
ret% = n1%
IF n2%>min% AND n2%<ret% THEN
ret% = n2%
END IF
IF n3%>min% AND n3%<ret% THEN
ret% = n3%
END IF
ELSEIF n2%>min% THEN
ret% = n2%
IF n3%>min% AND n3%<ret% THEN
ret% = n3%
END IF
ELSEIF n3%>min% THEN
ret% = n3%
END IF
GetMin = ret%
END FUNCTION
''/*
'** Dzia│anie:
'** Wyliczenie koszt≤w instalacji dla podanego dysku
'** i przypisanie wskazanym elementom z listy DRIVETEXT$
'** odpowiednich warto£ci.
'** Argumenty:
'** ndrive% - numer dysku (1 => "A", 2 => "B", itd)
'** idc1% - nr elementy listy DRIVETEXT$ <- oznaczenie literowe dysku (np. "A")
'** idc2% - nr elementy listy DRIVETEXT$ <- koszt instalacji (w KB)
'** idc3% - nr elementy listy DRIVETEXT$ <- wolna przestrze± na dysku (w KB)
'**
'*************************************************************************/
SUB Calculate(ndrive%, idc1%, idc2%, idc3%) STATIC
cost& = 0
IF DBOPT$=DBOPT_New THEN
cost& = cost& + VAL(GetListItem(BAZANEEDS$, ndrive%))
END IF
IF GetListItem(CHECKSTATES$, TAXPRO)="ON" THEN
cost& = cost& + VAL(GetListItem(TAXPRONEEDS$, ndrive%))
END IF
''// ADMIN i HASLO to ten sam program
IF (GetListItem(CHECKSTATES$, ADMIN)="ON") OR (GetListItem(CHECKSTATES$, HASLO)="ON") THEN
cost& = cost& + VAL(GetListItem(ADMINNEEDS$, ndrive%))
END IF
IF GetListItem(CHECKSTATES$, BACKUP)="ON" THEN
cost& = cost& + VAL(GetListItem(BACKUPNEEDS$, ndrive%))
END IF
IF GetListItem(CHECKSTATES$, FORMUL)="ON" THEN
cost& = cost& + VAL(GetListItem(FORMULNEEDS$, ndrive%))
END IF
IF GetListItem(CHECKSTATES$, POMOC1)="ON" THEN
cost& = cost& + VAL(GetListItem(POMOC1NEEDS$, ndrive%))
END IF
IF GetListItem(CHECKSTATES$, FAKTURA)="ON" THEN
cost& = cost& + VAL(GetListItem(FAKTURANEEDS$, ndrive%))
END IF
IF GetListItem(CHECKSTATES$, IMPORT)="ON" THEN
cost& = cost& + VAL(GetListItem(IMPORTNEEDS$, ndrive%))
END IF
cost& = cost& + VAL(GetListItem(EXTRACOSTS$, ndrive%))
drive$ = CHR$(ndrive% + ASC("A") - 1)
free& = GetFreeSpaceForDrive(drive$)
ReplaceListItem DRIVETEXT$, idc1%, drive$ + ":"
ReplaceListItem DRIVETEXT$, idc2%, STR$(cost& / 1024) + " K"
ReplaceListItem DRIVETEXT$, idc3%, STR$(free& / 1024) + " K"
END SUB
''/*
'** Dzia│anie:
'** Przypisanie ci╣gu pustego wskazanym elementom listy DRIVETEXT$
'**
'*************************************************************************/
SUB ClearText(idc1%, idc2%, idc3%) STATIC
ReplaceListItem DRIVETEXT$, idc1%, ""
ReplaceListItem DRIVETEXT$, idc2%, ""
ReplaceListItem DRIVETEXT$, idc3%, ""
END SUB
''/*************************************************************************/
SUB CleanCopyList STATIC
AdminInCopyList% = 0
ClearCopyList
END SUB
''/*
'** Dzia│anie:
'** Sprawdza czy istnieje plik INIFILE$ oraz czy istniej╣ podane
'** w nim katalogi: EXEdir i dir. Ustawia warto£µ zmiennej NEXTINST%
'** Wynik:
'** zwraca warto£µ zmiennej NEXTINST%
'**
'***************************************************************************/
SUB GetPathsFromIniFile STATIC
szFILE$ = MakePath(GetWindowsDir(), INIFILE$)
IF DoesFileExist(szFILE$,femExists) THEN
IF DoesIniKeyExist(szFILE$,"dir","database") THEN
dir$ = GetIniKeyString(szFILE$,"dir","database")
IF dir$ <> "" THEN
DBOPT$ = DBOPT_New
DBDESTPATH$ = dir$
END IF
END IF
IF DoesIniKeyExist(szFILE$,"dir","exe") THEN
dir$ = GetIniKeyString(szFILE$,"dir","exe")
IF dir$ <> "" THEN
MAINPATH$ = dir$
END IF
END IF
END IF
END SUB
''/********************************************************************
'' Przepisanie listy SOURCE$ do listy TARGET$
'' - musz╣ mieµ tak╣ sam╣ liczbΩ element≤w
''********************************************************************/
SUB CopyLists(TARGET$, SOURCE$) STATIC
limit% = GetListLength(TARGET$)
FOR i%=1 TO limit% STEP 1
ReplaceListItem TARGET$,i%,GetListItem(SOURCE$,i%)
NEXT i%
END SUB
FUNCTION TruncPathText( szDir$, nLimit% ) STATIC AS STRING
IF LEN(szDir$) > nLimit% THEN
TruncPathText = MID$(szDir$, 1, nLimit%)+"..."
ELSE
TruncPathText = szDir$
END IF
END FUNCTION
FUNCTION GetLongestDir(szDir$) STATIC AS STRING
sz$ = szDir$
posOK% = 1
WHILE (posOK%<>0) AND (DoesDirExist(sz$)=0)
pos% = 1
posOK% = 0
WHILE (pos%<>0)
pos% = INSTR(pos%+1,sz$,"\")
IF (pos%>0) THEN
posOK% = pos%
END IF
WEND
IF (posOK%<>0) THEN
sz$ = MID$(sz$,1,posOK%-1)
END IF
WEND
IF (posOK<>0) THEN
IF LEN(sz$) = 2 THEN
sz$ = sz$ + "\"
END IF
GetLongestDir = sz$
ELSE
GetLongestDir = ""
END IF
END FUNCTION
''/*
'** odszukuje plik SHARE.EXE, dopisuje linie inicjalizacyjn╣
'** do pliku AUTOEXEC.BAT jako pierwsz╣, uprzednio zachowuj╣c
'** jego kopiΩ w AUTOEXEC.TAX
'**
'*******************************************************************/
SUB InitShare STATIC
CursorSave% = ShowWaitCursor()
bOK% = 1
SharePath$ = FindFileInTree("SHARE.EXE","C:\")
IF (SharePath$="") THEN
bOK% = 0
END IF
IF (bOK% = 1) THEN
szLine$ = SharePath$ + " /L:500 /F:5100" + CHR$(10)
bOK% = 0
TempFile$ = WORKPATH$ + "TEMP.BAT"
AutoPath$ = "C:\AUTOEXEC.BAT"
res% = DoesFileExist(AutoPath$,femReadWrite)
IF (res% = 1) THEN
res% = MakeFile(TempFile$, szLine$)
IF (res% = 1) THEN
CopyFile AutoPath$, TempFile$, cmoNone, 1
RenameFile AutoPath$,"AUTOEXEC.TAX"
CopyFile TempFile$, AutoPath$, cmoNone, 0
RemoveFile TempFile$, cmoNone
res% = DoesFileExist(AutoPath$,femExists)
IF (res% = 1) THEN
bOK% = 1
ELSE
AutoTax$ = MID$(AutoPath$,1,LEN(AutoPath$)-3) + "TAX"
RenameFile AutoTax$,"AUTOEXEC.BAT"
bOK% = 0
END IF
END IF
END IF
END IF
RestoreCursor CursorSave%
IF (bOK% = 0) THEN
NOSHARE$ = "Program instalacyjny nie znalaz│ pliku" + CHR$(13)
NOSHARE$ = NOSHARE$ + "SHARE.EXE w Twoim systemie!" + CHR$(13) + CHR$(13)
NOSHARE$ = NOSHARE$ + "Zainstaluj go z dyskietki systemowej" + CHR$(13)
NOSHARE$ = NOSHARE$ + "i uzupe│nij plik wsadowy AUTOEXEC.BAT" + CHR$(13)
NOSHARE$ = NOSHARE$ + "lini╣:" + CHR$(13) + CHR$(13)
NOSHARE$ = NOSHARE$ + " SHARE.EXE /L:500 /F:5100"
junk% = DoMsgBox(NOSHARE$,"Komunikat",MB_OK + MB_ICONASTERISK)
END IF
END SUB