home *** CD-ROM | disk | FTP | other *** search
- /*
- ** _Mirror
- **
- ** $VER: _Mirror 1.0.0 (08.11.93)
- **
- ** This ARexx program will mirror half of the image in ADPro's buffer against
- ** the other half (Vertical or Horizontal)
- **
- ** This program requires ADPro v2.5.0 (or higher)
- **
- ** Copyright © 1990-1993 ASDG, Incorporated
- ** All Rights Reserved
- */
-
- ADDRESS "ADPro"
- OPTIONS RESULTS
-
- NL = '0A'X
- SQ = '27'X
- DQ = '22'X
- TRUE = 1
- FALSE = 0
- TempDefaults = "T:TempADProDefaults"
- TempMirrorCrop = "T:TempMirrorCrop"
- TempMirrorFlip = "T:TempMirrorFlip"
-
-
- /*
- ** Save the current environment.
- */
-
- SAVE_DEFAULTS TempDefaults
-
-
- /*
- ** Get image width & height
- */
-
- XSIZE
- ImageWidth = ADPRO_RESULT
-
- YSIZE
- ImageHeight = ADPRO_RESULT
-
-
- /*
- ** Save image to temp buffer
- */
-
- SAVER "TEMP" "XXX" "RAW"
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Could not access TEMP saver."
- CALL ErrorOut 10
- END
-
-
- /*
- ** Ask if the mirror will be along a horizontal or vertical axis
- */
-
- ADPRO_TO_FRONT
-
- OKAYN '"_Mirror"' '"Select mirror type"' '"Vertical|Horizontal|Cancel"'
- MirrorType = RC
- IF (MirrorType = 0) THEN DO
- CALL ErrorOut 10
- END
- ELSE IF (MirrorType = 1) THEN DO
- /*
- ** Vertical was chosen, ask for mirror direction
- */
-
- ADPRO_TO_FRONT
-
- OKAYN '"_Mirror"' '"Select side to mirror"' '"Left-Half|Right-Half|Cancel"'
- IF (RC = 0) THEN DO
- CALL ErrorOut 10
- END
- ELSE IF (RC = 1) THEN DO
- CropXOff = 0
- CropYOff = 0
- CropWidth = ImageWidth % 2
- CropHeight = ImageHeight
- CompXOff = ImageWidth % 2
-
- IF (CompXOff * 2 ~= ImageWidth) THEN
- CompXOff = CompXOff + 1
-
- CompYOff = 0
- END
- ELSE IF (RC = 2) THEN DO
- CropXOff = ImageWidth % 2
-
- IF (CropXOff * 2 ~= ImageWidth) THEN
- CropXOff = CropXOff + 1
-
- CropYOff = 0
- CropWidth = ImageWidth % 2
- CropHeight = ImageHeight
- CompXOff = 0
- CompYOff = 0
- END
- END
- ELSE IF (MirrorType = 2) THEN DO
- /*
- ** Horizontal was chosen, ask for portion to mirror.
- */
-
- ADPRO_TO_FRONT
-
- OKAYN '"_Mirror"' '"Select side to mirror"' '"Top-Half|Bottom-Half|Cancel"'
- IF (RC = 0) THEN DO
- CALL ErrorOut 10
- END
- ELSE IF (RC = 1) THEN DO
- CropXOff = 0
- CropYOff = 0
- CropWidth = ImageWidth
- CropHeight = ImageHeight % 2
- CompXOff = 0
- CompYOff = ImageHeight % 2
-
- IF (CompYOff * 2 ~= ImageHeight) THEN
- CompYOff = CompYOff + 1
- END
- ELSE IF (RC = 2) THEN DO
- CropXOff = 0
- CropYOff = ImageHeight % 2
-
- IF (CropYOff * 2 ~= ImageHeight) THEN
- CropYOff = CropYOff + 1
-
- CropWidth = ImageWidth
- CropHeight = ImageHeight % 2
- CompXOff = 0
- CompYOff = 0
- END
- END
-
-
- /*
- ** Crop out the area of the image to mirror
- */
-
- OPERATOR "CROP_IMAGE" CropWidth CropHeight CropXOff CropYOff
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Crop_Image failed."
- CALL ErrorOut 10
- END
-
-
- /*
- ** Save cropped area to a temp file
- */
-
- SAVER "IFF" TempMirrorCrop "RAW"
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Save to tempfile failed."
- CALL ErrorOut 10
- END
-
-
- /*
- ** Flip the cropped region
- */
-
- IF (MirrorType = 1) THEN DO
- OPERATOR "HORIZONTAL_FLIP"
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Horizontal flip failed."
- CALL ErrorOut 10
- END
- END
-
- ELSE IF (MirrorType = 2) THEN DO
- OPERATOR "VERTICAL_FLIP"
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Vertical Flip failed."
- CALL ErrorOut 10
- END
- END
-
-
- /*
- ** Save the flipped data to a temp file
- */
-
- SAVER "IFF" TempMirrorFlip "RAW"
- IF (RC ~= 0 ) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Save to tempfile failed."
- CALL ErrorOut 10
- END
-
-
- /*
- ** Reload original image from TEMP buffer
- */
-
- LOADER "TEMP" "XXX"
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Load from TEMP failed."
- CALL ErrorOut 10
- END
-
-
- /*
- ** Composite flipped data to the appropriate position on the original image
- */
-
- LOADER "IFF" TempMirrorFlip COMPOFFSET CompXOff CompYOff
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Load from tempfile failed."
- CALL ErrorOut 10
- END
-
- CALL ErrorOut 0
-
-
- ErrorOut:
- PARSE ARG ExitCode
-
- IF (EXISTS( TempDefaults )) THEN DO
- LOAD_DEFAULTS TempDefaults
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Error restoring settings."
- END
-
- ADDRESS COMMAND "Delete >NIL:" TempDefaults
- END
-
- IF (EXISTS( TempMirrorCrop )) THEN
- ADDRESS COMMAND "Delete >NIL:" TempMirrorCrop
-
- IF (EXISTS( TempMirrorFlip )) THEN
- ADDRESS COMMAND "Delete >NIL:" TempMirrorFlip
-
- OPERATOR "KILLTEMP"
- IF (RC ~= 0) THEN DO
- ADPRO_TO_FRONT
- OKAY1 "Unable to Kill TEMP buffer."
- CALL ErrorOut 10
- END
-
- EXIT ExitCode
-