home *** CD-ROM | disk | FTP | other *** search
/ DTP Toolbox / DTPToolbox.iso / utilities / propage_pdraw / donsgenies / adproscripts.lha / PARtoAnim.ADPro < prev    next >
Encoding:
Text File  |  1994-10-08  |  13.7 KB  |  551 lines

  1. /*
  2. PARtoANIM.adpro
  3.  
  4. $VER: PARtoANIM.adpro Oct 94
  5.  
  6. This AREXX program will take an existing FLIC file and rerender it as an
  7. anim according to the user's specifications. Adapted by Don Cox from ASDG's example script.
  8. */
  9.  
  10. call open("STDERR","ram:trace","W")
  11. trace r
  12.  
  13. ADDRESS "ADPro"
  14. OPTIONS RESULTS
  15.  
  16. NL = '0A'X
  17. SQ = '27'X
  18. DQ = '22'X
  19. TRUE = 1
  20. FALSE = 0
  21. TempDefaults = "T:TempADProDefaults"
  22.  
  23. SAVE_DEFAULTS TempDefaults
  24.  
  25. PSTATUS
  26. oldPSTATUS = ADPRO_RESULT
  27. PSTATUS "UNLOCKED"
  28.  
  29. CALL "FREDSCRIPTS:FREDFunctions/GetAFile" '"Enter PAR To Convert"' '"ADPRO:"' '""""' TRUE
  30. IF (RESULT = (DQ || DQ)) THEN DO
  31.     ADPRO_TO_FRONT
  32.     OKAY1 "Error, no source ANIM specified."
  33.     ADPRO_TO_BACK
  34.     CALL ErrorOut 10
  35. END
  36. SrcANIMFName = RESULT
  37.  
  38.  
  39. OKAYN '"Frames"' '"Select Anim Format"' '"Frames|Field 1|Both Fields|Abort"'
  40. if rc=0 then exit
  41. if rc =1 then AnimFormat = "Frame"
  42. if rc = 2 then AnimFormat = "Field1"
  43. if rc = 3 then AnimFormat = "Fields"
  44.  
  45.  
  46. /* Select the horizontal resolution. */
  47. HorizSize.1  = "Low Res"
  48. HorizSize.2  = "High Res"
  49. HorizSize.3  = "Super High Res"
  50. MinHorizSize = 1
  51. MaxHorizSize = 3
  52. DefHorizSize = 1
  53.  
  54. String = '"' || HorizSize.DefHorizSize || '"'
  55. DO LoopCounter = MinHorizSize TO MaxHorizSize
  56.     String = String '"' || HorizSize.LoopCounter || '"'
  57. END
  58.  
  59. ADPRO_TO_FRONT
  60.  
  61. continue = 0
  62. DO UNTIL (continue = 1)
  63.     LISTVIEW '"Horiz. Resolutions:"' (MaxHorizSize-MinHorizSize+1) ITEMS String
  64.     LISTVIEW_RC = RC
  65.     PARSE VAR ADPRO_RESULT '"'HorizSizeStr'"' scratch
  66.  
  67.     HorizRes = MinHorizSize
  68.     DO WHILE (HorizRes <= MaxHorizSize) & (COMPARE( HorizSizeStr, HorizSize.HorizRes ) ~= 0)
  69.         HorizRes = HorizRes + 1
  70.     END
  71.  
  72.     IF (LISTVIEW_RC ~= 0) & (LISTVIEW_RC ~= 1) THEN DO
  73.         OKAY2 "This value is required." || NL || NL ||,
  74.             "Select OK to Retry" || NL ||,
  75.             "or CANCEL to Abort."
  76.  
  77.         IF (RC = 0) THEN
  78.             CALL ErrorOut 10
  79.         END
  80.     ELSE
  81.         continue = 1
  82.     END
  83.  
  84. HorizOscan = 0
  85. OKAY2 "Horizontal Overscan?" || NL || NL ||,
  86.     "Select OK to enable it" || NL ||,
  87.     "or CANCEL to disable it."
  88. IF (RC ~= 0) THEN HorizOscan = 1
  89.  
  90. /* Select the monitor. */
  91. GETLIST MONITORS
  92. String = ADPRO_RESULT
  93. IF (RC ~= 0) THEN DO
  94.     ADPRO_TO_FRONT
  95.     OKAY1 "Could not retrieve" || NL ||,
  96.         "monitor list."
  97.     ADPRO_TO_BACK
  98.     CALL ErrorOut 10
  99.     END
  100.  
  101. continue = 0
  102. DO UNTIL (continue = 1)
  103.     LISTVIEW '"Monitors Available:"' 10 ITEMS String
  104.     LISTVIEW_RC = RC
  105.     PARSE VAR ADPRO_RESULT '"'Monitor'"' scratch
  106.  
  107.     IF (LISTVIEW_RC ~= 0) & (LISTVIEW_RC ~= 1) THEN DO
  108.         OKAY2 "This value is required." || NL || NL ||,
  109.             "Select OK to Retry" || NL ||,
  110.             "or CANCEL to Abort."
  111.  
  112.         IF (RC = 0) THEN
  113.             CALL ErrorOut 10
  114.         END
  115.  
  116.     ELSE
  117.         continue = 1
  118.     END
  119.  
  120. VertLace = 0
  121. OKAY2 "Interlace?" || NL || NL ||,
  122.     "Select OK for interlace" || NL ||,
  123.     "or CANCEL for non-interlace."
  124. IF (RC ~= 0) THEN
  125.     VertLace = 1
  126.  
  127. VertOscan = 0
  128. OKAY2 "Vertical Overscan?" || NL || NL ||,
  129.     "Select OK to enable it" || NL ||,
  130.     "or CANCEL to disable it."
  131. IF (RC ~= 0) THEN
  132.     VertOscan = 1
  133.  
  134.  
  135. /* Now build the SCREEN_TYPE value.  */
  136. ScreenType = 0
  137.  
  138. IF (HorizRes = 2) THEN              /* High Res */
  139.     ScreenType = ScreenType + 1
  140. ELSE IF (HorizRes = 3) THEN         /* Super High Res */
  141.     ScreenType = ScreenType + 64
  142.  
  143. IF (HorizOscan = 1) THEN            /* Horizontal Overscan */
  144.     ScreenType = ScreenType + 8
  145.  
  146. IF (Monitor = "DFLT") THEN          /* DFLT */
  147.     ScreenType = ScreenType + 256
  148. ELSE IF (Monitor = "PAL") THEN          /* PAL */
  149.     ScreenType = ScreenType + 4
  150. ELSE IF (Monitor = "VGA") THEN          /* VGA */
  151.     ScreenType = ScreenType + 32
  152. ELSE IF (Monitor = "SUP72") THEN        /* SUP72 */
  153.     ScreenType = ScreenType + 128
  154.  
  155. IF (VertLace = 1) THEN              /* Interlace */
  156.     ScreenType = ScreenType + 2
  157.  
  158. IF (VertOscan = 1) THEN             /* Vertical Overscan */
  159.     ScreenType = ScreenType + 16
  160.  
  161.  
  162. /* Ask the user to select the number of colors to use. */
  163.  
  164. GETLIST COLORS
  165. String = ADPRO_RESULT
  166. IF (RC ~= 0) THEN DO
  167.     ADPRO_TO_FRONT
  168.     OKAY1 "Could not retrieve" || NL ||,
  169.         "colors list."
  170.     ADPRO_TO_BACK
  171.     CALL ErrorOut 10
  172. END
  173.  
  174. continue = 0
  175. DO UNTIL (continue = 1)
  176.     LISTVIEW '"Colors Available:"' 10 ITEMS String
  177.     LISTVIEW_RC = RC
  178.     PARSE VAR ADPRO_RESULT '"'NumberOfColors'"' scratch
  179.  
  180.     IF (LISTVIEW_RC ~= 0) & (LISTVIEW_RC ~= 1) THEN DO
  181.         OKAY2 "This value is required." || NL || NL ||,
  182.             "Select OK to Retry" || NL ||,
  183.             "or CANCEL to Abort."
  184.  
  185.         IF (RC = 0) THEN
  186.             CALL ErrorOut 10
  187.     END
  188.     ELSE
  189.         continue = 1
  190. END
  191.  
  192. NumColors = VALUE( NumberOfColors )
  193. IF (VALUE( NumColors ) <= 256) THEN
  194.     RenderType = VALUE( NumColors )
  195. ELSE
  196.     RenderType = NumberOfColors
  197.  
  198.  
  199. /* Ask the user to select the dither mode to use. */
  200.  
  201. GETLIST DITHERS
  202. String = ADPRO_RESULT
  203. IF (RC ~= 0) THEN DO
  204.     ADPRO_TO_FRONT
  205.     OKAY1 "Could not retrieve" || NL ||,
  206.         "dither list."
  207.     ADPRO_TO_BACK
  208.     CALL ErrorOut 10
  209. END
  210.  
  211. continue = 0
  212. DO UNTIL (continue = 1)
  213.     LISTVIEW '"Dithers Available:"' 10 ITEMS String
  214.     LISTVIEW_RC = RC
  215.     PARSE VAR ADPRO_RESULT '"'DitherModeStr'"' scratch
  216.  
  217.     IF (LISTVIEW_RC ~= 0) & (LISTVIEW_RC ~= 1) THEN DO
  218.         OKAY2 "This value is required." || NL || NL ||,
  219.             "Select OK to Retry" || NL ||,
  220.             "or CANCEL to Abort."
  221.  
  222.         IF (RC = 0) THEN
  223.             CALL ErrorOut 10
  224.     END
  225.     ELSE
  226.         continue = 1
  227. END
  228.  
  229. IF (DitherModeStr = "Off") THEN         /* Off */
  230.     DitherMode = 0
  231. ELSE IF (DitherModeStr = "Floyd (1)") THEN  /* Floyd (1) */
  232.     DitherMode = 1
  233. ELSE IF (DitherModeStr = "Burkes (2)") THEN /* Burkes (2) */
  234.     DitherMode = 2
  235. ELSE IF (DitherModeStr = "Sierra (3)") THEN /* Sierra (3) */
  236.     DitherMode = 3
  237. ELSE IF (DitherModeStr = "Jarvis (4)") THEN /* Jarvis (4) */
  238.     DitherMode = 4
  239. ELSE IF (DitherModeStr = "Stucki (5)") THEN /* Stucki (5) */
  240.     DitherMode = 5
  241. ELSE IF (DitherModeStr = "Random (6)") THEN /* Random (6) */
  242.     DitherMode = 6
  243. ELSE IF (DitherModeStr = "Lg Ord (7)") THEN /* Lg Ord (7) */
  244.     DitherMode = 7
  245. ELSE IF (DitherModeStr = "Sm Ord (8)") THEN /* Sm Ord (8) */
  246.     DitherMode = 8
  247. ELSE
  248.     DitherMode = 0
  249.  
  250.  
  251. /*
  252. ** If dither is Random or Ordered, get the Dither Amount.
  253. */
  254.  
  255. IF (DitherMode = 6) | (DitherMode = 7) | (DitherMode = 8) THEN DO
  256.     continue = 0
  257.     DO UNTIL (continue = 1)
  258.         GETNUMBER '"Enter Dither Amount"' 16 1 256
  259.         DitherAmt = ADPRO_RESULT
  260.  
  261.         IF (RC ~= 0) THEN DO
  262.             OKAY2 "This value is required." || NL || NL ||,
  263.                 "Select OK to Retry" || NL ||,
  264.                 "or CANCEL to Abort."
  265.  
  266.             IF (RC = 0) THEN
  267.                 CALL ErrorOut 10
  268.         END
  269.         ELSE
  270.             continue = 1
  271.     END
  272. END
  273.  
  274. CALL "FREDSCRIPTS:FREDFunctions/GetSaver" "ANIM"
  275. IF (RESULT ~= 0) THEN
  276.     CALL ErrorOut RESULT
  277.  
  278. CALL "FREDSCRIPTS:FREDFunctions/GetLoader" "FLC"
  279. IF (RESULT ~= 0) THEN
  280.     CALL ErrorOut RESULT
  281.  
  282. CALL "FREDSCRIPTS:FREDFunctions/GetAFile" '"Enter name of ANIM file to create"' '"ADPRO:"' '""""' TRUE
  283. IF (RESULT = (DQ || DQ)) THEN DO
  284.     ADPRO_TO_FRONT
  285.     OKAY1 "Error, no dest ANIM specified."
  286.     ADPRO_TO_BACK
  287.     CALL ErrorOut 10
  288. END
  289. DestANIMFName = RESULT
  290.  
  291. IF (EXISTS( DestANIMFName )) THEN DO
  292.     CALL "FREDSCRIPTS:FREDFunctions/GetABool" '"Truncate Destination ANIM?"' '"to start a new file"' '"to append to it"'
  293.     IF (RESULT ~= 0) THEN DO
  294.         IMAGE_TYPE
  295.         ImageType = ADPRO_RESULT
  296.         IF (WORD( ImageType, 1 ) = "NONE") THEN DO
  297.             CALL "FREDSCRIPTS:FREDFunctions/GetLoader" "BACKDROP"
  298.             IF (RESULT ~= 0) THEN
  299.                 CALL ErrorOut RESULT
  300.  
  301.             LOAD "XXX" 10 10 "COLOR"
  302.             IF (RC ~= 0) THEN DO
  303.                 ADPRO_TO_FRONT
  304.                 OKAY1 "Unable to create temp image." || NL ||,
  305.                     "Argument Information:" || NL||,
  306.                     "Width = " || 10 || NL ||,
  307.                     "Height = " || 10 || NL ||,
  308.                     "Type = " || "COLOR"
  309.                 ADPRO_TO_BACK
  310.                 CALL ErrorOut 10
  311.             END
  312.         END
  313.  
  314.         IF (WORD( ImageType, 1 ) ~= "BITPLANE") THEN DO
  315.             EXECUTE
  316.             IF (RC ~= 0) THEN DO
  317.                 ADPRO_TO_FRONT
  318.                 OKAY1 "Unable to create temp rendered data."
  319.                 ADPRO_TO_BACK
  320.                 CALL ErrorOut 10
  321.             END
  322.         END
  323.  
  324.         CALL "FREDSCRIPTS:FREDFunctions/GetSaver" "ANIM"
  325.         IF (RESULT ~= 0) THEN
  326.             CALL ErrorOut RESULT
  327.  
  328.         SAVE DestANIMFName "IMAGE" "QUIT"
  329.         IF (RC ~= 0) THEN DO
  330.             ADPRO_TO_FRONT
  331.             OKAY1 "Could not close current ANIM file." || NL ||,
  332.                 "Argument Information:" || NL ||,
  333.                 "Filename = " || '"'DestANIMFName'"' || NL ||,
  334.                 "Type = " || "IMAGE" || NL ||,
  335.                 "Flags = " || "QUIT"
  336.             ADPRO_TO_BACK
  337.             CALL ErrorOut 10
  338.         END
  339.  
  340.         ADDRESS COMMAND "Delete >NIL:" '"'DestANIMFName'"'
  341.     END
  342. END
  343.  
  344. LFORMAT "PAR_PEG"
  345. SFORMAT "ANIM"
  346.  
  347. LOAD "'"SrcANIMFName"'" "COUNT"
  348. IF (RC ~= 0) THEN DO
  349.     ADPRO_TO_FRONT
  350.     OKAY1 "Can't find PAR file."
  351.     ADPRO_TO_BACK
  352.     CALL ErrorOut 10
  353. END
  354.  
  355. NumFrames = ADPRO_RESULT
  356.  
  357. LOAD '"'SrcANIMFName'"' 1
  358. IF (RC ~= 0) THEN DO
  359.     ADPRO_TO_FRONT
  360.     OKAY1 "Cannot find source PAR anim."
  361.     ADPRO_TO_BACK
  362.     CALL ErrorOut 10
  363. END
  364.  
  365. PSTATUS "LOCKED"
  366. SCREEN_TYPE
  367. oldSType = ADPRO_RESULT
  368. SCREEN_TYPE ADPRO_RESULT
  369.  
  370. CurrFrameNum = 1
  371. continue = FALSE
  372. DO WHILE (continue = FALSE)
  373.  
  374.     if animformat = "Frame" then do
  375.         LOAD '"'SrcANIMFName'"' CurrFrameNum 
  376.         IF (RC ~= 0) THEN DO
  377.             ADPRO_TO_FRONT
  378.             OKAY1 "Error during load" || NL ||,
  379.             "of frame " || CurrFrameNum || "."
  380.             ADPRO_TO_BACK
  381.             CALL ErrorOut 10
  382.             END
  383.  
  384.         call rendering
  385.  
  386.         SAVE DestANIMFName "APPEND" "IMAGE"
  387.         IF (RC ~= 0) THEN DO
  388.             ADPRO_TO_FRONT
  389.             OKAY1 "Error during load" || NL ||,
  390.             "of frame " || CurrFrameNum || "."
  391.             ADPRO_TO_BACK
  392.             CALL ErrorOut 10
  393.             END
  394.         end /* of frame load */
  395.  
  396.  
  397.     if left(Animformat,5) = "Field" then do
  398.         LOAD '"'SrcANIMFName'"' CurrFrameNum "FIELD1 DOUBLE"
  399.         IF (RC ~= 0) THEN DO
  400.             ADPRO_TO_FRONT
  401.             OKAY1 "Error during load" || NL ||,
  402.                 "of frame " || CurrFrameNum || "."
  403.             ADPRO_TO_BACK
  404.             CALL ErrorOut 10
  405.             END
  406.  
  407.         call rendering
  408.  
  409.         SAVE DestANIMFName "APPEND" "IMAGE"
  410.         IF (RC ~= 0) THEN DO
  411.             ADPRO_TO_FRONT
  412.             OKAY1 "Error during load" || NL ||,
  413.                 "of frame " || CurrFrameNum || "."
  414.                 ADPRO_TO_BACK
  415.             CALL ErrorOut 10
  416.             END
  417.         end /* of Field 1 */
  418.  
  419.  
  420.     if Animformat = "Fields" then do /* another field */
  421.         LOAD '"'SrcANIMFName'"' CurrFrameNum "FIELD2 DOUBLE"
  422.         IF (RC ~= 0) THEN DO
  423.             ADPRO_TO_FRONT
  424.             OKAY1 "Error during load" || NL ||,
  425.                 "of frame " || CurrFrameNum || "."
  426.             ADPRO_TO_BACK
  427.             CALL ErrorOut 10
  428.             END
  429.  
  430.         call rendering
  431.  
  432.         SAVE DestANIMFName "APPEND" "IMAGE"
  433.         IF (RC ~= 0) THEN DO
  434.             ADPRO_TO_FRONT
  435.             OKAY1 "Error during load" || NL ||,
  436.                 "of frame " || CurrFrameNum || "."
  437.             ADPRO_TO_BACK
  438.             CALL ErrorOut 10
  439.             END
  440.         end /* of Field 2 */
  441.  
  442.     CurrFrameNum = CurrFrameNum + 1
  443.     IF (CurrFrameNum > NumFrames) THEN
  444.         continue = TRUE
  445. END
  446.  
  447. SAVE DestANIMFName "QUIT" "IMAGE"
  448. IF (RC ~= 0) THEN DO
  449.     ADPRO_TO_FRONT
  450.     OKAY1 "Error closing dest ANIM."
  451.     ADPRO_TO_BACK
  452.     CALL ErrorOut 10
  453. END
  454.  
  455. PSTATUS oldPSTATUS
  456. SCREEN_TYPE oldSType
  457.  
  458. CALL ErrorOut 0
  459.  
  460.  
  461.  
  462.  
  463. ErrorOut:
  464.     PARSE ARG ErrorCode
  465.  
  466.     IF (EXISTS( SrcANIMFName )) & (ErrorCode ~= 0) THEN DO
  467.         LOADER "ANIM" '"'SrcANIMFName'"' "QUIT"
  468.         IF (RC ~= 0) THEN DO
  469.             ADPRO_TO_FRONT
  470.             OKAY1 "Error closing source ANIM:" || NL ||,
  471.                 SrcANIMFName || NL || NL ||,
  472.                 "You need to close it" || NL ||,
  473.                 "manually."
  474.             ADPRO_TO_BACK
  475.         END
  476.     END
  477.  
  478.     IF (EXISTS( DestANIMFName )) & (ErrorCode ~= 0) THEN DO
  479.         SAVER "ANIM" '"'DestANIMFName'"' "IMAGE" "QUIT"
  480.         IF (RC ~= 0) THEN DO
  481.             ADPRO_TO_FRONT
  482.             OKAY1 "Error closing dest ANIM:" || NL ||,
  483.                 DestANIMFName || NL || NL ||,
  484.                 "You need to close it" || NL ||,
  485.                 "manually."
  486.             ADPRO_TO_BACK
  487.         END
  488.     END
  489.  
  490.     IF (EXISTS( TempDefaults )) THEN DO
  491.         LOAD_DEFAULTS TempDefaults
  492.         IF (RC ~= 0) THEN DO
  493.             ADPRO_TO_FRONT
  494.             OKAY1 "Error restoring settings."
  495.             ADPRO_TO_BACK
  496.         END
  497.  
  498.         ADDRESS COMMAND "Delete >NIL:" TempDefaults
  499.     END
  500.  
  501.     EXIT ErrorCode
  502.  
  503. /* ++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++  */
  504.  
  505. rendering:
  506.  
  507.     SCREEN_TYPE ScreenType
  508.     IF (RC ~= 0) THEN DO
  509.         ADPRO_TO_FRONT
  510.         OKAY1 "Screen mode not supported." || NL || ADPRO_RESULT
  511.         ADPRO_TO_BACK
  512.         CALL ErrorOut 10
  513.     END
  514.  
  515.     RENDER_TYPE RenderType
  516.     IF (RC ~= 0) THEN DO
  517.         ADPRO_TO_FRONT
  518.         OKAY1 "Render mode not supported." || NL || ADPRO_RESULT
  519.         ADPRO_TO_BACK
  520.         CALL ErrorOut 10
  521.     END
  522.  
  523.     DITHER DitherMode
  524.     IF (RC ~= 0) THEN DO
  525.         ADPRO_TO_FRONT
  526.         OKAY1 "Dither mode not supported." || NL || ADPRO_RESULT
  527.         ADPRO_TO_BACK
  528.         CALL ErrorOut 10
  529.     END
  530.  
  531.     IF (DitherMode = 6) | (DitherMode = 7) | (DitherMode = 8) THEN DO
  532.         DITHER_AMOUNT DitherAmt
  533.         IF (RC ~= 0) THEN DO
  534.             ADPRO_TO_FRONT
  535.             OKAY1 "Dither amount not supported." || NL || ADPRO_RESULT
  536.             ADPRO_TO_BACK
  537.             CALL ErrorOut 10
  538.         END
  539.     END
  540.  
  541.     EXECUTE
  542.     IF (RC ~= 0) THEN DO
  543.         ADPRO_TO_FRONT
  544.         OKAY1 "Error creating rendered data."
  545.         ADPRO_TO_BACK
  546.         CALL ErrorOut 10
  547.     END
  548.  
  549.  
  550. return
  551.