home *** CD-ROM | disk | FTP | other *** search
/ Computer Buyer 1995 December / buyer-1295.iso / superof / superoff.mst < prev    next >
Text File  |  1993-01-10  |  27KB  |  1,004 lines

  1. '**************************************************************************
  2. '*                       MSSetup For SuperOffice Norsk
  3. '**************************************************************************
  4.  
  5. 'DEFINE DEBUG
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9. '$INCLUDE 'msshared.inc'
  10.  
  11. ''Dialog ID's
  12. CONST ASKQUIT      = 200
  13. CONST DESTPATH     = 300
  14. CONST EXITFAILURE  = 400
  15. CONST EXITQUIT     = 600
  16. CONST EXITSUCCESS  = 700
  17. CONST APPHELP       = 900
  18. CONST CUSTINST     = 6200
  19. CONST TOOBIG       = 6300
  20. CONST BADPATH       = 6400
  21.  
  22. CONST ASKTYPE       = 9000
  23. CONST ASKDATAPATH  = 9100
  24. CONST CUSTUPGRADE  = 9200
  25. CONST ASKOVERWRITE = 9300
  26.  
  27. CONST ASKWORKSTN   = 9500
  28. CONST TRAVELINST   = 9600
  29.  
  30. ''Bitmap ID
  31. CONST LOGO         = 1
  32.  
  33. ''File Types
  34. CONST DATAFILES       = 1
  35.  
  36. GLOBAL PROGDEST$    ''Default destination directory.
  37. GLOBAL ARCDEST$     ''Default data destination directory.
  38. GLOBAL PROG$        '' PROG
  39. GLOBAL DATAD$        '' DATA
  40. GLOBAL TEMPLATED$   '' TEMPLATE
  41. GLOBAL WINDRIVE$    ''Windows drive letter.
  42. GLOBAL OPT1OPT$     ''Option selection from OptFiles1 option dialog.
  43.  
  44. GLOBAL SrcDir$
  45. GLOBAL ListSym$
  46. GLOBAL NetDir$
  47.  
  48. GLOBAL DBLIBTYPE$   ''NETWORK or SINGLE selects CTPWIN.DLL type
  49.  
  50. ''CustInst list symbol names
  51. GLOBAL APPNEEDS$    ''Option list costs per drive
  52. GLOBAL OPT1NEEDS$
  53. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  54. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  55.  
  56. ''Dialog list symbol names
  57. GLOBAL CHECKSTATES$
  58. GLOBAL STATUSTEXT$
  59. GLOBAL DRIVETEXT$
  60. GLOBAL WORDLIST$
  61. GLOBAL SPREADLIST$
  62. GLOBAL FullInst$
  63.  
  64. GLOBAL szInf$
  65. GLOBAL APP$
  66. GLOBAL WSAPP$
  67. GLOBAL SSAPP$
  68. GLOBAL LISTSTRING$
  69.  
  70. DECLARE SUB ErrorMsg (errnum%)
  71. DECLARE SUB WriteInstallIni
  72. DECLARE SUB BuildCopyList
  73. DECLARE SUB RecalcFiles (ftype%)
  74. DECLARE SUB RecalcPath
  75. DECLARE SUB SetDriveStatus
  76. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  77.  
  78.  
  79. INIT:
  80.  
  81.     IF GetWindowsMajorVersion() < 3 THEN
  82.     '' Cannot run on versions previous to 3.0
  83.     ErrorMsg(1)
  84.     END
  85.     END IF
  86.     CUIDLL$ = "mscuistf.dll"            ''custom user interface dll
  87.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  88.  
  89.     SetBitmap CUIDLL$, LOGO
  90.     SetTitle "SuperOffice Installation"
  91.  
  92.     ''CustInst list symbols
  93.     CHECKSTATES$ = "CheckItemsState"
  94.     STATUSTEXT$  = "StatusItemsText"
  95.     DRIVETEXT$     = "DriveStatusText"
  96.     WORDLIST$     = "WordProcessor"
  97.     SPREADLIST$  = "Spreadsheet"
  98.  
  99.     FOR i% = 1 TO 3 STEP 1
  100.         AddListItem STATUSTEXT$, ""
  101.     NEXT i%
  102.     AddListItem CHECKSTATES$, "ON"
  103.  
  104.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  105.  
  106.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  107.     IF szInf$ = "" THEN
  108.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SUPEROFF.INF"
  109.     END IF
  110.  
  111.     ReadInfFile szInf$
  112.  
  113.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  114.     PROGDEST$ = WINDRIVE$ + ":\SUPEROFF"
  115.     ARCDEST$ = WINDRIVE$ + ":\SO_ARC"
  116.     DATAD$ = "DATA"
  117.     TEMPLATED$ = "TEMPLATE"
  118.  
  119.     FOR i% = 1 TO 10 STEP 1
  120.         AddListItem DRIVETEXT$, ""
  121.     NEXT i%
  122.     ReplaceListItem DRIVETEXT$, 7, PROGDEST$
  123.     ReplaceListItem DRIVETEXT$, 8, ARCDEST$
  124.     ReplaceListItem DRIVETEXT$, 9, "Microsoft Word"
  125.     ReplaceListItem DRIVETEXT$,10, "Microsoft Excel"
  126.  
  127.  
  128.     AddListItem WORDLIST$, "Microsoft Word"
  129.     AddListItem WORDLIST$, "WordPerfect"
  130.     AddListItem WORDLIST$, "Ami Pro"
  131.     AddListItem WORDLIST$, "Windows Write"
  132.     AddListItem WORDLIST$, "Other Word Processor"
  133.  
  134.     AddListItem SPREADLIST$, "Microsoft Excel"
  135.     AddListItem SPREADLIST$, "Lotus 1-2-3"
  136.     AddListItem SPREADLIST$, "Other Spreadsheet"
  137.  
  138.     ''Disk cost list symbols
  139.     APPNEEDS$    = "AppNeeds"
  140.     OPT1NEEDS$  = "Opt1Needs"
  141.     EXTRACOSTS$ = "ExtraCosts"
  142.     BIGLIST$    = "BigList"
  143.     FOR i% = 1 TO 3 STEP 1
  144.         AddListItem BIGLIST$, ""
  145.     NEXT i%
  146.     FOR i% = 1 TO 26 STEP 1
  147.         AddListItem EXTRACOSTS$, "0"
  148.     NEXT i%
  149.     ReplaceListItem EXTRACOSTS$, 3, "1024"
  150.  
  151.     ''File Option Variables
  152.     OPT1OPT$ = "1"
  153.  
  154.     SetRestartDir GetWindowsDir
  155.  
  156.  
  157.     i% = SetSizeCheckMode(scmOnIgnore)      '' could use scmOff; def = scmOnFatal
  158.  
  159.     '' Check if Workstation installation
  160.     IF "" = FindFileUsingFileOpen(MakePath$(SrcDir$, "SUPEROFF\SUPEROFF.EXE")) THEN
  161.     ARCDEST$ = WINDRIVE$ + ":\SO_LOCAL"
  162.     ReplaceListItem DRIVETEXT$, 8, ARCDEST$
  163.     IF LEN(SrcDir$) < 10 THEN
  164.         ErrorMsg(2)
  165.     END IF
  166.     IF MID$(SrcDir$, LEN(SrcDir$), 1) = "\" THEN
  167.         NetDir$ = MID$(SrcDir$, 1, LEN(SrcDir$) - 9)
  168.     ELSE
  169.         NetDir$ = MID$(SrcDir$, 1, LEN(SrcDir$) - 8)
  170.     END IF
  171.     GOTO WRKSTNASK
  172.     END IF
  173.  
  174.  
  175. TYPEASK:
  176.     '' Ask for Single User, Network or Workstation installation
  177.     sz$ = UIStartDlg(CUIDLL$, ASKTYPE, "FAskTypeDlgProc", APPHELP, HELPPROC$)
  178.  
  179.     IF sz$ = "NETWORK" THEN
  180.     DBLIBTYPE$ = "NETWORK"
  181.     FullInst$ = "ON"
  182.     UIPop 1
  183.     GOTO CUSTINST
  184.     ELSEIF sz$ = "SINGLE" THEN
  185.     DBLIBTYPE$ = "SINGLE"
  186.     FullInst$ = "ON"
  187.     UIPop 1
  188.     GOTO CUSTINST
  189.     ELSEIF sz$ = "UNETWORK" THEN
  190.     DBLIBTYPE$ = "NETWORK"
  191.     FullInst$ = "OFF"
  192.     UIPop 1
  193.     GOTO UPGRADE
  194.     ELSEIF sz$ = "USINGLE" THEN
  195.     DBLIBTYPE$ = "SINGLE"
  196.     FullInst$ = "OFF"
  197.     UIPop 1
  198.     GOTO UPGRADE
  199.     ELSE
  200.         GOSUB ASKQUIT
  201.     GOTO TYPEASK
  202.     END IF
  203.  
  204.  
  205. CUSTINST:
  206.     SetDriveStatus
  207.  
  208.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  209.  
  210.     IF sz$ = "CONTINUE" THEN
  211.         ''Install only if it will fit.
  212.         FOR i% = 1 TO 3 STEP 1
  213.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  214.                 GOSUB TOOBIG
  215.                 GOTO CUSTINST
  216.             END IF
  217.         NEXT i%
  218.         UIPop 1
  219.         GOTO INSTALL
  220.     ELSEIF sz$ = "BACK" THEN
  221.     UIPop 1
  222.     GOTO TYPEASK
  223.     ELSEIF sz$ = "PATH" THEN
  224.         GOTO GETPATH
  225.     ELSEIF sz$ = "DPATH" THEN
  226.     GOTO GETDPATH
  227.     ELSEIF sz$ = "CHK1" THEN
  228.     GOTO CUSTINST
  229.     ELSEIF sz$ = "REACTIVATE" THEN
  230.     GOTO CUSTINST
  231.     ELSE
  232.         GOSUB ASKQUIT
  233.         GOTO CUSTINST
  234.     END IF
  235.  
  236.  
  237. '' -------------------------------------- Install -------------------------
  238.  
  239. INSTALL:
  240.  
  241.     BuildCopyList
  242.  
  243.     CreateDir PROGDEST$, cmoNone
  244.  
  245.     IF FullInst$ = "ON" THEN
  246.     IF "" <> FindFileUsingFileOpen(MakePath(ARCDEST$, DATAD$) + "\superoff.dat") THEN
  247.         GOSUB ASKOVERWRITE
  248.     END IF
  249.     IF "" <> FindFileUsingFileOpen(PROGDEST$ + "\install.ini") THEN
  250.         RemoveFile PROGDEST$ + "\install.ini", cmoForce
  251.     END IF
  252.     CreateDir ARCDEST$, cmoNone
  253.     CreateDir MakePath(ARCDEST$, DATAD$), cmoNone
  254.     CreateDir MakePath(ARCDEST$, TEMPLATED$), cmoNone
  255.     END IF
  256.  
  257.     ''DumpCopyList("C:\SUPEROFF\SETUP.LOG")
  258.     CopyFilesInCopyList
  259.  
  260.     IF FullInst$ = "ON" THEN
  261.     IF DBLIBTYPE$ = "SINGLE" THEN
  262.         '' modify WPC.INI Update Shared DLL files
  263.     END IF
  264.     WriteInstallIni
  265.     END IF
  266.  
  267.  
  268. QUIT:
  269.     ON ERROR GOTO ERRQUIT
  270.  
  271.     IF ERR = 0 THEN
  272.     dlg% = EXITSUCCESS
  273.     ELSEIF ERR = STFQUIT THEN
  274.         dlg% = EXITQUIT
  275.     ELSE
  276.         dlg% = EXITFAILURE
  277.     END IF
  278. QUITL1:
  279.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  280.     IF sz$ = "REACTIVATE" THEN
  281.         GOTO QUITL1
  282.     END IF
  283.     UIPop 1
  284.     IF ERR = 0 AND RestartListEmpty = 0 THEN
  285.     IF GetWindowsMinorVersion < 1 THEN
  286.         ErrorMsg(3)
  287.     ELSE
  288.         ErrorMsg(4)
  289.         j% = ExitExecRestart()
  290.         IF j% = 0 THEN
  291.         ErrorMsg(5)
  292.         END IF
  293.     END IF
  294.     END IF
  295.     END
  296.  
  297. ERRQUIT:
  298.     ErrorMsg(6)
  299.     END
  300.  
  301.  
  302. GETPATH:
  303.     SetSymbolValue "EditTextIn", PROGDEST$
  304.     SetSymbolValue "EditFocus", "END"
  305. GETPATHL1:
  306.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  307.  
  308.     IF sz$ = "CONTINUE" THEN
  309.         olddest$ = PROGDEST$
  310.         PROGDEST$ = GetSymbolValue("EditTextOut")
  311.  
  312.         ''Validate new path.
  313.         IF IsDirWritable(PROGDEST$) = 0 THEN
  314.         GOSUB BADPATH
  315.         PROGDEST$ = olddest$
  316.             GOTO GETPATHL1
  317.         END IF
  318.         UIPop 1
  319.  
  320.         ''Truncate display if too long.
  321.         IF LEN(PROGDEST$) > 23 THEN
  322.             ReplaceListItem DRIVETEXT$, 7, MID$(PROGDEST$, 1, 23)+"..."
  323.         ELSE
  324.             ReplaceListItem DRIVETEXT$, 7, PROGDEST$
  325.         END IF
  326.  
  327.         ''Recalc if path changed.
  328.         IF (olddest$ <> PROGDEST$) AND (olddest$ <> PROGDEST$+"\") AND (olddest$+"\" <> PROGDEST$) THEN
  329.         SetDriveStatus
  330.         END IF
  331.  
  332.         olddest$ = ""
  333.         GOTO CUSTINST
  334.     ELSEIF sz$ = "REACTIVATE" THEN
  335.     SetDriveStatus
  336.         GOTO GETPATHL1
  337.     ELSEIF sz$ = "EXIT" THEN
  338.         GOSUB ASKQUIT
  339.         GOTO GETPATHL1
  340.     ELSE
  341.         UIPop 1
  342.         GOTO CUSTINST
  343.     END IF
  344.  
  345.  
  346.  
  347. GETDPATH:
  348.     SetSymbolValue "EditTextIn", ARCDEST$
  349.     SetSymbolValue "EditFocus", "END"
  350. GETDPATHL1:
  351.     sz$ = UIStartDlg(CUIDLL$, ASKDATAPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  352.  
  353.     IF sz$ = "CONTINUE" THEN
  354.     olddest$ = ARCDEST$
  355.     ARCDEST$ = GetSymbolValue("EditTextOut")
  356.  
  357.         ''Validate new path.
  358.     IF IsDirWritable(ARCDEST$) = 0 THEN
  359.             GOSUB BADPATH
  360.         ARCDEST$ = olddest$
  361.         GOTO GETDPATHL1
  362.         END IF
  363.         UIPop 1
  364.  
  365.         ''Truncate display if too long.
  366.     IF LEN(ARCDEST$) > 23 THEN
  367.         ReplaceListItem DRIVETEXT$, 8, MID$(ARCDEST$, 1, 23)+"..."
  368.         ELSE
  369.         ReplaceListItem DRIVETEXT$, 8, ARCDEST$
  370.         END IF
  371.  
  372.         ''Recalc if path changed.
  373.     IF (olddest$ <> ARCDEST$) AND (olddest$ <> ARCDEST$+"\") AND (olddest$+"\" <> ARCDEST$) THEN
  374.         SetDriveStatus
  375.         END IF
  376.  
  377.         olddest$ = ""
  378.         GOTO CUSTINST
  379.     ELSEIF sz$ = "REACTIVATE" THEN
  380.     SetDriveStatus
  381.     GOTO GETDPATHL1
  382.     ELSEIF sz$ = "EXIT" THEN
  383.         GOSUB ASKQUIT
  384.     GOTO GETDPATHL1
  385.     ELSE
  386.         UIPop 1
  387.         GOTO CUSTINST
  388.     END IF
  389.  
  390.  
  391.  
  392. TOOBIG:
  393.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  394.     IF sz$ = "REACTIVATE" THEN
  395.  
  396.         SetDriveStatus
  397.         GOTO TOOBIG
  398.     END IF
  399.     UIPop 1
  400.     RETURN
  401.  
  402.  
  403.  
  404. BADPATH:
  405.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  406.     IF sz$ = "REACTIVATE" THEN
  407.     SetDriveStatus
  408.         GOTO BADPATH
  409.     END IF
  410.     UIPop 1
  411.     RETURN
  412.  
  413.  
  414.  
  415. ASKQUIT:
  416.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  417.  
  418.     IF sz$ = "EXIT" THEN
  419.         UIPopAll
  420.         ERROR STFQUIT
  421.     ELSEIF sz$ = "REACTIVATE" THEN
  422.         GOTO ASKQUIT
  423.     ELSE
  424.         UIPop 1
  425.     END IF
  426.     RETURN
  427.  
  428. ASKOVERWRITE:
  429.     sz$ = UIStartDlg(CUIDLL$, ASKOVERWRITE, "FQuitDlgProc", 0, "")
  430.  
  431.     IF sz$ = "EXIT" THEN
  432.         UIPopAll
  433.         ERROR STFQUIT
  434.     ELSEIF sz$ = "BACK" THEN
  435.     GOTO CUSTINST
  436.     ELSEIF sz$ = "REACTIVATE" THEN
  437.     GOTO ASKOVERWRITE
  438.     ELSE
  439.         UIPop 1
  440.     END IF
  441.     RETURN
  442.  
  443.  
  444. '' -------------------------------------- Upgrade -------------------------
  445.  
  446. UPGRADE:
  447.     SetDriveStatus
  448.  
  449.     sz$ = UIStartDlg(CUIDLL$, CUSTUPGRADE, "FCustInstDlgProc", APPHELP, HELPPROC$)
  450.  
  451.     IF sz$ = "CONTINUE" THEN
  452.         ''Install only if it will fit.
  453.         FOR i% = 1 TO 3 STEP 1
  454.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  455.                 GOSUB TOOBIG
  456.         GOTO UPGRADE
  457.             END IF
  458.         NEXT i%
  459.         UIPop 1
  460.         GOTO INSTALL
  461.     ELSEIF sz$ = "BACK" THEN
  462.     UIPop 1
  463.     GOTO TYPEASK
  464.     ELSEIF sz$ = "PATH" THEN
  465.     GOTO GETUPATH
  466.     ELSEIF sz$ = "REACTIVATE" THEN
  467.     SetDriveStatus
  468.     GOTO UPGRADE
  469.     ELSE
  470.         GOSUB ASKQUIT
  471.     GOTO UPGRADE
  472.     END IF
  473.  
  474. GETUPATH:
  475.     SetSymbolValue "EditTextIn", PROGDEST$
  476.     SetSymbolValue "EditFocus", "END"
  477. GETUPATHL1:
  478.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  479.  
  480.     IF sz$ = "CONTINUE" THEN
  481.         olddest$ = PROGDEST$
  482.         PROGDEST$ = GetSymbolValue("EditTextOut")
  483.  
  484.         ''Validate new path.
  485.         IF IsDirWritable(PROGDEST$) = 0 THEN
  486.             GOSUB BADPATH
  487.         PROGDEST$ = olddest$
  488.         GOTO GETUPATHL1
  489.         END IF
  490.         UIPop 1
  491.  
  492.         ''Truncate display if too long.
  493.         IF LEN(PROGDEST$) > 23 THEN
  494.             ReplaceListItem DRIVETEXT$, 7, MID$(PROGDEST$, 1, 23)+"..."
  495.         ELSE
  496.             ReplaceListItem DRIVETEXT$, 7, PROGDEST$
  497.         END IF
  498.  
  499.         ''Recalc if path changed.
  500.         IF (olddest$ <> PROGDEST$) AND (olddest$ <> PROGDEST$+"\") AND (olddest$+"\" <> PROGDEST$) THEN
  501.         SetDriveStatus
  502.         END IF
  503.  
  504.         olddest$ = ""
  505.     GOTO UPGRADE
  506.     ELSEIF sz$ = "REACTIVATE" THEN
  507.     SetDriveStatus
  508.     GOTO GETUPATHL1
  509.     ELSEIF sz$ = "EXIT" THEN
  510.         GOSUB ASKQUIT
  511.     GOTO GETUPATHL1
  512.     ELSE
  513.         UIPop 1
  514.     GOTO UPGRADE
  515.     END IF
  516.  
  517. '' ----------------------------- SOWrkStn ------------------------------
  518.  
  519. WRKSTNASK:
  520.     '' Ask for Single User, Network or Workstation installation
  521.     sz$ = UIStartDlg(CUIDLL$, ASKWORKSTN, "FAskTypeDlgProc", APPHELP, HELPPROC$)
  522.  
  523.     IF sz$ = "NETWORK" THEN
  524.     DBLIBTYPE$ = "NETWORK"
  525.     FullInst$ = "TRAVEL"
  526.     UIPop 1
  527.     GOTO WRKSTNINST
  528.     ELSEIF sz$ = "SINGLE" THEN
  529.     DBLIBTYPE$ = "NETWORK"
  530.     FullInst$ = "WRKSTN"
  531.     UIPop 1
  532.     GOTO DLLINST
  533.     ELSE
  534.         GOSUB ASKQUIT
  535.     GOTO WRKSTNASK
  536.     END IF
  537.  
  538.  
  539. WRKSTNINST:
  540.     SetDriveStatus
  541.  
  542.     sz$ = UIStartDlg(CUIDLL$, TRAVELINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  543.  
  544.     IF sz$ = "CONTINUE" THEN
  545.         ''Install only if it will fit.
  546.         FOR i% = 1 TO 3 STEP 1
  547.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  548.                 GOSUB TOOBIG
  549.         GOTO WRKSTNINST
  550.             END IF
  551.         NEXT i%
  552.         UIPop 1
  553.     GOTO WRKINSTALL
  554.     ELSEIF sz$ = "BACK" THEN
  555.     UIPop 1
  556.     GOTO WRKSTNASK
  557.     ELSEIF sz$ = "PATH" THEN
  558.     GOTO WRKPATH
  559.     ELSEIF sz$ = "DPATH" THEN
  560.     GOTO WRKDPATH
  561.     ELSEIF sz$ = "REACTIVATE" THEN
  562.     SetDriveStatus
  563.     GOTO WRKSTNINST
  564.     ELSE
  565.         GOSUB ASKQUIT
  566.     GOTO WRKSTNINST
  567.     END IF
  568.  
  569.  
  570. WRKINSTALL:
  571.     BuildCopyList
  572.     CopyFilesInCopyList
  573.     ini$ = MakePath(PROGDEST$, "SuperOff.ini")
  574.     ServerIniFile$ = FindFileUsingFIleOpen(MakePath$(NetDir$, "SUPEROFF.INI"))
  575.     IF ServerIniFile$ = "" THEN
  576.     ErrorMsg(7)
  577.     ERR = 657
  578.     GOTO QUIT
  579.     END IF
  580.  
  581.     CopyFile ServerIniFile$, ini$, cmoOverwrite, 0
  582.     CreateIniKeyValue ini$, "SuperOffice", "travel", "Yes" , cmoOverwrite
  583.     CreateIniKeyValue ini$, "SuperOffice", "local_archivepath", ARCDEST$ , cmoOverwrite
  584.  
  585.     ini$ = MakePath$(GetWindowsDir, "wpc.ini")
  586.     CreateIniKeyValue ini$, "wpwp-3rd", "SuperWP", MakePath$(PROGDEST$, "SuperWP.dll") , cmoOverwrite
  587.  
  588.     CreateProgmanGroup "SuperOffice", "", cmoNone
  589.     ShowProgmanGroup  "SuperOffice", 1, cmoNone
  590.     CreateProgmanItem "SuperOffice", "SuperOffice", MakePath(PROGDEST$, "SUPEROFF.EXE"), "", cmoOverwrite
  591.     GOTO QUIT
  592.  
  593.  
  594. DLLINST:
  595.     BuildCopyList
  596.     CopyFilesInCopyList
  597.  
  598.     ini$ = MakePath$(GetWindowsDir, "wpc.ini")
  599.     CreateIniKeyValue ini$, "wpwp-3rd", "SuperWP", MakePath$(NetDir$, "SuperWP.dll") , cmoOverwrite
  600.  
  601.     CreateProgmanGroup "SuperOffice", "", cmoNone
  602.     ShowProgmanGroup  "SuperOffice", 1, cmoNone
  603.     CreateProgmanItem "SuperOffice", "SuperOffice", MakePath(NetDir$, "SUPEROFF.EXE"), "", cmoOverwrite
  604.     GOTO QUIT
  605.  
  606.  
  607. WRKPATH:
  608.     SetSymbolValue "EditTextIn", PROGDEST$
  609.     SetSymbolValue "EditFocus", "END"
  610. WRKPATHL1:
  611.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  612.  
  613.     IF sz$ = "CONTINUE" THEN
  614.         olddest$ = PROGDEST$
  615.         PROGDEST$ = GetSymbolValue("EditTextOut")
  616.  
  617.         ''Validate new path.
  618.     IF IsDirWritable(PROGDEST$) = 0 OR IsDriveNetwork(MID$(PROGDEST$,1,1)) = 1 THEN
  619.             GOSUB BADPATH
  620.         PROGDEST$ = olddest$
  621.         GOTO WRKPATHL1
  622.         END IF
  623.         UIPop 1
  624.  
  625.         ''Truncate display if too long.
  626.         IF LEN(PROGDEST$) > 23 THEN
  627.             ReplaceListItem DRIVETEXT$, 7, MID$(PROGDEST$, 1, 23)+"..."
  628.         ELSE
  629.             ReplaceListItem DRIVETEXT$, 7, PROGDEST$
  630.         END IF
  631.  
  632.         ''Recalc if path changed.
  633.         IF (olddest$ <> PROGDEST$) AND (olddest$ <> PROGDEST$+"\") AND (olddest$+"\" <> PROGDEST$) THEN
  634.         SetDriveStatus
  635.         END IF
  636.  
  637.         olddest$ = ""
  638.     GOTO WRKSTNINST
  639.     ELSEIF sz$ = "REACTIVATE" THEN
  640.     SetDriveStatus
  641.     GOTO WRKPATHL1
  642.     ELSEIF sz$ = "EXIT" THEN
  643.         GOSUB ASKQUIT
  644.     GOTO WRKPATHL1
  645.     ELSE
  646.         UIPop 1
  647.     GOTO WRKSTNINST
  648.     END IF
  649.  
  650.  
  651.  
  652. WRKDPATH:
  653.     SetSymbolValue "EditTextIn", ARCDEST$
  654.     SetSymbolValue "EditFocus", "END"
  655. WRKDPATHL1:
  656.     sz$ = UIStartDlg(CUIDLL$, ASKDATAPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  657.  
  658.     IF sz$ = "CONTINUE" THEN
  659.     olddest$ = ARCDEST$
  660.     ARCDEST$ = GetSymbolValue("EditTextOut")
  661.  
  662.         ''Validate new path.
  663.     IF IsDirWritable(ARCDEST$) = 0 OR IsDriveNetwork(MID$(ARCDEST$,1,1)) = 1 THEN
  664.             GOSUB BADPATH
  665.         ARCDEST$ = olddest$
  666.         GOTO WRKDPATHL1
  667.         END IF
  668.         UIPop 1
  669.  
  670.         ''Truncate display if too long.
  671.     IF LEN(ARCDEST$) > 23 THEN
  672.         ReplaceListItem DRIVETEXT$, 8, MID$(ARCDEST$, 1, 23)+"..."
  673.         ELSE
  674.         ReplaceListItem DRIVETEXT$, 8, ARCDEST$
  675.         END IF
  676.  
  677.         ''Recalc if path changed.
  678.     IF (olddest$ <> ARCDEST$) AND (olddest$ <> ARCDEST$+"\") AND (olddest$+"\" <> ARCDEST$) THEN
  679.         SetDriveStatus
  680.         END IF
  681.  
  682.         olddest$ = ""
  683.     GOTO WRKSTNINST
  684.     ELSEIF sz$ = "REACTIVATE" THEN
  685.     SetDriveStatus
  686.     GOTO WRKDPATHL1
  687.     ELSEIF sz$ = "EXIT" THEN
  688.         GOSUB ASKQUIT
  689.     GOTO WRKDPATHL1
  690.     ELSE
  691.         UIPop 1
  692.     GOTO WRKSTNINST
  693.     END IF
  694.  
  695.  
  696. '**
  697. '** Purpose:
  698. '**     Displays a dialog box with an error message
  699. '** Returns:
  700. '**     none.
  701. '*************************************************************************
  702. SUB ErrorMsg(errnum%) STATIC
  703.  
  704.  
  705.     IF errnum% > 7 OR errnum < 1 THEN
  706.     errornum% = 200
  707.     END IF
  708.     ErrSrcDir$ = GetSymbolValue("STF_SRCDIR")
  709.     ErrorIni$ = MakePath(ErrSrcDir$, "Error.ini")
  710.     Msg$ = GetIniKeyString(ErrorIni$, "Error", STR$(errnum%))
  711.     i% = DoMsgBox(Msg$, "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  712.  
  713. END SUB
  714.  
  715.  
  716. '**
  717. '** Purpose:
  718. '**     Builds the install.ini file for document and application setup
  719. '** Returns:
  720. '**     none.
  721. '*************************************************************************
  722. SUB WriteInstallIni STATIC
  723.  
  724.     ini$ = MakePath(PROGDEST$, "SuperOff.ini")
  725.     CreateIniKeyValue ini$, "SuperOffice", "archivepath", ARCDEST$ , cmoOverwrite
  726.  
  727.     ini$ = MakePath$(GetWindowsDir, "wpc.ini")
  728.     CreateIniKeyValue ini$, "wpwp-3rd", "SuperWP", MakePath$(PROGDEST$, "SuperWP.dll") , cmoOverwrite
  729.  
  730.     CreateProgmanGroup "SuperOffice", "", cmoNone
  731.     ShowProgmanGroup  "SuperOffice", 1, cmoNone
  732.     CreateProgmanItem "SuperOffice", "SuperOffice", MakePath(PROGDEST$, "SUPEROFF.EXE"), "", cmoOverwrite
  733.  
  734.     WPAPP$ = GetListItem(DRIVETEXT$, 9)
  735.     WPSECT$ = WPAPP$
  736.  
  737.     '' No need to change application name when Ami Pro
  738.     IF WPAPP$ = "Microsoft Word" THEN
  739.         WPAPP$ = "MS Word"
  740.     ELSEIF WPAPP$ = "WordPerfect" THEN
  741.         WPAPP$ = "WP Win"
  742.     ELSEIF WPAPP$ = "Windows Write" THEN
  743.         WPAPP$ = "Write"
  744.     ELSEIF WPAPP$ = "Other Word Processor" THEN
  745.         WPAPP$ = "Write"
  746.     END IF
  747.  
  748.  
  749.     SSAPP$ = GetListItem(DRIVETEXT$, 10)
  750.     SSSECT$ = SSAPP$
  751.     IF SSAPP$ = "Microsoft Excel" THEN
  752.         SSAPP$ = "MS Excel"
  753.     ELSEIF SSAPP$ = "Lotus 1-2-3" THEN
  754.         SSAPP$ = "Lotus 123"
  755.     ELSEIF SSAPP$ = "Other Spreadsheet" THEN
  756.         SSAPP$ = "Write"
  757.     END IF
  758.  
  759.     ini$ = MakePath(PROGDEST$, "Install.ini")
  760.     CreateIniKeyValue ini$, "SuperOffice", "application:1", WPAPP$ , cmoOverwrite
  761.     CreateIniKeyValue ini$, "SuperOffice", "application:2", SSAPP$ , cmoOverwrite
  762.  
  763.  
  764.     '' Letter1
  765.     KEY$ = """L1"""
  766.     LISTSTRING$ = GetIniKeyString(szInf$, WPSECT$, KEY$)
  767.     APP$ = "1," + WPAPP$
  768.     IF LISTSTRING$ = "" THEN
  769.         LISTSTRING$ = GetIniKeyString(szInf$, SSSECT$, KEY$)
  770.         APP$ = "2," + SSAPP$
  771.     END IF
  772.     IF LISTSTRING$ <> "" THEN
  773.         TEMPLATESTRING$ = GetIniKeyString(szInf$, "Template Names", KEY$)
  774.         FileName$ = GetNthFieldFromIniString(LISTSTRING$, 2)
  775.         CreateIniKeyValue ini$, "SuperOffice", "letter:" + TEMPLATESTRING$, FileName$ + "," + APP$ , cmoNone
  776.     END IF
  777.  
  778.     '' Letter2
  779.     KEY$ = """L2"""
  780.     LISTSTRING$ = GetIniKeyString(szInf$, WPSECT$, KEY$)
  781.     APP$ = "1," + WPAPP$
  782.     IF LISTSTRING$ = "" THEN
  783.         LISTSTRING$ = GetIniKeyString(szInf$, SSSECT$, KEY$)
  784.         APP$ = "2," + SSAPP$
  785.     END IF
  786.     IF LISTSTRING$ <> "" THEN
  787.         TEMPLATESTRING$ = GetIniKeyString(szInf$, "Template Names", KEY$)
  788.         FileName$ = GetNthFieldFromIniString(LISTSTRING$, 2)
  789.         CreateIniKeyValue ini$, "SuperOffice", "letter:" + TEMPLATESTRING$, FileName$ + "," + APP$ , cmoNone
  790.     END IF
  791.  
  792.     '' Fax1
  793.     KEY$ = """F1"""
  794.     LISTSTRING$ = GetIniKeyString(szInf$, WPSECT$, KEY$)
  795.     APP$ = "1," + WPAPP$
  796.     IF LISTSTRING$ = "" THEN
  797.         LISTSTRING$ = GetIniKeyString(szInf$, SSSECT$, KEY$)
  798.         APP$ = "2," + SSAPP$
  799.     END IF
  800.     IF LISTSTRING$ <> "" THEN
  801.         TEMPLATESTRING$ = GetIniKeyString(szInf$, "Template Names", KEY$)
  802.         FileName$ = GetNthFieldFromIniString(LISTSTRING$, 2)
  803.         CreateIniKeyValue ini$, "SuperOffice", "fax:" + TEMPLATESTRING$, FileName$ + "," + APP$ , cmoNone
  804.     END IF
  805.  
  806.     '' Fax2
  807.     KEY$ = """F2"""
  808.     LISTSTRING$ = GetIniKeyString(szInf$, WPSECT$, KEY$)
  809.     APP$ = "1," + WPAPP$
  810.     IF LISTSTRING$ = "" THEN
  811.         LISTSTRING$ = GetIniKeyString(szInf$, SSSECT$, KEY$)
  812.         APP$ = "2," + SSAPP$
  813.     END IF
  814.     IF LISTSTRING$ <> "" THEN
  815.         TEMPLATESTRING$ = GetIniKeyString(szInf$, "Template Names", KEY$)
  816.         FileName$ = GetNthFieldFromIniString(LISTSTRING$, 2)
  817.         CreateIniKeyValue ini$, "SuperOffice", "fax:" + TEMPLATESTRING$, FileName$ + "," + APP$ , cmoNone
  818.     END IF
  819.  
  820. END SUB
  821.  
  822.  
  823. '**
  824. '** Purpose:
  825. '**     Builds the list of files to copy depending on selected templates etc.
  826. '** Returns:
  827. '**     none.
  828. '*************************************************************************
  829. SUB BuildCopyList STATIC
  830.  
  831.     ClearCopyList
  832.  
  833.     IF FullInst$ = "TRAVEL" OR FullInst$ = "WRKSTN" THEN
  834.     IF FullInst$ = "TRAVEL" THEN
  835.         AddSectionFilesToCopyList "AppFiles", NetDir$, PROGDEST$
  836.         AddSectionFilesToCopyList "DBLibNetwork", NetDir$, PROGDEST$
  837.     END IF
  838.  
  839.     '' Do not copy DLL files to Windows system directory if a network directory
  840.     IF IsDriveNetwork(MID$(GetWindowsSysDir, 1, 1)) = 0 THEN
  841.         AddSectionFilesToCopyList "DLLShared", SrcDir$, GetWindowsSysDir
  842.         AddSectionFilesToCopyList "DLLShared2", SrcDir$, GetWindowsSysDir
  843.     END IF
  844.     ELSE
  845.     AddSectionFilesToCopyList "AppFiles", MakePath$(SrcDir$, "SUPEROFF"), PROGDEST$
  846.     AddSectionFilesToCopyList "AppFiles2", MakePath$(SrcDir$, "SUPEROFF"), PROGDEST$
  847.     IF DBLIBTYPE$ = "SINGLE" THEN
  848.         AddSectionFilesToCopyList "DBLibSingle", MakePath$(SrcDir$, "SUPEROFF"), PROGDEST$
  849.     ELSE
  850.         AddSectionFilesToCopyList "DBLibNetwork", MakePath$(SrcDir$, "SUPEROFF"), PROGDEST$
  851.         '' Add Workstation installation
  852.         AddSectionFilesToCopyList "SuperOffice Workstation", SrcDir$, MakePath$(PROGDEST$, "SOWRKSTN")
  853.     END IF
  854.  
  855.     IF FullInst$ = "ON" THEN
  856.         AddSectionFilesToCopyList "DataFiles", MakePath$(SrcDir$, "SO_ARC\DATA"), MakePath(ARCDEST$, DATAD$)
  857.         SECTION$ = GetListItem(DRIVETEXT$, 9)
  858.         AddSectionFilesToCopyList SECTION$, MakePath$(SrcDir$, "SO_ARC\TEMPLATE"), MakePath(ARCDEST$, TEMPLATED$)
  859.         SECTION$ = GetListItem(DRIVETEXT$, 10)
  860.         AddSectionFilesToCopyList SECTION$, MakePath$(SrcDir$, "SO_ARC\TEMPLATE"), MakePath(ARCDEST$, TEMPLATED$)
  861.         '' Add files for demo version OK if empty
  862.         AddSectionFilesToCopyList "Demo", SrcDir$, ARCDEST$
  863.     END IF
  864.  
  865.     IF IsDriveNetwork(MID$(GetWindowsSysDir, 1, 1)) = 0 THEN
  866.         AddSectionFilesToCopyList "DLLShared", SrcDir$, GetWindowsSysDir
  867.         AddSectionFilesToCopyList "DLLShared2", MakePath$(SrcDir$, "SOWRKSTN"), GetWindowsSysDir
  868.     END IF
  869.     END IF
  870.  
  871.  
  872. END SUB
  873.  
  874. '**
  875. '** Purpose:
  876. '**     Recalculates disk space for the given option files and sets
  877. '**     the status info symbol "StatusItemsText".
  878. '** Arguments:
  879. '**     ftype% - type of files to add, one of the following:
  880. '**             DATAFILES, OPTFILES1
  881. '** Returns:
  882. '**     none.
  883. '*************************************************************************
  884. SUB RecalcFiles (ftype%) STATIC
  885.     CursorSave% = ShowWaitCursor()
  886.  
  887.     BuildCopyList
  888.     fExtra% = 0
  889.     ListSym$ = APPNEEDS$
  890.     ''Add extra cost to Windows drive for ini/progman, etc.
  891.     ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  892.     ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  893.     fExtra% = 1
  894.  
  895.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  896.  
  897.     cost& = 0
  898.     FOR i% = 1 TO 26 STEP 1
  899.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  900.     NEXT i%
  901.  
  902.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  903.  
  904.     IF StillNeed& > 0 THEN
  905.         ReplaceListItem BIGLIST$, ftype%, "YES"
  906.     ELSE
  907.         ReplaceListItem BIGLIST$, ftype%, ""
  908.     END IF
  909.  
  910.     IF fExtra% THEN
  911.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  912.     END IF
  913.     RestoreCursor CursorSave%
  914.     ListSym$ = ""
  915. END SUB
  916.  
  917.  
  918. '**
  919. '** Purpose:
  920. '**     Recalculates disk space and sets option status info according
  921. '**     to the current destination path.
  922. '** Arguments:
  923. '**     none.
  924. '** Returns:
  925. '**     none.
  926. '*************************************************************************
  927. SUB RecalcPath STATIC
  928.  
  929.     CursorSave% = ShowWaitCursor()
  930.  
  931.     RecalcFiles DATAFILES
  932.  
  933.     RestoreCursor CursorSave%
  934. END SUB
  935.  
  936.  
  937. '**
  938. '** Purpose:
  939. '**     Sets drive status info according to latest disk space calcs.
  940. '** Arguments:
  941. '**     none.
  942. '** Returns:
  943. '**     none.
  944. '*************************************************************************
  945. SUB SetDriveStatus STATIC
  946.  
  947.     RecalcPath
  948.     drive$ = MID$(PROGDEST$, 1, 1)
  949.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  950.     ddrive$ = MID$(ARCDEST$, 1, 1)
  951.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  952.     free& = GetFreeSpaceForDrive(drive$)
  953.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  954.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  955.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  956.     IF free& < cost& THEN
  957.     ReplaceListItem BIGLIST$, 1, "YES"
  958.     ELSE
  959.     ReplaceListItem BIGLIST$, 1, ""
  960.     END IF
  961.  
  962.     IF drive$ = ddrive$ THEN
  963.         ReplaceListItem DRIVETEXT$, 4, ""
  964.         ReplaceListItem DRIVETEXT$, 5, ""
  965.         ReplaceListItem DRIVETEXT$, 6, ""
  966.     ELSE
  967.     ndrive% = ASC(ucase$(ddrive$)) - ASC("A") + 1
  968.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%))
  969.     free& = GetFreeSpaceForDrive(ddrive$)
  970.     ReplaceListItem DRIVETEXT$, 4, ddrive$ + ":"
  971.     ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  972.     ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  973.     IF free& < cost& THEN
  974.         ReplaceListItem BIGLIST$, 2, "YES"
  975.     ELSE
  976.         ReplaceListItem BIGLIST$, 2, ""
  977.     END IF
  978.  
  979.     END IF
  980. END SUB
  981.  
  982.  
  983. '**
  984. '** Purpose:
  985. '**     Appends a file name to the end of a directory path,
  986. '**     inserting a backslash character as needed.
  987. '** Arguments:
  988. '**     szDir$  - full directory path (with optional ending "\")
  989. '**     szFile$ - filename to append to directory
  990. '** Returns:
  991. '**     Resulting fully qualified path name.
  992. '*************************************************************************
  993. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  994.     IF szDir$ = "" THEN
  995.         MakePath = szFile$
  996.     ELSEIF szFile$ = "" THEN
  997.         MakePath = szDir$
  998.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  999.         MakePath = szDir$ + szFile$
  1000.     ELSE
  1001.         MakePath = szDir$ + "\" + szFile$
  1002.     END IF
  1003. END FUNCTION
  1004.