home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / cd32 / cd32-tools / cdxl-1 / cdgsxl.c < prev    next >
C/C++ Source or Header  |  1993-10-15  |  5KB  |  202 lines

  1. /***********
  2.  
  3.     cdsgxl.c
  4.  
  5.     W.D.L 930330
  6.  
  7. ************/
  8.  
  9. /*
  10.  * COPYRIGHT: Unless otherwise noted, all files are Copyright (c) 1993
  11.  * Commodore-Amiga, Inc.  All rights reserved.
  12.  *
  13.  * DISCLAIMER: This software is provided "as is".  No representations or
  14.  * warranties are made with respect to the accuracy, reliability, performance,
  15.  * currentness, or operation of this software, and all use is at your own risk.
  16.  * Neither commodore nor the authors assume any responsibility or liability
  17.  * whatsoever with respect to your use of this software.
  18.  */
  19.  
  20. // Tab size is 8!
  21.  
  22. #include <exec/types.h>
  23. #include <dos/dos.h>
  24. #include <utility/tagitem.h>
  25.  
  26. #include <clib/exec_protos.h>
  27. #include <clib/utility_protos.h>
  28. #include <clib/dos_protos.h>
  29.  
  30. #include <pragmas/exec_pragmas.h>
  31.  
  32. #include "stdio.h"
  33. #include <stdlib.h>
  34. #include <string.h>    // for setmem()
  35.  
  36. #include "cdxl/runcdxl.h"
  37. #include "cdgsxl_rev.h"
  38.  
  39. // argument parsing 
  40. #define TEMPLATE    "FROM/A,X/K/N,Y/K/N,VOL/K/N,VIEW/S,BLIT/S,BACK/K,MULTIPAL/S,XLSPEED/K/N,NOXLEEC/S,XLPAL/S,LACE/S,NONLACE/S,HIRES/S,LORES/S,BOXIT/S,SDBL/S,NTSC/S,PAL/S,DEFMON/S,NOPOINTER/S,XLMODEID/S,ENDDELAY/K/N,LOOP/K/N,CDXL/S,DOSXL/S,NOPROMOTE/S,LMBABORT/S,RMBABORT/S,FIREABORT/S,MSGPORTNAME/K,HAM/S,NONHAM/S,EHB/S,NONEHB/S,PATCHOPENWB/S\n" VERSTAG " Wayne D. Lutz"
  41. #define OPT_FROM    0
  42. #define    OPT_X        1
  43. #define    OPT_Y        2
  44. #define    OPT_VOL        3
  45. #define    OPT_VIEW    4
  46. #define    OPT_BLIT    5
  47. #define    OPT_BACK    6
  48. #define    OPT_MULTIPAL    7
  49. #define    OPT_XLSPEED    8
  50. #define    OPT_XLEEC    9
  51. #define    OPT_XLPAL    10
  52. #define    OPT_LACE    11
  53. #define    OPT_NONLACE    12
  54. #define    OPT_HIRES    13
  55. #define    OPT_LORES    14
  56. #define    OPT_BOXIT    15
  57. #define    OPT_SDBL    16
  58. #define    OPT_NTSC    17
  59. #define    OPT_PAL     18
  60. #define    OPT_DEFMON    19
  61. #define    OPT_NOPOINT    20
  62. #define    OPT_XLMODEID    21
  63. #define    OPT_ENDDELAY    22
  64. #define    OPT_LOOP    23
  65. #define    OPT_CDXL    24
  66. #define    OPT_DOSXL    25
  67. #define    OPT_NOPROMOTE    26
  68. #define    OPT_LMBABORT    27
  69. #define    OPT_RMBABORT    28
  70. #define    OPT_FIREABORT    29
  71. #define    OPT_MSGPORTNAME    30
  72. #define    OPT_HAM        31
  73. #define    OPT_NONHAM    32
  74. #define    OPT_EHB        33
  75. #define    OPT_NONEHB    34
  76. #define    OPT_PATCHOPENWB    35
  77. #define    OPT_COUNT    36
  78.  
  79. LONG          opts[OPT_COUNT];
  80. struct RDArgs    * rdargs;
  81.  
  82. int CXBRK(void) { return(0); }        /* Disable SASC CTRL/C handling */
  83. int chkabort(void) { return(0); }    /* Indeed */
  84.  
  85. // Error messages.
  86. STATIC UBYTE * XLError[] = {
  87.     "No error",
  88.     "Required filename missing",
  89.     "Error while reading file",
  90.     "Couldn't open file",
  91.     "Not enough memory for operation",
  92.     "Could not open cd/cdtv device",
  93.     "Could not open audio device",
  94.     "Could not open window",
  95.     "Could not open screen",
  96.     "Specified CDXL file is not a standard PAN file",
  97.     "Operation failed"
  98. };
  99.  
  100.  
  101. VOID
  102. main( LONG argc,char * argv[] )
  103. {
  104.     int    ret;
  105.     LONG   xlspeed,left,top,vol,loops;
  106.  
  107.     // workbench
  108.     if ( argc == 0 )
  109.     exit( RETURN_ERROR );
  110.  
  111.     setmem( opts, sizeof (opts) ,0 );
  112.  
  113.     rdargs = ReadArgs(TEMPLATE, opts, NULL);
  114.  
  115.     if ( !rdargs ) {
  116.     PrintFault(IoErr(), NULL);
  117.     exit( RETURN_ERROR );
  118.     }
  119.  
  120.     if ( opts[OPT_XLSPEED] )
  121.     xlspeed = *(LONG *)opts[OPT_XLSPEED];
  122.  
  123.     if ( opts[OPT_X] )
  124.     left = *(LONG *)opts[OPT_X];
  125.  
  126.     if ( opts[OPT_Y] )
  127.     top = *(LONG *)opts[OPT_Y];
  128.  
  129.     if ( opts[OPT_VOL] )
  130.     vol = *(LONG *)opts[OPT_VOL];
  131.  
  132.     if ( opts[OPT_LOOP] ) {
  133.     loops = *(LONG *)opts[OPT_LOOP];
  134.     } else {
  135.     loops = 1;
  136.     }
  137.  
  138.     ret = RunCDXL(
  139.         XLTAG_XLFile,        opts[OPT_FROM],
  140.         XLTAG_View,        opts[OPT_VIEW],
  141.         XLTAG_Blit,        opts[OPT_BLIT],
  142.         XLTAG_MultiPalette,    opts[OPT_MULTIPAL],
  143.         XLTAG_Background,    opts[OPT_BACK],
  144.         XLTAG_KillSig,        SIGBREAKF_CTRL_C,
  145.         XLTAG_XLEEC,        !opts[OPT_XLEEC],
  146.         XLTAG_XLPalette,    opts[OPT_XLPAL],
  147.         XLTAG_Boxit,        opts[OPT_BOXIT],
  148.         XLTAG_Pointer,        !opts[OPT_NOPOINT],
  149.         XLTAG_XLModeID,        opts[OPT_XLMODEID],
  150.         XLTAG_EndDelay,        opts[OPT_ENDDELAY] ?
  151.                       *(LONG *)opts[OPT_ENDDELAY] : 0,
  152.  
  153.         opts[OPT_XLEEC] ? XLTAG_CDXL : TAG_IGNORE, TRUE,
  154.         opts[OPT_DOSXL] ? XLTAG_DOSXL : TAG_IGNORE, TRUE,
  155.  
  156.         XLTAG_NoPromote,    opts[OPT_NOPROMOTE],
  157.  
  158.  
  159.         XLTAG_Loop,        loops,
  160.  
  161.         opts[OPT_X] ? XLTAG_Left : TAG_IGNORE,        left,
  162.         opts[OPT_Y] ? XLTAG_Top : TAG_IGNORE,         top,
  163.         opts[OPT_VOL] ? XLTAG_Volume : TAG_IGNORE,     vol,
  164.         opts[OPT_XLSPEED] ? XLTAG_XLSpeed : TAG_IGNORE,    xlspeed,
  165.         opts[OPT_LACE] ? XLTAG_LACE : TAG_IGNORE,     TRUE,
  166.         opts[OPT_NONLACE] ? XLTAG_NONLACE : TAG_IGNORE,    TRUE,
  167.  
  168.         opts[OPT_HAM] ? XLTAG_HAM : TAG_IGNORE,     TRUE,
  169.         opts[OPT_NONHAM] ? XLTAG_NONHAM : TAG_IGNORE,    TRUE,
  170.  
  171.         opts[OPT_EHB] ? XLTAG_EHB : TAG_IGNORE,     TRUE,
  172.         opts[OPT_NONEHB] ? XLTAG_NONEHB : TAG_IGNORE,    TRUE,
  173.  
  174.         opts[OPT_HIRES] ? XLTAG_HIRES : TAG_IGNORE,    TRUE,
  175.         opts[OPT_LORES] ? XLTAG_LORES : TAG_IGNORE,    TRUE,
  176.         opts[OPT_SDBL] ? XLTAG_SDBL : TAG_IGNORE,    TRUE,
  177.         opts[OPT_NTSC] ? XLTAG_NTSC : TAG_IGNORE,    TRUE,
  178.         opts[OPT_PAL] ? XLTAG_PAL : TAG_IGNORE,    TRUE,
  179.         opts[OPT_DEFMON] ? XLTAG_DEFMON : TAG_IGNORE,    TRUE,
  180.  
  181.         XLTAG_LMBAbort,        opts[OPT_LMBABORT],
  182.         XLTAG_RMBAbort,        opts[OPT_RMBABORT],
  183.         XLTAG_FIREAbort,    opts[OPT_FIREABORT],
  184.         XLTAG_MSGPortName,    opts[OPT_MSGPORTNAME],
  185.         XLTAG_Patch_OpenWB,    opts[OPT_PATCHOPENWB],
  186.  
  187.         TAG_END
  188.         );
  189.  
  190.     FreeArgs( rdargs );
  191.  
  192.     if ( !ret || (ret = RC_ABORTED) ) {
  193.     ret = RETURN_OK;
  194.     } else {
  195.     printf("'%ls'\n",XLError[ret]);
  196.     ret = RETURN_FAIL;
  197.     }
  198.  
  199.     exit( ret );
  200.  
  201. } // main()
  202.