home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / bbs / jet_conf / hndlmenu.c < prev    next >
C/C++ Source or Header  |  1993-05-11  |  12KB  |  557 lines

  1. /*
  2.  * HNDLMENU.C
  3.  *
  4.  * handles MN_SELECTED-events of jet_conf.prg;
  5.  *
  6.  */
  7.  
  8. /*--- includes              ---*/
  9.  
  10. #include "import.h"
  11. #include <MGLOBAL.H>
  12. #include <MYDIAL.H>
  13. #include "misc.h"
  14. #include "jet_conf.h"
  15. #include "resource.h"
  16. #include "lists.h"
  17.  
  18. #include "export.h"
  19. #include "hndlmenu.h"
  20.  
  21. /*--- defines               ---*/
  22.  
  23. #define        NETM_P        path_heads[0]
  24. #define        MAIL_P        path_heads[1]
  25. #define        ARCH_P        path_heads[2]
  26. #define        BADM_P        path_heads[3]
  27. #define        DUPE_P        path_heads[4]
  28. #define        INBO_P        path_heads[5]
  29. #define        KINB_P        path_heads[6]
  30. #define        PINB_P        path_heads[7]
  31. #define        OUTB_P        path_heads[8]
  32. #define        NODE_P        path_heads[9]
  33. #define        LOGF_P        path_heads[10]
  34. #define        ABOU_P        path_heads[11]
  35.  
  36. #define        NETM_N        path_names[0]
  37. #define        MAIL_N        path_names[1]
  38. #define        ARCH_N        path_names[2]
  39. #define        BADM_N        path_names[3]
  40. #define        DUPE_N        path_names[4]
  41. #define        LOGF_N        path_names[5]
  42.  
  43. #define        ARC_P        arch_heads[0]
  44. #define        ARC_E        arch_heads[1]
  45. #define        LZH_P        arch_heads[2]
  46. #define        LZH_E        arch_heads[3]
  47. #define        LHA_P        arch_heads[4]
  48. #define        LHA_E        arch_heads[5]
  49. #define        ZIP_P        arch_heads[6]
  50. #define        ZIP_E        arch_heads[7]
  51. #define        ZOO_P        arch_heads[8]
  52. #define        ZOO_E        arch_heads[9]
  53. #define        ARJ_P        arch_heads[10]
  54. #define        ARJ_E        arch_heads[11]
  55.  
  56. #define        ARC_N        arch_names[0]
  57. #define        LZH_N        arch_names[1]
  58. #define        ZIP_N        arch_names[2]
  59. #define        ZOO_N        arch_names[3]
  60. #define        ARJ_N        arch_names[4]
  61.  
  62. /*--- types                 ---*/
  63.  
  64. /*--- variables             ---*/
  65.  
  66. LOCAL BYTE    *path_heads[] = {
  67.                                 "Netmail path",
  68.                                 "Mailbox path",
  69.                                 "Archive path",
  70.                                 "BadMsgs path",
  71.                                 "DupeMsgs path",
  72.                                 "Inbound path",
  73.                                 "KnownInbound path",
  74.                                 "ProtInbound path",
  75.                                 "Outbound path",
  76.                                 "Nodelist path",
  77.                                 "Logfile path",
  78.                                 "Aboutfile"
  79.                             };
  80.  
  81. LOCAL BYTE    *path_names[] = {
  82.                                 "NETMAIL",
  83.                                 "MAILBOX",
  84.                                 "ARCHIVE",
  85.                                 "BADMSGS",
  86.                                 "DUPEMSGS",
  87.                                 "SYSTEM.LOG"
  88.                             };
  89.  
  90. LOCAL BYTE     *arch_heads[] =    {
  91.                                 "Arc Pack",
  92.                                 "Arc Extract",
  93.                                 "LZH Pack",
  94.                                 "LZH Extract",
  95.                                 "LHA Pack",
  96.                                 "LHA Extract",
  97.                                 "Zip Pack",
  98.                                 "Zip Extract",
  99.                                 "Zoo Pack",
  100.                                 "Zoo Extract",
  101.                                 "Arj Pack",
  102.                                 "Arj Extract"
  103.                             };
  104.  
  105. LOCAL BYTE    *arch_names[] =    {
  106.                                 "ARC.TTP",
  107.                                 "LHARC.TTP",
  108.                                 "STZIP.PRG",
  109.                                 "ZOO.TTP",
  110.                                 "UNARJ.TTP"
  111.                             };
  112.                                     
  113. /* Lokale Variablen für die Pfad- und Dateinamenssicherung */
  114. LOCAL BYTE    rpath[256],
  115.             rname[14];
  116.  
  117. /*--- prototypes            ---*/
  118.  
  119. LOCAL VOID        DoSetSystem( VOID );
  120. LOCAL VOID        DoSetFlags( VOID );
  121. LOCAL VOID        DoSetPath( VOID );
  122. LOCAL VOID        DoSetArchivers( VOID );
  123. LOCAL VOID        DoSetLinks( VOID );
  124. LOCAL VOID        ClearSelected( OBJECT *tree, WORD object );
  125.  
  126. /*--- functions             ---*/
  127.  
  128. /**-----------------------------------------------------------------------------
  129.  ** Funktionsname:    GLOBAL WORD mn_selected( WORD titel, WORD item )
  130.  **        ->    nichts
  131.  **        <-    Exitcode für das Programm.
  132.  **
  133.  ** Die Funktion handelt einen selektierten Menüeintrag ab.
  134.  **/
  135. GLOBAL WORD mn_selected( WORD titel, WORD item )
  136. {
  137.     BOOLEAN ok;
  138.     WORD    Ret = 0;
  139.  
  140.     switch( item )
  141.     {
  142.         case INFOS:    
  143.                     (VOID) HndlDial( info_box, 0, FALSE, NULL, &ok );
  144.                     break;
  145.         case LOAD_CONF:
  146.                     break;
  147.         case SAVE_CONF:
  148.                     break;
  149.         case QUIT:
  150.                     Ret = -1;
  151.                     break;
  152.         case SET_SYSTEM:
  153.                     DoSetSystem( );
  154.                     break;
  155.         case SET_FLAGS:
  156.                     DoSetFlags( );
  157.                     break;
  158.         case SET_PATH:
  159.                     DoSetPath( );
  160.                     break;
  161.         case SET_ARCHIVERS:
  162.                     DoSetArchivers( );
  163.                     break;
  164.         case SET_LINKS:
  165.                     DoSetLinks( );
  166.                     break;
  167.         case SET_GROUPS:
  168.                     break;
  169.     }
  170.  
  171.     menu_tnormal( menutree, titel, 1 );
  172.     return( Ret );
  173. }
  174.  
  175. /**-----------------------------------------------------------------------------
  176.  ** Funktionsname:    LOCAL VOID DoSetSystem( VOID )
  177.  **        ->    nichts
  178.  **        <-    nichts
  179.  **
  180.  ** Die Funktion übernimmt die Konfiguration der Systemeinstellungen.
  181.  **/
  182. LOCAL VOID DoSetSystem( VOID )
  183. {
  184.     BOOLEAN ok;
  185.     WORD rc = -1;
  186.     DIALINFO di;
  187.  
  188.     open_dial( syst_box, FALSE, NULL, &di );
  189.     dial_draw( &di );
  190.  
  191.     while( rc != OK_SYST )
  192.     {
  193.         rc = dial_do( &di, 0, NULL );
  194.  
  195.         switch( rc )
  196.         {
  197.             case SYST_DOMA:
  198.                         (VOID) HndlDial( doma_box, 0, FALSE, NULL, &ok );
  199.                         break;
  200.             case SYST_ADDR:
  201.                         (VOID) HndlDial( addr_box, 0, FALSE, NULL, &ok );
  202.                         break;
  203.         }
  204.  
  205.     }
  206.     
  207.     ClearSelected( syst_box, rc );
  208.     close_dial( FALSE, NULL, &di );
  209. }
  210.  
  211. /**-----------------------------------------------------------------------------
  212.  ** Funktionsname:    LOCAL VOID DoSetFlags( VOID )
  213.  **        ->    nichts
  214.  **        <-    nichts
  215.  **
  216.  ** Die Funktion übernimmt die Behandlung der Flags-Box.
  217.  **/
  218. LOCAL VOID DoSetFlags( VOID )
  219. {
  220.     BOOLEAN ok;
  221.     WORD rc = -1;
  222.     DIALINFO di;
  223.  
  224.     open_dial( flag_box, FALSE, NULL, &di );
  225.     dial_draw( &di );
  226.  
  227.     while( rc != OK_FLAG )
  228.     {
  229.         rc = dial_do( &di, 0, NULL );
  230.  
  231.         switch( rc )
  232.         {
  233.             case TAS_MSGID:
  234.             case POP_MSGID:
  235.                         popup_select( flag_box, POP_MSGID, popup, POP_OMODE, 0, 0, &ok );
  236.                         break;
  237.             case CIR_MSGID:
  238.                         popup_select( flag_box, POP_MSGID, popup, POP_OMODE, 0, -2, &ok );
  239.                         break;
  240.             case TAS_PKTTP:
  241.             case POP_PKTTP:
  242.                         popup_select( flag_box, POP_PKTTP, popup, POP_PKTTYPE, 0, 0, &ok );
  243.                         break;
  244.             case CIR_PKTTP:
  245.                         popup_select( flag_box, POP_PKTTP, popup, POP_PKTTYPE, 0, -2, &ok );
  246.                         break;
  247.             case TAS_ORIGM:
  248.             case POP_ORIGM:
  249.                         popup_select( flag_box, POP_ORIGM, popup, POP_OMODE, 0, 0, &ok );
  250.                         break;
  251.             case CIR_ORIGM:
  252.                         popup_select( flag_box, POP_ORIGM, popup, POP_OMODE, 0, -2, &ok );
  253.                         break;
  254.         }
  255.  
  256.     }
  257.     
  258.     ClearSelected( flag_box, rc );
  259.     close_dial( FALSE, NULL, &di );
  260. }
  261.  
  262. /**-----------------------------------------------------------------------------
  263.  ** Funktionsname:    LOCAL VOID DoSetPath( VOID )
  264.  **        ->    nichts
  265.  **        <-    nichts
  266.  **
  267.  ** Funktion zur Pfadeinstellung.
  268.  **/
  269. LOCAL VOID DoSetPath( VOID )
  270. {
  271.     WORD     rc = -1, x_coor, y_coor;
  272.     BYTE     *head, *fn, cpath[256];
  273.     DIALINFO di;
  274.  
  275.     open_dial( path_box, FALSE, NULL, &di );
  276.     dial_draw( &di );
  277.  
  278.     while( rc != OK_PATH )
  279.     {
  280.         rname[0] = '\0';
  281.         
  282.         rc = dial_do( &di, 0, NULL );
  283.         rc &= 0x00ff; /* Bit 15 könnte gesetzt sein (Doppelklick) */
  284.  
  285.         switch( rc )
  286.         {
  287.             case NETMAILP:
  288.                         head = NETM_P;
  289.                         fn   = NETM_N;
  290.                         break;
  291.             case MAILBOXP:
  292.                         head = MAIL_P;
  293.                         fn   = MAIL_N;
  294.                         break;
  295.             case ARCHIVEP:
  296.                         head = ARCH_P;
  297.                         fn   = ARCH_N;
  298.                         break;
  299.             case BADMSGSP:
  300.                         head = BADM_P;
  301.                         fn   = BADM_N;
  302.                         break;
  303.             case DUPMSGSP:
  304.                         head = DUPE_P;
  305.                         fn   = DUPE_N;
  306.                         break;
  307.             case INBOUNDP:
  308.                         head = INBO_P;
  309.                         fn   = NULL;
  310.                         break;
  311.             case KINBONDP:
  312.                         head = KINB_P;
  313.                         fn   = NULL;
  314.                         break;
  315.             case PINBONDP:
  316.                         head = PINB_P;
  317.                         fn   = NULL;
  318.                         break;
  319.             case HOLD:
  320.                         head = OUTB_P;
  321.                         fn   = NULL;
  322.                         break;
  323.             case NODELSTP:
  324.                         head = NODE_P;
  325.                         fn   = NULL;
  326.                         break;
  327.             case SYSLOGP:
  328.                         head = LOGF_P;
  329.                         fn   = LOGF_N;
  330.                         break;
  331.             case ABOUTFP:
  332.                         head = ABOU_P;
  333.                         fn   = NULL;
  334.                         break;
  335.             default:
  336.                         head = NULL;
  337.         }
  338.  
  339.         if( head )
  340.         {
  341.             if( fn )
  342.                 strcpy( rname, fn );
  343.  
  344.             /* FileSelector aufrufen und auf Abbruch-Button testen: */
  345.             if( select_file( rpath, rname, head ) )
  346.             {
  347.                 strcpy( cpath, rpath );
  348.                 
  349.                 /* Filename rankopieren, falls nötig: */
  350.                 switch( rc )
  351.                 {
  352.                     case NETMAILP:
  353.                     case MAILBOXP:
  354.                     case ARCHIVEP:
  355.                     case BADMSGSP:
  356.                     case DUPMSGSP:
  357.                                     head   = strrchr( rname, '.' );
  358.                                     if( !head && !strlen( rname ) )
  359.                                         continue;
  360.                                     
  361.                                     if( head )
  362.                                         *head = '\0';
  363.                     case ABOUTFP:
  364.                     case SYSLOGP:
  365.                                     strcat( cpath, rname );
  366.                 }
  367.  
  368.                 /* ptext einsetzen: */
  369.                 set_ptext( path_box, rc, cpath );
  370.  
  371.                 /* Redraw-Area ermitteln: */
  372.                 objc_offset( path_box, rc, &x_coor, &y_coor );
  373.  
  374.                 /* Neuzeichnen: */
  375.                 objc_draw( path_box, rc, MAX_DEPTH, x_coor, y_coor,
  376.                            path_box[rc].ob_width, path_box[rc].ob_height );
  377.             }
  378.         }
  379.     }
  380.     
  381.     ClearSelected( path_box, rc );
  382.     close_dial( FALSE, NULL, &di );
  383. }
  384.  
  385. /**-----------------------------------------------------------------------------
  386.  ** Funktionsname:    LOCAL VOID DoSetArchivers( VOID )
  387.  **        ->    nichts
  388.  **        <-    nichts
  389.  **
  390.  ** Funktion zur Packereinstellung.
  391.  **/
  392. LOCAL VOID DoSetArchivers( VOID )
  393. {
  394.     WORD     rc = -1, x_coor, y_coor;
  395.     BYTE     *head, *fn, cpath[256];
  396.     DIALINFO di;
  397.  
  398.     open_dial( arch_box, FALSE, NULL, &di );
  399.     dial_draw( &di );
  400.  
  401.     while( rc != OK_ARCH )
  402.     {
  403.         rname[0] = '\0';
  404.         
  405.         rc = dial_do( &di, 0, NULL );
  406.         rc &= 0x00ff; /* Bit 15 könnte gesetzt sein (Doppelklick) */
  407.  
  408.         switch( rc )
  409.         {
  410.             case ARC_PACK:
  411.                         head = ARC_P;
  412.                         fn   = ARC_N;
  413.                         break;
  414.             case ARC_EXTRACT:
  415.                         head = ARC_E;
  416.                         fn   = ARC_N;
  417.                         break;
  418.             case LZH_PACK:
  419.                         head = LZH_P;
  420.                         fn   = LZH_N;
  421.                         break;
  422.             case LZH_EXTRACT:
  423.                         head = LZH_E;
  424.                         fn   = LZH_N;
  425.                         break;
  426.             case LHA_PACK:
  427.                         head = LHA_P;
  428.                         fn   = LZH_N;
  429.                         break;
  430.             case LHA_EXTRACT:
  431.                         head = LHA_E;
  432.                         fn   = LZH_N;
  433.                         break;
  434.             case ZIP_PACK:
  435.                         head = ZIP_P;
  436.                         fn   = ZIP_N;
  437.                         break;
  438.             case ZIP_EXTRACT:
  439.                         head = ZIP_E;
  440.                         fn   = ZIP_N;
  441.                         break;
  442.             case ZOO_PACK:
  443.                         head = ZOO_P;
  444.                         fn   = ZOO_N;
  445.                         break;
  446.             case ZOO_EXTRACT:
  447.                         head = ZOO_E;
  448.                         fn   = ZOO_N;
  449.                         break;
  450.             case ARJ_PACK:
  451.                         head = ARJ_P;
  452.                         fn   = NULL;
  453.                         break;
  454.             case ARJ_EXTRACT:
  455.                         head = ARJ_E;
  456.                         fn   = ARJ_N;
  457.                         break;
  458.             default:
  459.                         head = NULL;
  460.         }
  461.  
  462.         if( head )
  463.         {
  464.             if( fn )
  465.                 strcpy( rname, fn );
  466.  
  467.             /* FileSelector aufrufen und auf Abbruch-Button testen: */
  468.             if( select_file( rpath, rname, head ) )
  469.             {
  470.                 strcpy( cpath, rpath );
  471.                 
  472.                 /* Ist ein Filename ausgewählt? */
  473.                 if( !strchr( rname, '.' ) )
  474.                     continue;
  475.  
  476.                 /* Filename rankopieren: */                                    
  477.                 strcat( cpath, rname );
  478.  
  479.                 /* ptext einsetzen: */
  480.                 set_ptext( arch_box, rc, cpath );
  481.  
  482.                 /* Redraw-Area ermitteln: */
  483.                 objc_offset( arch_box, rc, &x_coor, &y_coor );
  484.  
  485.                 /* Neuzeichnen: */
  486.                 objc_draw( arch_box, rc, MAX_DEPTH, x_coor, y_coor,
  487.                            arch_box[rc].ob_width, arch_box[rc].ob_height );
  488.             }
  489.         }
  490.     }
  491.     
  492.     ClearSelected( arch_box, rc );
  493.     close_dial( FALSE, NULL, &di );
  494. }
  495.  
  496. /**-----------------------------------------------------------------------------
  497.  ** Funktionsname:    LOCAL VOID DoSetLinks( VOID )
  498.  **        ->    nichts
  499.  **        <-    nichts
  500.  **
  501.  ** Die Funktion übernimmt die Verwaltung der Links.
  502.  **/
  503. LOCAL VOID DoSetLinks( VOID )
  504. {
  505.     WORD rc = -1;
  506.     DIALINFO di;
  507.  
  508.     open_dial( lklb_box, FALSE, NULL, &di );
  509.     dial_draw( &di );
  510.  
  511.     while( rc != OK_LKLB )
  512.     {
  513.         rc = dial_do( &di, 0, &linklist );
  514.  
  515.         switch( rc )
  516.         {
  517.             case LK_MORE:
  518.  
  519.                             reset_linkbox( );
  520.                             hndl_linkbox( );
  521. /*
  522.                             setup_link( );
  523. */
  524.                             break;
  525.             case LK_CHGE:
  526. /*
  527.                             set_linkbox( linklist.active );
  528.                             handle_linkbox( );
  529.                             setup_link( );
  530. */
  531.                             break;
  532.             case LK_DEL:
  533. /*
  534.                             delete_link( linklist.active );
  535. */
  536.                             break;
  537.         }
  538.  
  539.     }
  540.     
  541.     ClearSelected( lklb_box, rc );
  542.     close_dial( FALSE, NULL, &di );
  543. }
  544.  
  545.  
  546. /**-----------------------------------------------------------------------------
  547.  ** Funktionsname:    LOCAL VOID ClearSelected( OBJECT *tree, WORD object )
  548.  **        ->    Tree und Objektnummer
  549.  **        <-    nichts
  550.  **
  551.  ** Die Funktion löscht den SELECTED-Status eines Objekts.
  552.  **/
  553. LOCAL VOID ClearSelected( OBJECT *tree, WORD object )
  554. {
  555.     tree[object].ob_state &= 0xFFFE;
  556. }
  557.