home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d9xx / d952 / machv.lha / MachV / programmer.lha / vars / vars.c < prev    next >
C/C++ Source or Header  |  1993-09-06  |  6KB  |  243 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. #include <proto/exec.h>
  5. #include <proto/gadtools.h>
  6. #include <dos/var.h>
  7. #include <clib/dos_protos.h>
  8. #include <clib/intuition_protos.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/intuitionbase.h>
  11. #include <libraries/gadtools.h>
  12. #include "/headers/mach.h"
  13. #include "/headers/machlib.h"
  14. #include "/headers/machlib_protos.h"
  15. #include "/headers/machlib_pragmas.h"
  16.  
  17. #define LIST_LIST_ID    1
  18. #define LIST_VNAME_ID   2
  19. #define LIST_VALUE_ID   3
  20.  
  21. #define GADGWIDTH       150
  22.  
  23. #define IDCMP IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | LISTVIEWIDCMP
  24. #define FLAGS WFLG_ACTIVATE | WFLG_SMART_REFRESH | WFLG_CLOSEGADGET | \
  25.               WFLG_DEPTHGADGET | WFLG_DRAGBAR
  26.  
  27. kprintf(char *,... );
  28. static void copy_vars(void);
  29. static struct Node *find_value(UWORD code);
  30. static void close_down(void);
  31. static void create_glist(void);
  32. static void set_value(UWORD sel);
  33. static void putmsg_machv(long ev);
  34.  
  35. struct MachLibrary *MachBase;
  36. struct IntuitionBase *IntuitionBase;
  37. struct Library *GadToolsBase;
  38.  
  39. static struct TextAttr Topaz80 = {(STRPTR)"topaz.font",8,0,FPF_ROMFONT};
  40. static APTR vi;
  41.  
  42. static struct Window *listw;
  43. static struct Gadget *gad,*glist,*listG,*nameG,*valueG;
  44. static struct NewWindow lwindow = {
  45.     0,30, GADGWIDTH+4,146, -1,-1,
  46.     IDCMP,
  47.     FLAGS,
  48.     NULL,
  49.     NULL,
  50.     (UBYTE*) " Variables",
  51.     NULL,NULL,
  52.     -1,-1,
  53.     -1,-1,
  54.     WBENCHSCREEN
  55.     };
  56.  
  57. static struct LocalVar *vars;
  58.  
  59. static struct MachMessage machmsg = {{{NULL,NULL,NT_MESSAGE},NULL,sizeof(struct MachMessage)}};
  60.  
  61. main(int argc, char **argv)
  62. {
  63.     struct Process        *pr;
  64.     struct IntuiMessage    *msg;
  65.     struct Screen        *s;
  66.     long                 list_sig,selected;
  67.     ULONG                 class;
  68.     UWORD                 code,gid;
  69.  
  70.     if (IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library",37L)) {
  71.         if (GadToolsBase = OpenLibrary("gadtools.library",37L)) {
  72.             if (MachBase = (struct MachLibrary*)OpenLibrary("mach.library",37L)) {
  73.                 s = LockPubScreen(NULL);
  74.                 lwindow.LeftEdge = (((s->Width - s->LeftEdge) - lwindow.Width) / 2);
  75.                 UnlockPubScreen(NULL,s);
  76.                 if (listw = OpenWindowTags(&lwindow, WA_AutoAdjust,TRUE,TAG_DONE)) {
  77.                     pr = (struct Process*)MachBase->ml_MachV_Task.Task;
  78.                     vars = (struct LocalVar*)&pr->pr_LocalVars;
  79.                     selected = 3; /* show below process, Result and RC */
  80.                     create_glist();
  81.                     if (gad) {
  82.                         AddGList(listw,glist, -1, -1, NULL);
  83.                         RefreshGList(glist, listw, NULL, -1);
  84.                         GT_RefreshWindow(listw, NULL);
  85.                         list_sig = (1L << (listw->UserPort->mp_SigBit));
  86.                         while (listw) {
  87.                             Wait(list_sig);
  88.                             while (listw && (msg = GT_GetIMsg(listw->UserPort))) {
  89.                                 class = msg->Class;
  90.                                 code = msg->Code;
  91.                                 if (class == GADGETUP)
  92.                                     gid = ((struct Gadget *)msg->IAddress)->GadgetID;
  93.                                 GT_ReplyIMsg(msg);
  94.                                 switch (class) {
  95.                                 case IDCMP_CLOSEWINDOW:
  96.                                     close_down();
  97.                                     break;
  98.                                 case IDCMP_GADGETUP:
  99.                                     switch (gid) {
  100.                                     case LIST_LIST_ID:
  101.                                         selected = code;
  102.                                         set_value(code);
  103.                                         break;
  104.                                     case LIST_VNAME_ID:
  105.                                     case LIST_VALUE_ID:
  106.                                         GT_SetGadgetAttrs(listG,listw,NULL,GTLV_Labels,~0,TAG_DONE);
  107.                                         copy_vars();
  108.                                         if (*MachBase->ml_Variable == '\0') {
  109.                                             *MachBase->ml_Variable = -1;
  110.                                             selected--;
  111.                                         }
  112.                                         putmsg_machv(GE_DO_VAR);
  113.                                         GT_SetGadgetAttrs(listG,listw,NULL,GTLV_Labels,vars,GTLV_Selected,selected,TAG_DONE);
  114.                                         set_value(selected);
  115.                                         GT_SetGadgetAttrs(valueG,listw,NULL,GTST_String,MachBase->ml_Variable,TAG_DONE);
  116.                                         break;
  117.                                     }
  118.                                 case RAWKEY:
  119.                                     if (code == 0x42) /* tab */
  120.                                         ActivateGadget(nameG,listw,NULL);
  121.                                     break;
  122.                                 }
  123.                             }
  124.                         }
  125.                     }
  126.                     close_down();
  127.                 }
  128.                 CloseLibrary((struct Library*)MachBase);
  129.             }
  130.             CloseLibrary((struct Library*)GadToolsBase);
  131.         }
  132.         CloseLibrary((struct Library*)IntuitionBase);
  133.     }
  134. }
  135.  
  136. static void set_value(UWORD sel)
  137. {
  138.     struct LocalVar        *lv;
  139.  
  140.     if (lv = (struct LocalVar*)find_value(sel)) {
  141.         strncpy(MachBase->ml_Variable,lv->lv_Value,lv->lv_Len);
  142.         MachBase->ml_Variable[lv->lv_Len] = '\0';
  143.         GT_SetGadgetAttrs(valueG,listw,NULL,GTST_String,MachBase->ml_Variable,TAG_DONE);
  144.     }
  145. }
  146.  
  147. static void copy_vars(void)
  148. {
  149.     strcpy(MachBase->ml_VarName,((struct StringInfo *)(nameG->SpecialInfo))->Buffer);
  150.     strcpy(MachBase->ml_Variable,((struct StringInfo *)(valueG->SpecialInfo))->Buffer);
  151. }
  152.  
  153. static struct Node *find_value(UWORD code)
  154. {
  155.     struct Node *n;
  156.  
  157.     for (n=vars->lv_Node.ln_Succ;n->ln_Succ;n = n->ln_Succ) {
  158.         if (code-- == 0)
  159.             break;
  160.     }
  161.     return(n->ln_Succ ? n : NULL);
  162. }
  163.  
  164. static void close_down(void)
  165. {
  166.     if (listw) 
  167.         CloseWindow(listw);
  168.     listw = NULL;
  169.     if (glist)
  170.         FreeGadgets(glist);
  171.     glist = NULL;
  172. }
  173.  
  174. static void create_glist(void)
  175. {
  176.     WORD  top,loff;
  177.     struct NewGadget ng;
  178.     struct Screen *listws;
  179.  
  180.     listws = ((struct IntuitionBase*)(IntuitionBase))->FirstScreen;
  181.     vi = GetVisualInfoA(listws,TAG_DONE);
  182.     top = listws->BarHeight + 1;
  183.     loff = (IntuitionBase->LibNode.lib_Version < 38) ? 14 : 24;
  184.     
  185.     gad = CreateContext(&glist);
  186.     
  187.     ng.ng_VisualInfo    = vi;  /* these are required! */
  188.     ng.ng_TextAttr        = &Topaz80;
  189.     
  190.     ng.ng_LeftEdge        = 4;
  191.     ng.ng_TopEdge        = top;
  192.     ng.ng_Width            = GADGWIDTH;
  193.     ng.ng_GadgetText    = NULL;
  194.     ng.ng_Flags            = 0;
  195.     
  196.     ng.ng_Height        = 12;
  197.     ng.ng_GadgetID        = LIST_VNAME_ID;
  198.     gad = CreateGadget(STRING_KIND, gad, &ng,     GTST_MaxChars,80,
  199.                        TAG_DONE);
  200.     nameG = gad;
  201.  
  202.     ng.ng_Height        = 100 + loff;
  203.     ng.ng_GadgetID        = LIST_LIST_ID;
  204.     
  205.     gad = CreateGadget(LISTVIEW_KIND, gad, &ng, GTLV_Labels, vars,
  206.                         GTLV_Top,            0,
  207.                         GTLV_ShowSelected,  nameG,
  208.                         GTLV_Selected,        3,
  209.                         GTLV_ScrollWidth,    20,
  210.                         TAG_DONE);
  211.     listG = gad;
  212.  
  213.     ng.ng_TopEdge        = nameG->TopEdge+10;
  214.     ng.ng_Width            = GADGWIDTH;
  215.     ng.ng_GadgetText    = NULL;
  216.     ng.ng_Flags            = 0;
  217.     
  218.     ng.ng_Height        = 12;
  219.     ng.ng_GadgetID        = LIST_VALUE_ID;
  220.     set_value(3);
  221.     gad = CreateGadget(STRING_KIND, gad, &ng,     GTST_MaxChars,80,
  222.                        GTST_String,    (ULONG)MachBase->ml_Variable,
  223.                        TAG_DONE);
  224.     valueG = gad;
  225. }
  226.  
  227. static void putmsg_machv(long ev)
  228. {
  229.   struct MsgPort *rp;
  230.  
  231.   rp = CreatePort(NULL,0L);
  232.   if (rp) {
  233.     machmsg.mm_Msg.mn_ReplyPort = rp;
  234.     machmsg.mm_Msg.mn_Node.ln_Name = "MACHV";
  235.     machmsg.mm_Command = MACHV_GENERAL_EVENT;
  236.     machmsg.mm_SubCommand = ev;
  237.     PutMsg(MachBase->ml_MsgPort,(struct Message*)&machmsg);
  238.     WaitPort(rp);
  239.     GetMsg(rp);
  240.     DeletePort(rp);
  241.   }
  242. }
  243.