/**/
'@echo off'
call rxfuncadd sysloadfuncs, rexxutil, sysloadfuncs
call sysloadfuncs
/* CID ERROR CODES */
error = 65024
ERR_USAGE       = 5632
ERR_CHIP        = 5636
ERR_OS2VER      = 5636
ERR_UNPACK      = 5636
ERR_COMPAT      = 5636
ERR_OUTOFRC     = 5636
env = 'OS2ENVIRONMENT'
src = ''
trg = ''
parse upper arg args
cid = parsearg('U')
call getsrc
if args <> '' then signal usage
call gettrg
/* space-seperated S3 chip list -- must match with svgadefs.h */
chips = '801/805 928 911 864 964 868 968 Trio32 Trio64 Trio64V+'
chips = chips 'Aurora64V+ ViRGE ViRGE/vX Trio64UV+ Trio64V+Compatible Trio64V2'
chips = chips 'Yosemite ViRGE/DX-GX ViRGE/GX2 ViRGE+COMPATBLE M3 M5 ViRGE/GX2 Trio3D'
pipenull = ' 1>nul 2>&1'
w = 70
log = trg'\os2\install\display.log'
x = linein(src||'BUILD.LVL')
rc = lineout( src||'BUILD.LVL' )
rc = lineout(log, copies('=',w))
rc = lineout(log, x)
call SysCls
say ''
say copies('*',w)
say center('S3 ViRGE,ViRGE/VX,ViRGE/DX,ViRGE/GX,ViRGE/GX2',w)
say center('ディスプレイ・ドライバー・インストール',w)
say center('バージョン 1.03.11',w)
say ''
say center('インストールの前に READMEJ.TXT ファイルの', w)
say center('内容をお読みください', w)
say ''
call usage1
say ''
say center('インストール元ドライブ 'src,w)
say center('インストール先ドライブ 'trg '['word(trginfo,4)']',w)
if cid <> '' then do
        say ''
        say 'ユーザー・オプション:'
        call saylog '   自動インストール'
end
say copies('*',w)
say ''
u2spec = SysSearchPath('PATH', 'UNPACK2.EXE')
if (u2spec = '') then do
        call lineout log, 'システムに UNPACK2.EXE を追加してください'
        'unpack' src'unpack.pk2' trg pipenull
end
call unpack 'prereq.pk2' trg||'\os2\dll\portio.dll'
call unpack 'prereq.pk2' trg||'\os2\install\s3chipid.exe'
''trg||'\os2\install\s3chipid 2 0'
chipid = rc
rc = SysFileDelete( trg||'\os2\install\s3chipid.exe' )
rc = SysFileDelete( trg||'\os2\dll\portio.dll' )
if chipid = 0 then do
        error = ERR_CHIP
        call saylog 'エラー: 不明なビデオ・アダプターが検出されました'
        signal readme
end
else if chipid < -1 then do
        error = ERR_COMPAT
        call saylog 'エラー: ビデオ BIOS に互換性がありません'
        signal readme
end
else if chipid = 32767 then do
        error = ERR_OUTOFRC
        call saylog 'Error: OS/2 can not alloc enough resource for PM display driver'
        signal readme
end
else if chipid <> -1 then do
        chiptext = 'S3 ' || word( chips, chipid )
        tempid = chipid
end
else do
        chiptext = 'IBM Mach 868'
        tempid = 6
end
call saylog 'このシステムのビデオ・チップは ['tempid'] ' || chiptext || 'です'
say ''
if chipid <> -1 then x = wordpos(chipid, '12 13 18 19 23')
else x = 1
if x=0 then do
        error = ERR_CHIP
        call saylog 'エラー: このビデオ・チップはサポートしていません'
        say '正しいドライバーを使用してください'
        signal readme
end
os2ver = SysOS2Ver() /* returns 2.30 for Warp */
if (os2ver > 2.4) then do
        call saylog '警告: OS/2 の新バージョンが検出されました'
        SAY ''
        SAY 'このディスプレイ・ドライバーは'
        SAY '日本語 OS/2 Warp バージョン 3.0, 4.0'
        SAY 'または 2.11 上で動作します。'
        SAY '現在の OS/2 にインストールすると、正しく'
        SAY '動作しない可能性があります。'
        SAY 'インストールを終了して、正しいバージョンの'
        SAY 'ディスプレイ・ドライバーを入手してください。'
        call prompt
end
if (os2ver < 2.10) then do
        error = ERR_OS2VER
        call saylog 'エラー: サポートしていない OS/2 のバージョンです'
        signal readme
end
currentdriver = sysini(, 'PM_DISPLAYDRIVERS', 'CURRENTDRIVER')
If \pos('IBMVGA32',currentdriver) then do
        call saylog '警告: 現在、インストール時のシステムのビデオ・モードが'
        say "VGA ではありません。"
        say 'ディスプレイ・ドライバーを正しくインストールするため、'
        say 'インストール時のシステム'
        say 'のビデオ・モードを VGA にする必要があります。'
        say 'ドライバー・ディスケット内の READMEJ.TXT ファイルの内容を'
        say '参照して、システムのビデオ・モードを VGA に設定してください。'
        call prompt
end
if cid = '' then do
        say "キーをどれか押すと続行、'q' キーで中止"
        key = SysGetKey('NOECHO')
        parse upper var key key
        if key = 'Q' then signal readme
end
prefix = 'WIN_RES_S3_'
count  = 20
Do i = 0 to 20
        appkey = prefix||i
        result = sysini(, appkey, 'DELETE:')
End
rc=sysini( , 'PM_DISPLAYDRIVERS', 'RESOURCESIZE', 'DELETE:' )
/*
** turn off readonly attributes -- fails dspinstl
*/
rc = SysFileTree(trg||'\os2\*.*',stem,'S','***+*','***-*')
/* Files required by dspinstl.exe */
say ''
call saylog 'ファイルの複写中'
if os2ver = 2.11 then do
        rc = SysFileTree(trg||'\os2\install\IBMJC05.DSC',stem,'F','*****','***-*')
        if stem.0 = 1 then
            'rename ' || trg || '\os2\install\IBMJC05.DSC IBMJC05.S3'
end
call unpack 'prereq.pk2' trg||'\os2\install\dspinstl.exe'
call unpack 'prereq.pk2' trg||'\os2\install\dspinstl.hlp'
call unpack 'prereq.pk2' trg||'\os2\install\dspinstl.ico'
call unpack 'prereq.pk2' trg||'\os2\install\product.exe'
call unpack 'prereq.pk2' trg||'\os2\dll\svga.dll'
call unpack 'prereq.pk2' trg||'\os2\dll\inscfg32.dll'
'copy ' || src || 'install1.dsp ' || trg || '\' pipenull
'copy ' || src || 'install2.dsp ' || trg || '\' pipenull
'copy ' || src || 's3common.dsp ' || trg || '\' pipenull
'copy ' || src || 's3misc1.dsp  ' || trg || '\' pipenull
mmbase = value('MMBASE',,env)
if mmbase <> '' then do
        if right(mmbase,1) = ';' then mmbase = left(mmbase, length(mmbase)-1)
        if right(mmbase,1) = '\' then mmbase = left(mmbase, length(mmbase)-1)
        if ( os2ver < 2.4 ) & ( os2ver > 2.11 )then do
                call unpack 'prereq.pk2' mmbase'\dll\dive.dll'
                call unpack 'prereq.pk2' mmbase'\dll\svsh.dll'
                call unpack 'prereq.pk2' mmbase'\r565lut8.lut'
                call unpack 'prereq.pk2' mmbase'\y644lut8.lut'
                call unpack 'prereq.pk2' mmbase'\yuv_lut8.lut'
        end
end
rc=SysFileDelete( trg || '\os2\install\s3virge.dsc' )
rc=SysFileDelete( trg || '\os2\install\s3triov.dsc' )
rc=SysFileDelete( trg || '\os2\install\triov.dsc' )
rc=SysFileDelete( trg || '\os2\install\triov1.dsc' )
rc=SysFileDelete( trg || '\os2\install\pss3.dsc' )
rc=SysFileDelete( trg || '\os2\install\s3.dsc' )
rc=SysFileDelete( trg || '\os2\install\00s3.dsc' )
rc=SysFileDelete( trg || '\os2\private.dif' )
rc=SysFileDelete( trg || '\os2\video.cfg' )
refreshtable = value('REFRESH_TABLE',,env)
if refreshtable <> '' then rc=SysFileDelete( refreshtable )
call unpack 'prereq.pk2' trg||'\os2\install\VIRGE.dsc'
'rename ' || trg || '\os2\install\VIRGE.dsc 00S3.DSC'
call unpack 'prereq.pk2' trg||'\os2\svga.exe'
call saylog "OS/2のディスプレイ・インストール・プログラムを開始しています..."
say ''
/* set up parameters for dspinstl.exe */
call stream log, 'c', 'close'
dspinstl = trg||'\os2\install\dspinstl.exe'
dspsrc = right( src, 1 )
if (dspsrc <> '\') & (dspsrc <> '/') then
        dspsrc = src
else
        dspsrc = left(src, length(src)-1) /* dspinstl: no trailing slash */
dspopt = '/pk:other /sk:none /s:'dspsrc' /t:'trg
if os2ver = 2.11 then do
   dspdsc = '/pd:'src'S3MISC1.DSC'
dcmd = dspinstl dspopt dspdsc cid
rc = lineout(log, dcmd)
''dcmd
end
dspdsc = '/pd:'src'PVIRGE.DSC'
dcmd = dspinstl dspopt dspdsc cid
rc = lineout(log, dcmd)
/* Dspinstl renames files on replace so delete files first. */
result = sysini(, 'PM_INSTALL', 'WINOS2_LOCATION')
winpath = ''
if (result <> '') & (pos('ERROR',result) = 0) then do
        winpath = space(left(result,length(result)-1),0)
        rc = SysFileTree(winpath||'\*.*',stem,,'***+*','***-*')
        rc = SysFileDelete( winpath || '\os2fs.exe' )
end
rc = SysFileDelete( trg || '\OS2\DDC.CMD' )
''dcmd
if os2ver = 2.11 then 'copy ' || src || 'screen01.211 ' || trg || '\os2\screen01.sys'
call saylog "...OS/2 ディスプレイ・インストール・プログラムが終了しました"
say ''
if winpath <> '' then do
        setup='EXENAME='||winpath||'\os2fs.exe;NORENAME=YES'
        rc = SysCreateObject("WPProgram", "S3 Windows フォント・サイズ", "<WP_CONFIG>",setup,'update')
        If (rc <> 0)
                Then call lineout log,'Font Size Object Created'
                Else call lineout log,'Font Size Object Creation Failed in 'winpath' rc='rc
end
setup = 'EXENAME=' || trg || '\OS2\DDC.CMD;'
setup = setup || 'ICONFILE=' || trg || '\OS2\DDC.ICO;'
setup = setup || 'NOAUTOCLOSE=YES;MAXIMIZED=YES;NORENAME=YES'
rc = SysCreateObject("WPProgram", "DDC ディスプレイ・セットアップ", "<WP_CONFIG>",setup,'update')
If (rc <> 0)
        Then call lineout log, 'DDC セットアップ・アイコンが生成されました'
        Else call lineout log, 'DDC セットアップ・アイコンの生成に失敗しました, rc='rc
setting = 'WIN_BACKGROUND_INIT=1;'
len = length(setting)
x = SysIni(, 'WINOS2', 'PM_GlobalWindows31Settings')
If (left(x, len) <> setting)then do
        x = setting||x
        SysIni(, 'WINOS2', 'PM_GlobalWindows31Settings', x)
end
if ((os2ver = 2.10) | (os2ver = 2.11)) then do
        '' || trg || '\os2\install\vcfginst.exe'
        rc = SysFileDelete( trg || '\os2\install\vcfginst.exe' )
end
'' || trg || '\os2\install\create.exe ' || trg || '\os2\install\syslevel.vid 1030 S310311 562107701 ViRGE,ViRGE/VX,ViRGE/DX,ViRGE/GX,ViRGE/GX2'
rc = SysFileDelete( trg || '\os2\install\create.exe' )
dspdsc = '/pd:' || trg || '\os2\install\00S3.DSC'
dspopt = '/pk:other /sk:none /s:'dspsrc' /t:'trg
if cid = '' then
     dcmd = dspinstl dspopt dspdsc
else
     dcmd = dspinstl dspopt dspdsc '/res:640x480x256 /u'
''dcmd
rc = SysFileDelete( trg || '\install1.dsp' )
rc = SysFileDelete( trg || '\install2.dsp' )
rc = SysFileDelete( trg || '\s3common.dsp' )
rc = SysFileDelete( trg || '\s3misc1.dsp'  )
'start ' || trg || '\os2\install\product.exe ' || trg cid
signal done
getsrc:
if cid = '' then do
        parse source src
        src = word(src,3)
end
else do
        src = parsearg('S')
        if src = '' then signal usage
        src = right(src,length(src)-3)
        temp = right(src, 1)
        if (temp <> '\') & (temp <> '/') then src=src||'\'
end
src = FileSpec('DRIVE', src) || FileSpec('PATH', src)
return
gettrg:
trg = SysSearchPath('PATH', 'PMSHELL.EXE')
trg = FileSpec('drive',trg)
trginfo = SysDriveInfo(trg)
return
parsearg:
parse upper arg switch
result = ''
x = pos(switch, args)
if x <> 0 then do
        y = pos(' ', args, x)
        if y = 0 then y = length(args)
        result = space(substr(args, x-1, y-x+2),0)
        args = delstr(args, x-1, y-x+2)
end
return result
usage:
call usage1
error = ERR_USAGE
signal readme
saylog:
parse arg msg
        say msg
        rc = lineout(log, msg)
return
prompt:
if cid = '' then do
        say ''
        SAY 'インストールを続けますか? (y or n)'
        key = SysGetKey('NOECHO')
        say ''
        parse upper var key key
        if key <> 'Y' then signal readme
end
return
unpack:
parse arg pack file
pack = src||pack
if file = '' then
        'unpack2' pack trg pipenull
else do
        call SysFileTree file,stem,,'***+*','***-*'
        filename = filespec("name", file)
        filedrive = filespec("drive", file)
        filepath = filedrive||filespec("path", file)
        if filepath='' then filepath=trg
        'unpack2 'pack filepath' /n:'filename pipenull
end
if (rc <> 0) then do
        error = err_unpack
        call saylog 'エラー: 'pack' から 'file' のアンパック中にエラーが発生しました, rc = 'rc
        signal readme
end
else rc = lineout(log, file' をアンパックしました')
return
readme:
say ''
say 'ディスプレイ・ドライバーのインストールが終了しました。'
say 'ドライバー・ディスケットの READMEJ.TXT ファイルに'
say '追加情報が記述されています。'
say ''
rc = lineout( log )
exit error
done:
rc = lineout( log )
if cid = '' then 'exit'
exit error
usage1:
say 'SETUP.CMD: S3 ディスプレイ・ドライバー・インストール・ユーティリティー'
say ''
say '使用法: SETUP {/U /S:SRCPATH}'
say ''
say '自動インストール(CID)時には、/U パラメーターを指定してください'
return


