home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a070 / 1.ddi / FOXPRO / PROINST.PRG < prev   
Encoding:
Text File  |  1990-02-20  |  17.6 KB  |  609 lines

  1. *:*********************************************************************
  2. *:
  3. *:        Program: PROINST.PRG
  4. *:
  5. *:         System:
  6. *:         Author:
  7. *:      Copyright (c) 1989,
  8. *:  Last modified: 11/05/89     15:12
  9. *:
  10. *:  Procs & Fncts: ERRPROC
  11. *:               : COLOR
  12. *:               : MAIN
  13. *:               : SELALL
  14. *:               : SELNONE
  15. *:               : SELONE
  16. *:               : DISPDISK
  17. *:               : DONE
  18. *:               : ABORT
  19. *:               : FOXUSER
  20. *:               : INSTALL
  21. *:               : INSRTDSK
  22. *:               : UNARCH
  23. *:               : FINISHED
  24. *:               : ERRPROC2
  25. *:               : ESCPROC
  26. *:               : MSG3
  27. *:
  28. *:          Calls: ERRPROC        (procedure in PROINST.PRG)
  29. *:               : COLOR          (procedure in PROINST.PRG)
  30. *:               : MAIN           (procedure in PROINST.PRG)
  31. *:
  32. *:           Uses: MONITOR.DBF
  33. *:
  34. *:      Documented 11/06/89 at 11:52               FoxDoc  version 2.0
  35. *:*********************************************************************
  36. PARAMETER srcdrive
  37. ON ERROR DO errproc        &&establish error routine
  38. PUBLIC color, alone
  39. DEFINE WINDOW alert FROM 16,10 TO 22,70 DOUBLE COLOR SCHEME 5
  40. SET HELP OFF
  41. SET SAFETY OFF
  42. SET ESCAPE OFF
  43. SET TALK OFF
  44. SET CONFIRM ON
  45. SET SYSMENU OFF
  46. CLEAR
  47. CLEAR MACROS
  48. CLOSE ALL
  49. SET EXACT ON
  50. IF PARAMETERS()=0
  51.    alone = .T.
  52.    srcdrive = SPACE(2)
  53.    @ 4,32 SAY "Source Drive: " GET srcdrive PICTURE "@M A:,B:";
  54.       MESSAGE "Press spacebar to select source drive."
  55.    READ
  56.    CLEAR
  57. ENDIF
  58. SET EXACT OFF
  59. SET RESOURCE OFF
  60. USE monitor
  61. INDEX ON sequence TO temp
  62. @ 2,20 SAY "Please select your monitor type:"
  63. DEFINE POPUP COLOR FROM 4,20 PROMPT FIELD descript
  64. ON SELECTION POPUP COLOR DO color
  65. ACTIVATE POPUP COLOR
  66. RELEASE POPUP COLOR
  67. DO main
  68.  
  69. *!*********************************************************************
  70. *!
  71. *!      Procedure: MAIN
  72. *!
  73. *!      Called by: PROINST.PRG
  74. *!
  75. *!          Calls: FOXUSER        (procedure in PROINST.PRG)
  76. *!               : DISPDISK       (procedure in PROINST.PRG)
  77. *!               : SELONE         (procedure in PROINST.PRG)
  78. *!               : SELALL         (procedure in PROINST.PRG)
  79. *!               : SELNONE        (procedure in PROINST.PRG)
  80. *!               : DONE           (procedure in PROINST.PRG)
  81. *!               : ABORT          (procedure in PROINST.PRG)
  82. *!
  83. *!           Uses: PROINST.DBF        Alias: CONTENTS
  84. *!
  85. *!        Indexes: SEQNO.IDX
  86. *!
  87. *!*********************************************************************
  88. PROCEDURE main
  89. PUBLIC temp
  90. CLOSE ALL
  91. CLEAR WINDOW
  92. CLEAR
  93. DEFINE WINDOW tbrowse FROM 7,1 TO 19,35 COLOR SCHEME 8
  94. DEFINE WINDOW thelp FROM 7,40 TO 19,77 SYSTEM COLOR SCHEME 8 ;
  95.    TITLE ' Details '
  96. DEFINE WINDOW tkeys FROM 0,1 TO 4,78 COLOR SCHEME 8 ;
  97.    DOUBLE TITLE " FoxPro Optional Products Installation Procedure "
  98. DEFINE WINDOW DISK FROM 22,1 TO 24,78 COLOR SCHEME 8 ;
  99.    DOUBLE TITLE " Disk Statistics "
  100. DEFINE WINDOW alert FROM 16,10 TO 22,70 DOUBLE COLOR SCHEME 7
  101. DEFINE WINDOW abort FROM 11,5 TO 22,75 DOUBLE COLOR SCHEME 5
  102. DO foxuser
  103. USE proinst ALIAS contents
  104. INDEX ON seqno TO seqno
  105. homedir = SYS(2004)        && get directory where foxpro.exe resides
  106. tdisk = 0
  107. SUM SPACE TO mdisk
  108. REPLACE ALL install WITH " NO  "
  109. GO TOP
  110. ACTIVATE WINDOW tkeys
  111. @ 0,0 SAY  "Press Spacebar to select current item"
  112. @ 1,0 SAY  "Press F2 to select all items"
  113. @ 2,0 SAY  "Press F3 to deselect all items"
  114. @ 0,39 SAY "Press  arrow keys to move cursor"
  115. @ 1,39 SAY "Press Enter to install selected items"
  116. @ 2,39 SAY "Press Esc to abort installation"
  117. ACTIVATE WINDOW DISK
  118. DO dispdisk
  119. DO WHILE .T.
  120.    ON KEY
  121.    ON KEY LABEL spacebar DO selone
  122.    ON KEY LABEL f2 DO selall
  123.    ON KEY LABEL f3 DO selnone
  124.    ON KEY LABEL enter DO done
  125.    * removed 2/16/90 SET WINDOW OF MEMO TO thelp
  126.    MODIFY MEMO details WINDOW thelp NOWAIT
  127.    * removed 2/16/90 ACTIVATE WINDOW tbrowse
  128.    BROWSE FIELDS product/17,SPACE/5,install/7 ;
  129.       NOMODIFY NOMENU NOAPPEND NODELETE ;
  130.       NOCLEAR SAVE FREEZE product WINDOW tbrowse
  131.    IF LASTKEY() = 27
  132.       DO abort
  133.    ENDIF
  134. ENDDO
  135. CLOSE ALL
  136. CLEAR WINDOWS
  137. CLEAR MENUS
  138. DELETE FILE monitor2.dbf
  139. DELETE FILE monitor2.fpt
  140. DELETE FILE temp.idx
  141. DELETE FILE seqno.idx
  142. DELETE FILE foxvinst.prg
  143. DELETE FILE foxvinst.fxp
  144. DELETE FILE fvbrand.com
  145. DELETE FILE foxview.bak
  146. QUIT
  147.  
  148. *!*********************************************************************
  149. *!
  150. *!      Procedure: COLOR
  151. *!
  152. *!      Called by: PROINST.PRG
  153. *!
  154. *!*********************************************************************
  155. PROCEDURE color
  156. STORE RECNO() TO mbar
  157. SET INDEX TO
  158. COPY TO monitor2 FIELDS MONITOR.TYPE,MONITOR.ID,MONITOR.NAME,;
  159.     MONITOR.READONLY,MONITOR.CKVAL,MONITOR.DATA,MONITOR.UPDATED
  160. USE monitor2
  161. GOTO mbar
  162. IF LASTKEY() <> 27 .AND. BAR() <> 1 .AND. BAR() <> 2
  163.    REPLACE name WITH "DEFAULT"
  164.    USE
  165.    SET RESOURCE TO monitor2
  166.    SET COLOR SET TO default
  167.    CLEAR
  168.    COLOR = .T.
  169. ELSE
  170.    USE
  171. ENDIF
  172. DEACTIVATE POPUP COLOR
  173.  
  174. *!*********************************************************************
  175. *!
  176. *!      Procedure: SELALL
  177. *!
  178. *!      Called by: MAIN           (procedure in PROINST.PRG)
  179. *!               : DONE           (procedure in PROINST.PRG)
  180. *!               : ABORT          (procedure in PROINST.PRG)
  181. *!
  182. *!          Calls: DISPDISK       (procedure in PROINST.PRG)
  183. *!
  184. *!*********************************************************************
  185. PROCEDURE selall
  186. REPLACE ALL install WITH " YES "
  187. LOCATE FOR FILENAME = "SMHELP.PAK"
  188. IF FOUND()
  189.     REPLACE install WITH " NO  "
  190. ENDIF
  191. tdisk = mdisk
  192. DO dispdisk
  193. GO TOP
  194. RETRY
  195.  
  196. *!*********************************************************************
  197. *!
  198. *!      Procedure: SELNONE
  199. *!
  200. *!      Called by: MAIN           (procedure in PROINST.PRG)
  201. *!               : DONE           (procedure in PROINST.PRG)
  202. *!               : ABORT          (procedure in PROINST.PRG)
  203. *!
  204. *!          Calls: DISPDISK       (procedure in PROINST.PRG)
  205. *!
  206. *!*********************************************************************
  207. PROCEDURE selnone
  208. REPLACE ALL install WITH " NO "
  209. tdisk = 0
  210. DO dispdisk
  211. GO TOP
  212. RETRY
  213.  
  214. *!*********************************************************************
  215. *!
  216. *!      Procedure: SELONE
  217. *!
  218. *!      Called by: MAIN           (procedure in PROINST.PRG)
  219. *!               : DONE           (procedure in PROINST.PRG)
  220. *!               : ABORT          (procedure in PROINST.PRG)
  221. *!
  222. *!          Calls: DISPDISK       (procedure in PROINST.PRG)
  223. *!
  224. *!*********************************************************************
  225. PROCEDURE selone
  226. IF install = " YES "
  227.    REPLACE install WITH " NO  "
  228.    tdisk = tdisk - SPACE
  229. ELSE
  230.    REPLACE install WITH " YES "
  231.    tdisk = tdisk + SPACE
  232. ENDIF
  233. SKIP 1
  234. SKIP -1
  235. DO dispdisk
  236. SHOW WINDOW contents SAME
  237.  
  238. *!*********************************************************************
  239. *!
  240. *!      Procedure: DISPDISK
  241. *!
  242. *!      Called by: MAIN           (procedure in PROINST.PRG)
  243. *!               : SELALL         (procedure in PROINST.PRG)
  244. *!               : SELNONE        (procedure in PROINST.PRG)
  245. *!               : SELONE         (procedure in PROINST.PRG)
  246. *!
  247. *!*********************************************************************
  248. PROCEDURE dispdisk
  249. ACTIVATE WINDOW DISK SAME
  250. CLEAR
  251. @ 0,3 SAY "Available disk space: "+LTRIM(TRANSFORM(DISKSPACE()/1024,"999,999 Kbytes"))
  252. @ 0,42 SAY "Disk space needed: "+LTRIM(TRANSFORM(tdisk,"999,999 Kbytes"))
  253.  
  254. *!*********************************************************************
  255. *!
  256. *!      Procedure: DONE
  257. *!
  258. *!      Called by: MAIN           (procedure in PROINST.PRG)
  259. *!               : DONE           (procedure in PROINST.PRG)
  260. *!               : ABORT          (procedure in PROINST.PRG)
  261. *!
  262. *!          Calls: SELONE         (procedure in PROINST.PRG)
  263. *!               : SELALL         (procedure in PROINST.PRG)
  264. *!               : SELNONE        (procedure in PROINST.PRG)
  265. *!               : DONE           (procedure in PROINST.PRG)
  266. *!               : INSTALL        (procedure in PROINST.PRG)
  267. *!               : MSG3           (procedure in PROINST.PRG)
  268. *!               : FINISHED       (procedure in PROINST.PRG)
  269. *!
  270. *!*********************************************************************
  271. PROCEDURE done
  272. ON KEY
  273. mchoice = 1
  274. IF tdisk > (DISKSPACE()/1024)
  275.    DEFINE WINDOW tdone FROM 14,10 TO 22,70 DOUBLE COLOR SCHEME 5
  276.    ACTIVATE WINDOW tdone
  277.    CLEAR
  278.    @ 1,3 SAY "Insufficient disk space to install all selected products."
  279.    @ 3,2 SAY "   Please select products that will fit on your drive."
  280.    @ 5,3 SAY "           Press any key to continue "
  281.    WAIT ""
  282.    ON KEY LABEL spacebar DO selone
  283.    ON KEY LABEL f2 DO selall
  284.    ON KEY LABEL f3 DO selnone
  285.    ON KEY LABEL enter DO done
  286.    DEACTIVATE WINDOW tdone
  287.    RETURN
  288. ENDIF
  289. DEFINE WINDOW tdone FROM 16,20 TO 22,60 DOUBLE COLOR SCHEME 5
  290. ACTIVATE WINDOW tdone
  291. @ 1,9 SAY "Begin Installation: "
  292. @ 3,6 PROMPT CHR(174)+"  \<Yes  "+CHR(175)
  293. @ 3,21 PROMPT "<  \<No  >"
  294. =INKEY("M")
  295. MENU TO mchoice
  296. IF mchoice = 1
  297.    mdone = .T.
  298.    CLOSE ALL
  299.    CLEAR windows
  300.    CLEAR MENUS
  301.    CLEAR
  302.    DO install
  303.    DO msg3 WITH "Installation complete.  Press any key to continue.",.T.
  304.    DO finished
  305. ELSE
  306.    ON KEY LABEL spacebar DO selone
  307.    ON KEY LABEL f2 DO selall
  308.    ON KEY LABEL f3 DO selnone
  309.    ON KEY LABEL enter DO done
  310.    DEACTIVATE WINDOW tdone
  311. ENDIF
  312.  
  313. *!*********************************************************************
  314. *!
  315. *!      Procedure: ABORT
  316. *!
  317. *!      Called by: MAIN           (procedure in PROINST.PRG)
  318. *!
  319. *!          Calls: SELONE         (procedure in PROINST.PRG)
  320. *!               : SELALL         (procedure in PROINST.PRG)
  321. *!               : SELNONE        (procedure in PROINST.PRG)
  322. *!               : DONE           (procedure in PROINST.PRG)
  323. *!
  324. *!*********************************************************************
  325. PROCEDURE abort
  326. ON KEY
  327. mchoice = 1
  328. DEFINE WINDOW tdone FROM 16,20 TO 22,60 DOUBLE COLOR SCHEME 5
  329. ACTIVATE WINDOW tdone
  330. @ 1,9 SAY "Abort Installation: "
  331. @ 3,6 PROMPT CHR(174)+"  \<Yes  "+CHR(175)
  332. @ 3,21 PROMPT "<  \<No  >"
  333. =INKEY("M")
  334. MENU TO mchoice
  335. IF mchoice = 1
  336.    CLOSE ALL
  337.    CLEAR windows
  338.    CLEAR MENUS
  339.    DELETE FILE monitor2.dbf
  340.    DELETE FILE monitor2.fpt
  341.    DELETE FILE temp.idx
  342.    DELETE FILE seqno.idx
  343.    DELETE FILE foxvinst.prg
  344.    DELETE FILE foxvinst.fxp
  345.    DELETE FILE fvbrand.com
  346.    DELETE FILE foxview.bak
  347.    QUIT
  348. ELSE
  349.    ON KEY LABEL spacebar DO selone
  350.    ON KEY LABEL f2 DO selall
  351.    ON KEY LABEL f3 DO selnone
  352.    ON KEY LABEL enter DO done
  353. ENDIF
  354. DEACTIVATE WINDOW tdone
  355.  
  356. *!*********************************************************************
  357. *!
  358. *!      Procedure: FOXUSER
  359. *!
  360. *!      Called by: MAIN           (procedure in PROINST.PRG)
  361. *!
  362. *!           Uses: FOXUSER.DBF
  363. *!               : MONITOR.DBF
  364. *!
  365. *!*********************************************************************
  366. PROCEDURE foxuser
  367. IF FILE("FOXUSER.DBF")
  368.    USE foxuser
  369.    IF RECC() > 0
  370.       mchoice = 1
  371.       DEFINE WINDOW foxuser FROM 16,10 TO 22,70 DOUBLE COLOR SCHEME 5
  372.       ACTIVATE WINDOW foxuser
  373.       @ 1,2 SAY "Do you want to overwrite your existing FoxUser file? "
  374.       @ 3,20 PROMPT CHR(174)+" \<Yes "+CHR(175)
  375.       @ 3,30 PROMPT "<  \<No  >"
  376.       =INKEY("M")
  377.       MENU TO mchoice
  378.       RELEASE WINDOW foxuser
  379.       IF mchoice=2
  380.          USE
  381.          SET RESOURCE TO foxuser
  382.          RETURN
  383.       ENDIF
  384.    ENDIF
  385. ENDIF
  386. SET RESOURCE OFF
  387. USE monitor2
  388. COPY TO FOXUSER
  389. SET RESOURCE TO foxuser
  390. IF COLOR
  391.    SET COLOR SET TO DEFAULT
  392.    CLEAR
  393. ENDIF
  394.  
  395. *!*********************************************************************
  396. *!
  397. *!      Procedure: INSTALL
  398. *!
  399. *!      Called by: DONE           (procedure in PROINST.PRG)
  400. *!
  401. *!          Calls: ESCPROC        (procedure in PROINST.PRG)
  402. *!               : INSRTDSK       (procedure in PROINST.PRG)
  403. *!               : UNARCH         (procedure in PROINST.PRG)
  404. *!               : &IP
  405. *!
  406. *!           Uses: PROINST.DBF        Alias: CONTENTS
  407. *!               : FOXUSER.DBF
  408. *!               : COLORS.DBF
  409. *!
  410. *!        Indexes: PROINST.IDX
  411. *!
  412. *!    Other Files: COLORS.FPT
  413. *!
  414. *!*********************************************************************
  415. PROCEDURE install
  416. ON ESCAPE DO escproc
  417. SET ESCAPE ON              &&establish escape proc
  418. DEFINE WINDOW alert FROM 16,10 TO 22,70 DOUBLE COLOR SCHEME 5
  419. PUBLIC thisone
  420. lastdisk = 2
  421. USE proinst
  422. INDEX ON STR(diskno,2) TO proinst
  423. GO TOP
  424. DO WHILE .NOT. EOF(1)
  425.    IF install = " NO  "
  426.       SKIP
  427.       LOOP
  428.    ENDIF
  429.    IF lastdisk <> diskno
  430.       DO insrtdsk
  431.       lastdisk = diskno
  432.    ENDIF
  433.    IF .NOT. FILE(srcdrive+filename)
  434.       DO insrtdsk
  435.    ENDIF
  436.    DO unarch
  437.    IF installprc <> SPACE(8)    &&any external program needed?
  438.       ip = TRIM(installprc)    &&do that install proc!
  439.       DO &ip
  440.       CLEAR
  441.    ENDIF
  442.    CLEAR
  443.    SKIP
  444. ENDDO
  445. IF FILE("COLOR.DBF")
  446.    SET RESOURCE OFF
  447.    USE foxuser
  448.    APPEND FROM color
  449.    USE
  450.    SET RESOURCE ON
  451.    DELETE FILE color.dbf
  452.    DELETE FILE color.fpt
  453. ENDIF
  454.  
  455. *!*********************************************************************
  456. *!
  457. *!      Procedure: INSRTDSK
  458. *!
  459. *!      Called by: INSTALL        (procedure in PROINST.PRG)
  460. *!
  461. *!*********************************************************************
  462. PROCEDURE insrtdsk        &&this routine is invoked when it's time
  463. ACTIVATE WINDOW alert
  464. @ 2,10 SAY "Please insert disk #" + STR(diskno, 2) + " into drive " + srcdrive
  465. WAIT WINDOW
  466. DO WHILE .NOT. FILE(srcdrive+filename)  &&loop until we find that file
  467.    CLEAR
  468.    @ 1, 5 SAY "The file " + TRIM(filename) + " was not found on that disk."
  469.    @ 3, 10 SAY "Please insert disk #" + STR(diskno, 2) + " into drive " + srcdrive
  470.    WAIT WINDOW
  471.    CLEAR
  472. ENDDO
  473. DEACTIVATE WINDOW alert
  474.  
  475. *!*********************************************************************
  476. *!
  477. *!      Procedure: UNARCH
  478. *!
  479. *!      Called by: INSTALL        (procedure in PROINST.PRG)
  480. *!
  481. *!          Calls: ERRPROC2       (procedure in PROINST.PRG)
  482. *!
  483. *!*********************************************************************
  484. PROCEDURE unarch           &&this routine unarchives files using pkxarc
  485. IF .NOT. FILE('foxunpak.exe')
  486.    DO errproc2 WITH 'Unable to find FOXUNPAK.EXE.  Installation aborted.'
  487. ENDIF
  488. arccmd = "FOXUNPAK " + '-p"' + TRIM(product) + '" ';
  489.    + srcdrive + filename + " " + homedir + TRIM(subdir)
  490. IF SUBSTR(arccmd,LEN(arccmd),1) != "\"
  491.     arccmd = arccmd + "\"
  492. ENDIF
  493. RUN /0 &arccmd
  494.  
  495. *!*********************************************************************
  496. *!
  497. *!      Procedure: ERRPROC
  498. *!
  499. *!      Called by: PROINST.PRG
  500. *!
  501. *!          Calls: MSG3           (procedure in PROINST.PRG)
  502. *!               : FINISHED       (procedure in PROINST.PRG)
  503. *!
  504. *!*********************************************************************
  505. PROCEDURE errproc        &&our on error routine
  506. ? CHR(7)
  507. IF ERROR() <> 1101 .AND. ERROR() <> 6 .AND. ERROR() <> 1 .AND. ERROR() <> 1410 .AND. ERROR() <> 0
  508.    DO msg3 WITH MESSAGE() + "  Installation aborted.",.T.
  509. ELSE
  510.    DO msg3 WITH "Increase files in CONFIG.SYS to greater than 25.",.T.
  511. ENDIF
  512. DO finished
  513.  
  514. *!*********************************************************************
  515. *!
  516. *!      Procedure: FINISHED
  517. *!
  518. *!      Called by: ERRPROC        (procedure in PROINST.PRG)
  519. *!               : DONE           (procedure in PROINST.PRG)
  520. *!               : ERRPROC2       (procedure in PROINST.PRG)
  521. *!
  522. *!*********************************************************************
  523. PROCEDURE finished        &&our clean-up-and-go-home routine
  524. ON ESCAPE
  525. = SYS(2002,1)        &&turn cursor on
  526. CLOSE ALL
  527. CLEAR windows
  528. CLEAR
  529. DELETE FILE monitor2.dbf
  530. DELETE FILE monitor2.fpt
  531. DELETE FILE temp.idx
  532. DELETE FILE seqno.idx
  533. DELETE FILE foxvinst.prg
  534. DELETE FILE foxvinst.fxp
  535. DELETE FILE fvbrand.com
  536. DELETE FILE foxview.bak
  537. QUIT
  538.  
  539. *!*********************************************************************
  540. *!
  541. *!      Procedure: ERRPROC2
  542. *!
  543. *!      Called by: UNARCH         (procedure in PROINST.PRG)
  544. *!               : ESCPROC        (procedure in PROINST.PRG)
  545. *!
  546. *!          Calls: MSG3           (procedure in PROINST.PRG)
  547. *!               : FINISHED       (procedure in PROINST.PRG)
  548. *!
  549. *!*********************************************************************
  550. PROCEDURE errproc2        &&quit with a specified message.
  551. PARAMETERS msg
  552. DO msg3 WITH msg
  553. DO finished
  554.  
  555. *!*********************************************************************
  556. *!
  557. *!      Procedure: ESCPROC
  558. *!
  559. *!      Called by: INSTALL        (procedure in PROINST.PRG)
  560. *!
  561. *!          Calls: ERRPROC2       (procedure in PROINST.PRG)
  562. *!
  563. *!*********************************************************************
  564. PROCEDURE escproc        &&handle the escape key
  565. DEFINE WINDOW abort FROM 16,10 TO 22,70 ;
  566.    DOUBLE  COLOR SCHEME 5
  567. ACTIVATE WINDOW abort
  568. @ 1,10 SAY '   Do you want to abort installation?'
  569. mi = 0
  570. DO WHILE mi = 0
  571.    @ 3,17 PROMPT CHR(174)+"  \<Yes  "+CHR(175)
  572.    @ 3,30 PROMPT "<   \<No   >"
  573.    =INKEY("M")
  574.    MENU TO mi
  575.    DO CASE
  576.    CASE mi = 1
  577.       DEACTIVATE WINDOW abort
  578.       DO errproc2 WITH 'Installation aborted. Press a key to continue.'
  579.       alone = .F.
  580.    CASE mi = 2
  581.       DEACTIVATE WINDOW abort
  582.       RETURN
  583.    ENDCASE
  584. ENDDO
  585. DEACTIVATE WINDOW abort
  586.  
  587. *!*********************************************************************
  588. *!
  589. *!      Procedure: MSG3
  590. *!
  591. *!      Called by: ERRPROC        (procedure in PROINST.PRG)
  592. *!               : DONE           (procedure in PROINST.PRG)
  593. *!               : ERRPROC2       (procedure in PROINST.PRG)
  594. *!
  595. *!*********************************************************************
  596. PROCEDURE msg3        &&display line 24
  597. PARAMETERS msg,yeswait
  598. ACTIVATE WINDOW alert
  599. CLEAR
  600. IF LEN(msg) < 61
  601.     @ 2, INT(((60 - LEN(msg)) /2) - 1) SAY msg
  602. ELSE
  603.     @ 2, 0 SAY msg
  604. ENDIF
  605. IF yeswait
  606.     WAIT WINDOW
  607. ENDIF
  608. *: EOF: PROINST.PRG
  609.