home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0020 - 0029 / ibm0020-0029 / ibm0028.tar / ibm0028 / SBTAR2.ZIP / SYSINST.PRG < prev    next >
Encoding:
Text File  |  1990-06-04  |  27.6 KB  |  869 lines

  1. ********************** ' MultiNet Source Code ' ***********************
  2. ** '                       SBT Corporation                         ' **
  3. ** '         One Harbor Drive, Sausalito, California 94965         ' **
  4. ** '                   Telephone (415) 331-9900                    ' **
  5. ***********************************************************************
  6. ** '   (c) Copyright 1984, Revisions 1985 - 1990 SBT Corporation   ' **
  7. ** '            All Rights Reserved by SBT Corporation             ' **
  8. ** '                                                               ' **
  9. ***********************************************************************
  10. ** ' 06/04/90 = Last Update  **   SYSINST.PRG  **  Version 6.35.00 ' **
  11. ***********************************************************************
  12. * ' System wide install program, called by XXINST.PRG
  13. *
  14. SET INTENSITY ON
  15. RELEASE m0cmddr, m0sysdr, mchars, m0border, m0switchar, m0drvpict, ;
  16. m0cname, m0company, m0color, m0date, m0port, m0stpprn, m0prnesc, m0litebar
  17. PUBLIC m0cmddr, m0sysdr, mchars, m0border, m0switchar, m0drvpict, ;
  18. m0cname, m0company, m0color, m0date, m0port, m0stpprn, m0prnesc, m0litebar
  19. STORE .f. TO m0stpprn, m0prnesc
  20. IF TYPE('m0single') = 'U'
  21.   RELEASE m0single
  22.   PUBLIC m0single
  23.   STORE .f. TO m0single
  24. ENDIF
  25. IF TYPE('m0trial') = 'U'
  26.   RELEASE m0trial
  27.   PUBLIC m0trial
  28.   STORE .f. TO m0trial
  29. ENDIF
  30. SET STATUS OFF
  31. DO CASE
  32.   CASE ISCOLOR()
  33.     SET COLOR TO W+/B,N/W,B
  34.     STORE 'W+ /B  ,N  /W  ,B        ' TO m0color
  35.   CASE 'MAC' $ UPPER(OS()) .AND. fox
  36.     SET COLOR TO N/W,W/N,N
  37.     STORE 'N  /W  ,W  /N  ,N        ' TO m0color
  38.   OTHERWISE
  39.     SET COLOR TO W+/N,N/W,N
  40.     STORE 'W+ /N  ,N  /W  ,N        ' TO m0color
  41. ENDCASE
  42. CLEAR
  43. IF .NOT. m0single
  44.   SET EXCLUSIVE OFF
  45. ENDIF
  46. STORE 'Y' TO ibmcomp
  47. CLEAR GETS
  48. DO CASE
  49.   CASE 'MAC' $ UPPER(OS())
  50.     STORE 'M' TO mos
  51.   CASE 'NIX' $ UPPER(OS())
  52.     STORE 'X' TO mos
  53.   OTHERWISE
  54.     STORE 'D' TO mos
  55. ENDCASE
  56. CLEAR
  57. STORE 'Install Program' TO m0cname
  58. STORE '=============================================' + '  ' + ;
  59. TRIM(m0cname) + '  ' + '=============================================' ;
  60. TO m0company
  61. STORE SUBSTR(m0company,(LEN(m0company) - 76)/2,78) + mversion TO m0company
  62. @ 1,40 - INT(LEN(m0system)/2) SAY m0system
  63. @ 1,73 SAY SUBSTR(m0company,79,6)
  64. @ 2,1 SAY SUBSTR(m0company,1,78)
  65. @ 4,5 SAY 'What type of Operating System are you using ? ===>'
  66. @ 4,56 GET mos PICTURE '!'
  67. @ 6,5 SAY "'D' for PCDOS, MS-DOS, PC-MOS/386"
  68. @ 7,5 SAY "'M' for Apple Macintosh"
  69. @ 8,5 SAY "'X' for Xenix/Unix supporting SCO FoxBASE+"
  70. @ 9,5 SAY "'A' for Atari ST"
  71. @ 10,5 SAY "'Q' to Quit"
  72. READ SAVE
  73. DO WHILE .NOT. mos $ 'DXAMQ'
  74.   ?? CHR(7)
  75.   READ SAVE
  76. ENDDO
  77. CLEAR GETS
  78. @ 4,0 CLEAR
  79. DO CASE
  80.   CASE mos $ 'DA'
  81.     STORE '\' TO m0switchar
  82.     STORE '!:!!!!!!!!!!!!!!!!!!!!!!!!!!!!' TO m0drvpict
  83.   CASE mos = 'X'
  84.     STORE '/' TO m0switchar
  85.     STORE 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' TO m0drvpict
  86.   CASE mos = 'M'
  87.     STORE ':' TO m0switchar
  88.     STORE 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' TO m0drvpict
  89.   OTHERWISE
  90.     CLOSE DATABASES
  91.     CLEAR ALL
  92.     CLEAR
  93.     CANCEL
  94. ENDCASE
  95. * ' This to prevent overwriting customers files
  96. IF m0pgmid $ 'AR.JC.PO.SO.MA.AP.CM.TS'
  97.   @ 23,0
  98.   @ 23,2 SAY '*****  Checking System Lookup Tables  *****'
  99.   IF .NOT. FILE ('systabl.dbf')
  100.     IF FILE ('systablx.dbf')
  101.       RENAME systablx.dbf TO systabl.dbf
  102.     ENDIF
  103.   ELSE
  104.     IF FILE ('systablx.dbf')
  105.       DELETE FILE systablx.dbf
  106.     ENDIF
  107.   ENDIF
  108.   IF .NOT. FILE ('systabc.ndx')
  109.     IF FILE ('systabcx.ndx')
  110.       RENAME systabcx.ndx TO systabc.ndx
  111.     ENDIF
  112.   ELSE
  113.     IF FILE ('systabcx.ndx')
  114.       DELETE FILE systabcx.ndx
  115.     ENDIF
  116.   ENDIF
  117.   IF .NOT. FILE ('systabn.ndx')
  118.     IF FILE ('systabnx.ndx')
  119.       RENAME systabnx.ndx TO systabn.ndx
  120.     ENDIF
  121.   ELSE
  122.     IF FILE ('systabnx.ndx')
  123.       DELETE FILE systabnx.ndx
  124.     ENDIF
  125.   ENDIF
  126. ENDIF
  127. IF .NOT. FILE('sysdata.dbf')
  128.   IF .NOT. FILE('sysd&m0pgmid.3.dbf')
  129.     STORE ' ' TO mans
  130.     ?? CHR(7)
  131.     CLEAR
  132.     @ 2,4 SAY 'Warning [9002] - SYSDATA.DBF Missing.'
  133.     @ 4,4 SAY 'Informational only - No data has been lost.'
  134.     @ 6,4 SAY 'Neither the SYSDATA.DBF nor the SYSD' + m0pgmid + ;
  135.     '3.DBF system files'
  136.     @ 7,4 SAY 'are in the current drive and directory.  Make sure one of the '
  137.     @ 8,4 SAY 'system files is present and try again.'
  138.     @ 10,4 SAY 'Installation Cancelled.  Press any key to continue...' ;
  139.     GET mans
  140.     READ
  141.     SET TALK ON
  142.     SET SAFETY ON
  143.     CLEAR ALL
  144.     CANCEL
  145.   ENDIF
  146.   RENAME sysd&m0pgmid.3.dbf TO sysdata.dbf
  147. ELSE
  148.   USE sysdata
  149.   IF .NOT. m0single
  150.     STORE FLOCK() TO lockedf
  151.     IF .NOT. lockedf
  152.       @ 23,3 SAY 'File ' + UPPER(DBF()) + '. Attempting to lock file...'
  153.       DO WHILE .NOT. lockedf
  154.         STORE FLOCK() TO lockedf
  155.       ENDDO
  156.       @ 23,0
  157.     ENDIF
  158.   ENDIF
  159.   STORE .t. TO mupdated
  160.   IF LEN(sysid) < 4
  161.     STORE .f. TO mupdated
  162.   ELSE
  163.     IF LEN(drive) < 200
  164.       STORE .f. TO mupdated
  165.     ELSE
  166.       IF LEN(link) < 200
  167.         STORE .f. TO mupdated
  168.       ENDIF
  169.     ENDIF
  170.   ENDIF
  171.   IF .NOT. mupdated
  172.     COPY TO sysbuil.dbf STRUCTURE EXTENDED
  173.     USE sysbuil EXCLUSIVE
  174.     LOCATE FOR field_name = 'SYSID'
  175.     REPLACE field_len WITH 4
  176.     LOCATE FOR field_name = 'DRIVE'
  177.     REPLACE field_len WITH 200
  178.     LOCATE FOR field_name = 'LINK'
  179.     REPLACE field_len WITH 200
  180.     @ 4,1 SAY 'Updating existing SYSDATA.DBF file structure. '
  181.     USE
  182.     CREATE systemp.dbf FROM sysbuil.dbf
  183.     USE systemp EXCLUSIVE
  184.     APPEND FROM sysdata
  185.     IF .NOT. m0pgmid = 'MM'
  186.       REPLACE ALL sysid WITH m0pgmid + '01' FOR SUBSTR(sysid,1,2) = m0pgmid
  187.     ENDIF
  188.     USE
  189.     DELETE FILE sysdata.dbf
  190.     DELETE FILE sysbuil.dbf
  191.     RENAME systemp.dbf TO sysdata.dbf
  192.     USE sysdata
  193.   ENDIF && mupdated
  194.   IF m0pgmid = 'MM'
  195.     LOCATE FOR UPPER(SUBSTR(sysid,1,2)) = 'M0'
  196.   ELSE
  197.     LOCATE FOR UPPER(SUBSTR(sysid,1,2)) = m0pgmid
  198.   ENDIF
  199.   IF EOF()
  200.     IF .NOT. m0single
  201.       IF .NOT. lockedf
  202.         @ 23,3 SAY 'File ' + UPPER(DBF()) + '. Attempting to lock file...'
  203.         DO WHILE .NOT. lockedf
  204.           STORE FLOCK() TO lockedf
  205.         ENDDO
  206.         @ 23,0
  207.       ENDIF
  208.     ENDIF
  209.     IF FILE('sysd&m0pgmid.3.dbf')
  210.       IF m0pgmid = 'MM'
  211.         APPEND FROM sysd&m0pgmid.3.dbf FOR UPPER(SUBSTR(sysid,1,2)) = 'M0'
  212.       ELSE
  213.         APPEND FROM sysd&m0pgmid.3.dbf FOR UPPER(SUBSTR(sysid,1,2)) = m0pgmid
  214.       ENDIF
  215.     ENDIF
  216.   ENDIF
  217. ENDIF
  218. USE sysdata
  219. IF .NOT. m0single
  220.   STORE FLOCK() TO lockedf
  221.   IF .NOT. lockedf
  222.     @ 23,3 SAY 'File ' + UPPER(DBF()) + '. Attempting to lock file...'
  223.     DO WHILE .NOT. lockedf
  224.       STORE FLOCK() TO lockedf
  225.     ENDDO
  226.     @ 23,0
  227.   ENDIF
  228. ENDIF
  229. IF ('MAC' $ UPPER(OS()) .AND. fox)
  230.   STORE 'N' TO revvideo
  231. ELSE
  232.   STORE 'Y' TO revvideo
  233. ENDIF
  234. STORE 'N' TO mcolon
  235. IF mos $ 'DX'
  236.   @ 4,0 CLEAR
  237.   @ 4,5 SAY 'Are you using an IBM PC (or compatible) computer ? ' + ;
  238.   '(Y/N) ====> ' GET ibmcomp PICTURE 'Y'
  239.   READ
  240.   CLEAR GETS
  241. ELSE
  242.   STORE 'N' TO ibmcomp
  243. ENDIF
  244. @ 23,0
  245. @ 23,2 SAY '*****  Preparing System File  *****'
  246. IF m0pgmid = 'MM'
  247.   LOCATE FOR UPPER(SUBSTR(sysid,1,2)) = 'M0' .AND. SUBSTR(sysid,3,2) = '  '
  248. ELSE
  249.   LOCATE FOR UPPER(SUBSTR(sysid,1,2)) = m0pgmid .AND. SUBSTR(sysid,3,2) <> '  '
  250. ENDIF
  251. IF EOF()
  252.   APPEND BLANK
  253.   DO CASE
  254.     CASE m0pgmid = 'MM' .AND. 'MAC' $ UPPER(OS()) .AND. fox
  255.       REPLACE sysid WITH 'M0', pass2 WITH 'D         ', drive WITH ;
  256.       'C:' + SPACE(28) + 'C:' + SPACE(28) + 'C:' + SPACE(28) + 'YN' + ;
  257.       SPACE(105) + SUBSTR(m0vers,1,1) + SUBSTR(m0vers,3,2)
  258.     CASE m0pgmid = 'MM'
  259.       REPLACE sysid WITH 'M0', pass2 WITH 'D         ', drive WITH ;
  260.       'C:' + SPACE(28) + 'C:' + SPACE(28) + 'C:' + SPACE(28) + 'NN' + ;
  261.       SPACE(105) + SUBSTR(m0vers,1,1) + SUBSTR(m0vers,3,2)
  262.     CASE m0pgmid = 'PR' .AND. 'MAC' $ UPPER(OS()) .AND. fox
  263.       REPLACE sysid WITH m0pgmid + '01', pass2 WITH 'D         ', drive WITH ;
  264.       'C:' + SPACE(28) + 'C:' + SPACE(28) + 'C:' + SPACE(28) + 'YN' + ;
  265.       SPACE(105) + SUBSTR(m0vers,1,1) + SUBSTR(m0vers,3,2)
  266.     CASE m0pgmid = 'PR'
  267.       REPLACE sysid WITH m0pgmid + '01', pass2 WITH 'D         ', drive WITH ;
  268.       'C:' + SPACE(28) + 'C:' + SPACE(28) + 'C:' + SPACE(28) + 'NN' + ;
  269.       SPACE(105) + SUBSTR(m0vers,1,1) + SUBSTR(m0vers,3,2)
  270.     CASE 'MAC' $ UPPER(OS()) .AND. fox
  271.       REPLACE sysid WITH m0pgmid + '01', pass2 WITH 'D         ', drive WITH ;
  272.       'C:' + SPACE(28) + 'C:' + SPACE(28) + 'C:' + SPACE(28) + 'Y' + ;
  273.       SPACE(106) + SUBSTR(m0vers,1,1) + SUBSTR(m0vers,3,2)
  274.       REPLACE printer WITH '10       N'
  275.     OTHERWISE
  276.       REPLACE sysid WITH m0pgmid + '01', pass2 WITH 'D         ', drive WITH ;
  277.       'C:' + SPACE(28) + 'C:' + SPACE(28) + 'C:' + SPACE(28) + 'N' + ;
  278.       SPACE(106) + SUBSTR(m0vers,1,1) + SUBSTR(m0vers,3,2)
  279.       REPLACE printer WITH '10       N'
  280.   ENDCASE
  281.   REPLACE printer WITH '10       N'
  282.   DO CASE
  283.     CASE m0pgmid $ 'AP.SO.PO'
  284.       REPLACE link WITH 'N' + SPACE(199),  int1 WITH 10000
  285.     CASE m0pgmid = 'AR'
  286.       REPLACE link WITH 'N01C:' + SPACE(195),  int1 WITH 10000
  287.     CASE m0pgmid = 'JC'
  288.       REPLACE link WITH 'N' + SPACE(32) + 'N' + SPACE(32) + 'N' + ;
  289.       SPACE(32) + 'Y'
  290.     CASE m0pgmid = 'AS'
  291.       REPLACE link WITH 'N' + SPACE(199),  int1 WITH 10000
  292.     CASE m0pgmid = 'DB'
  293.       REPLACE link WITH 'N01CC:' + SPACE(194),  int1 WITH 10000, ;
  294.       int2 WITH 0, int3 WITH 0
  295.     CASE m0pgmid = 'MA'
  296.       REPLACE link WITH 'N01C:' + SPACE(195),  int1 WITH 10000
  297.     CASE m0pgmid = 'MN'
  298.       REPLACE link WITH 'N01C:' + SPACE(195)
  299.     CASE m0pgmid = 'PR'
  300.       REPLACE link WITH 'NNC:' + SPACE(28) + 'C:' + SPACE(28) + 'Y0101'
  301.   ENDCASE
  302. ENDIF
  303. IF DELETED()
  304.   RECALL
  305. ENDIF
  306. LOCATE FOR UPPER(sysid) = 'MM  '
  307. STORE .t. TO ok
  308. IF EOF()
  309.   STORE .f. TO ok
  310. ELSE
  311.   IF DELETED()
  312.     RECALL
  313.   ENDIF
  314.   IF SUBSTR(str3,20,3) <> ibmcomp + revvideo + mcolon .OR. ;
  315.     SUBSTR(link,1,2) <> m0switchar + mos
  316.     STORE .f. TO ok
  317.   ENDIF
  318. ENDIF
  319. IF .NOT. ok
  320.   IF EOF()
  321.     APPEND BLANK
  322.     REPLACE sysid WITH 'MM  '
  323.   ENDIF
  324.   * ' Fields used in MM record:
  325.   * ' Directory path separator:      SUBSTR(link,1,1)
  326.   * ' Operating Sys Type (D/M/X/A):  SUBSTR(link,1,1)
  327.   * ' Last date logged on:           SUBSTR(str8,1,8)
  328.   * ' IBM compatible (Y/N):          SUBSTR(str3,20,1)
  329.   * ' Left arrow character:          SUBSTR(str3,23,1)
  330.   * ' 10 arrow characters:           SUBSTR(str3,24,10)
  331.   * ' Right arrow character:         SUBSTR(str3,34,1)
  332.   * ' Menu border characters:        str2 + SUBSTR(str3,1,14)
  333.   DO CASE
  334.     CASE mcmax
  335.       STORE CHR(231) TO toplft
  336.       STORE CHR(242) TO topmid
  337.       STORE CHR(232) TO toprt
  338.       STORE CHR(233) TO bottlft
  339.       STORE CHR(243) TO bottmid
  340.       STORE CHR(234) TO bottrt
  341.       STORE CHR(229) TO vertedge
  342.       STORE CHR(218) TO vertcntr
  343.       STORE CHR(230) TO boldch
  344.       STORE CHR(219) TO centch
  345.       STORE CHR(240) TO centlft
  346.       STORE CHR(228) TO cross
  347.       STORE CHR(241) TO centrt
  348.       STORE '>' TO rtarrow
  349.       STORE '<' TO lftarrow
  350.       STORE CHR(230) TO arrow
  351.     CASE ibmcomp = 'Y'
  352.       STORE CHR(201) TO toplft
  353.       STORE CHR(209) TO topmid
  354.       STORE CHR(187) TO toprt
  355.       STORE CHR(200) TO bottlft
  356.       STORE CHR(207) TO bottmid
  357.       STORE CHR(188) TO bottrt
  358.       STORE CHR(186) TO vertedge
  359.       STORE CHR(179) TO vertcntr
  360.       STORE CHR(205) TO boldch
  361.       STORE CHR(196) TO centch
  362.       STORE CHR(199) TO centlft
  363.       STORE CHR(197) TO cross
  364.       STORE CHR(182) TO centrt
  365.       IF mos = 'D'
  366.         STORE CHR(16) TO rtarrow
  367.         STORE CHR(17) TO lftarrow
  368.       ELSE
  369.         STORE '>' TO rtarrow
  370.         STORE '<' TO lftarrow
  371.       ENDIF
  372.       STORE CHR(205) TO arrow
  373.     OTHERWISE
  374.       STORE '+' TO toplft
  375.       STORE '-' TO topmid
  376.       STORE '+' TO toprt
  377.       STORE '+' TO bottlft
  378.       STORE '-' TO bottmid
  379.       STORE '+' TO bottrt
  380.       STORE '|' TO vertedge
  381.       STORE '|' TO vertcntr
  382.       STORE '-' TO boldch
  383.       STORE '-' TO centch
  384.       STORE '|' TO centlft
  385.       STORE '+' TO cross
  386.       STORE '|' TO centrt
  387.       STORE '>' TO rtarrow
  388.       STORE '<' TO lftarrow
  389.       STORE '=' TO arrow
  390.   ENDCASE
  391.   STORE boldch + boldch + boldch + boldch + boldch TO bold
  392.   STORE bold + bold + bold + bold TO bold
  393.   STORE bold + bold + bold + bold TO bold
  394.   STORE centch + centch + centch + centch + centch TO cent
  395.   STORE cent + cent + cent + cent TO cent
  396.   STORE cent + cent TO cent
  397.   STORE centlft + SUBSTR(cent,1,36) + cross + SUBSTR(cent,1,37) + centrt TO ;
  398.   cent
  399.   STORE lftarrow + arrow + arrow + arrow + arrow + arrow + arrow + ;
  400.   arrow + arrow + arrow + arrow + rtarrow TO arrow
  401.   STORE toplft + topmid + toprt + bottlft + bottmid + bottrt TO m0border
  402.   STORE m0border + vertedge + vertcntr + ' ' + bold + cent TO m0border
  403.   STORE m0border + '    ' + ibmcomp + revvideo + mcolon + arrow TO m0border
  404.   REPLACE link WITH m0switchar + mos + SUBSTR(link,3,198), str2 WITH ;
  405.   SUBSTR(m0border,1,150), str3 WITH SUBSTR(m0border,151,34) + SUBSTR(str3,35)
  406. ENDIF && .NOT. ok
  407. STORE a->str2 + SUBSTR(a->str3,1,34) TO m0border
  408. IF SUBSTR(m0border,170,1) = 'Y' .OR. mcmax
  409.   STORE SUBSTR(m0border,10,45) + '  ' + TRIM(m0cname) + '  ' + ;
  410.   SUBSTR(m0border,10,45) TO m0company
  411. ELSE
  412.   STORE '=============================================' + '  ' + ;
  413.   TRIM(m0cname) + '  ' + '=============================================' ;
  414.   TO m0company
  415. ENDIF
  416. STORE SUBSTR(m0company,(LEN(m0company) - 76)/2,78) + mversion TO m0company
  417. SET DELIMITER OFF
  418. @ 1,40 - INT(LEN(m0system)/2) SAY m0system
  419. @ 1,73 SAY SUBSTR(m0company,79,6)
  420. @ 2,1 SAY SUBSTR(m0company,1,78)
  421. STORE .t. TO mfirst
  422. IF ibmcomp = 'Y' .OR. ('MAC' $ UPPER(OS()) .AND. fox)
  423.   @ 4,0 CLEAR
  424.   * ' Monitor type and color setup
  425.   IF SUBSTR(str5,1,1) <> ' '
  426.     STORE SUBSTR(str5,1,1) TO m0monitor
  427.   ENDIF
  428.   STORE TRIM(LTRIM(SUBSTR(str5,2,25))) TO m0color
  429.   STORE '[ Sample Enhanced Text ]' TO msg
  430.   DO CASE
  431.     CASE LEN(TRIM(m0color)) > 0
  432.       STORE TRIM(m0color) TO mcolor
  433.       DO WHILE ' ' $ mcolor
  434.         STORE AT(' ',mcolor) TO mpos
  435.         STORE SUBSTR(mcolor,1,mpos-1) + SUBSTR(mcolor,mpos+1) TO mcolor
  436.       ENDDO
  437.       SET COLOR TO &mcolor
  438.     CASE ISCOLOR()
  439.       SET COLOR TO W+/B,N/W,B
  440.       STORE 'W+ /B  ,N  /W  ,B        ' TO m0color
  441.     CASE 'MAC' $ UPPER(OS()) .AND. fox
  442.       SET COLOR TO N/W,W/N,N
  443.       STORE 'N  /W  ,W  /N  ,N        ' TO m0color
  444.     OTHERWISE
  445.       SET COLOR TO W+/N,N/W,N
  446.       STORE 'W+ /N  ,N  /W  ,N        ' TO m0color
  447.   ENDCASE
  448.   DO WHILE .t.
  449.     CLEAR
  450.     @ 1,40 - INT(LEN(m0system)/2) SAY m0system
  451.     @ 1,73 SAY SUBSTR(m0company,79,6)
  452.     @ 2,1 SAY SUBSTR(m0company,1,78)
  453.     IF mfirst
  454.       @ 4,0 CLEAR
  455.       @ 4,5 SAY 'Monitor Type (Color/Mono/Ask on startup) ' + ;
  456.       SUBSTR(m0border,181,5) GET m0monitor PICTURE '!'
  457.       READ SAVE
  458.       DO WHILE .NOT. m0monitor $ 'CMA'
  459.         ?? CHR(7)
  460.         READ SAVE
  461.       ENDDO
  462.     ENDIF
  463.     CLEAR GETS
  464.     @ 4,0 CLEAR
  465.     IF mans = 'Y'
  466.       EXIT
  467.     ENDIF
  468.     @ 6,5 GET msg
  469.     @ 6,46 SAY '[ Sample Standard Text ]'
  470.     CLEAR GETS
  471.     @ 10,5 SAY 'Color:    Letter Code:'
  472.     @ 12,5 SAY 'Black         N'
  473.     IF m0monitor = 'M'
  474.       @ 8,5 SAY 'Enter shadings:'
  475.       @ 9,8 SAY '(add + after letter for high intensity - foreground only)'
  476.       @ 13,5 SAY 'White         W'
  477.       @ 14,5 SAY 'Underlined    U'
  478.       STORE 'N  ,W  ,U  ,N+ ,W+ ,U+ ,' TO mvalid
  479.     ELSE
  480.       IF m0monitor = 'A'
  481.         @ 4,5 SAY 'Enter the color combinations you want when you choose ' +  ;
  482.         'color on startup.'
  483.       ENDIF
  484.       @ 8,5 SAY 'Enter colors:'
  485.       @ 9,8 SAY '(add + after letter for high intensity - foreground only)'
  486.       @ 13,5 SAY 'Blue          B'
  487.       @ 14,5 SAY 'Green         G'
  488.       @ 15,5 SAY 'Cyan          BG'
  489.       @ 10,45 SAY 'Color:    Letter Code:'
  490.       @ 12,45 SAY 'Red           R'
  491.       @ 13,45 SAY 'Magenta       RB'
  492.       @ 14,45 SAY 'Brown         GR'
  493.       @ 15,45 SAY 'White         W'
  494.       STORE 'N  ,R  ,B  ,RB ,G  ,GR ,BG ,W  ,N+ ,R+ ,B+ ,RB+,G+ ,GR+,' + ;
  495.       'BG+,W+ ,' TO mvalid
  496.     ENDIF && m0monitor = 'M'
  497.     STORE SUBSTR(m0color,1,3) TO mstf
  498.     STORE SUBSTR(m0color,5,3) TO mstb
  499.     STORE SUBSTR(m0color,9,3) TO menf
  500.     STORE SUBSTR(m0color,13,3) TO menb
  501.     STORE SUBSTR(m0color,17,3) TO mbrd
  502.     STORE SUBSTR(mbrd+SPACE(3),1,3) TO mbrd
  503.     DO WHILE .t.
  504.       @ 18,3 SAY 'Standard Text Foreground: ' GET mstf PICTURE '!!!'
  505.       @ 18,49 SAY 'Standard Text Background: ' GET mstb PICTURE '!!!'
  506.       @ 19,3 SAY 'Enhanced Text Foreground: ' GET menf PICTURE '!!!'
  507.       @ 19,49 SAY 'Enhanced Text Background: ' GET menb PICTURE '!!!'
  508.       IF m0monitor = 'M'
  509.         @ 20,3 SAY 'Screen Border Color:      ' GET mbrd PICTURE '!!!'
  510.       ELSE
  511.         @ 20,3 SAY 'Screen Border Shading:    ' GET mbrd PICTURE '!!!'
  512.       ENDIF
  513.       @ 20,35 SAY SUBSTR(m0border,173,3) + ;
  514.       ' (May not appear, hardware dependent.)'
  515.       IF mfirst
  516.         STORE .f. TO mfirst
  517.         CLEAR GETS
  518.         EXIT
  519.       ENDIF
  520.       READ
  521.       @ 22,0
  522.       STORE .t. TO mok, mstfok, mstbok, menfok, menbok, mbrdok
  523.       STORE IIF(',' $ mstf .OR. .NOT. mstf $ mvalid, .f., mok) TO mok, mstfok
  524.       STORE IIF(',' $ mstb .OR. .NOT. mstb $ mvalid, .f., mok) TO mok, mstbok
  525.       STORE IIF(',' $ menf .OR. .NOT. menf $ mvalid, .f., mok) TO mok, menfok
  526.       STORE IIF(',' $ menb .OR. .NOT. menb $ mvalid, .f., mok) TO mok, menbok
  527.       STORE IIF(',' $ mbrd .OR. .NOT. mbrd $ mvalid, .f., mok) TO mok, mbrdok
  528.       IF mok
  529.         STORE mstf + '/' + mstb + ',' + menf + '/' + menb + ',' + mbrd TO mcolor
  530.         STORE SUBSTR(mcolor + SPACE(25),1,25) TO m0color
  531.         STORE TRIM(LTRIM(mcolor)) TO mcolor
  532.         DO WHILE ' ' $ mcolor
  533.           STORE AT(' ',mcolor) TO mpos
  534.           STORE SUBSTR(mcolor,1,mpos-1) + SUBSTR(mcolor,mpos+1) TO mcolor
  535.         ENDDO
  536.         SET COLOR TO &mcolor
  537.         EXIT
  538.       ENDIF
  539.       ?? CHR(7)
  540.       DO CASE
  541.         CASE .NOT. mstfok
  542.           @ 22,5 SAY ;
  543.           'Error in Standard Text Foreground specification.  Please reenter...'
  544.         CASE .NOT. mstbok
  545.           @ 22,5 SAY ;
  546.           'Error in Standard Text Background specification.  Please reenter...'
  547.         CASE .NOT. menfok
  548.           @ 22,5 SAY ;
  549.           'Error in Enhanced Text Foreground specification.  Please reenter...'
  550.         CASE .NOT. menbok
  551.           @ 22,5 SAY ;
  552.           'Error in Enhanced Text Background specification.  Please reenter...'
  553.         CASE .NOT. mbrdok
  554.           @ 22,5 SAY ;
  555.           'Error in Standard Text Border specification.  Please reenter...'
  556.       ENDCASE
  557.     ENDDO && WHILE .t.
  558.     @ 6,5 GET msg
  559.     @ 6,46 SAY '[ Sample Standard Text ]'
  560.     CLEAR GETS
  561.     STORE 'Y' TO mans
  562.     IF m0monitor = 'M'
  563.       @ 23,5 SAY 'Are these shadings okay ? (Y/N) ' + ;
  564.       SUBSTR(m0border,181,5) GET mans PICTURE 'Y'
  565.     ELSE
  566.       @ 23,5 SAY 'Are these color combinations okay ? (Y/N) ' + ;
  567.       SUBSTR(m0border,181,5) GET mans PICTURE 'Y'
  568.     ENDIF
  569.     READ
  570.     IF mans = 'Y'
  571.       EXIT
  572.     ENDIF
  573.   ENDDO && WHILE .t.
  574. ELSE
  575.   STORE 'W+ /N  ,N  /W  ,N        ' TO m0color
  576.   STORE 'M' TO m0monitor
  577. ENDIF && ibmcomp = 'Y'
  578. CLEAR
  579. @ 1,40 - INT(LEN(m0system)/2) SAY m0system
  580. @ 1,73 SAY SUBSTR(m0company,79,6)
  581. @ 2,1 SAY SUBSTR(m0company,1,78)
  582. IF CTOD(SUBSTR(a->str8,1,8)) > DATE()
  583.   STORE CTOD(SUBSTR(str8,1,8)) TO m0date
  584. ELSE
  585.   STORE DATE() TO m0date
  586.   STORE DTOC(m0date) TO mdate
  587.   CLEAR GETS
  588.   @ 10,10 SAY "Please enter today's date (Mo/Da/Yr) " + ;
  589.   SUBSTR(m0border,180,6)
  590.   @ 10,53 GET mdate PICTURE '##/##/##'
  591.   READ SAVE
  592.   DO WHILE DTOC(CTOD(mdate)) <> mdate
  593.     ?? CHR(7)
  594.     @ 10,65 SAY 'Invalid Date.'
  595.     READ SAVE
  596.     @ 10,65
  597.   ENDDO
  598.   @ 10,53 SAY mdate PICTURE '##/##/##'
  599.   CLEAR GETS
  600.   STORE CTOD(mdate) TO m0date
  601. ENDIF
  602. IF m0pgmid = 'MM'
  603.   LOCATE FOR UPPER(SUBSTR(sysid,1,2)) = 'M0' .AND. SUBSTR(sysid,3,2) = '  '
  604. ELSE
  605.   LOCATE FOR UPPER(SUBSTR(sysid,1,2)) = m0pgmid .AND. SUBSTR(sysid,3,2) <> '  '
  606. ENDIF
  607. STORE SUBSTR(drive,1,30) TO m0cmddr
  608. STORE SUBSTR(drive,31,30) TO m0sysdr
  609. STORE SUBSTR(a->printer,1,2) TO mchars
  610. IF m0pgmid = 'GL' .AND. SUBSTR(drive,198,3) = '   '
  611.   STORE SUBSTR(drive,1,1) + ':' + SPACE(28) TO m0cmddr
  612.   STORE SUBSTR(drive,2,1) + ':' + SPACE(28) TO m0sysdr
  613. ENDIF
  614. IF 'MAC' $ UPPER(OS()) .AND. fox
  615.   STORE '12' TO mchars
  616.   STORE SUBSTR(a->printer,3,1) TO m0port
  617. ELSE
  618.   STORE ' ' TO m0port
  619. ENDIF
  620. IF .NOT. ('MAC' $ UPPER(OS()) .AND. fox)
  621.   @ 13,10 SAY 'Printer Characters Spacing ' + SUBSTR(m0border,182,4)
  622.   @ 13,42 GET mchars PICTURE '##'
  623.   @ 14,10 SAY '(10 or 12 characters/inch)'
  624.   @ 16,10 SAY 'Enter the spacing your printer will be set up to.'
  625.   @ 17,10 SAY 'You must also set your printer to this spacing.'
  626. ELSE
  627.   @ 13,10 SAY 'Printer connected to port ' + SUBSTR(m0border,181,5)
  628.   @ 13,42 GET m0port PICTURE '!'
  629.   @ 14,10 SAY '(Printer/Modem)'
  630. ENDIF
  631. READ
  632. IF 'MAC' $ UPPER(OS()) .AND. fox
  633.   DO WHILE .NOT. m0port $ 'PM'
  634.     ?? CHR(7)
  635.     @ 13,42 GET m0port PICTURE '!'
  636.     @ 13,49 SAY SUBSTR(m0border,173, 3) + " Enter 'P' or 'M'"
  637.     READ
  638.     @ 13,49
  639.   ENDDO
  640.   CLEAR GETS
  641. ELSE
  642.   DO WHILE mchars <> '10' .AND. mchars <> '12'
  643.     ?? CHR(7)
  644.     @ 13,42 GET mchars PICTURE '##'
  645.     @ 13,49 SAY SUBSTR(m0border,173, 3) + " Enter '10' or '12'"
  646.     READ
  647.     @ 13,49
  648.   ENDDO
  649.   CLEAR GETS
  650. ENDIF
  651. @ 4,0 CLEAR
  652. @ 1,1 SAY DTOC(m0date)
  653. @ 6,3 SAY 'Program Drive\Directory ' + SUBSTR(m0border,179,7)
  654. @ 6,35 GET m0cmddr PICTURE "&m0drvpict"
  655. @ 7,35 SAY 'Drive containing *.PRG and *.FRM files.'
  656. @ 10,3 SAY 'System Data Drive\Directory ' + SUBSTR(m0border,183,3)
  657. @ 10,35 GET m0sysdr PICTURE "&m0drvpict"
  658. @ 11,35 SAY 'Drive containing SYSDATA.DBF, any'
  659. @ 12,35 SAY 'other System files which may be present.'
  660. @ 13,35 SAY '(SYSTABL.DBF, SYSTABC.NDX, SYSTABN.NDX'
  661. @ 14,35 SAY 'and/or SYS' + m0pgmid + 'MN.DBF).'
  662. @ 17,3 SAY 'NOTE:'
  663. @ 18,7 SAY ;
  664. 'You will enter the location of your Data files when you add a company.'
  665. @ 19,7 SAY 'You can change the location using the Change option on the'
  666. @ 20,7 SAY 'Setup Information or System Access Menu.'
  667. READ
  668. IF SUBSTR(m0cmddr,1,1) = ' ' .OR. SUBSTR(m0sysdr,1,1) = ' '
  669.   STORE .f. TO mok
  670. ELSE
  671.   STORE .t. TO mok
  672. ENDIF
  673. DO WHILE mok
  674.   STORE TRIM(m0cmddr) TO m0cmddr
  675.   IF m0switchar = '\'
  676.     IF LEN(m0cmddr) > 2
  677.       IF SUBSTR(m0cmddr,3,1) <> m0switchar
  678.         STORE SUBSTR(m0cmddr,1,2) + m0switchar + ;
  679.         SUBSTR(m0cmddr,3,LEN(m0cmddr) - 2) TO m0cmddr
  680.       ENDIF
  681.     ENDIF
  682.     IF LEN(m0cmddr) > 3 .AND. SUBSTR(m0cmddr,LEN(m0cmddr),1) <> m0switchar
  683.       STORE SUBSTR(m0cmddr,1,LEN(m0cmddr)) + m0switchar TO m0cmddr
  684.     ENDIF
  685.   ELSE
  686.     IF LEN(m0cmddr) > 0
  687.       IF SUBSTR(m0cmddr,LEN(m0cmddr),1) <> m0switchar
  688.         STORE SUBSTR(m0cmddr,1,LEN(m0cmddr)) + m0switchar TO m0cmddr
  689.       ENDIF
  690.     ENDIF
  691.   ENDIF
  692.   IF LEN(TRIM(m0cmddr)) >= 30
  693.     STORE SUBSTR(m0cmddr,1,29) + m0switchar TO m0cmddr
  694.   ENDIF
  695.   IF .NOT. ' ' $ m0cmddr
  696.     DO CASE
  697.       CASE clipper .OR. xquicks
  698.         STORE .t. TO mfound
  699.       CASE FILE('&m0cmddr.&m0pgmid..prg')
  700.         STORE .t. TO mfound
  701.       CASE FILE('&m0cmddr.&m0pgmid..fox')
  702.         STORE .t. TO mfound
  703.       CASE FILE('&m0cmddr.&m0pgmid..fxp')
  704.         STORE .t. TO mfound
  705.       CASE FILE('&m0cmddr.&m0pgmid..cod')
  706.         STORE .t. TO mfound
  707.       CASE FILE('&m0cmddr.&m0pgmid..cmd')
  708.         STORE .t. TO mfound
  709.       CASE FILE('&m0cmddr.&m0pgmid..run')
  710.         STORE .t. TO mfound
  711.       CASE FILE('&m0cmddr.&m0pgmid..dbo')
  712.         STORE .t. TO mfound
  713.       OTHERWISE
  714.         STORE .f. TO mfound
  715.     ENDCASE
  716.     IF mfound
  717.       EXIT
  718.     ENDIF
  719.   ENDIF
  720.   STORE SUBSTR(m0cmddr + SPACE(30),1,30) TO m0cmddr
  721.   ?? CHR(7)
  722.   @ 6,35 GET m0cmddr PICTURE "&m0drvpict"
  723.   @ 22,2 SAY 'Invalid Program Drive or Directory. ' + ;
  724.   'Please reenter or blank to quit...'
  725.   READ
  726.   @ 22,0 CLEAR
  727.   IF SUBSTR(m0cmddr,1,1) = ' '
  728.     STORE .f. TO mok
  729.     EXIT
  730.   ENDIF
  731. ENDDO && WHILE mok
  732. CLEAR GETS
  733. DO WHILE mok
  734.   STORE TRIM(m0sysdr) TO m0sysdr
  735.   IF m0switchar = '\'
  736.     IF LEN(m0sysdr) > 2
  737.       IF SUBSTR(m0sysdr,3,1) <> m0switchar
  738.         STORE SUBSTR(m0sysdr,1,2) + m0switchar + ;
  739.         SUBSTR(m0sysdr,3,LEN(m0sysdr) - 2) TO m0sysdr
  740.       ENDIF
  741.     ENDIF
  742.     IF LEN(m0sysdr) > 3 .AND. SUBSTR(m0sysdr,LEN(m0sysdr),1) <> m0switchar
  743.       STORE SUBSTR(m0sysdr,1,LEN(m0sysdr)) + m0switchar TO m0sysdr
  744.     ENDIF
  745.   ELSE
  746.     IF LEN(m0sysdr) > 0
  747.       IF SUBSTR(m0sysdr,LEN(m0sysdr),1) <> m0switchar
  748.         STORE SUBSTR(m0sysdr,1,LEN(m0sysdr)) + m0switchar TO m0sysdr
  749.       ENDIF
  750.     ENDIF
  751.   ENDIF
  752.   IF LEN(TRIM(m0sysdr)) >= 30
  753.     STORE SUBSTR(m0sysdr,1,29) + m0switchar TO m0sysdr
  754.   ENDIF
  755.   IF .NOT. ' ' $ m0sysdr
  756.     IF FILE('&m0sysdr.sysdata.dbf')
  757.       EXIT
  758.     ENDIF
  759.   ENDIF
  760.   STORE SUBSTR(m0sysdr + SPACE(30),1,30) TO m0sysdr
  761.   ?? CHR(7)
  762.   @ 10,35 GET m0sysdr PICTURE "&m0drvpict"
  763.   @ 22,2 SAY 'Invalid System Drive or Directory. ' + ;
  764.   'Please reenter or blank to quit...'
  765.   READ
  766.   @ 22,0 CLEAR
  767.   IF SUBSTR(m0sysdr,1,1) = ' '
  768.     STORE .f. TO mok
  769.     EXIT
  770.   ENDIF
  771. ENDDO && WHILE mok
  772. CLEAR GETS
  773. IF mok
  774.   @ 6,35 SAY SUBSTR(m0cmddr + SPACE(30),1,30) PICTURE "&m0drvpict"
  775.   @ 10,35 SAY SUBSTR(m0sysdr + SPACE(30),1,30) PICTURE "&m0drvpict"
  776.   STORE 'Y' TO mans
  777.   @ 22,3 SAY 'Update System File ? (Y/N) ' + SUBSTR(m0border,179,7) ;
  778.   GET mans PICTURE 'Y'
  779.   READ
  780.   @ 22,0
  781.   IF mans = 'N'
  782.     STORE .f. TO mok
  783.   ENDIF
  784. ENDIF && mok
  785. IF .NOT. mok
  786.   UNLOCK
  787.   CLEAR
  788.   @ 2,1 SAY 'Install Cancelled...'
  789.   @ 4,1 SAY '*****  Install Program Normal End  *****'
  790.   SET DEFAULT TO
  791.   SET TALK ON
  792.   SET SAFETY ON
  793.   CLEAR ALL
  794.   CANCEL
  795. ENDIF && .NOT. mok
  796. LOCATE FOR UPPER(sysid) = 'MM  '
  797. REPLACE str8 WITH DTOC(m0date) + SUBSTR(a->str8,9,2)
  798. REPLACE str5 WITH m0monitor + m0color + SUBSTR(str5,27,4)
  799. REPLACE ALL printer WITH mchars + m0port + SUBSTR(a->printer,4,7) FOR ;
  800. UPPER(SUBSTR(a->sysid,1,2)) = m0pgmid
  801. STORE .f. TO m0litebar
  802. DO CASE
  803.   CASE VAL(m0vers) < 6.30 .AND. .NOT. (m0pgmid = 'MA' .AND. VAL(m0vers) < 615)
  804.     * ' leave litebar false for non supported versions
  805.   CASE clipper .AND. .NOT. ('86' $ VERSION())
  806.     STORE .t. TO m0litebar
  807.   CASE fox .AND. ' 2.' $ VERSION()
  808.     STORE .t. TO m0litebar
  809. ENDCASE
  810. IF m0litebar
  811.   * ' Must index the menu files here..accessed before regular XXUTIL.PRG
  812.   STORE 'SYS' + m0pgmid + 'MN' TO menuf
  813.   STORE 'SYS' + m0pgmid + 'MO' TO menuo
  814.   IF FILE ('&m0sysdr.&menuf..dbf')
  815.     @ 23,0
  816.     @ 23,2 SAY '*****  Building Indexes for Light Bar Menus  *****'
  817.     USE &m0sysdr.&menuf
  818.     COPY TO &m0sysdr.tempfile FOR .NOT. DELETED()
  819.     USE
  820.     DELETE FILE &m0sysdr.&menuf..dbf
  821.     RENAME &m0sysdr.tempfile.dbf TO &m0sysdr.&menuf..dbf
  822.     IF FILE ('&m0sysdr.&menuf..ndx')
  823.       DELETE FILE &m0sysdr.&menuf..ndx
  824.     ENDIF
  825.     IF FILE ('&m0sysdr.&menuo..ndx')
  826.       DELETE FILE &m0sysdr.&menuo..ndx
  827.     ENDIF
  828.     USE &m0sysdr.&menuf
  829.     INDEX ON menuprg+SUBSTR(STR(1000 + disprow + dispcol,4,0),2,3) ;
  830.     TO &m0sysdr.&menuo..ndx
  831.     INDEX ON menuprg+SUBSTR(title,1,1) TO &m0sysdr.&menuf..ndx
  832.     @ 23,0
  833.     @ 23,0
  834.     @ 23,2 SAY '*****  Deleting any Previous Light Bar MEM files  *****'
  835.     USE &m0sysdr.sysdata.dbf
  836.     SET FILTER TO SUBSTR(sysid,1,2) = m0pgmid
  837.     GO TOP
  838.     DO WHILE .NOT. EOF()
  839.       STORE TRIM(SUBSTR(drive,61,30)) + m0pgmid + 'MENU' + SUBSTR(sysid,3,2) ;
  840.       TO m0arrayf
  841.       IF FILE ('&m0arrayf..mem')
  842.         DELETE FILE &m0arrayf..mem
  843.       ENDIF
  844.       SKIP
  845.     ENDDO
  846.   ENDIF
  847. ENDIF
  848. * ' set litebar to false in case calling conversion, where it must be off
  849. STORE .f. TO m0litebar
  850. USE &m0sysdr.sysdata
  851. IF .NOT. m0single
  852.   STORE FLOCK() TO lockedf
  853.   IF .NOT. lockedf
  854.     @ 23,3 SAY 'File ' + UPPER(DBF()) + '. Attempting to lock file...'
  855.     DO WHILE .NOT. lockedf
  856.       STORE FLOCK() TO lockedf
  857.     ENDDO
  858.     @ 23,0
  859.   ENDIF
  860. ENDIF
  861. RETURN
  862. *
  863. * ' $Revision:   1.27  $
  864. * ' $Date:   29 May 1990 17:34:34  $
  865. **********************
  866. ** ' SYSINST.PRG  ' **
  867. ** '  868 Lines   ' **
  868. **********************
  869.