home *** CD-ROM | disk | FTP | other *** search
- /* ImageStudio ARexx script **************************************/
-
- /* Allow commands to return results */
-
- options results
-
- /* On error, goto ERROR:. Comment out this line if you wish to */
- /* perform your own error checking. */
-
- signal on error
-
- /* BEGIN PROGRAM *************************************************/
-
- /* See if we have an image already */
-
- IMAGEINFO_GET STEM imageinfo.
-
- if imageinfo.changed == 1 then do
- REQUEST_MESSAGE TEXT '"Project has changed, continue?"',
- BUTTONTEXT '"OK|Cancel"' AUTOCANCEL
-
- end
- else if imageinfo.changed == -1 then do
- /* Open a filerequester to get an image to operate on */
-
- REQUEST_FILE TITLE '"Choose image..."' VAR imagefile
-
- OPEN FILE '"'imagefile'"'
-
- /* Get the new image's details */
-
- IMAGEINFO_GET STEM 'imageinfo.'
-
- end
-
- /* Choose the convoluion filters to apply */
-
- PREF_GET NAME 'CONVOLVEDIR' VAR convolvedir
-
- REQUEST_MULTIFILE PATHPART '"'convolvedir'"' TITLE '"Select filters..."',
- STEM convolves.
-
- /* Work out how we should tile the image (could do this with a */
- /* square root, but we don't have the maths libraries loaded). */
- /* This is also not a particularly smart tiling algorithm, but */
- /* we're not trying to demonstrate "particularly smart tiling */
- /* algorithm"s :-) */
-
- /* Block GUI, selection may take some time */
-
- GUI_BLOCK
-
- num_files = convolves.files.count
-
- select
- when convolves.files.count == 1 then
- num_tiles = 1
- when convolves.files.count <= 4 then
- num_tiles = 2
- when convolves.files.count <= 9 then
- num_tiles = 3
- when convolves.files.count <= 16 then
- num_tiles = 4
- when convolves.files.count <= 25 then
- num_tiles = 5
- when convolves.files.count <= 36 then
- num_tiles = 6
- when convolves.files.count <= 49 then
- num_tiles = 7
- when convolves.files.count <= 64 then
- num_tiles = 8
- when convolves.files.count <= 81 then
- num_tiles = 9
- otherwise do
- num_tiles = 10
-
- num_files = 100
-
- end
- end
-
- GUI_UNBLOCK
-
- /* If the image is colour mapped, change it to 24bit */
-
- if imageinfo.depth ~= 24 then
- COLOURS SIXTEENMILLION
-
- /* Loop through all the files */
-
- do l = 0 to num_files - 1
- /* Work out region to select */
-
- xtile = l // num_tiles
- ytile = l % num_tiles
-
- left = (xtile * imageinfo.width) % num_tiles
- right = (((xtile + 1) * imageinfo.width) % num_tiles - 1)
-
- top = (ytile * imageinfo.height) % num_tiles
- bottom = (((ytile + 1) * imageinfo.height) % num_tiles - 1)
-
- /* Select the region */
-
- REGION_SET left top TO right bottom
-
- /* Get the name of the filter */
-
- FILE_SPLIT FILE '"'convolves.files.l'"' STEM 'fileinfo.'
-
- /* Apply a filter on that region */
-
- CONVOLVE NAME '"'fileinfo.filepart'"'
-
- end
-
- /* Clear the region */
-
- REGION_CLEAR
-
- /* END PROGRAM ***************************************************/
-
- exit
-
- /* On ERROR */
-
- ERROR:
-
- /* If we get here, either an error occurred with the command's */
- /* execution or there was an error with the command itself. */
- /* In the former case, rc2 contains the error message and in */
- /* the latter, rc2 contains an error number. SIGL contains */
- /* the line number of the command which caused the jump */
- /* to ERROR: */
-
- if datatype(rc2,'NUMERIC') == 1 then do
- /* See if we can describe the error with a string */
-
- select
- when rc2 == 103 then
- err_string = "ERROR 103, "||,
- "out of memory at line "||SIGL
- when rc2 == 114 then
- err_string = "ERROR 114, "||,
- "bad command template at line "||SIGL
- when rc2 == 115 then
- err_string = "ERROR 115, "||,
- "bad number for /N argument at line "||SIGL
- when rc2 == 116 then
- err_string = "ERROR 116, "||,
- "required argument missing at line "||SIGL
- when rc2 == 117 then
- err_string = "ERROR 117, "||,
- "value after keywork missing at line "||SIGL
- when rc2 == 118 then
- err_string = "ERROR 118, "||,
- "wrong number of arguments at line "||SIGL
- when rc2 == 119 then
- err_string = "ERROR 119, "||,
- "unmatched quotes at line "||SIGL
- when rc2 == 120 then
- err_string = "ERROR 120, "||,
- "line too long at line "||SIGL
- when rc2 == 236 then
- err_string = "ERROR 236, "||,
- "unknown command at line "||SIGL
- otherwise
- err_string = "ERROR "||rc2||", at line "||SIGL
- end
- end
- else if rc2 == 'RC2' then do
- err_string = "ERROR in command at line "||SIGL
- end
- else do
- err_string = rc2||", line "||SIGL
- end
-
- request_message TEXT '"'err_string'"'
-
- exit
-