/* * Filename: InstFonts.cmd * Author: JAN-ERIK * Created: Sun Mar 31 2013 * Purpose: * Changes: */ ttfs = RxBootDrive()'\PSFONTS\TTF' IF RxLoadLib( 'UZLoadFuncs', 'UNZIP32' ) <> '' THEN DO IF DATATYPE( STRIP( unzipver ), 'N' ) THEN exeunzip = 1 ELSE exeunzip = -1 END ELSE exeunzip = 0 IF exeunzip < 0 THEN DO CALL LINEOUT 'STDERR', 'UnZip not found, please install it' RETURN 1 END IF RxLoadLib( 'SysLoadFuncs', 'rexxutil' ) <> '' THEN DO CALL LINEOUT 'STDERR', 'RexxUtil not found, please install it' RETURN 2 END PARSE ARG path path = STRIP( path, 'T', '\' ) PARSE SOURCE . . this this = STRIP( FILESPEC( 'D', this )||FILESPEC( 'P', this ), 'T', '\' ) IF LENGTH( path ) = 0 THEN RETURN Usage() IF DIRECTORY( path ) = '' THEN RETURN Usage() CALL DIRECTORY this CALL rxWorking 1, 'Scanning folder for .zip-files' rc = SysFileTree( path||'\*.zip', 'pkg.', 'SFO' ) DO i = 1 TO pkg.0 + 1 CALL rxWorking 1, 'Processing '||pkg.i CALL rxProgress 2, ( i - 1 ) / ( pkg.0 + 1 ), 0 IF exeunzip = 0 THEN CALL UZUnZip '-n -j '||pkg.i||' *.ttf -d '||ttfs, 'font.' ELSE IF exeunzip = 1 THEN DO DO WHILE QUEUED() > 0; PARSE PULL; END; '@UNZIP -n -j '||pkg.i||' *.ttf -d '||ttfs||'|RXQUEUE' j = 0 DO WHILE QUEUED() > 0 j = j + 1 font.j = LINEIN( 'QUEUE:' ) font.0 = j END DO WHILE QUEUED() > 0; PARSE PULL; END; END DO j = 1 TO font.0 CALL rxProgress 2, i / ( pkg.0 + 1 ), ( i - 1 + j / font.0 ) / ( pkg.0 + 1 ) PARSE VALUE REVERSE( font.j ) WITH ext'.'filename'/'filepath' :'. IF TRANSLATE( STRIP( ext ) ) = 'FTT' THEN DO font.j.fontname = REVERSE( filename ) CALL rxWorking 1, 'Adding "'||font.j.fontname||'"' IF \RegisterFont( font.j.fontname, TRANSLATE( REVERSE( filepath ), '\', '/' )||'\'||font.j.fontname||'.ttf' ) THEN rc = SysFileDelete( file.j ) END END END CALL rxWorking 1, 'Scanning folder for .ttf-files' rc = SysFileTree( path||'\*.ttf', 'file.', 'SFO' ) DO i = 1 TO file.0 CALL rxProgress 2, pkg.0 / ( pkg.0 + 1 ), ( pkg.0 + i / file.0 / ( pkg.0 + 1 ) ) PARSE VALUE REVERSE( file.i ) WITH .'.'filename'\' filename = REVERSE( filename ) IF STREAM( ttfs||'\'||filename, 'C', 'QUERY EXISTS' ) = '' THEN IF SysCopyObject( file.i, ttfs ) THEN CALL rxWorking 1, 'Copied "'||filename||'" to "'ttfs||'"' IF STREAM( ttfs||'\'||FILESPEC( 'N', file.i ), 'C', 'QUERY EXISTS' ) <> '' THEN DO CALL rxWorking 1, 'Adding "'||filename||'"' CALL RegisterFont filename, ttfs||'\'||FILESPEC( 'N', file.i ) END END CALL CleanupInstalledFonts w_path = STRIP( SysIni( 'USER', 'WarpIN', 'Path' ),, D2C(0) ) IF w_path <> 'ERROR:' THEN DO oldbeginlibpath = SysQueryExtLIBPATH( 'B' ) CALL SysSetExtLIBPATH oldbeginlibpath||w_path, 'B' CALL DIRECTORY path CALL rxWorking 1, 'Scanning folder for .xcd-files' rc = SysFileTree( path||'\*.xcd', 'cid.', 'SFO' ) DO i = 1 TO cid.0 CALL rxProgress 2, ( i - 1 ) / cid.0 PARSE VALUE REVERSE( cid.i ) WITH .'.'filename'\' filename = REVERSE( filename ) CALL rxWorking 1, 'Adding "'||filename||'"' '@'||w_path||'\WIC.EXE -i '||cid.i||' 2>&1 1>NUL' END CALL SysSetExtLIBPATH oldbeginlibpath, 'B' END CALL rxProgress 2, 1 CALL DIRECTORY this RETURN Usage: PROCEDURE PARSE SOURCE . . scriptname PARSE VALUE REVERSE( FILESPEC( 'N', scriptname ) ) WITH .'.'scriptname CALL LINEOUT 'STDOUT', 'Usage:' CALL LINEOUT 'STDOUT', ' '||REVERSE( scriptname )||' C:\My\Zipped\Fonts' RETURn 0 RxLoadLib: PROCEDURE SIGNAL ON SYNTAX NAME Faulty CALL RxFuncAdd ARG(1), ARG(2), ARG(1) INTERPRET 'CALL '||ARG(1) RETURN '' Faulty: RETURN "Couldn't load "||ARG(2)||".dll and register "||ARG(1)||"!" /* display_on_row, part */ rxProgress: PROCEDURE EXPOSE __meter. !_sqleng_!. !_tmp_table_! IF TRACE() = '?I' THEN RETURN 0 row = ARG(1) IF SYMBOL( "__meter.row.t_stamp" ) = "VAR" THEN IF __meter.row.t_stamp + 1 > TIME( 'S' ) THEN RETURN 0 chr = 'Û²±°þÛ ' IF SYMBOL( "__meter.width" ) <> "VAR" THEN PARSE VALUE SysTextScreenSize() WITH __meter.height __meter.width ELSE IF \DATATYPE( __meter.width, 'W' ) THEN PARSE VALUE SysTextScreenSize() WITH __meter.height __meter.width DO i = 2 TO MIN( ARG(), LENGTH( chr ) ) j = i - 1 IF LENGTH( ARG(i) ) = 0 THEN progress.j = 1 ELSE IF \DATATYPE( ARG(i), 'N' ) THEN RETURN 0 ELSE progress.j = FORMAT( ARG(i),,, 0 ) IF LENGTH( FORMAT( 100 * progress.j,, 0, 0 ) ) > 3 THEN RETURN 0 END progress.0 = j processed.0 = 0 output = '' CALL SysStemSort 'progress' DO i = 1 TO MIN( progress.0, LENGTH( chr ) ) j = i - 1 processed.i = FORMAT( MIN( ( __meter.width - 4 ) * progress.i , __meter.width - 4 ),, 0, 0 ) progress.i = FORMAT( 100 * progress.i, 3, 0, 0 ) IF processed.i > processed.j THEN output = output||COPIES( SUBSTR( chr, i, 1 ), processed.i - processed.j ) END i = i - 1 output = output||COPIES( SUBSTR( chr, LENGTH( chr ), 1 ), __meter.width - 4 - processed.i ) CALL rxOut ARG(1), output||RIGHT( progress.1||'%', 4 ) RETURN 0 /* display_on_row, text */ rxWorking: PROCEDURE EXPOSE __meter. !_sqleng_!. !_tmp_table_! IF TRACE() = '?I' THEN RETURN 0 PARSE ARG row, txt IF SYMBOL( "__meter."||row||".t_stamp" ) <> "VAR" THEN __meter.row.t_stamp = TIME( 'S' ) ELSE IF \DATATYPE( __meter.row.t_stamp , 'N' ) THEN __meter.row.t_stamp = TIME( 'S' ) IF __meter.row.t_stamp + 1 < TIME( 'S' ) THEN DO SELECT WHEN __meter.counter = 1 THEN CALL rxOut row, '/ '||txt WHEN __meter.counter = 2 THEN CALL rxOut row, '- '||txt WHEN __meter.counter = 3 THEN CALL rxOut row, '\ '||txt OTHERWISE __meter.counter = 0 CALL rxOut row, '| '||txt END __meter.counter = __meter.counter + 1 END RETURN 0 /* display_on_row, text */ rxOut: PROCEDURE EXPOSE __meter. !_sqleng_!. !_tmp_table_! IF TRACE() = '?I' THEN RETURN 0 PARSE ARG row, txt IF SYMBOL( "__meter.width" ) <> "VAR" THEN PARSE VALUE SysTextScreenSize() WITH __meter.height __meter.width IF SYMBOL( "__meter."||row||".t_stamp" ) <> "VAR" THEN __meter.row.t_stamp = TIME( 'S' ) IF \DATATYPE( __meter.row.t_stamp, 'W' ) | \DATATYPE( __meter.width, 'W' ) THEN PARSE VALUE SysTextScreenSize() WITH __meter.height __meter.width isNum = DATATYPE( row, 'W' ) IF isNum THEN DO IF DATATYPE( __meter.row.t_stamp, 'W' ) THEN IF __meter.row.t_stamp + 1 > TIME( 'S' ) THEN RETURN 0 PARSE VALUE SysCurPos( row, 0 ) with prev_row prev_col END ELSE IF DATATYPE( __meter.row.t_stamp, 'W' ) THEN IF __meter.row.t_stamp + 1 > TIME( 'S' ) THEN RETURN 0 CALL CHAROUT 'STDERR', LEFT( txt, MAX( __meter.width, MIN( LENGTH( txt ), __meter.width ) ) ) IF isNum THEN DO CALL SysCurPos prev_row, prev_col __meter.row.t_stamp = TIME( 'S' ) END ELSE __meter.row.t_stamp = TIME( 'S' ) RETURN 0 /* Register a font in the desktop INI file. The font will be available to PM * after the next startup. */ RegisterFont: PROCEDURE EXPOSE log1 PARSE ARG fontname, filename inirc = SysIni( 'USER', 'PM_Fonts', fontname, filename || '00'x ) IF inirc = '' THEN CALL rxOut 1, ' - Registered "'fontname'" in profile.' ELSE CALL rxOut 3, ' - Failed to register "'fontname'" in profile:' inirc RETURN ( inirc = '' ) /* Check all registered fonts in OS2.INI and make sure they're actually * installed. Deregister any non-existent font. */ CleanupInstalledFonts: PROCEDURE EXPOSE log1 ok = SysIni( 'USER', 'PM_Fonts', 'ALL:', 'regfonts.' ) IF ok == 'ERROR:' THEN RETURN 1 CALL rxOut 1, 'Verifying' regfonts.0 'registered fonts...' DO i = 1 TO regfonts.0 PARSE VALUE SysIni( 'USER', 'PM_Fonts', regfonts.i ) WITH _font '00'x . IF _font == 'ERROR:' THEN ITERATE IF STREAM( _font, 'C', 'QUERY EXISTS' ) == '' THEN DO CALL rxOut 3, 'Registered font' _font 'does not exist - deregistering.' ok = SysIni( 'USER', 'PM_Fonts', regfonts.i, 'DELETE:' ) IF ok == 'ERROR:' THEN CALL rxOut 3, 'Deregistering of font' _font 'failed!' END END RETURN 0 RxBootDrive: PROCEDURE EXPOSE (exposeList) /* Load RexxUtil Library */ IF RxFuncQuery('SysLoadFuncs') THEN DO CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' CALL SysLoadFuncs END /* install a local error handler */ SIGNAL ON SYNTAX NAME BootDrive boot_drive = '' boot_drive = SysBootDrive() BootDrive: /* boot_drive is still empty if SysBootDrive() failed */ /* SysBootDrive() is only available in the newer versions of REXXUTIL! */ IF boot_drive = '' THEN DO /* Do further tests to ensure that the result of this method is correct! */ PARSE UPPER VALUE VALUE( "PATH",, prog.__env ) WITH "\OS2\SYSTEM" -2 boot_drive +2 boot_drive = STRIP( boot_drive ) os_dir = STRIP( LEFT( VALUE( 'OSDIR',, 'OS2ENVIRONMENT' ), 2 ) ) sys_cmd = STRIP( LEFT( VALUE( 'COMSPEC',, 'OS2ENVIRONMENT' ), 2 ) ) IF LENGTH( os_dir ) = 2 THEN IF boot_drive = os_dir THEN RETURN boot_drive IF LENGTH( sys_cmd ) = 2 THEN IF boot_drive = sys_cmd THEN RETURN boot_drive IF LENGTH( os_dir ) = 2 & LENGTH( sys_cmd ) = 2 THEN IF os_dir = sys_cmd THEN RETURN os_dir END RETURN boot_drive