home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d9xx / d911 / gadoutline.lha / GadOutline / Examples / example1.c < prev    next >
C/C++ Source or Header  |  1993-10-03  |  9KB  |  351 lines

  1.  
  2. #include <graphics/gfxmacros.h>
  3. #include <proto/graphics.h>
  4. #include <proto/gadtools.h>
  5. #include <proto/exec.h>
  6. #include <proto/dos.h>
  7. #include <proto/intuition.h>
  8. #include <proto/utility.h>
  9. #include <proto/asl.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. #ifndef LINKLIB
  14.     #include "proto/gadoutline.h"
  15. #else
  16.     #include "libraries/gadoutline.h"
  17.     #include "interface.h"
  18. #endif
  19.  
  20. #ifdef DEBUGMODULE
  21.     
  22.     #include "support/debug.h"
  23.  
  24. #else
  25.  
  26.     void __stdargs kprintf(UBYTE *fmt,...);  // Serial debugging...
  27.     void __stdargs dprintf(UBYTE *fmt,...);  // Parallel debugging...
  28.  
  29.     #ifndef bug
  30.     #define bug Printf
  31.     #endif
  32.  
  33.     #ifndef DEBTIME
  34.     #define DEBTIME 0
  35.     #endif
  36.  
  37.     #ifdef DEBUG
  38.     #define D(x) (x); if(DEBTIME>0) Delay(DEBTIME);
  39.     #else
  40.     #define D(x) ;
  41.     #endif
  42.  
  43. #endif
  44.  
  45. enum {
  46.     GAD1_ID = 1,
  47.     GAD2_ID,
  48.     GAD3_ID,
  49.     GAD4_ID,
  50.     GAD5_ID,
  51.     GAD6_ID
  52. };
  53.  
  54. /*********************************************
  55.  **
  56.  ** Main window gadget outline
  57.  **
  58.  *********************************************/
  59.  
  60. static ULONG outline[] = {
  61.  
  62. GO_HORIZGRP(0,0,1), TAG_END,
  63.  
  64.     GO_VERTGRP(0,0,1), TAG_END,
  65.     
  66.         GO_GTBOX(BUTTON_KIND, 0, GAD1_ID, 1, (ULONG)&"Gadget One", PLACETEXT_IN),
  67.         GOCT_SetHotKey, '1',
  68.         TAG_END,
  69.         TAG_END,
  70.  
  71.         GO_GTBOX(BUTTON_KIND, 0, GAD2_ID, 1, (ULONG)&"Gadget Two", PLACETEXT_IN),
  72.         GOCT_SetHotKey, '2',
  73.         TAG_END,
  74.         TAG_END,
  75.  
  76.         GO_GTBOX(BUTTON_KIND, 0, GAD3_ID, 1, (ULONG)&"Gadget Three", PLACETEXT_IN),
  77.         GOCT_SetHotKey, '3',
  78.         TAG_END,
  79.         TAG_END,
  80.  
  81.     GO_ENDGRP(),
  82.  
  83.     GO_VERTGRP(0,0,1), TAG_END,
  84.     
  85.         GO_GTBOX(BUTTON_KIND, 0, GAD4_ID, 1, (ULONG)&"Gadget Four", PLACETEXT_IN),
  86.         GOCT_SetHotKey, '4',
  87.         TAG_END,
  88.         TAG_END,
  89.  
  90.         GO_GTBOX(BUTTON_KIND, 0, GAD5_ID, 1, (ULONG)&"Gadget Five", PLACETEXT_IN),
  91.         GOCT_SetHotKey, '5',
  92.         TAG_END,
  93.         TAG_END,
  94.  
  95.         GO_GTBOX(BUTTON_KIND, 0, GAD6_ID, 1, (ULONG)&"Gadget Six", PLACETEXT_IN),
  96.         GOCT_SetHotKey, '6',
  97.         TAG_END,
  98.         TAG_END,
  99.  
  100.     GO_ENDGRP(),
  101.  
  102. GO_ENDGRP(),
  103. GO_ENDOUTLINE()
  104. };
  105.  
  106. /*********************************************
  107.  **
  108.  ** Program environment
  109.  **
  110.  *********************************************/
  111.  
  112. static struct Process *me = NULL;
  113. static struct Window *oldwin = NULL;   /* what me->pr_WindowPtr previously was */
  114.  
  115. /*********************************************
  116.  **
  117.  ** Current program state
  118.  **
  119.  *********************************************/
  120.  
  121. static struct GadOutline *gad_outline = NULL;
  122. static struct GadOutline *sml_outline = NULL;
  123. static struct GadOutline *big_outline = NULL;
  124. static UBYTE *go_error;        /* Where error results are returned */
  125.  
  126. /*********************************************
  127.  **
  128.  ** All library bases
  129.  **
  130.  *********************************************/
  131.  
  132. #define MIN_VERSION     37L      /* minimum version number for our libs */
  133.  
  134. long __oslibversion = MIN_VERSION;
  135.  
  136. #ifndef LINKLIB
  137. struct Library *GadOutlineBase = NULL;      /* Testing, 1... 2... 3... */
  138. #endif
  139.  
  140. static void quit(UBYTE *err);
  141. static void closedown(void);
  142. static void opendisplay(struct GadOutline *go,WORD num,UBYTE *,ULONG,ULONG);
  143. static void handledisplay(struct GadOutline *go);
  144.  
  145. /*********************************************
  146.  **
  147.  ** Routines for a clean exit, with optional error display
  148.  **
  149.  *********************************************/
  150.  
  151. /* Data for displaying pre-2.0 error requester */
  152.  
  153. static struct IntuiText req_text[] = {
  154. {       AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,AUTOTOPEDGE,
  155.         NULL,"Example1 Problem:",&req_text[1] },
  156. {       AUTOFRONTPEN,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,AUTOTOPEDGE+12,
  157.         NULL,"Release 2.0 required.",NULL },
  158. {       AUTOBACKPEN+1,AUTOBACKPEN,AUTODRAWMODE,AUTOLEFTEDGE,AUTOTOPEDGE,
  159.         NULL,"Quit",NULL } };
  160.  
  161. static void do_old_request(UBYTE *err)
  162. {
  163.     struct IntuitionBase *IntuitionBase;
  164.  
  165.     if( (IntuitionBase=(struct IntuitionBase *)
  166.         OpenLibrary("intuition.library",0)) != 0 ) {
  167.             AutoRequest(NULL,&req_text[0],&req_text[2],&req_text[2],NULL,
  168.                     NULL,320,70);
  169.             CloseLibrary((void *)IntuitionBase);
  170.     }
  171. }
  172.  
  173. static struct EasyStruct error_es = {
  174.     sizeof(struct EasyStruct), 0,
  175.     "GadOutline Example1 Requester",
  176.     "Problem during startup:\n%ls",
  177.     "Quit"
  178. };
  179.  
  180. static void quit(UBYTE *err)
  181. {
  182.     closedown();
  183.  
  184.     if(err == NULL) err = go_error;
  185.     if(err != NULL ) {
  186.  
  187.         (void)EasyRequest(NULL,&error_es, NULL, err);
  188.  
  189.     }
  190.     _exit(0);
  191. }
  192.  
  193. static void closedown(void)
  194. {
  195.     if(big_outline) FreeGadOutline(big_outline);
  196.     if(sml_outline) FreeGadOutline(sml_outline);
  197.     if(gad_outline) FreeGadOutline(gad_outline);
  198.  
  199. #ifndef LINKLIB
  200.     if(GadOutlineBase) CloseLibrary(GadOutlineBase);
  201. #endif
  202.  
  203.     if(me) {
  204.         me->pr_WindowPtr = (APTR)oldwin;
  205.     }
  206. }
  207.  
  208. /*********************************************
  209.  **
  210.  ** Routine for opening the window and gadgets
  211.  **
  212.  *********************************************/
  213.  
  214. static void opendisplay(struct GadOutline *go,WORD num,UBYTE *fname,ULONG fsize,ULONG idcmp)
  215. {
  216.     DimenGadOutline(go, GOA_TextAttr, NULL,
  217.                         GOA_FontName, fname, GOA_FontSize, fsize,
  218.                         idcmp ? GOA_UserIDCMP : TAG_IGNORE, idcmp,
  219.                         TAG_END);
  220.     if(go->go_LastReqReturn) return;
  221.  
  222.     GO_OpenWindow(go,
  223.                 WA_Left,            num*50,
  224.                 WA_Top,             num*50,
  225.                 WA_AutoAdjust,      TRUE,
  226.                 WA_IDCMP,           IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW,
  227.                 WA_Activate,        TRUE,
  228.                 WA_CloseGadget,     TRUE,
  229.                 WA_DepthGadget,     TRUE,
  230.                 WA_DragBar,         TRUE,
  231.                 WA_SizeGadget,      TRUE,
  232.                 WA_SizeBBottom,     TRUE,
  233.                 WA_ReportMouse,     TRUE,
  234.                 WA_SimpleRefresh,   TRUE,
  235.                 WA_PubScreen,       NULL,
  236.                 TAG_END
  237.                 );
  238.  
  239.     if(go->go_LastReqReturn || !go->go_Window) return;
  240.  
  241.     me->pr_WindowPtr = (APTR)go->go_Window;
  242. }
  243.  
  244. static void handledisplay(struct GadOutline *go)
  245. {
  246.     struct GadOutline *cur_go;
  247.     struct GOIMsg *msg;
  248.     struct Gadget *gadget;
  249.     ULONG class;
  250.     WORD code;
  251.  
  252.     if(!go || !go->go_Window || !go->go_Window->UserPort) return;
  253.  
  254.     while (1)
  255.     {
  256.         Wait( (1L<<go->go_Window->UserPort->mp_SigBit) );
  257.  
  258.         while (msg = GO_GetGOIMsg(go))
  259.         {
  260.             cur_go = GO_GetGOFromGOIMsg(msg);
  261.             class = msg->StdIMsg.Class;
  262.             code = msg->StdIMsg.Code;
  263.             gadget=msg->StdIMsg.IAddress;
  264.             gadget = (struct Gadget *)msg->StdIMsg.IAddress;
  265.  
  266.             GO_ReplyGOIMsg(msg);
  267.  
  268.             switch (class) {
  269.  
  270.                 case IDCMP_CLOSEWINDOW:
  271.                     return;
  272.  
  273.                 case IDCMP_REFRESHWINDOW:
  274.                     if(cur_go) {
  275.                         GO_BeginRefresh(cur_go);
  276.                         GO_EndRefresh(cur_go, TRUE);
  277.                     }
  278.                     break;
  279.  
  280.                 case IDCMP_GADGETUP:
  281.  
  282.                     D(bug("A gadget of type: %ld\n",gadget->GadgetID));
  283.             }
  284.         }
  285.  
  286.     }
  287. }
  288.  
  289. /*********************************************
  290.  **
  291.  ** Program's main entry point
  292.  **
  293.  *********************************************/
  294.  
  295. void __regargs main(int argc,char **argv)
  296. {
  297.     if( !(me = (struct Process *)FindTask(NULL)) ) quit("Can't find    myself!");
  298.  
  299.     oldwin = (struct Window *)me->pr_WindowPtr;
  300.  
  301. #ifdef DEBUGLIB
  302.     {
  303.         void *ptr;
  304.  
  305.         D(bug("Started...  Flushing memory...\n",NULL));
  306.         ptr = (void *)AllocMem(0x0FFFFFFF,0);
  307.         if(ptr) FreeMem(ptr,0x0FFFFFFF);
  308.  
  309.         D(bug("OK, in a sec we'll try this thing.\n",NULL));
  310.         Delay(60);
  311.     }
  312. #endif
  313.  
  314. #ifndef LINKLIB
  315.     GadOutlineBase = OpenLibrary("gadoutline.library", 0);
  316.     if (!GadOutlineBase)
  317.        quit("Can't open gadoutline.library.");
  318.     D(bug("Opened the library.  Creating outline...\n",NULL));
  319. #endif
  320.     
  321.     gad_outline = AllocGadOutline(outline,
  322.            GOA_ErrorText,    &go_error,
  323.            TAG_END);
  324.     if(gad_outline == NULL) {
  325.         quit(go_error);
  326.     }
  327.  
  328.     sml_outline = AllocGadOutline(outline,
  329.            GOA_ErrorText,    &go_error,
  330.            TAG_END);
  331.     if(sml_outline == NULL) {
  332.         quit(go_error);
  333.     }
  334.  
  335.     big_outline = AllocGadOutline(outline,
  336.            GOA_ErrorText,    &go_error,
  337.            TAG_END);
  338.     if(big_outline == NULL) {
  339.         quit(go_error);
  340.     }
  341.  
  342.     D(bug("Outline created OK.",NULL));
  343.  
  344.     opendisplay(gad_outline,0,NULL,0,~0);
  345.     opendisplay(sml_outline,1,"topaz",8,(ULONG)gad_outline->go_MsgPort);
  346.     opendisplay(big_outline,2,"Garnet",16,(ULONG)gad_outline->go_MsgPort);
  347.     handledisplay(gad_outline);
  348.  
  349.     quit(NULL);
  350. }
  351.