home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 500-599 / ff589.lza / Term / TermSrc.lha / PhonePanel.c < prev    next >
C/C++ Source or Header  |  1991-11-03  |  40KB  |  1,379 lines

  1. /* $Revision Header * Header built automatically - do not edit! *************
  2.  *
  3.  *    (C) Copyright 1991 by Olaf 'Olsen' Barthel & MXM
  4.  *
  5.  *    Name .....: PhonePanel.c
  6.  *    Created ..: Monday 21-Jan-91 20:12
  7.  *    Revision .: 0
  8.  *
  9.  *    Date            Author          Comment
  10.  *    =========       ========        ====================
  11.  *    21-Jan-91       Olsen           Created this file!
  12.  *
  13.  * $Revision Header ********************************************************/
  14.  
  15. #include "TermGlobal.h"
  16.  
  17. enum    {    GAD_NAMELIST,GAD_NAME,GAD_PHONENUMBER,GAD_PASSWORD,GAD_MACROFILE,
  18.         GAD_PAYUNIT1,GAD_MINUNIT1,GAD_STARTTIME1,GAD_PAYUNIT2,GAD_MINUNIT2,
  19.         GAD_STARTTIME2,GAD_SERIAL,GAD_MODEM,GAD_SCREEN,GAD_TERMINAL,
  20.         GAD_STARTUP,GAD_PATH,GAD_TRANSFER,GAD_UNUSED0,GAD_PLAY,
  21.         GAD_UNUSED2,GAD_UNUSED3,GAD_UNUSED4,GAD_DIAL,GAD_GET,GAD_NEW,
  22.         GAD_REMOVE,GAD_LOAD,GAD_SORT,GAD_SAVE };
  23.  
  24. enum    {    MEN_NEXT=1,MEN_PREV,MEN_LIST,MEN_WINDOW,MEN_SETSERIAL,MEN_SETMODEM,
  25.         MEN_SETSCREEN,MEN_SETTERMINAL,MEN_SETSTARTUP,
  26.         MEN_SETPATH,MEN_SETTRANSFER,MEN_PLAYNUMBER,MEN_DIALENTRY,MEN_GET,
  27.         MEN_NEWENTRY,MEN_REMENTRY,MEN_LOAD,MEN_SORT,MEN_SAVEPHONE,
  28.         MEN_QUITPANEL };
  29.  
  30. STATIC struct NewMenu PhoneMenu[] =
  31. {
  32.     { NM_TITLE, "Project",         0 , 0, 0, (APTR)0},
  33.     {  NM_ITEM, "Next Entry",    "N", 0, 0, (APTR)MEN_NEXT},
  34.     {  NM_ITEM, "Previous Entry",    "P", 0, 0, (APTR)MEN_PREV},
  35.     {  NM_ITEM, "Insert Entry",    "I", 0, 0, (APTR)MEN_LIST},
  36.     {  NM_ITEM, "Other Window",    "W", 0, 0, (APTR)MEN_WINDOW},
  37.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  38.     {  NM_ITEM, "Load",        "L", 0, 0, (APTR)MEN_LOAD},
  39.     {  NM_ITEM, "Sort",        "O", 0, 0, (APTR)MEN_SORT},
  40.     {  NM_ITEM, "Save",        "S", 0, 0, (APTR)MEN_SAVEPHONE},
  41.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  42.     {  NM_ITEM, "Quit",        "Q", 0, 0, (APTR)MEN_QUITPANEL},
  43.  
  44.     { NM_TITLE, "Preferences",     0 , 0, 0, (APTR)0},
  45.     {  NM_ITEM, "Serial...",    "1", 0, 0, (APTR)MEN_SETSERIAL},
  46.     {  NM_ITEM, "Modem...",        "2", 0, 0, (APTR)MEN_SETMODEM},
  47.     {  NM_ITEM, "Screen...",    "3", 0, 0, (APTR)MEN_SETSCREEN},
  48.     {  NM_ITEM, "Terminal...",    "4", 0, 0, (APTR)MEN_SETTERMINAL},
  49.     {  NM_ITEM, "Startup...",    "5", 0, 0, (APTR)MEN_SETSTARTUP},
  50.     {  NM_ITEM, "Paths...",        "6", 0, 0, (APTR)MEN_SETPATH},
  51.     {  NM_ITEM, "Transfer...",    "7", 0, 0, (APTR)MEN_SETTRANSFER},
  52.  
  53.     { NM_TITLE, "Goodies",         0 , 0, 0, (APTR)0},
  54.     {  NM_ITEM, "Play Number",    "!", 0, 0, (APTR)MEN_PLAYNUMBER},
  55.     {  NM_ITEM, NM_BARLABEL,     0 , 0, 0, (APTR)0},
  56.     {  NM_ITEM, "Dial Entry",    "D", 0, 0, (APTR)MEN_DIALENTRY},
  57.     {  NM_ITEM, "Get Settings",    "G", 0, 0, (APTR)MEN_GET},
  58.     {  NM_ITEM, "New Entry",    "E", 0, 0, (APTR)MEN_NEWENTRY},
  59.     {  NM_ITEM, "Remove Entry",    "R", 0, 0, (APTR)MEN_REMENTRY},
  60.     { NM_END, 0,             0 , 0, 0, (APTR)0}
  61. };
  62.  
  63. #define WIDTH    640
  64. #define HEIGHT    170
  65.  
  66. STATIC UBYTE * __saveds
  67. ShowFraction(struct Gadget *SomeGadget,WORD Level)
  68. {
  69.     STATIC UBYTE Buffer[6];
  70.  
  71.     SPrintf(Buffer,"%2ld.%02ld",Level / 100,Level % 100);
  72.  
  73.     return(Buffer);
  74. }
  75.  
  76. STATIC UBYTE * __saveds
  77. ShowTime(struct Gadget *SomeGadget,WORD Level)
  78. {
  79.     STATIC UBYTE Buffer[6];
  80.  
  81.     SPrintf(Buffer,"%2ld.%02ld",Level / 60,Level % 60);
  82.  
  83.     return(Buffer);
  84. }
  85.  
  86. STATIC UBYTE * __saveds
  87. ShowHour(struct Gadget *SomeGadget,WORD Level)
  88. {
  89.     STATIC UBYTE Buffer[6];
  90.  
  91.     SPrintf(Buffer,"%2ld:%02ld",Level / 6,(Level % 6) * 10);
  92.  
  93.     return(Buffer);
  94. }
  95.  
  96. STATIC struct Gadget *
  97. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  98. {
  99.     struct Gadget        *Gadget;
  100.     struct NewGadget     NewGadget;
  101.     UWORD             LeftEdge,Counter = 0,NewTopEdge;
  102.  
  103.     memset(&NewGadget,0,sizeof(struct NewGadget));
  104.  
  105.     if(Gadget = CreateContext(GadgetList))
  106.     {
  107.         NewGadget . ng_Width        = 258;
  108.         NewGadget . ng_TextAttr        = &DefaultFont;
  109.         NewGadget . ng_VisualInfo    = VisualInfo;
  110.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  111.         NewGadget . ng_Height        = 36;
  112.         NewGadget . ng_GadgetText    = "            ";
  113.         NewGadget . ng_GadgetID        = Counter;
  114.         NewGadget . ng_LeftEdge        = (strlen(NewGadget . ng_GadgetText) + 2) * 8 + 1;
  115.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  116.  
  117.         GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  118.             TAG_DONE);
  119.  
  120.         BailOut();
  121.  
  122.         NewGadget . ng_Height        = 12;
  123.         NewGadget . ng_GadgetText    = "BBS Name";
  124.         NewGadget . ng_GadgetID        = Counter;
  125.         NewGadget . ng_TopEdge        = Gadget -> TopEdge + Gadget -> Height;
  126.  
  127.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  128.             GTST_MaxChars,        29,
  129.             GTST_EditHook,        &CommandHook,
  130.         TAG_DONE);
  131.  
  132.         NewGadget . ng_Height        = 12;
  133.         NewGadget . ng_GadgetText    = "Phone Number";
  134.         NewGadget . ng_GadgetID        = Counter;
  135.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  136.  
  137.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  138.             GTST_MaxChars,        40,
  139.             GTST_EditHook,        &CommandHook,
  140.         TAG_DONE);
  141.  
  142.         NewGadget . ng_GadgetText    = "Password";
  143.         NewGadget . ng_GadgetID        = Counter;
  144.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  145.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  146.  
  147.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  148.             GTST_MaxChars,        40,
  149.             GTST_EditHook,        &CommandHook,
  150.         TAG_DONE);
  151.  
  152.         NewGadget . ng_GadgetText    = "Macro File";
  153.         NewGadget . ng_GadgetID        = Counter;
  154.         NewGadget . ng_Flags        = PLACETEXT_LEFT;
  155.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  156.  
  157.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  158.             GTST_MaxChars,        40,
  159.             GTST_EditHook,        &CommandHook,
  160.         TAG_DONE);
  161.  
  162.         LeftEdge    = NewGadget . ng_LeftEdge;
  163.         NewTopEdge    = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  164.  
  165.         NewGadget . ng_GadgetText    = "Pay/Unit     (1)      ";
  166.         NewGadget . ng_GadgetID        = Counter;
  167.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  168.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 186;
  169.         NewGadget . ng_Width        = 74;
  170.  
  171.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  172.             GTIN_MaxChars,        4,
  173.             GTST_EditHook,        &CommandHook,
  174.         TAG_DONE);
  175.  
  176.         NewGadget . ng_GadgetText    = "Minutes/Unit (1)      ";
  177.         NewGadget . ng_GadgetID        = Counter;
  178.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  179.  
  180.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  181.             GTSL_Min,        0,
  182.             GTSL_Max,        1800,
  183.             GTSL_DispFunc,        ShowTime,
  184.             GTSL_LevelFormat,    "%s",
  185.             GTSL_MaxLevelLen,    5,
  186.         TAG_DONE);
  187.  
  188.         NewGadget . ng_GadgetText    = "Start Time   (1)      ";
  189.         NewGadget . ng_GadgetID        = Counter;
  190.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  191.  
  192.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  193.             GTSL_Min,        0,
  194.             GTSL_Max,        143,
  195.             GTSL_DispFunc,        ShowHour,
  196.             GTSL_LevelFormat,    "%s",
  197.             GTSL_MaxLevelLen,    5,
  198.         TAG_DONE);
  199.  
  200.         NewGadget . ng_GadgetText    = "Pay/Unit     (2)      ";
  201.         NewGadget . ng_GadgetID        = Counter;
  202.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 11;
  203.  
  204.         GadgetArray[Counter++] = Gadget = CreateGadget(INTEGER_KIND,Gadget,&NewGadget,
  205.             GTIN_MaxChars,        4,
  206.             GTST_EditHook,        &CommandHook,
  207.         TAG_DONE);
  208.  
  209.         NewGadget . ng_GadgetText    = "Minutes/Unit (2)      ";
  210.         NewGadget . ng_GadgetID        = Counter;
  211.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  212.  
  213.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  214.             GTSL_Min,        0,
  215.             GTSL_Max,        1800,
  216.             GTSL_DispFunc,        ShowTime,
  217.             GTSL_LevelFormat,    "%s",
  218.             GTSL_MaxLevelLen,    5,
  219.         TAG_DONE);
  220.  
  221.         NewGadget . ng_GadgetText    = "Start Time   (2)      ";
  222.         NewGadget . ng_GadgetID        = Counter;
  223.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  224.  
  225.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  226.             GTSL_Min,        0,
  227.             GTSL_Max,        143,
  228.             GTSL_DispFunc,        ShowHour,
  229.             GTSL_LevelFormat,    "%s",
  230.             GTSL_MaxLevelLen,    5,
  231.         TAG_DONE);
  232.  
  233.         NewGadget . ng_GadgetText    = "Serial    _1";
  234.         NewGadget . ng_Width        = 128;
  235.         NewGadget . ng_GadgetID        = Counter;
  236.         NewGadget . ng_Flags        = 0;
  237.         NewGadget . ng_LeftEdge        = LeftEdge;
  238.         NewGadget . ng_TopEdge        = NewTopEdge;
  239.  
  240.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  241.             GT_Underscore,    '_',
  242.         TAG_DONE);
  243.  
  244.         NewGadget . ng_GadgetText    = "Modem     _2";
  245.         NewGadget . ng_GadgetID        = Counter;
  246.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  247.  
  248.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  249.             GT_Underscore,    '_',
  250.         TAG_DONE);
  251.  
  252.         NewGadget . ng_GadgetText    = "Screen    _3";
  253.         NewGadget . ng_GadgetID        = Counter;
  254.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  255.  
  256.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  257.             GT_Underscore,    '_',
  258.         TAG_DONE);
  259.  
  260.         NewGadget . ng_GadgetText    = "Terminal  _4";
  261.         NewGadget . ng_GadgetID        = Counter;
  262.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  263.  
  264.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  265.             GT_Underscore,    '_',
  266.         TAG_DONE);
  267.  
  268.         NewGadget . ng_GadgetText    = "Startup   _5";
  269.         NewGadget . ng_GadgetID        = Counter;
  270.         NewGadget . ng_LeftEdge        = LeftEdge;
  271.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  272.  
  273.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  274.             GT_Underscore,    '_',
  275.         TAG_DONE);
  276.  
  277.         NewGadget . ng_GadgetText    = "Paths     _6";
  278.         NewGadget . ng_GadgetID        = Counter;
  279.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  280.  
  281.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  282.             GT_Underscore,    '_',
  283.         TAG_DONE);
  284.  
  285.         NewGadget . ng_GadgetText    = "Transfer  _7";
  286.         NewGadget . ng_GadgetID        = Counter;
  287.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  288.  
  289.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  290.             GT_Underscore,    '_',
  291.         TAG_DONE);
  292.  
  293.         NewGadget . ng_GadgetText    = "-- Unused --";
  294.         NewGadget . ng_GadgetID        = Counter;
  295.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  296.  
  297.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  298.             GA_Disabled,    TRUE,
  299.         TAG_DONE);
  300.  
  301.         NewGadget . ng_GadgetText    = "Play Number_!";
  302.         NewGadget . ng_GadgetID        = Counter;
  303.         NewGadget . ng_LeftEdge        = LeftEdge;
  304.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  305.  
  306.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  307.             GT_Underscore,    '_',
  308.         TAG_DONE);
  309.  
  310.         NewGadget . ng_GadgetText    = "-- Unused --";
  311.         NewGadget . ng_GadgetID        = Counter;
  312.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  313.  
  314.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  315.             GA_Disabled,    TRUE,
  316.         TAG_DONE);
  317.  
  318.         NewGadget . ng_GadgetText    = "-- Unused --";
  319.         NewGadget . ng_GadgetID        = Counter;
  320.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  321.  
  322.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  323.             GA_Disabled,    TRUE,
  324.         TAG_DONE);
  325.  
  326.         NewGadget . ng_GadgetText    = "-- Unused --";
  327.         NewGadget . ng_GadgetID        = Counter;
  328.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  329.  
  330.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  331.             GA_Disabled,    TRUE,
  332.         TAG_DONE);
  333.  
  334.         NewGadget . ng_GadgetText    = "_Dial";
  335.         NewGadget . ng_GadgetID        = Counter;
  336.         NewGadget . ng_Flags        = 0;
  337.         NewGadget . ng_LeftEdge        = LeftEdge;
  338.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  339.  
  340.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  341.             GT_Underscore,    '_',
  342.         TAG_DONE);
  343.  
  344.         NewGadget . ng_GadgetText    = "_Get Settings";
  345.         NewGadget . ng_GadgetID        = Counter;
  346.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  347.  
  348.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  349.             GT_Underscore,    '_',
  350.         TAG_DONE);
  351.  
  352.         NewGadget . ng_GadgetText    = "New _Entry";
  353.         NewGadget . ng_GadgetID        = Counter;
  354.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  355.  
  356.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  357.             GT_Underscore,    '_',
  358.         TAG_DONE);
  359.  
  360.         NewGadget . ng_GadgetText    = "_Remove Entry";
  361.         NewGadget . ng_GadgetID        = Counter;
  362.         NewGadget . ng_LeftEdge        = NewGadget . ng_LeftEdge + NewGadget . ng_Width + 2;
  363.  
  364.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  365.             GT_Underscore,    '_',
  366.         TAG_DONE);
  367.  
  368.         NewGadget . ng_Width        = 52;
  369.         NewGadget . ng_Height        = 12;
  370.         NewGadget . ng_GadgetText    = "_Load";
  371.         NewGadget . ng_GadgetID        = Counter;
  372.         NewGadget . ng_Flags        = 0;
  373.         NewGadget . ng_LeftEdge        = 10;
  374.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  375.  
  376.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  377.             GT_Underscore,    '_',
  378.         TAG_DONE);
  379.  
  380.         NewGadget . ng_GadgetText    = "S_ort";
  381.         NewGadget . ng_GadgetID        = Counter;
  382.         NewGadget . ng_LeftEdge        = (WIDTH - NewGadget . ng_Width) >> 1;
  383.  
  384.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  385.             GT_Underscore,    '_',
  386.         TAG_DONE);
  387.  
  388.         NewGadget . ng_GadgetText    = "_Save";
  389.         NewGadget . ng_GadgetID        = Counter;
  390.         NewGadget . ng_LeftEdge        = WIDTH - 9 - NewGadget . ng_Width;
  391.  
  392.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  393.             GT_Underscore,    '_',
  394.         TAG_DONE);
  395.     }
  396.  
  397.     return(Gadget);
  398. }
  399.  
  400. BYTE
  401. PhonePanel()
  402. {
  403.     STATIC WORD     OffsetX = -1,OffsetY = -1;
  404.  
  405.     struct Window    *PanelWindow;
  406.     struct Menu    *PanelMenu;
  407.     struct Gadget    *GadgetList = NULL;
  408.     struct Gadget    *GadgetArray[GAD_SAVE + 1];
  409.  
  410.     ULONG         Sec1,Mic1,Sec2,Mic2;
  411.     LONG         HitItem = -1;
  412.  
  413.     if(CreateAllGadgets(&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  414.     {
  415.         if(PanelMenu = CreateMenus(PhoneMenu,
  416.             GTMN_FrontPen, 0,
  417.         TAG_DONE))
  418.         {
  419.             if(LayoutMenus(PanelMenu,VisualInfo,
  420.                 GTMN_TextAttr,&DefaultFont,
  421.             TAG_DONE))
  422.             {
  423.                 if(OffsetX == -1)
  424.                     OffsetX = (Screen -> Width - WIDTH) >> 1;
  425.  
  426.                 if(OffsetY == -1)
  427.                     OffsetY = (Screen -> Height - HEIGHT) >> 1;
  428.  
  429.                 if(PanelWindow = OpenWindowTags(NULL,
  430.                     WA_Left,    OffsetX,
  431.                     WA_Top,        OffsetY,
  432.                     WA_Width,    WIDTH,
  433.                     WA_Height,    HEIGHT,
  434.  
  435.                     WA_Activate,    TRUE,
  436.                     WA_DragBar,    TRUE,
  437.                     WA_DepthGadget,    TRUE,
  438.                     WA_RMBTrap,    TRUE,
  439.                     WA_DepthGadget,    TRUE,
  440.                     WA_CloseGadget,    TRUE,
  441.                     WA_CustomScreen,Screen,
  442.  
  443.                     WA_IDCMP,    IDCMP_GADGETDOWN | IDCMP_ACTIVEWINDOW | IDCMP_CLOSEWINDOW | SLIDERIDCMP | CHECKBOXIDCMP | LISTVIEWIDCMP | IDCMP_MENUPICK | IDCMP_RAWKEY,
  444.  
  445.                     WA_Title,    "Phonebook",
  446.                 TAG_DONE))
  447.                 {
  448.                     struct IntuiMessage    *Massage;
  449.                     ULONG             Class,Code;
  450.                     struct Gadget        *Gadget;
  451.                     BYTE             Terminated = FALSE;
  452.  
  453.                     ULONG             Mask;
  454.  
  455.                     UBYTE             DummyBuffer[256],*DummyChar;
  456.  
  457.                     LONG             Selected = ~0;
  458.                     struct List        *PhoneList = NULL;
  459.  
  460.                     struct FileRequest    *FileRequest;
  461.  
  462.                     PushWindow(PanelWindow);
  463.  
  464.                     AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  465.                     RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  466.                     GT_RefreshWindow(PanelWindow,NULL);
  467.  
  468.                     SetMenuStrip(PanelWindow,PanelMenu);
  469.  
  470.                     PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  471.  
  472.                     if(Phonebook && NumPhoneEntries)
  473.                     {
  474.                         if(PhoneList = CreatePhoneList())
  475.                         {
  476.                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  477.                                 GTLV_Labels,~0,
  478.                             TAG_DONE);
  479.  
  480.                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  481.                                 GTLV_Labels,PhoneList,
  482.                             TAG_DONE);
  483.  
  484.                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  485.                                 GTST_String,    "",
  486.                             TAG_DONE);
  487.                         }
  488.                     }
  489.  
  490.                     if(SubList)
  491.                         OpenSubWindow();
  492.  
  493.                     ActivateGadget(GadgetArray[GAD_NAME],PanelWindow,NULL);
  494.  
  495.                     ActiveGadget = GadgetArray[GAD_NAME];
  496.  
  497.                     while(!Terminated)
  498.                     {
  499. OuterLoop:                    Mask = (1 << PanelWindow -> UserPort -> mp_SigBit);
  500.  
  501.                         if(SubWindow)
  502.                             Mask |= (1 << SubWindow -> UserPort -> mp_SigBit);
  503.  
  504.                         Wait(Mask);
  505.  
  506.                         while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  507.                         {
  508.                             Class    = Massage -> Class;
  509.                             Code    = Massage -> Code;
  510.                             Gadget    = (struct Gadget *)Massage -> IAddress;
  511.  
  512.                             GT_ReplyIMsg(Massage);
  513.  
  514.                             if(Class == IDCMP_GADGETDOWN)
  515.                             {
  516.                                 if((Gadget -> GadgetType & GTYP_GTYPEMASK) == STRGADGET)
  517.                                     ActiveGadget = Gadget;
  518.                             }
  519.  
  520.                             if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  521.                                 ActivateGadget(ActiveGadget,PanelWindow,NULL);
  522.  
  523.                             if(Class == IDCMP_RAWKEY)
  524.                             {
  525.                                 if(Code == IECODE_UP_PREFIX|103 && CommandWindow == PanelWindow)
  526.                                     ActivateGadget(CommandGadget,PanelWindow,NULL);
  527.                             }
  528.  
  529.                             if(Class == IDCMP_MENUPICK)
  530.                             {
  531.                                 struct MenuItem *MenuItem;
  532.  
  533.                                 while(Code != MENUNULL)
  534.                                 {
  535.                                     MenuItem = ItemAddress(PanelMenu,Code);
  536.  
  537.                                     switch((ULONG)GTMENUITEM_USERDATA(MenuItem))
  538.                                     {
  539.                                         case MEN_QUITPANEL:    Class = IDCMP_CLOSEWINDOW;
  540.                                                     break;
  541.  
  542.                                         case MEN_NEXT:        if(NumPhoneEntries)
  543.                                                     {
  544.                                                         if(Selected == ~0)
  545.                                                              Selected = 0;
  546.                                                          else
  547.                                                          {
  548.                                                              if(Selected == NumPhoneEntries - 1)
  549.                                                                  Selected = 0;
  550.                                                              else
  551.                                                                  Selected++;
  552.                                                          }
  553.  
  554.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  555.                                                             GTLV_Selected,Selected,
  556.                                                         TAG_DONE);
  557.  
  558.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  559.                                                             GTST_String,    Phonebook[Selected] -> Name,
  560.                                                         TAG_DONE);
  561.  
  562.                                                          Code = Selected;
  563.                                                          HitItem = -1;
  564.  
  565.                                                          goto SelectEntry;
  566.                                                     }
  567.  
  568.                                                     break;
  569.  
  570.                                         case MEN_PREV:        if(NumPhoneEntries)
  571.                                                     {
  572.                                                         if(Selected == ~0)
  573.                                                              Selected = 0;
  574.                                                          else
  575.                                                          {
  576.                                                              if(Selected == 0)
  577.                                                                  Selected = NumPhoneEntries - 1;
  578.                                                              else
  579.                                                                  Selected--;
  580.                                                          }
  581.  
  582.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  583.                                                             GTLV_Selected,Selected,
  584.                                                         TAG_DONE);
  585.  
  586.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  587.                                                             GTST_String,    Phonebook[Selected] -> Name,
  588.                                                         TAG_DONE);
  589.  
  590.                                                          Code = Selected;
  591.                                                          HitItem = -1;
  592.  
  593.                                                          goto SelectEntry;
  594.                                                     }
  595.  
  596.                                                     break;
  597.  
  598.                                         case MEN_LIST:        if(Selected != ~0)
  599.                                                     {
  600.                                                         Code = HitItem = Selected;
  601.  
  602.                                                         CurrentTime(&Sec1,&Mic1);
  603.  
  604.                                                         goto SelectEntry;
  605.                                                     }
  606.  
  607.                                                     break;
  608.  
  609.                                         case MEN_WINDOW:    if(SubWindow)
  610.                                                     {
  611.                                                         WindowToFront(SubWindow);
  612.  
  613.                                                         ActivateWindow(SubWindow);
  614.                                                     }
  615.                                                     break;
  616.  
  617.                                         case MEN_SETSERIAL:    Class = IDCMP_GADGETUP;
  618.  
  619.                                                     Gadget = GadgetArray[GAD_SERIAL];
  620.                                                     break;
  621.  
  622.                                         case MEN_SETMODEM:    Class = IDCMP_GADGETUP;
  623.  
  624.                                                     Gadget = GadgetArray[GAD_MODEM];
  625.                                                     break;
  626.  
  627.                                         case MEN_SETSCREEN:    Class = IDCMP_GADGETUP;
  628.  
  629.                                                     Gadget = GadgetArray[GAD_SCREEN];
  630.                                                     break;
  631.  
  632.                                         case MEN_SETTERMINAL:    Class = IDCMP_GADGETUP;
  633.  
  634.                                                     Gadget = GadgetArray[GAD_TERMINAL];
  635.                                                     break;
  636.  
  637.                                         case MEN_SETSTARTUP:    Class = IDCMP_GADGETUP;
  638.  
  639.                                                     Gadget = GadgetArray[GAD_STARTUP];
  640.                                                     break;
  641.  
  642.                                         case MEN_SETPATH:    Class = IDCMP_GADGETUP;
  643.  
  644.                                                     Gadget = GadgetArray[GAD_PATH];
  645.                                                     break;
  646.  
  647.                                         case MEN_SETTRANSFER:    Class = IDCMP_GADGETUP;
  648.  
  649.                                                     Gadget = GadgetArray[GAD_TRANSFER];
  650.                                                     break;
  651.  
  652.                                         case MEN_PLAYNUMBER:    Class = IDCMP_GADGETUP;
  653.  
  654.                                                     Gadget = GadgetArray[GAD_PLAY];
  655.                                                     break;
  656.  
  657.                                         case MEN_DIALENTRY:    Class = IDCMP_GADGETUP;
  658.  
  659.                                                     Gadget = GadgetArray[GAD_DIAL];
  660.                                                     break;
  661.  
  662.                                         case MEN_NEWENTRY:    Class = IDCMP_GADGETUP;
  663.  
  664.                                                     Gadget = GadgetArray[GAD_NEW];
  665.                                                     break;
  666.  
  667.                                         case MEN_GET:    Class = IDCMP_GADGETUP;
  668.  
  669.                                                     Gadget = GadgetArray[GAD_GET];
  670.                                                     break;
  671.  
  672.                                         case MEN_REMENTRY:    Class = IDCMP_GADGETUP;
  673.  
  674.                                                     Gadget = GadgetArray[GAD_REMOVE];
  675.                                                     break;
  676.  
  677.                                         case MEN_LOAD:        Class = IDCMP_GADGETUP;
  678.  
  679.                                                     Gadget = GadgetArray[GAD_LOAD];
  680.                                                     break;
  681.  
  682.                                         case MEN_SORT:        Class = IDCMP_GADGETUP;
  683.  
  684.                                                     Gadget = GadgetArray[GAD_SORT];
  685.                                                     break;
  686.  
  687.                                         case MEN_SAVEPHONE:    Class = IDCMP_GADGETUP;
  688.  
  689.                                                     Gadget = GadgetArray[GAD_SAVE];
  690.                                                     break;
  691.  
  692.                                         default:        break;
  693.                                     }
  694.  
  695.                                     Code = MenuItem -> NextSelect;
  696.                                 }
  697.  
  698.                                 if(ActiveGadget)
  699.                                     ActivateGadget(ActiveGadget,PanelWindow,NULL);
  700.                             }
  701.  
  702.                             if(Class == IDCMP_CLOSEWINDOW)
  703.                             {
  704.                                 CloseSubWindow();
  705.                                 FreeSubList();
  706.  
  707.                                 Terminated = TRUE;
  708.                             }
  709.  
  710.                             if(Class == IDCMP_MOUSEMOVE && Selected != ~0)
  711.                             {
  712.                                 switch(Gadget -> GadgetID)
  713.                                 {
  714.                                     case GAD_MINUNIT1:    Phonebook[Selected] -> SecPerUnit[0] = Code;
  715.                                                 break;
  716.  
  717.                                     case GAD_STARTTIME1:    Phonebook[Selected] -> TimeOfDay[0] = Code;
  718.                                                 break;
  719.  
  720.                                     case GAD_MINUNIT2:    Phonebook[Selected] -> SecPerUnit[1] = Code;
  721.                                                 break;
  722.  
  723.                                     case GAD_STARTTIME2:    Phonebook[Selected] -> TimeOfDay[1] = Code;
  724.                                                 break;
  725.  
  726.                                     default:        break;
  727.                                 }
  728.                             }
  729.  
  730.                             if(Class == IDCMP_GADGETUP)
  731.                             {
  732.                                 switch(Gadget -> GadgetID)
  733.                                 {
  734.                                     case GAD_PAYUNIT1:
  735.                                             if(Selected != ~0)
  736.                                                 Phonebook[Selected] -> PayPerUnit[0] = ((struct StringInfo *)Gadget -> SpecialInfo) -> LongInt;
  737.  
  738.                                             break;
  739.  
  740.                                     case GAD_PAYUNIT2:
  741.                                             if(Selected != ~0)
  742.                                                 Phonebook[Selected] -> PayPerUnit[1] = ((struct StringInfo *)Gadget -> SpecialInfo) -> LongInt;
  743.  
  744.                                             break;
  745.  
  746.                                     case GAD_PLAY:    if(Selected != ~0)
  747.                                             {
  748.                                                 SetWait(PanelWindow);
  749.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  750.  
  751.                                                 if(!ToneDial(Phonebook[Selected] -> Number))
  752.                                                     MyEasyRequest(NULL,"`term' has a problem:\n%s!","Continue","Failed to allocate resources for playing.");
  753.  
  754.                                                 ClearPointer(PanelWindow);
  755.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  756.                                             }
  757.  
  758.                                             break;
  759.  
  760.                                     case GAD_NAMELIST:
  761. SelectEntry:                                        if(HitItem != Code)
  762.                                             {
  763.                                                 HitItem = Code;
  764.  
  765.                                                 CurrentTime(&Sec1,&Mic1);
  766.  
  767.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  768.                                                     GTST_String,Phonebook[Code] -> Name,
  769.                                                 TAG_DONE);
  770.  
  771.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  772.                                                     GTST_String,Phonebook[Code] -> Number,
  773.                                                 TAG_DONE);
  774.  
  775.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  776.                                                     GTST_String,Phonebook[Code] -> Password,
  777.                                                 TAG_DONE);
  778.  
  779.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  780.                                                     GTST_String,Phonebook[Code] -> Config . MacroFile,
  781.                                                 TAG_DONE);
  782.  
  783.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  784.                                                     GTIN_Number,Phonebook[Code] -> PayPerUnit[0],
  785.                                                 TAG_DONE);
  786.  
  787.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  788.                                                     GTSL_Level,Phonebook[Code] -> SecPerUnit[0],
  789.                                                 TAG_DONE);
  790.  
  791.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME1],PanelWindow,NULL,
  792.                                                     GTSL_Level,Phonebook[Code] -> TimeOfDay[0],
  793.                                                 TAG_DONE);
  794.  
  795.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT2],PanelWindow,NULL,
  796.                                                     GTIN_Number,Phonebook[Code] -> PayPerUnit[1],
  797.                                                 TAG_DONE);
  798.  
  799.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT2],PanelWindow,NULL,
  800.                                                     GTSL_Level,Phonebook[Code] -> SecPerUnit[1],
  801.                                                 TAG_DONE);
  802.  
  803.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME2],PanelWindow,NULL,
  804.                                                     GTSL_Level,Phonebook[Code] -> TimeOfDay[1],
  805.                                                 TAG_DONE);
  806.  
  807.                                                 Selected = Code;
  808.                                             }
  809.                                             else
  810.                                             {
  811.                                                 CurrentTime(&Sec2,&Mic2);
  812.  
  813.                                                 if(DoubleClick(Sec1,Mic1,Sec2,Mic2))
  814.                                                 {
  815.                                                     HitItem = -1;
  816.  
  817.                                                     if(!SubWindow)
  818.                                                         OpenSubWindow();
  819.  
  820.                                                     AddSubEntry(Code);
  821.                                                 }
  822.  
  823.                                                 Sec1 = Sec2;
  824.                                                 Mic1 = Mic2;
  825.                                             }
  826.  
  827.                                             break;
  828.  
  829.                                     case GAD_DIAL:  if(SubWindow && Selected != ~0)
  830.                                             {
  831.                                                 CloseSubWindow();
  832.                                                 FreeSubList();
  833.                                             }
  834.  
  835.                                             if(Selected != ~0)
  836.                                             {
  837.                                                 if(SubList = (struct List *)AllocVec(sizeof(struct List),MEMF_PUBLIC | MEMF_CLEAR))
  838.                                                 {
  839.                                                     struct PhoneNode *SubNode;
  840.  
  841.                                                     NewList(SubList);
  842.  
  843.                                                     if(SubNode = (struct PhoneNode *)AllocVec(sizeof(struct PhoneNode),MEMF_PUBLIC|MEMF_CLEAR))
  844.                                                     {
  845.                                                         SubNode -> VanillaNode . ln_Name    = Phonebook[Selected] -> Name;
  846.                                                         SubNode -> Entry            = Phonebook[Selected];
  847.                                                         SubNode -> Number            = Selected;
  848.  
  849.                                                         SubListNum = 1;
  850.  
  851.                                                         AddTail(SubList,&SubNode -> VanillaNode);
  852.  
  853.                                                         Terminated = TRUE;
  854.                                                     }
  855.                                                     else
  856.                                                     {
  857.                                                         FreeVec(SubList);
  858.  
  859.                                                         SubList = NULL;
  860.                                                     }
  861.                                                 }
  862.                                             }
  863.  
  864.                                             break;
  865.  
  866.                                     case GAD_GET:    if(Selected != ~0)
  867.                                                 Phonebook[Selected] -> Config = Config;
  868.  
  869.                                             break;
  870.  
  871.                                     case GAD_NEW:    GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  872.                                                 GTLV_Labels,~0,
  873.                                             TAG_DONE);
  874.  
  875.                                             if(PhoneList)
  876.                                             {
  877.                                                 DeletePhoneList(PhoneList);
  878.  
  879.                                                 PhoneList = NULL;
  880.                                             }
  881.  
  882.                                             if(NewPhoneEntry())
  883.                                             {
  884.                                                 if(PhoneList = CreatePhoneList())
  885.                                                 {
  886.                                                     Selected = NumPhoneEntries - 1;
  887.  
  888.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  889.                                                         GTLV_Labels,PhoneList,
  890.                                                         GTLV_Selected,Selected,
  891.                                                     TAG_DONE);
  892.  
  893.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  894.                                                         GTST_String,    Phonebook[Selected] -> Name,
  895.                                                     TAG_DONE);
  896.  
  897.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  898.                                                         GTST_String,Phonebook[Selected] -> Number,
  899.                                                     TAG_DONE);
  900.  
  901.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  902.                                                         GTST_String,Phonebook[Selected] -> Password,
  903.                                                     TAG_DONE);
  904.  
  905.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  906.                                                         GTST_String,Phonebook[Selected] -> Config . MacroFile,
  907.                                                     TAG_DONE);
  908.  
  909.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  910.                                                         GTIN_Number,Phonebook[Selected] -> PayPerUnit[0],
  911.                                                     TAG_DONE);
  912.  
  913.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  914.                                                         GTSL_Level,Phonebook[Selected] -> SecPerUnit[0],
  915.                                                     TAG_DONE);
  916.  
  917.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME1],PanelWindow,NULL,
  918.                                                         GTSL_Level,Phonebook[Selected] -> TimeOfDay[0],
  919.                                                     TAG_DONE);
  920.  
  921.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT2],PanelWindow,NULL,
  922.                                                         GTIN_Number,Phonebook[Selected] -> PayPerUnit[1],
  923.                                                     TAG_DONE);
  924.  
  925.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT2],PanelWindow,NULL,
  926.                                                         GTSL_Level,Phonebook[Selected] -> SecPerUnit[1],
  927.                                                     TAG_DONE);
  928.  
  929.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME2],PanelWindow,NULL,
  930.                                                         GTSL_Level,Phonebook[Selected] -> TimeOfDay[1],
  931.                                                     TAG_DONE);
  932.                                                 }
  933.                                                 else
  934.                                                     goto ClearList;
  935.                                             }
  936.                                             else
  937.                                                 goto ClearList;
  938.  
  939.                                             break;
  940.  
  941.                                     case GAD_REMOVE:if(!SubWindow)
  942.                                             {
  943.                                                 if(Selected != ~0)
  944.                                                 {
  945.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  946.                                                         GTLV_Labels,~0,
  947.                                                     TAG_DONE);
  948.  
  949.                                                     if(PhoneList)
  950.                                                     {
  951.                                                         DeletePhoneList(PhoneList);
  952.  
  953.                                                         PhoneList = NULL;
  954.                                                     }
  955.  
  956.                                                     RemPhoneEntry(Selected);
  957.  
  958.                                                     if(NumPhoneEntries > 0)
  959.                                                     {
  960.                                                         if(PhoneList = CreatePhoneList())
  961.                                                         {
  962.                                                             if(Selected == NumPhoneEntries)
  963.                                                                 Selected--;
  964.  
  965.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  966.                                                                 GTLV_Labels,PhoneList,
  967.                                                                 GTLV_Selected,Selected,
  968.                                                             TAG_DONE);
  969.  
  970.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  971.                                                                 GTST_String,    Phonebook[Selected] -> Name,
  972.                                                             TAG_DONE);
  973.  
  974.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  975.                                                                 GTST_String,Phonebook[Selected] -> Number,
  976.                                                             TAG_DONE);
  977.  
  978.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  979.                                                                 GTST_String,Phonebook[Selected] -> Password,
  980.                                                             TAG_DONE);
  981.  
  982.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  983.                                                                 GTST_String,Phonebook[Selected] -> Config . MacroFile,
  984.                                                             TAG_DONE);
  985.  
  986.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  987.                                                                 GTIN_Number,Phonebook[Selected] -> PayPerUnit[0],
  988.                                                             TAG_DONE);
  989.  
  990.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  991.                                                                 GTSL_Level,Phonebook[Selected] -> SecPerUnit[0],
  992.                                                             TAG_DONE);
  993.  
  994.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME1],PanelWindow,NULL,
  995.                                                                 GTSL_Level,Phonebook[Selected] -> TimeOfDay[0],
  996.                                                             TAG_DONE);
  997.  
  998.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT2],PanelWindow,NULL,
  999.                                                                 GTIN_Number,Phonebook[Selected] -> PayPerUnit[1],
  1000.                                                             TAG_DONE);
  1001.  
  1002.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT2],PanelWindow,NULL,
  1003.                                                                 GTSL_Level,Phonebook[Selected] -> SecPerUnit[1],
  1004.                                                             TAG_DONE);
  1005.  
  1006.                                                             GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME2],PanelWindow,NULL,
  1007.                                                                 GTSL_Level,Phonebook[Selected] -> TimeOfDay[1],
  1008.                                                             TAG_DONE);
  1009.                                                         }
  1010.                                                         else
  1011.                                                             goto ClearList;
  1012.                                                     }
  1013.                                                     else
  1014.                                                     {
  1015. ClearList:                                                    GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1016.                                                             GTLV_Labels,~0,
  1017.                                                         TAG_DONE);
  1018.  
  1019.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1020.                                                             GTST_String,    "",
  1021.                                                         TAG_DONE);
  1022.  
  1023.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PHONENUMBER],PanelWindow,NULL,
  1024.                                                             GTST_String,NULL,
  1025.                                                         TAG_DONE);
  1026.  
  1027.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PASSWORD],PanelWindow,NULL,
  1028.                                                             GTST_String,NULL,
  1029.                                                         TAG_DONE);
  1030.  
  1031.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_MACROFILE],PanelWindow,NULL,
  1032.                                                             GTST_String,NULL,
  1033.                                                         TAG_DONE);
  1034.  
  1035.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT1],PanelWindow,NULL,
  1036.                                                             GTIN_Number,NULL,
  1037.                                                         TAG_DONE);
  1038.  
  1039.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT1],PanelWindow,NULL,
  1040.                                                             GTSL_Level,NULL,
  1041.                                                         TAG_DONE);
  1042.  
  1043.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME1],PanelWindow,NULL,
  1044.                                                             GTSL_Level,0,
  1045.                                                         TAG_DONE);
  1046.  
  1047.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_PAYUNIT2],PanelWindow,NULL,
  1048.                                                             GTIN_Number,NULL,
  1049.                                                         TAG_DONE);
  1050.  
  1051.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_MINUNIT2],PanelWindow,NULL,
  1052.                                                             GTSL_Level,NULL,
  1053.                                                         TAG_DONE);
  1054.  
  1055.                                                         GT_SetGadgetAttrs(GadgetArray[GAD_STARTTIME2],PanelWindow,NULL,
  1056.                                                             GTSL_Level,0,
  1057.                                                         TAG_DONE);
  1058.  
  1059.                                                         Selected = ~0;
  1060.                                                     }
  1061.                                                 }
  1062.                                             }
  1063.  
  1064.                                             break;
  1065.  
  1066.                                     case GAD_NAME:    if(Selected != ~0)
  1067.                                             {
  1068.                                                 strcpy(Phonebook[Selected] -> Name,((struct StringInfo *)GadgetArray[GAD_NAME] -> SpecialInfo) -> Buffer);
  1069.  
  1070.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1071.                                                     GTLV_Labels,~0,
  1072.                                                 TAG_DONE);
  1073.  
  1074.                                                 if(PhoneList)
  1075.                                                     DeletePhoneList(PhoneList);
  1076.  
  1077.                                                 if(PhoneList = CreatePhoneList())
  1078.                                                 {
  1079.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1080.                                                         GTLV_Labels,    PhoneList,
  1081.                                                         GTLV_Selected,    Selected,
  1082.                                                     TAG_DONE);
  1083.                                                 }
  1084.                                             }
  1085.  
  1086.                                             break;
  1087.  
  1088.                                     case GAD_PHONENUMBER:
  1089.                                             if(Selected != ~0)
  1090.                                                 strcpy(Phonebook[Selected] -> Number,((struct StringInfo *)GadgetArray[GAD_PHONENUMBER] -> SpecialInfo) -> Buffer);
  1091.  
  1092.                                             break;
  1093.  
  1094.                                     case GAD_PASSWORD:
  1095.                                             if(Selected != ~0)
  1096.                                                 strcpy(Phonebook[Selected] -> Password,((struct StringInfo *)GadgetArray[GAD_PASSWORD] -> SpecialInfo) -> Buffer);
  1097.  
  1098.                                             break;
  1099.  
  1100.                                     case GAD_MACROFILE:
  1101.                                             if(Selected != ~0)
  1102.                                                 strcpy(Phonebook[Selected] -> Config . MacroFile,((struct StringInfo *)GadgetArray[GAD_MACROFILE] -> SpecialInfo) -> Buffer);
  1103.  
  1104.                                             break;
  1105.  
  1106.                                     case GAD_SERIAL:
  1107.                                             if(Selected != ~0)
  1108.                                             {
  1109.                                                 SetWait(PanelWindow);
  1110.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1111.  
  1112.                                                 SerialPanel(&Phonebook[Selected] -> Config);
  1113.  
  1114.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1115.  
  1116.                                                 ClearPointer(PanelWindow);
  1117.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1118.                                             }
  1119.  
  1120.                                             break;
  1121.  
  1122.                                     case GAD_MODEM:
  1123.                                             if(Selected != ~0)
  1124.                                             {
  1125.                                                 SetWait(PanelWindow);
  1126.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1127.  
  1128.                                                 ModemPanel(&Phonebook[Selected] -> Config);
  1129.  
  1130.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1131.  
  1132.                                                 ClearPointer(PanelWindow);
  1133.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1134.                                             }
  1135.  
  1136.                                             break;
  1137.  
  1138.                                     case GAD_SCREEN:
  1139.                                             if(Selected != ~0)
  1140.                                             {
  1141.                                                 SetWait(PanelWindow);
  1142.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1143.  
  1144.                                                 LoadRGB4(VPort,&Phonebook[Selected] -> Config . Colours[0],(1 << Screen -> RastPort . BitMap -> Depth));
  1145.  
  1146.                                                 ScreenPanel(&Phonebook[Selected] -> Config);
  1147.  
  1148.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1149.  
  1150.                                                 ClearPointer(PanelWindow);
  1151.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1152.  
  1153.                                                 LoadRGB4(VPort,&Config . Colours[0],(1 << Screen -> RastPort . BitMap -> Depth));
  1154.                                             }
  1155.  
  1156.                                             break;
  1157.  
  1158.                                     case GAD_TERMINAL:
  1159.                                             if(Selected != ~0)
  1160.                                             {
  1161.                                                 SetWait(PanelWindow);
  1162.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1163.  
  1164.                                                 TerminalPanel(&Phonebook[Selected] -> Config);
  1165.  
  1166.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1167.  
  1168.                                                 ClearPointer(PanelWindow);
  1169.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1170.                                             }
  1171.  
  1172.                                             break;
  1173.  
  1174.                                     case GAD_STARTUP:
  1175.                                             if(Selected != ~0)
  1176.                                             {
  1177.                                                 SetWait(PanelWindow);
  1178.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1179.  
  1180.                                                 xpr_gets("Enter Startup (Login) Macro",&Phonebook[Selected] -> Config . StartupMacro[0]);
  1181.  
  1182.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1183.  
  1184.                                                 ClearPointer(PanelWindow);
  1185.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1186.                                             }
  1187.  
  1188.                                             break;
  1189.  
  1190.                                     case GAD_PATH:
  1191.                                             if(Selected != ~0)
  1192.                                             {
  1193.                                                 SetWait(PanelWindow);
  1194.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1195.  
  1196.                                                 PathPanel(&Phonebook[Selected] -> Config);
  1197.  
  1198.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1199.  
  1200.                                                 ClearPointer(PanelWindow);
  1201.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1202.                                             }
  1203.  
  1204.                                             break;
  1205.  
  1206.                                     case GAD_TRANSFER:
  1207.                                             if(Selected != ~0)
  1208.                                             {
  1209.                                                 SetWait(PanelWindow);
  1210.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1211.  
  1212.                                                 strcpy(DummyBuffer,LastXprLibrary);
  1213.  
  1214.                                                 if(SelectProtocol(Phonebook[Selected] -> Config . Protocol,PanelWindow))
  1215.                                                     strcpy(Phonebook[Selected] -> Config . Protocol,LastXprLibrary);
  1216.  
  1217.                                                 strcpy(LastXprLibrary,DummyBuffer);
  1218.  
  1219.                                                 ActiveGadget = GadgetArray[GAD_NAME];
  1220.  
  1221.                                                 ClearPointer(PanelWindow);
  1222.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1223.                                             }
  1224.  
  1225.                                             break;
  1226.  
  1227.                                     case GAD_LOAD:    strcpy(DummyBuffer,LastPhone);
  1228.  
  1229.                                             DummyChar = PathPart(DummyBuffer);
  1230.  
  1231.                                             *DummyChar = 0;
  1232.  
  1233.                                             SetWait(PanelWindow);
  1234.                                             PanelWindow -> Flags |= WFLG_RMBTRAP;
  1235.  
  1236.                                             if(FileRequest = GetFile("Load Phonebook",DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.term",FALSE,FALSE,FALSE,"Load"))
  1237.                                             {
  1238.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1239.                                                     GTLV_Labels,~0,
  1240.                                                 TAG_DONE);
  1241.  
  1242.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1243.                                                     GTST_String,    "",
  1244.                                                 TAG_DONE);
  1245.  
  1246.                                                 if(PhoneList)
  1247.                                                     DeletePhoneList(PhoneList);
  1248.  
  1249.                                                 PhoneList = NULL;
  1250.  
  1251.                                                 if(!LoadPhonebook(DummyBuffer))
  1252.                                                     MyEasyRequest(Window,"Couldn't load phonebook\n\"%s\"!","Continue",DummyBuffer);
  1253.  
  1254.                                                 if(PhoneList = CreatePhoneList())
  1255.                                                 {
  1256.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1257.                                                         GTLV_Labels,PhoneList,
  1258.                                                     TAG_DONE);
  1259.  
  1260.                                                     CloseSubWindow();
  1261.                                                     FreeSubList();
  1262.                                                 }
  1263.  
  1264.                                                 Selected = ~0;
  1265.                                             }
  1266.  
  1267.                                             ClearPointer(PanelWindow);
  1268.                                             PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1269.  
  1270.                                             break;
  1271.  
  1272.                                     case GAD_SORT:    if(NumPhoneEntries > 1 && !SubWindow)
  1273.                                             {
  1274.                                                 SetWait(PanelWindow);
  1275.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1276.  
  1277.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1278.                                                     GTLV_Labels,~0,
  1279.                                                 TAG_DONE);
  1280.  
  1281.                                                 GT_SetGadgetAttrs(GadgetArray[GAD_NAME],PanelWindow,NULL,
  1282.                                                     GTST_String,    "",
  1283.                                                 TAG_DONE);
  1284.  
  1285.                                                 if(PhoneList)
  1286.                                                     DeletePhoneList(PhoneList);
  1287.  
  1288.                                                 SortPhoneEntries();
  1289.  
  1290.                                                 if(PhoneList = CreatePhoneList())
  1291.                                                 {
  1292.                                                     GT_SetGadgetAttrs(GadgetArray[GAD_NAMELIST],PanelWindow,NULL,
  1293.                                                         GTLV_Labels,PhoneList,
  1294.                                                         GTLV_Selected,~0,
  1295.                                                     TAG_DONE);
  1296.                                                 }
  1297.  
  1298.                                                 ClearPointer(PanelWindow);
  1299.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1300.                                             }
  1301.  
  1302.                                             break;
  1303.  
  1304.                                     case GAD_SAVE:    if(NumPhoneEntries)
  1305.                                             {
  1306.                                                 strcpy(DummyBuffer,LastPhone);
  1307.  
  1308.                                                 DummyChar = PathPart(DummyBuffer);
  1309.  
  1310.                                                 *DummyChar = 0;
  1311.  
  1312.                                                 SetWait(PanelWindow);
  1313.                                                 PanelWindow -> Flags |= WFLG_RMBTRAP;
  1314.  
  1315.                                                 if(FileRequest = GetFile("Save Phonebook",DummyBuffer,FilePart(LastPhone),DummyBuffer,"#?.term",TRUE,FALSE,FALSE,"Save"))
  1316.                                                 {
  1317.                                                     if(!SavePhonebook(DummyBuffer))
  1318.                                                         MyEasyRequest(Window,"Couldn't create phonebook\n\"%s\"!","Continue",DummyBuffer);
  1319.                                                 }
  1320.  
  1321.                                                 ClearPointer(PanelWindow);
  1322.                                                 PanelWindow -> Flags &= ~WFLG_RMBTRAP;
  1323.                                             }
  1324.  
  1325.                                             break;
  1326.  
  1327.                                     default:    break;
  1328.                                 }
  1329.                             }
  1330.                         }
  1331.  
  1332.                         switch(HandleSubWindow(PanelWindow))
  1333.                         {
  1334.                             case 1:    Terminated = TRUE;
  1335.                                 break;
  1336.  
  1337.                             case 2:    CloseSubWindow();
  1338.                                 FreeSubList();
  1339.  
  1340.                                 break;
  1341.  
  1342.                             default:break;
  1343.                         }
  1344.                     }
  1345.  
  1346.                     DeleteTone();
  1347.  
  1348.                     if(PhoneList)
  1349.                         DeletePhoneList(PhoneList);
  1350.  
  1351.                     CloseSubWindow();
  1352.  
  1353.                     PanelWindow -> Flags |= WFLG_RMBTRAP;
  1354.  
  1355.                     ClearMenuStrip(PanelWindow);
  1356.  
  1357.                     RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  1358.  
  1359.                     PopWindow();
  1360.  
  1361.                     OffsetX = PanelWindow -> LeftEdge;
  1362.                     OffsetY = PanelWindow -> TopEdge;
  1363.  
  1364.                     CloseWindow(PanelWindow);
  1365.                 }
  1366.  
  1367.                 FreeMenus(PanelMenu);
  1368.             }
  1369.         }
  1370.     }
  1371.  
  1372.     FreeGadgets(GadgetList);
  1373.  
  1374.     if(SubList)
  1375.         return(TRUE);
  1376.     else
  1377.         return(FALSE);
  1378. }
  1379.