home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / GFX / ADPro251-3.DMS / ADPro251-3.adf / OperatorsPseudo.lha / _Mirror < prev    next >
Encoding:
Text File  |  1994-01-31  |  4.2 KB  |  254 lines

  1. /*
  2. ** _Mirror
  3. **
  4. ** $VER: _Mirror 1.0.0 (08.11.93)
  5. **
  6. ** This ARexx program will mirror half of the image in ADPro's buffer against
  7. ** the other half (Vertical or Horizontal)
  8. **
  9. ** This program requires ADPro v2.5.0 (or higher) 
  10. **
  11. ** Copyright © 1990-1993 ASDG, Incorporated
  12. ** All Rights Reserved
  13. */
  14.  
  15. ADDRESS "ADPro"
  16. OPTIONS RESULTS
  17.  
  18. NL = '0A'X
  19. SQ = '27'X
  20. DQ = '22'X
  21. TRUE  = 1
  22. FALSE = 0
  23. TempDefaults = "T:TempADProDefaults"
  24. TempMirrorCrop = "T:TempMirrorCrop"
  25. TempMirrorFlip = "T:TempMirrorFlip"
  26.  
  27.  
  28. /*
  29. ** Save the current environment.
  30. */
  31.  
  32. SAVE_DEFAULTS TempDefaults
  33.  
  34.  
  35. /*
  36. ** Get image width & height
  37. */
  38.  
  39. XSIZE
  40. ImageWidth = ADPRO_RESULT
  41.  
  42. YSIZE
  43. ImageHeight = ADPRO_RESULT
  44.  
  45.  
  46. /*
  47. ** Save image to temp buffer
  48. */
  49.  
  50. SAVER "TEMP" "XXX" "RAW"
  51. IF (RC ~= 0) THEN DO
  52.     ADPRO_TO_FRONT
  53.     OKAY1 "Could not access TEMP saver."
  54.     CALL ErrorOut 10
  55. END
  56.  
  57.  
  58. /*
  59. ** Ask if the mirror will be along a horizontal or vertical axis
  60. */
  61.  
  62. ADPRO_TO_FRONT
  63.  
  64. OKAYN '"_Mirror"' '"Select mirror type"' '"Vertical|Horizontal|Cancel"'
  65. MirrorType = RC
  66. IF (MirrorType = 0) THEN DO
  67.     CALL ErrorOut 10
  68. END
  69. ELSE IF (MirrorType = 1) THEN DO
  70.     /*
  71.     ** Vertical was chosen, ask for mirror direction
  72.     */
  73.  
  74.     ADPRO_TO_FRONT
  75.  
  76.     OKAYN '"_Mirror"' '"Select side to mirror"' '"Left-Half|Right-Half|Cancel"'
  77.     IF (RC = 0) THEN DO
  78.         CALL ErrorOut 10
  79.     END
  80.     ELSE IF (RC = 1) THEN DO
  81.         CropXOff = 0
  82.         CropYOff = 0
  83.         CropWidth = ImageWidth % 2
  84.         CropHeight = ImageHeight
  85.         CompXOff = ImageWidth % 2
  86.  
  87.         IF (CompXOff * 2 ~= ImageWidth) THEN
  88.             CompXOff = CompXOff + 1
  89.  
  90.         CompYOff = 0
  91.     END
  92.     ELSE IF (RC = 2) THEN DO
  93.         CropXOff = ImageWidth % 2
  94.  
  95.         IF (CropXOff * 2 ~= ImageWidth) THEN
  96.             CropXOff = CropXOff + 1
  97.  
  98.         CropYOff = 0
  99.         CropWidth = ImageWidth % 2
  100.         CropHeight = ImageHeight
  101.         CompXOff = 0
  102.         CompYOff = 0
  103.     END
  104. END
  105. ELSE IF (MirrorType = 2) THEN DO
  106.     /*
  107.     ** Horizontal was chosen, ask for portion to mirror.
  108.     */
  109.  
  110.     ADPRO_TO_FRONT
  111.  
  112.     OKAYN '"_Mirror"' '"Select side to mirror"' '"Top-Half|Bottom-Half|Cancel"'
  113.     IF (RC = 0) THEN DO
  114.         CALL ErrorOut 10
  115.     END
  116.     ELSE IF (RC = 1) THEN DO
  117.         CropXOff = 0
  118.         CropYOff = 0
  119.         CropWidth = ImageWidth
  120.         CropHeight = ImageHeight % 2
  121.         CompXOff = 0
  122.         CompYOff = ImageHeight % 2
  123.  
  124.         IF (CompYOff * 2 ~= ImageHeight) THEN
  125.             CompYOff = CompYOff + 1
  126.     END
  127.     ELSE IF (RC = 2) THEN DO
  128.         CropXOff = 0
  129.         CropYOff = ImageHeight % 2
  130.  
  131.         IF (CropYOff * 2 ~= ImageHeight) THEN
  132.             CropYOff = CropYOff + 1
  133.  
  134.         CropWidth = ImageWidth
  135.         CropHeight = ImageHeight % 2
  136.         CompXOff = 0
  137.         CompYOff = 0
  138.     END
  139. END
  140.  
  141.  
  142. /*
  143. ** Crop out the area of the image to mirror
  144. */
  145.  
  146. OPERATOR "CROP_IMAGE" CropWidth CropHeight CropXOff CropYOff
  147. IF (RC ~= 0) THEN DO
  148.     ADPRO_TO_FRONT
  149.     OKAY1 "Crop_Image failed."
  150.     CALL ErrorOut 10
  151. END
  152.  
  153.  
  154. /*
  155. ** Save cropped area to a temp file
  156. */
  157.  
  158. SAVER "IFF" TempMirrorCrop "RAW"
  159. IF (RC ~= 0) THEN DO
  160.     ADPRO_TO_FRONT
  161.     OKAY1 "Save to tempfile failed."
  162.     CALL ErrorOut 10
  163. END
  164.  
  165.  
  166. /*
  167. ** Flip the cropped region
  168. */
  169.  
  170. IF (MirrorType = 1) THEN DO
  171.     OPERATOR "HORIZONTAL_FLIP"
  172.     IF (RC ~= 0) THEN DO
  173.         ADPRO_TO_FRONT
  174.         OKAY1 "Horizontal flip failed."
  175.         CALL ErrorOut 10
  176.     END
  177. END
  178.     
  179. ELSE IF (MirrorType = 2) THEN DO
  180.     OPERATOR "VERTICAL_FLIP"
  181.     IF (RC ~= 0) THEN DO
  182.         ADPRO_TO_FRONT
  183.         OKAY1 "Vertical Flip failed."
  184.         CALL ErrorOut 10
  185.     END
  186. END
  187.  
  188.  
  189. /*
  190. ** Save the flipped data to a temp file
  191. */
  192.  
  193. SAVER "IFF" TempMirrorFlip "RAW"
  194. IF (RC ~= 0 ) THEN DO
  195.     ADPRO_TO_FRONT
  196.     OKAY1 "Save to tempfile failed."
  197.     CALL ErrorOut 10
  198. END
  199.  
  200.  
  201. /*
  202. ** Reload original image from TEMP buffer
  203. */
  204.  
  205. LOADER "TEMP" "XXX"
  206. IF (RC ~= 0) THEN DO
  207.     ADPRO_TO_FRONT
  208.     OKAY1 "Load from TEMP failed."
  209.     CALL ErrorOut 10
  210. END
  211.  
  212.  
  213. /*
  214. ** Composite flipped data to the appropriate position on the original image
  215. */
  216.  
  217. LOADER "IFF" TempMirrorFlip COMPOFFSET CompXOff CompYOff
  218. IF (RC ~= 0) THEN DO
  219.     ADPRO_TO_FRONT
  220.     OKAY1 "Load from tempfile failed."
  221.     CALL ErrorOut 10
  222. END
  223.  
  224. CALL ErrorOut 0
  225.  
  226.  
  227. ErrorOut:
  228.     PARSE ARG ExitCode
  229.  
  230.     IF (EXISTS( TempDefaults )) THEN DO
  231.         LOAD_DEFAULTS TempDefaults
  232.         IF (RC ~= 0) THEN DO
  233.             ADPRO_TO_FRONT
  234.             OKAY1 "Error restoring settings."
  235.         END
  236.  
  237.         ADDRESS COMMAND "Delete >NIL:" TempDefaults
  238.     END
  239.  
  240.     IF (EXISTS( TempMirrorCrop )) THEN
  241.         ADDRESS COMMAND "Delete >NIL:" TempMirrorCrop
  242.  
  243.     IF (EXISTS( TempMirrorFlip )) THEN
  244.         ADDRESS COMMAND "Delete >NIL:" TempMirrorFlip
  245.  
  246.     OPERATOR "KILLTEMP"
  247.     IF (RC ~= 0) THEN DO
  248.         ADPRO_TO_FRONT
  249.         OKAY1 "Unable to Kill TEMP buffer."
  250.         CALL ErrorOut 10
  251.     END
  252.  
  253.     EXIT ExitCode
  254.