home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 9 Archive / 09-Archive.zip / ZIPENG10.ZIP / ZIPEDIT.CMD < prev    next >
OS/2 REXX Batch file  |  1993-03-21  |  16KB  |  440 lines

  1. /* The Zip Engine -- A shareware graphical approach to file zipping/unzipping */
  2. /* Copyright 1992-93 Kari Jackson and Bart Toulouse */
  3. /* Edit-the-INI-File Subroutine */
  4. arg TEXT
  5. if (right(TEXT,4)<>'.TEX')|(length(TEXT)<13) then do
  6.    say 'Sorry, this is not a standalone program.  It should be'
  7.    say 'used only as a subroutine of the Zip Engine program.'
  8.    signal End
  9. end
  10. CFG = stream('ZIPENG.INI', 'c', 'query exists')
  11. if CFG<>'' then CFGFILE = CFG
  12. else do
  13.    CFG = syssearchpath('PATH','ZIPENG.INI')
  14.    if CFG<>'' then CFGFILE = CFG
  15. end
  16. MSG.0 = 3
  17. call linein TEXT,1
  18. do 151
  19.    call linein TEXT
  20. end
  21. do y = 1 to 3
  22.    MSG.y = linein(TEXT)
  23. end
  24. if CFGFILE = 'CFGFILE' then do
  25.    MSG.0 = 9
  26.    MSG.4 = ' '
  27.    do y = 5 to 8
  28.       MSG.y = linein(TEXT)
  29.    end
  30.    MSG.9 = "directory right now is" directory()"."
  31.    ZIPORG = '' ; UNZIPORG = '' ; TEMPORG = '' ; EXTRACTORG = '' ; EXTENORG = '' ; AOPORG = ''
  32.    ENDORG = '' ; DEFORG = '' ; MENUORG = '' ; VERORG = '' ; UOPORG = '' ; ZOPORG = '' ; SWITCHORG = ''
  33.    BGORG = '' ; FGORG = ''
  34. end
  35. call vmsgbox "Edit the .INI File:", MSG, 1
  36. drop MSG. CFG
  37. if CFGFILE = 'CFGFILE' then CFGFILE = directory()'\ZIPENG.INI'
  38. else do
  39.    ZIPORG = sysini(CFGFILE, 'zipeng', 'zipper')
  40.    if ZIPORG = 'ERROR:' then ZIPORG = ''
  41.    UNZIPORG = sysini(CFGFILE, 'zipeng', 'unzipper')
  42.    if UNZIPORG = 'ERROR:' then UNZIPORG = ''
  43.    TEMPORG = sysini(CFGFILE, 'zipeng', 'temporary directory')
  44.    if TEMPORG = 'ERROR:' then TEMPORG = ''
  45.    EXTRACTORG = sysini(CFGFILE, 'zipeng', 'extract directory')
  46.    if EXTRACTORG = 'ERROR:' then EXTRACTORG = ''
  47.    EXTENORG = sysini(CFGFILE, 'zipeng', 'extension')
  48.    if EXTENORG = 'ERROR:' then EXTENORG = ''
  49.    ENDORG = sysini(CFGFILE, 'zipeng', 'exit action')
  50.    if ENDORG = 'ERROR:' then ENDORG = ''
  51.    DEFORG = sysini(CFGFILE, 'zipeng', 'default directory')
  52.    if DEFORG = 'ERROR:' then DEFORG = ''
  53.    MENUORG = sysini(CFGFILE, 'zipeng', 'menu default')
  54.    if MENUORG = 'ERROR:' then MENUORG = ''
  55.    VERORG = sysini(CFGFILE, 'zipeng', 'version')
  56.    if VERORG = 'ERROR:' then VERORG = ''
  57.    ZOPORG = sysini(CFGFILE, 'zipeng', 'zip options')
  58.    if ZOPORG = 'ERROR:' then ZOPORG = ''
  59.    UOPORG = sysini(CFGFILE, 'zipeng', 'unzip options')
  60.    if UOPORG = 'ERROR:' then UOPORG = ''
  61.    AOPORG = sysini(CFGFILE, 'zipeng', 'global options')
  62.    if AOPORG = 'ERROR:' then AOPORG = ''
  63.    SWITCHORG = sysini(CFGFILE, 'zipeng', 'start switch')
  64.    if SWITCHORG = 'ERROR:' then SWITCHORG = ''
  65.    BGORG = sysini(CFGFILE, 'zipeng', 'background')
  66.    if BGORG = 'ERROR:' then BGORG = ''
  67.    FGORG = sysini(CFGFILE, 'zipeng', 'foreground')
  68.    if FGORG = 'ERROR:' then FGORG = ''
  69. end
  70. ZIPLINE = '' ; UNZIPLINE = '' ; TEMPLINE = '' ; EXTRACTLINE = '' ; EXTENLINE = ''
  71. ENDLINE = '' ; DEFLINE = '' ; MENULINE = '' ; VERLINE = '' ; BGLINE = ''
  72. ZOPLINE = '' ; UOPLINE = '' ; AOPLINE = '' ; SWITCHLINE = '' ; FGLINE = ''
  73. ZIPCH = 'N' ; UNZIPCH = 'N' ; TEMPCH = 'N' ; EXTRACTCH = 'N' ; EXTENCH = 'N'
  74. ENDCH = 'N' ; DEFCH = 'N' ; MENUCH = 'N' ; VERCH = 'N' ; BGCH = 'N'
  75. ZOPCH = 'N' ; UOPCH = 'N' ; AOPCH = 'N' ; SWITCHCH = 'N' ; FGCH = 'N'
  76. drop INI.
  77. l = 1
  78. INI.0 = 7
  79. INI.1 = "Specify your Zip and Unzip programs"
  80. INI.2 = "Specify three directory locations"
  81. INI.3 = "Specify Zip Engine's exit action"
  82. INI.4 = "Specify the Zip and Unzip window action      "
  83. INI.5 = "Specify your default Main Menu selection"
  84. INI.6 = "Specify your default switch options"
  85. INI.7 = "Specify Zip Engine window colors"
  86. do while BUTTON<>'CANCEL'
  87.    INI.VSTRING = INI.l
  88.    BUTTON = vradiobox('CANCEL when done changing .INI file:', INI, 3)
  89.    if BUTTON<>'CANCEL' then select
  90.       when INI.VSTRING = INI.1 then do
  91.          call EditVer
  92.          call EditZip
  93.          call EditUnzip
  94.       end
  95.       when INI.VSTRING = INI.2 then call EditDir
  96.       when INI.VSTRING = INI.3 then call EditEnd
  97.       when INI.VSTRING = INI.4 then call EditSwitch
  98.       when INI.VSTRING = INI.5 then call EditMenu
  99.       when INI.VSTRING = INI.6 then call EditOptions
  100.       when INI.VSTRING = INI.7 then call EditColors
  101.       otherwise nop
  102.    end
  103. end
  104. KEEP = 0
  105. if ((MENULINE = '')&(MENUCH = 'Y'))|((MENUORG = '')&(MENUCH = 'N')) then KEEP = KEEP+1
  106. if ((ZIPLINE = '')&(ZIPCH = 'Y'))|((ZIPORG = '')&(ZIPCH = 'N')) then KEEP = KEEP+1
  107. if ((UNZIPLINE = '')&(UNZIPCH = 'Y'))|((UNZIPORG = '')&(UNZIPCH = 'N')) then KEEP = KEEP+1
  108. if ((TEMPLINE = '')&(TEMPCH = 'Y'))|((TEMPORG = '')&(TEMPCH = 'N')) then KEEP = KEEP+1
  109. if ((DEFLINE = '')&(DEFCH = 'Y'))|((DEFORG = '')&(DEFCH = 'N')) then KEEP = KEEP+1
  110. if ((EXTRACTLINE = '')&(EXTRACTCH = 'Y'))|((EXTRACTORG = '')&(EXTRACTCH = 'N')) then KEEP = KEEP+1
  111. if ((EXTENLINE = '')&(EXTENCH = 'Y'))|((EXTENORG = '')&(EXTENCH = 'N')) then KEEP = KEEP+1
  112. if ((VERLINE = '')&(VERCH = 'Y'))|((VERORG = '')&(VERCH = 'N')) then KEEP = KEEP+1
  113. if ((ENDLINE = '')&(ENDCH = 'Y'))|((ENDORG = '')&(ENDCH = 'N')) then KEEP = KEEP+1
  114. if ((ZOPLINE = '')&(ZOPCH = 'Y'))|((ZOPORG = '')&(ZOPCH = 'N')) then KEEP = KEEP+1
  115. if ((UOPLINE = '')&(UOPCH = 'Y'))|((UOPORG = '')&(UOPCH = 'N')) then KEEP = KEEP+1
  116. if ((AOPLINE = '')&(AOPCH = 'Y'))|((AOPORG = '')&(AOPCH = 'N')) then KEEP = KEEP+1
  117. if ((SWITCHLINE = '')&(SWITCHCH = 'Y'))|((SWITCHORG = '')&(SWITCHCH = 'N')) then KEEP = KEEP+1
  118. if ((BGLINE = '')&(BGCH = 'Y'))|((BGORG = '')&(BGCH = 'N')) then KEEP = KEEP+1
  119. if ((FGLINE = '')&(FGCH = 'Y'))|((FGORG = '')&(FGCH = 'N')) then KEEP = KEEP+1
  120. if KEEP = 15 then call sysfiledelete CFGFILE
  121. else do
  122.    if ZIPCH = 'Y' then call sysini CFGFILE, 'zipeng', 'zipper', ZIPLINE
  123.    if UNZIPCH = 'Y' then call sysini CFGFILE, 'zipeng', 'unzipper', UNZIPLINE
  124.    if TEMPCH = 'Y' then call sysini CFGFILE, 'zipeng', 'temporary directory', TEMPLINE
  125.    if EXTRACTCH = 'Y' then call sysini CFGFILE, 'zipeng', 'extract directory', EXTRACTLINE
  126.    if EXTENCH = 'Y' then call sysini CFGFILE, 'zipeng', 'extension', EXTENLINE
  127.    if VERCH = 'Y' then call sysini CFGFILE, 'zipeng', 'version', VERLINE
  128.    if ZOPCH = 'Y' then call sysini CFGFILE, 'zipeng', 'zip options', ZOPLINE
  129.    if UOPCH = 'Y' then call sysini CFGFILE, 'zipeng', 'unzip options', UOPLINE
  130.    if AOPCH = 'Y' then call sysini CFGFILE, 'zipeng', 'global options', AOPLINE
  131.    if ENDCH = 'Y' then call sysini CFGFILE, 'zipeng', 'exit action', ENDLINE
  132.    if DEFCH = 'Y' then call sysini CFGFILE, 'zipeng', 'default directory', DEFLINE
  133.    if MENUCH = 'Y' then call sysini CFGFILE, 'zipeng', 'menu default', MENULINE
  134.    if SWITCHCH = 'Y' then call sysini CFGFILE, 'zipeng', 'start switch', SWITCHLINE
  135.    if BGCH = 'Y' then call sysini CFGFILE, 'zipeng', 'background', BGLINE
  136.    if FGCH = 'Y' then call sysini CFGFILE, 'zipeng', 'foreground', FGLINE
  137. end
  138. return
  139. EditEnd:
  140.    call linein TEXT,1
  141.    do 159
  142.       call linein TEXT
  143.    end
  144.    POS.left = 4 ; POS.right = 96 ; POS.top = 40 ; POS.bottom = 10
  145.    WINDOW = vopenwindow('Exit Line:', 'BLUE', POS)
  146.    call vsetfont WINDOW, 'SYSTEM', 10
  147.    call vforecolor WINDOW, 'WHITE'
  148.    do q = 925 to 25 by -100
  149.       call vsay WINDOW, 15, q, linein(TEXT)
  150.    end
  151.    MSG.0 = 2
  152.    MSG.1 = '(nothing) Returns you to the main menu      '
  153.    MSG.2 = '(EXIT)   Exits Zip Engine'
  154.    if ENDORG<>'' then MSG.VSTRING = MSG.2
  155.    else MSG.VSTRING = MSG.1
  156.    if (ENDCH = 'Y')&(ENDLINE = 'EXIT') then MSG.VSTRING = MSG.2
  157.    if (ENDCH = 'Y')&(ENDLINE = '') then MSG.VSTRING = MSG.1
  158.    call vradiobox 'Exit Line:', MSG, 1
  159.    if MSG.VSTRING = MSG.2 then ENDLINE = 'EXIT'
  160.    else ENDLINE = ''
  161.    if ENDLINE<>ENDORG then ENDCH = 'Y'
  162.    l = 4
  163.    call vclosewindow WINDOW
  164. return
  165. EditSwitch:
  166.    call linein TEXT,1
  167.    do 275
  168.       call linein TEXT
  169.    end
  170.    POS.left = 4 ; POS.right = 96 ; POS.top = 40 ; POS.bottom = 10
  171.    WINDOW = vopenwindow('Window Line:', 'BLUE', POS)
  172.    call vsetfont WINDOW, 'SYSTEM', 10
  173.    call vforecolor WINDOW, 'WHITE'
  174.    do q = 925 to 25 by -90
  175.       call vsay WINDOW, 15, q, linein(TEXT)
  176.    end
  177.    MSG.0 = 2
  178.    MSG.1 = '(nothing) Close window automatically     '
  179.    MSG.2 = '(K)       Leave window open'
  180.    if SWITCHORG<>'' then MSG.VSTRING = MSG.2
  181.    else MSG.VSTRING = MSG.1
  182.    if (SWITCHCH = 'Y')&(SWITCHLINE = 'K') then MSG.VSTRING = MSG.2
  183.    if (SWITCHCH = 'Y')&(SWITCHLINE = '') then MSG.VSTRING = MSG.1
  184.    call vradiobox 'Window Line:', MSG, 1
  185.    if MSG.VSTRING = MSG.2 then SWITCHLINE = 'K'
  186.    else SWITCHLINE = ''
  187.    if SWITCHLINE<>SWITCHORG then SWITCHCH = 'Y'
  188.    l = 5
  189.    call vclosewindow WINDOW
  190. return
  191. EditZip:
  192.    drop MSG.
  193.    MSG.0 = 8
  194.    call linein TEXT,1
  195.    do 170
  196.       call linein TEXT
  197.    end
  198.    do y = 1 to 8
  199.       MSG.y = linein(TEXT)
  200.    end
  201.    if ZIPORG<>'' then MSG.VSTRING = ZIPORG
  202.    if ZIPCH = 'Y' then MSG.VSTRING = ZIPLINE
  203.    call vinputbox 'Zipper Line:', MSG, 66, 1
  204.    ZIPLINE = MSG.VSTRING
  205.    l = 2
  206.    if ZIPLINE<>'' then do
  207.       TEST = stream(ZIPLINE, 'c', 'query exists')
  208.       if TEST<>'' then do
  209.          if ZIPLINE<>ZIPORG then ZIPCH = 'Y'
  210.          return
  211.       end
  212.       MSG.0 = 1
  213.       MSG.1 = "You have no such file.  Let's try again."
  214.       call vmsgbox "Sorry!", MSG, 1
  215.       call EditZip
  216.    end
  217.    if ZIPLINE<>ZIPORG then ZIPCH = 'Y'
  218. return
  219. EditUnzip:
  220.    drop MSG.
  221.    MSG.0 = 8
  222.    call linein TEXT
  223.    do y = 1 to 8
  224.       MSG.y = linein(TEXT)
  225.    end
  226.    if UNZIPORG<>'' then MSG.VSTRING = UNZIPORG
  227.    if UNZIPCH = 'Y' then MSG.VSTRING = UNZIPLINE
  228.    call vinputbox 'Unzipper Line:', MSG, 66, 1
  229.    UNZIPLINE = MSG.VSTRING
  230.    if UNZIPLINE<>'' then do
  231.       TEST = stream(UNZIPLINE, 'c', 'query exists')
  232.       if TEST<>'' then do
  233.          if UNZIPLINE<>UNZIPORG then UNZIPCH = 'Y'
  234.          return
  235.       end
  236.       MSG.0 = 1
  237.       MSG.1 = "You have no such file.  Let's try again."
  238.       call vmsgbox "Sorry!", MSG, 1
  239.       call EditUnzip
  240.    end
  241.    if UNZIPLINE<>UNZIPORG then UNZIPCH = 'Y'
  242. return
  243. EditVer:
  244.    MSG.0 = 4
  245.    MSG.1 = "DOS program compatible with PKZip 1.XX"
  246.    MSG.2 = "OS/2 program compatible with PKZip 1.XX"
  247.    MSG.3 = "DOS program compatible with PKZip 2.XX"
  248.    MSG.4 = "OS/2 program compatible with PKZip 2.XX        "
  249.    select
  250.       when VERCH = 'N' & VERORG = '' then VDEF = 1
  251.       when VERCH = 'N' then VDEF = 2
  252.       when VERCH = 'Y' & VERLINE = '' then VDEF = 1
  253.       when VERLINE = 2 then VDEF = 2
  254.    end
  255.    select
  256.       when EXTENCH = 'N' & EXTENORG = '' then OSDEF = 'BAT'
  257.       when EXTENCH = 'N' then OSDEF = 'CMD'
  258.       when EXTENCH = 'Y' & EXTENLINE = '' then OSDEF = 'BAT'
  259.       when EXTENCH = 'Y' then OSDEF = 'CMD'
  260.    end
  261.    select
  262.       when VDEF = 1 & OSDEF = 'BAT' then MSG.VSTRING = MSG.1
  263.       when VDEF = 1 & OSDEF = 'CMD' then MSG.VSTRING = MSG.2
  264.       when VDEF = 2 & OSDEF = 'BAT' then MSG.VSTRING = MSG.3
  265.       when VDEF = 2 & OSDEF = 'CMD' then MSG.VSTRING = MSG.4
  266.    end
  267.    drop VDEF OSDEF
  268.    call vradiobox 'Your Zipper/Unzipper is:', MSG, 1
  269.    select
  270.       when MSG.VSTRING = MSG.1 then do ; VERLINE = '' ; EXTENLINE = '' ; end
  271.       when MSG.VSTRING = MSG.2 then do ; VERLINE = '' ; EXTENLINE = 'CMD' ; end
  272.       when MSG.VSTRING = MSG.3 then do ; VERLINE = 2 ; EXTENLINE = '' ; end
  273.       when MSG.VSTRING = MSG.4 then do ; VERLINE = 2 ; EXTENLINE = 'CMD' ; end
  274.    end
  275.    if VERLINE<>VERORG then VERCH = 'Y'
  276.    if EXTENLINE<>EXTENORG then EXTENCH = 'Y'
  277. return
  278. EditMenu:
  279.    MSG.0 = 3
  280.    MSG.1 = 'Unzip a file'
  281.    MSG.2 = 'Create a new .ZIP file'
  282.    MSG.3 = 'Modify an existing .ZIP file         '
  283.    if MENUORG = SELPGM.3 then MSG.VSTRING = MSG.3
  284.    if MENUORG = SELPGM.2 then MSG.VSTRING = MSG.2
  285.    if MENUORG = '' then MSG.VSTRING = MSG.1
  286.    if (MENUCH = 'Y')&(MENULINE = SELPGM.3) then MSG.VSTRING = MSG.3
  287.    if (MENUCH = 'Y')&(MENULINE = SELPGM.2) then MSG.VSTRING = MSG.2
  288.    if (MENUCH = 'Y')&(MENULINE = '') then MSG.VSTRING = MSG.1
  289.    call vradiobox 'Choose default Main Menu selection:', MSG, 1
  290.    if MSG.VSTRING = MSG.2 then MENULINE = SELPGM.2
  291.    if MSG.VSTRING = MSG.3 then MENULINE = SELPGM.3
  292.    if MSG.VSTRING = MSG.1 then MENULINE = ''
  293.    if MENULINE<>MENUORG then MENUCH = 'Y'
  294.    l = 6
  295. return
  296. EditOptions:
  297.    call linein TEXT,1
  298.    do 211
  299.       call linein TEXT
  300.    end
  301.    POS.left = 3 ; POS.right = 97 ; POS.top = 92 ; POS.bottom = 6
  302.    WINDOW = vopenwindow('Default options information:', 'BLUE', POS)
  303.    call vsetfont WINDOW, 'SYSTEM', 10
  304.    call vforecolor WINDOW, 'WHITE'
  305.    do q = 934 to 10 by -33
  306.       call vsay WINDOW, 15, q, linein(TEXT)
  307.    end
  308.    drop Z1. Z2.
  309.    Z1.0 = 3
  310.    Z1.1 = 'Zip Options line'
  311.    Z1.2 = 'Unzip Options line'
  312.    Z1.3 = 'Global Options line'
  313.    Z2.0 = 3
  314.    Z2.1 = ZOPORG
  315.    if ZOPCH = 'Y' then Z2.1 = ZOPLINE
  316.    Z2.2 = UOPORG
  317.    if UOPCH = 'Y' then Z2.2 = UOPLINE
  318.    Z2.3 = AOPORG
  319.    if AOPCH = 'Y' then Z2.3 = AOPLINE
  320.    call vdialogpos 50,70
  321.    call vmultbox 'Options lines:', Z1, 40, 0, Z2, 1
  322.    call vdialogpos 50,50
  323.    ZOPLINE = Z2.1
  324.    UOPLINE = Z2.2
  325.    AOPLINE = Z2.3
  326.    if ZOPLINE<>ZOPORG then ZOPCH = 'Y'
  327.    if UOPLINE<>UOPORG then UOPCH = 'Y'
  328.    if AOPLINE<>AOPORG then AOPCH = 'Y'
  329.    l = 7
  330.    call vclosewindow WINDOW
  331. return
  332. EditDir:
  333.    drop BAD
  334.    call linein TEXT,1
  335.    do 188
  336.       call linein TEXT
  337.    end
  338.    POS.left = 3 ; POS.right = 97 ; POS.top = 92 ; POS.bottom = 6
  339.    WINDOW = vopenwindow('Directory Lines information:', 'BLUE', POS)
  340.    call vsetfont WINDOW, 'SYSTEM', 10
  341.    call vforecolor WINDOW, 'WHITE'
  342.    do q = 934 to 10 by -44
  343.       call vsay WINDOW, 15, q, linein(TEXT)
  344.    end
  345.    drop Z1. Z2.
  346.    Z1.0 = 3
  347.    Z1.1 = 'Temporary directory line'
  348.    Z1.2 = 'Extract directory line'
  349.    Z1.3 = 'Default directory line'
  350.    Z2.0 = 3
  351.    Z2.1 = TEMPORG
  352.    if TEMPCH = 'Y' then Z2.1 = TEMPLINE
  353.    Z2.2 = EXTRACTORG
  354.    if EXTRACTCH = 'Y' then Z2.2 = EXTRACTLINE
  355.    Z2.3 = DEFORG
  356.    if DEFCH = 'Y' then Z2.3 = DEFLINE
  357.    call vdialogpos 50,70
  358.    call vmultbox 'Directory Lines:', Z1, 40, 0, Z2, 1
  359.    call vdialogpos 50,50
  360.    l = 3
  361.    call vclosewindow WINDOW
  362.    TEMPLINE = Validate(Z2.1)
  363.    EXTRACTLINE = Validate(Z2.2)
  364.    DEFLINE = Validate(Z2.3)
  365.    if TEMPLINE<>TEMPORG then TEMPCH = 'Y'
  366.    if EXTRACTLINE<>EXTRACTORG then EXTRACTCH = 'Y'
  367.    if DEFLINE<>DEFORG then DEFCH = 'Y'
  368.    if TEMPLINE = 'NO WAY' | TEMPLINE = '\' then do
  369.       BAD = 'yes'
  370.       TEMPLINE = ''
  371.    end
  372.    if EXTRACTLINE = 'NO WAY' | EXTRACTLINE = '\' then do
  373.       BAD = 'yes'
  374.       EXTRACTLINE = ''
  375.    end
  376.    if DEFLINE = 'NO WAY' | DEFLINE = '\' then do
  377.       BAD = 'yes'
  378.       DEFLINE = ''
  379.    end
  380.    if BAD = 'yes' then do
  381.       call EditDir
  382.       return
  383.    end
  384. return
  385. EditColors:
  386.    call linein TEXT,1
  387.    do 287
  388.       call linein TEXT
  389.    end
  390.    POS.left = 13 ; POS.right = 87 ; POS.top = 34 ; POS.bottom = 4
  391.    WINDOW = vopenwindow('Window Colors:', 'BLUE', POS)
  392.    call vsetfont WINDOW, 'SYSTEM', 10
  393.    call vforecolor WINDOW, 'WHITE'
  394.    do q = 900 to 100 by -100
  395.       call vsay WINDOW, 20, q, linein(TEXT)
  396.    end
  397.    if BGORG<>'' then COLOR.back = BGORG
  398.    else COLOR.back = 'BLUE'
  399.    if BGCH = 'Y' & BGLINE = '' then COLOR.back = 'BLUE'
  400.    else if BGCH = 'Y' then COLOR.back = BGLINE
  401.    if FGORG<>'' then COLOR.fore = FGORG
  402.    else COLOR.fore = 'WHITE'
  403.    if FGCH = 'Y' & FGLINE = '' then COLOR.fore = 'WHITE'
  404.    else if FGCH = 'Y' then COLOR.fore = FGLINE
  405.    call vcolorbox COLOR
  406.    if COLOR.back = 'BLUE' then BGLINE = ''
  407.    else BGLINE = COLOR.back
  408.    if COLOR.fore = 'WHITE' then FGLINE = ''
  409.    else FGLINE = COLOR.fore
  410.    if BGLINE<>BGORG then BGCH = 'Y'
  411.    if FGLINE<>FGORG then FGCH = 'Y'
  412.    l = 1
  413.    call vclosewindow WINDOW
  414. return
  415. Validate:
  416.    procedure
  417.    arg VALID
  418.    if (VALID = '')|(VALID = '\') then return VALID
  419.    if (VALID = '.')|(VALID = '.\') then return directory()
  420.    if (VALID = '..')|(VALID = '..\') then do
  421.       SLASH = lastpos('\',directory())
  422.       VALID = left(directory(),SLASH-1)
  423.       if substr(VALID,2) = ':' then VALID = VALID'\'
  424.       return VALID
  425.    end
  426.    VALIDLEN = length(VALID)
  427.    if (substr(VALID,2) = ':')&(datatype(left(VALID,1),'M') = 1) then return VALID
  428.    if (substr(VALID,2) = ':\')&(datatype(left(VALID,1),'M') = 1) then return VALID
  429.    if right(VALID,1) = '\' then VALID = left(VALID,VALIDLEN-1)
  430.    call sysfiletree VALID, 'TEST'
  431.    if TEST.0 = 1 then return VALID
  432.    MSG.0 = 3
  433.    MSG.1 = 'Please specify a directory name that exists.'
  434.    MSG.2 = VALID
  435.    MSG.3 = 'does not exist.'
  436.    call vmsgbox 'Sorry!', MSG, 1
  437. return 'NO WAY'
  438. End:
  439. exit
  440.