Extract the icon from the EAs

[Autolink] Menu

A lot of programs save their icon in the Extended Attribute .ICON. You may use the following code to extract the icon from the EAs of a program (see also Icon resources in default OS/2 DLLs and Get icons from the OS2.INI file):

 
/*                                                                    */
/* Name:     GetIcon.CMD                                              */
/*                                                                    */
/* Function:                                                          */
/*   sample program to get the icons from the OS2.INI file            */
/*                                                                    */
/* Usage:                                                             */
/*   GetIcon fileName                                                 */
/*                                                                    */
/* Where:                                                             */
/*   fileName - name of the file with the .ICON EA                    */
/*                                                                    */
/* Returns:                                                           */
/*   -                                                                */
/*                                                                    */
/* Credits:                                                           */
/*   -                                                                */
/*                                                                    */
/* History:                                                           */
/*   RXT&T v2.00 /bs                                                  */
/*     - initial release                                              */
/*   RXT&T v2.10 /bs                                                  */
/*     - added some error checking code                               */
/*                                                                    */
/* Notes:                                                             */
/*                                                                    */
/*   The .ICO files are created in the current directory.             */
/*                                                                    */
/*   Tested only with WARP.                                           */
/*                                                                    */
/*                                                                    */
/* (c) 1996 Bernd Schemmer, Germany, EMail: Bernd.Schemmer@gmx.de     */
/*                                                                    */

  parse arg sourceFileName
  sourceFileName = strip( sourceFileName )

                    /* load the necessary REXXUTIL function           */
  call RxFuncAdd "SysGetEA", "REXXUTIL", "SysGetEA"

                    /* check the parameter                            */
  if sourceFileName = "" then
  do
    say "Usage: GetIcon fileName"
    exit 2
  end /* if sourceFileName = "" then */

  iconData = ""

                    /* use ".ICON1" to retrieve the Animation icon of */
                    /* folder                                         */
  if SysGetEA( sourceFileName, ".ICON", "iconData" ) <> 0 | iconData = "" then
  do
    say "Error: Either the file does not exist or the file has no .ICON EA"
    exit 3
  end /* if SysGetEA( ... */

                    /* check the type and format of the EA      v2.10 */
  parse var iconData EAType +2 EALength +2 IconData          /* v2.10 */
  EALength = c2d( translate( "12", EALength, "21" ) )        /* v2.10 */

  if EAType <> "F9FF"x | ,                                   /* v2.10 */
     EALength <> length( iconData ) then                     /* v2.10 */
  do                                                         /* v2.10 */
    say "Error: The .ICON EA is corrupted!"                  /* v2.10 */
    exit 5                                                   /* v2.10 */
  end /* if EAType <> "F9FF"x | ...  */                      /* v2.10 */

                    /* create the name for the target file            */
  i = lastPos( ".", sourceFileName )
  j = lastPos( "\", sourceFileName )

  if i = 0 | ( i < j ) then
    targetFileName = sourceFileName || ".ICO"
  else
    targetFileName = substr( sourceFileName, 1, i ) || "ICO"

  if stream( targetFileName, "c", "QUERY EXISTS" ) <> "" then
  do
    say "Error: The targetfile " || ,
        targetFileName || ,
        " already exist!"
    exit 4
  end /* if stream( ...  */

                    /* create, write and close the ICON file          */
  call stream targetFileName, "c", "OPEN WRITE"
  call CharOut targetFileName, iconData
  call stream targetFileName, "c", "CLOSE"

  say "Iconfile " || targetFileName || " created."
exit 0


[Back: Get icons from the OS2.INI file]
[Next: Format of the file created with 'Print settings']