home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / commodities / superdark / programmer.lha / prog / example_gadgs.dark.c < prev    next >
C/C++ Source or Header  |  1993-03-21  |  6KB  |  217 lines

  1. /*********************************************/
  2. /* File example_gadgs.dark.c                */
  3. /*                         */
  4. /* This exampleshow you how to use different */
  5. /* kind of 'gadgets' available with superdark*/
  6. /*********************************************/
  7.  
  8. #include <exec/types.h>
  9. #include <exec/memory.h>
  10. #include <intuition/intuition.h>
  11. #include <intuition/gadgetclass.h>
  12. #include <graphics/gfx.h>
  13. #include <graphics/gfxbase.h>
  14. #include <dos/dos.h>
  15. #include <graphics/gfxmacros.h>
  16. #include <graphics/rastport.h>
  17. #include <graphics/displayinfo.h>
  18. #include <clib/exec_protos.h>
  19. #include <clib/intuition_protos.h>
  20. #include <clib/dos_protos.h>
  21. #include <clib/graphics_protos.h>
  22. #include <clib/diskfont_protos.h>
  23.  
  24.  
  25. #include "/includes/struct.h"
  26. #include "/includes/tom_gadget.h"
  27. #include "image.h"
  28.  
  29. struct Library        *DiskfontBase;
  30. extern  struct  GfxBase *GfxBase;
  31. extern    struct    appel_proc    *p_data_proc;
  32.  
  33. #define    VOID_ARG    void    __regargs
  34.  
  35. char    *p_text_info=
  36. "This is a part of programmers.doc\n"
  37. "You can see here the different   \n"
  38. "kind of gadgets available\n"
  39. "including 'high level' gadg like\n"
  40. "screen and font\n"
  41. "Note that all corresponding param.\n"
  42. "are saved in the .info file....\n"
  43. "\n"
  44. " @ Thomas Landspurg\n";
  45.  
  46. struct    RastPort    *rp;
  47. struct    Screen        *s;
  48.  
  49. #define    WIDTH    640
  50. #define    HEIGHT    256
  51.  
  52. UWORD  ScreenColors[] = {
  53.     0x000,
  54.     0xFFF,
  55.     0xFE2,
  56.     0x68B,
  57.     0xF90,
  58.     0x0F0,
  59.     0x00F,
  60.     0xF0F,
  61.     0x000 };
  62.  
  63. struct NewScreen Screen= {
  64.      0, 0, WIDTH, HEIGHT, 1,0,1,HIRES,CUSTOMSCREEN,NULL,NULL,NULL,NULL};
  65.  
  66. /* Note that you should put a string with enough place to put the */
  67. /* larger font name                          */
  68. struct    TextAttr myta={"topaz                   ",0,0,0};
  69.  
  70. #define    TAILLE_BUF    100
  71. char    buffer_text[TAILLE_BUF]="";
  72. char *CyclesNames[] = {"This","is","a","list","of","items",NULL};
  73. char *MxNames[]     = {"Item 1","Item 2","Item 3",NULL};
  74. int    __saveds    press_button();
  75.  
  76. struct    tom_gadget    my_gadg[]={
  77.     {"_Button",      BUTTON,  100,10,100, 11,0,0,0,0,(char *)press_button},
  78.     {"Checkbo_x",    CHECKBOX,280,10, 10, 10,0,0,0,0,0},
  79.     {"C_ycle",    CYCLE,   100,25,100, 12,        0,1,0,0,(char *)CyclesNames},
  80.     {"_String",    STRING,  100, 45,250,14,0,TAILLE_BUF,0,0,buffer_text},
  81.     {"_Fonts",    FONT,    100,60,100,12,0,         0,0,0,(char *)&myta},
  82.     {"Scr_een",    SCREEN,  220,60,100,12,0,         0,0,0,0},
  83.     {"Sli_der",    SLIDER,  100,75,200,10,1,0,10,0,0},
  84.     {"_Mx",        MX,     150,90,100,30,0,0, 0,0,(char *)MxNames},
  85.     {"image...",    IMAGE,   250,87, 80,30,0,0,0 ,0,(char *)&image_iffImage},
  86.     {0,        END_LISTE,  0,  0,   0, 0, 0,0,0,0,0}};
  87.  
  88. /********** a little proc to print text on screen ************/
  89. void    my_print(rp,x,y,pc)
  90. struct    RastPort *rp;
  91. int    x,y;
  92. char    *pc;
  93. {
  94.     Move(rp,x,y);
  95.     Text(rp,pc,strlen(pc));
  96. }
  97.  
  98. /* The callback procedure, called when the button is pressed, */
  99. /* Note that this function use the keyword __saved. If you    */
  100. /* don't have this one, try geta4() function              */
  101.  
  102. int    __saveds    press_button(pg,p_t,ctx)
  103. struct    Gadget    *pg;
  104. struct    tom_gadget    *p_t;
  105. struct    contexe    *ctx;
  106. {
  107.     static struct EasyStruct ES={
  108.         sizeof(struct EasyStruct),
  109.         0,"Example",
  110.         "You've pressed the button gadget","I know,thanks",};
  111.  
  112.     EasyRequest(ctx->Wnd, &ES, NULL);
  113.     /* If you return TRUE, this mean that you want to close the */
  114.     /* config window.                        */
  115.     return FALSE;
  116. }
  117.  
  118. /********************* Just to show you something on your screen *****/
  119.  
  120. void    aff_texte(rp)
  121. struct    RastPort *rp;
  122. {
  123.         struct TextFont *myfont;
  124.     int    len,tx,ty,x,y;
  125.     struct    TextExtent    result;
  126.     char    buffer[100];
  127.  
  128.     /* Note that there is SPrintF equivalent in proc_main,    */
  129.     /* so it's better to use this one: SPrintF        */
  130.     SetAPen(rp,1);
  131.  
  132.     SPrintF(buffer,"Cycle value: number %ld",my_gadg[2].value);
  133.     my_print(rp,10,20,buffer);
  134.  
  135.     SPrintF(buffer,"String value: number %s",my_gadg[3].value);
  136.     my_print(rp,10,30,buffer);
  137.  
  138.     SPrintF(buffer,"Slider value: number %ld",my_gadg[6].value);
  139.     my_print(rp,10,40,buffer);
  140.  
  141.     SetAPen(rp,1);
  142.     if(DiskfontBase){
  143.                if (myfont = OpenDiskFont(&myta))
  144.                     {
  145.                         SetFont(rp, myfont);
  146.                             SetSoftStyle(rp,   myta.ta_Style ^ myfont->tf_Style,
  147.                                       (FSF_BOLD | FSF_UNDERLINED | FSF_ITALIC));
  148.             }
  149.     }
  150.     len=strlen(my_gadg[3].p_data);
  151.     ty=myta.ta_YSize;
  152.     tx=TextLength(rp,my_gadg[3].p_data,len);
  153.     if(tx+10>s->Width){
  154.         tx=s->Width-10;
  155.         len=TextFit(rp,my_gadg[3].p_data,len,&result,NULL,1,s->Width-10,ty);
  156.     }
  157.     x=(s->Width-tx)/2;
  158.     y=(s->Height-ty)/2;
  159.     Move(rp,x,y+ty);
  160.     ty+=8;
  161.     Text(rp,my_gadg[3].p_data,len);
  162.     
  163. }
  164.  
  165. /***************************************************/
  166. /* This is the main entry point of this blanker....*/
  167. /***************************************************/
  168. void    dark()
  169. {
  170.   struct    tom_gadget *pg;
  171.  
  172.   pg=&my_gadg[5];
  173.  
  174.   /* First we try to open a screen of the type asked by the user */
  175.   if((GfxBase->LibNode.lib_Version>=37)&&(pg->d3!=0)){
  176.     s=OpenScreenTags(  NULL,
  177.                SA_Width,(ULONG)pg->d1,
  178.                SA_Height,(ULONG)pg->d2,
  179.                            SA_Depth,(ULONG)pg->d3,
  180.                SA_Overscan,(ULONG)pg->value,
  181.                            SA_DisplayID,(ULONG)pg->p_data,
  182.                            SA_Quiet,TRUE,TAG_DONE);
  183.    }else{
  184.     s=OpenScreen(&Screen);
  185.    }
  186.    if (s){
  187.  
  188.     rp = &(s->RastPort);
  189.  
  190.     SetRast(rp,0);
  191.     FreeSprite (0);
  192.     GfxBase->SpriteReserved|=1;
  193.     LoadRGB4(&s->ViewPort,ScreenColors,1<<3);
  194.  
  195.     aff_texte(rp);
  196.     while(tst_end()==FALSE){
  197.         WaitTOF();
  198.     }
  199.     CloseScreen(s);
  200.    }
  201. }
  202.  
  203. void    proc_init()
  204. {
  205.         DiskfontBase = OpenLibrary("diskfont.library", 37L);
  206.     p_data_proc->code_ret=DARK_WB_20;
  207. }
  208.  
  209. void    proc_save()
  210. {
  211. }
  212. void    proc_end()
  213. {
  214.     if(DiskfontBase)CloseLibrary(DiskfontBase);
  215. }
  216.  
  217.