home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / bts314b4 / mailroot.c < prev    next >
C/C++ Source or Header  |  1994-09-18  |  19KB  |  725 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*                                                                          */
  3. /*                                                                          */
  4. /*      ------------         Bit-Bucket Software, Co.                       */
  5. /*      \ 10001101 /         Writers and Distributors of                    */
  6. /*       \ 011110 /          Freely Available<tm> Software.                 */
  7. /*        \ 1011 /                                                          */
  8. /*         ------                                                           */
  9. /*                                                                          */
  10. /*  (C) Copyright 1987-90, Bit Bucket Software Co., a Delaware Corporation. */
  11. /*                                                                          */
  12. /*                                                                          */
  13. /*                 This module was written by Bob Hartman                   */
  14. /*                                                                          */
  15. /*                                                                          */
  16. /*                   BinkleyTerm Mail Control Routines                      */
  17. /*                                                                          */
  18. /*                                                                          */
  19. /*    For complete  details  of the licensing restrictions, please refer    */
  20. /*    to the License  agreement,  which  is published in its entirety in    */
  21. /*    the MAKEFILE and BT.C, and also contained in the file LICENSE.240.    */
  22. /*                                                                          */
  23. /*    USE  OF THIS FILE IS SUBJECT TO THE  RESTRICTIONS CONTAINED IN THE    */
  24. /*    BINKLEYTERM  LICENSING  AGREEMENT.  IF YOU DO NOT FIND THE TEXT OF    */
  25. /*    THIS  AGREEMENT IN ANY OF THE  AFOREMENTIONED FILES,  OR IF YOU DO    */
  26. /*    NOT HAVE THESE FILES,  YOU  SHOULD  IMMEDIATELY CONTACT BIT BUCKET    */
  27. /*    SOFTWARE CO.  AT ONE OF THE  ADDRESSES  LISTED BELOW.  IN NO EVENT    */
  28. /*    SHOULD YOU  PROCEED TO USE THIS FILE  WITHOUT HAVING  ACCEPTED THE    */
  29. /*    TERMS  OF  THE  BINKLEYTERM  LICENSING  AGREEMENT,  OR  SUCH OTHER    */
  30. /*    AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO.      */
  31. /*                                                                          */
  32. /*                                                                          */
  33. /* You can contact Bit Bucket Software Co. at any one of the following      */
  34. /* addresses:                                                               */
  35. /*                                                                          */
  36. /* Bit Bucket Software Co.        FidoNet  1:104/501, 1:132/491, 1:141/491  */
  37. /* P.O. Box 460398                AlterNet 7:491/0                          */
  38. /* Aurora, CO 80046               BBS-Net  86:2030/1                        */
  39. /*                                Internet f491.n132.z1.fidonet.org         */
  40. /*                                                                          */
  41. /* Please feel free to contact us at any time to share your comments about  */
  42. /* our software and/or licensing policies.                                  */
  43. /*                                                                          */
  44. /*--------------------------------------------------------------------------*/
  45.  
  46. #include <stdio.h>
  47. #include <signal.h>
  48. #include <ctype.h>
  49. #include <conio.h>
  50. #ifndef __TOS__
  51. #include <sys/types.h>
  52. #include <sys/stat.h>
  53. #include <fcntl.h>
  54. #include <dos.h>
  55. #endif
  56. #include <string.h>
  57. #include <time.h>
  58. #ifndef LATTICE
  59. #include <process.h>
  60. #endif
  61. #include <stdlib.h>
  62. #ifndef LATTICE
  63. #include <io.h>
  64. #endif
  65.  
  66. #include "bink.h"
  67. #include "msgs.h"
  68. #include "com.h"
  69. #include "sched.h"
  70. #include "sbuf.h"
  71. #include "session.h"
  72. #include "defines.h"
  73. #include "vfossil.h"
  74. #include "nodeproc.h"
  75.  
  76. static char *estring (int, int);
  77.  
  78. int do_mail( ADDR *baddr, int manual )
  79. {
  80.     long callstart, callend;
  81.     long call_cost, call_cost_ths;
  82.     long eh, em, es;
  83.  
  84.     caller = 1;
  85.     b_init();
  86.  
  87.     no_WaZOO_Session = 0;
  88.     sprintf (junk, "%s", Full_Addr_Str (baddr));
  89.     remote_addr.Zone = baddr->Zone;
  90.     remote_addr.Net = baddr->Net;
  91.     remote_addr.Node = baddr->Node;
  92.     remote_addr.Point = baddr->Point;
  93.     remote_addr.Domain = baddr->Domain;
  94.     called_addr.Zone = baddr->Zone;
  95.     called_addr.Net = baddr->Net;
  96.     called_addr.Node = baddr->Node;
  97.     called_addr.Point = baddr->Point;
  98.     called_addr.Domain = baddr->Domain;
  99.  
  100.     no_Janus_Session = check_nojanus (&called_addr, (char**) NULL);
  101.     
  102.     if (!net_params)
  103.     {
  104.         status_line (msgtxt[M_INSUFFICIENT_DATA]);
  105.         /*set_xy ("");*/
  106.         return (0);
  107.     }
  108.  
  109.     if (!nodeproc (junk))
  110.         return (0);
  111.  
  112.     if (manual)
  113.     {
  114.         if (flag_file (TEST_AND_SET, &called_addr, 1))
  115.         {
  116.             if (CARRIER)
  117.                 mdm_hangup ();
  118.             return (0);
  119.         }
  120.  
  121.         if (CARRIER)                                           /* called manually maybe? */
  122.             goto process_the_damned_mail;                   /* yup, just do some mail */
  123.  
  124.  
  125.         do_dial_strings ();
  126.         try_2_connect ((char *) (newnodedes.PhoneNumber));            /* try to connect         */
  127.     }
  128.     else
  129.     {
  130.         /* 
  131.         ** Check for cost. If UseCallSlots is set, take them
  132.         */
  133.         
  134.         if (usecallslots)
  135.         {
  136.             /*
  137.             if (!strchr (e_ptrs[cur_event]->call_slot, (int)newnodedes.RealCost))
  138.                 return (0);
  139.             */
  140.         }
  141.         else
  142.         {
  143.             /* If this is supposed to be only local, then get out if it isn't */
  144.             if (e_ptrs[cur_event]->behavior & MAT_LOCAL)
  145.             {
  146.                 if (e_ptrs[cur_event]->node_cost < 0)
  147.                 {
  148.                     if ((int) newnodedes.RealCost < -e_ptrs[cur_event]->node_cost)
  149.                     {
  150.                         return (0);
  151.                     }
  152.                 }
  153.                 else
  154.                 {
  155.                     if ((int) newnodedes.RealCost > e_ptrs[cur_event]->node_cost)
  156.                     {
  157.                         return (0);
  158.                     }
  159.                 }
  160.             }
  161.         }
  162.         
  163.         /* If it is supposed to be 24 hour mail only, get out if it isn't */
  164. #ifndef ATARIST
  165.         if (newnodelist && (!(e_ptrs[cur_event]->behavior & MAT_NOMAIL24))
  166.             && (!(newnodedes.NodeFlags & B_CM)))
  167. #else
  168.         if ( !(e_ptrs[cur_event]->behavior & MAT_NOMAIL24)
  169.             && !(newnodedes.NodeFlags & B_CM) )
  170. #endif
  171.             return (0);
  172.         /* If we aren't supposed to send to CM's now, get out */
  173. #ifndef ATARIST
  174.         if (newnodelist && (e_ptrs[cur_event]->behavior & MAT_NOCM)
  175.             && (newnodedes.NodeFlags & B_CM))
  176. #else
  177.         if ( (e_ptrs[cur_event]->behavior & MAT_NOCM)
  178.             && (newnodedes.NodeFlags & B_CM))
  179. #endif
  180.             return (0);
  181.         /* Try to connect */
  182.  
  183.         if (flag_file (TEST_AND_SET, &called_addr, 1))
  184.         {
  185.             if (CARRIER)
  186.                 mdm_hangup ();
  187.             return (0);
  188.         }
  189.  
  190.         do_dial_strings ();
  191.         if (un_attended && fullscreen)
  192.         {
  193.             sb_move (holdwin, 2, 1);
  194.             sb_wa (holdwin, colors.calling, 31);
  195.         }
  196.  
  197.         callstart = time (NULL);
  198.  
  199.         if (try_1_connect ((char *) (newnodedes.PhoneNumber)) == -1)
  200.         {
  201.             if (un_attended && fullscreen)
  202.             {
  203.                 sb_move (holdwin, 2, 1);
  204.                 sb_wa (holdwin, colors.hold, 31);
  205.             }
  206.             flag_file (CLEAR_FLAG, &called_addr, 1);
  207.             return (-1);
  208.         }
  209.     }
  210.  
  211. process_the_damned_mail:
  212.  
  213.     if (CARRIER)                                          /* if we did,             */
  214.     {
  215.         screen_blank = 0;
  216.  
  217.         if (manual)
  218.             callstart = time (NULL);
  219.  
  220.         b_session (1);                                     /* do a mail session      */
  221.         flag_file (CLEAR_FLAG, &called_addr, 1);              /* make sure flag is gone */
  222.  
  223.         callend = time (NULL);
  224.         hist.last_Elapsed = callend - callstart;
  225.  
  226.         eh = (callend - callstart) / 3600L;
  227.         em = ((callend - callstart) / 60L) - (eh * 60L);
  228.         es = (callend - callstart) - (eh * 3600L) - (em * 60L);
  229.  
  230.         hist.callcost += (call_cost = cost_of_call (callstart, callend));
  231.  
  232.         call_cost_ths = call_cost % 100L;               /* Separate dollars & */
  233.         call_cost = call_cost / 100L;                   /* cents for formats  */
  234.  
  235.         status_line (msgtxt[M_NODE_COST], Full_Addr_Str (baddr), 
  236.                         eh, em, es, call_cost, call_cost_ths);
  237.  
  238.         mdm_hangup ();
  239.  
  240.         ++hist.connects;
  241.         if (un_attended && fullscreen)
  242.         {
  243.             sb_move (historywin, HIST_CONN_ROW, HIST_COL);
  244.             (void) sprintf (junk, "%d/%ld", hist.connects, hist.callcost);
  245.             sb_puts (historywin, (unsigned char *) junk);
  246.         }
  247.  
  248.         write_stats ();
  249.  
  250.         if (un_attended && (got_arcmail || got_packet || got_mail))
  251.         {
  252.             (void) bad_call (baddr, BAD_REMOVE);
  253.             receive_exit ();
  254.         }
  255.  
  256.         /* Remove any $$ files for any akas that were sent with EMSI */
  257.  
  258.         if(sent_mail)
  259.         {
  260.             ADDR_LIST *ads = remote_ads.next;
  261.             while(ads)
  262.             {
  263.                 ADDR_LIST *next = ads->next;
  264.                 bad_call(&ads->ad, BAD_REMOVE);
  265.                 ads = next;
  266.             }
  267.         }
  268.  
  269.         if (un_attended && fullscreen)
  270.         {
  271.             sb_move (holdwin, 2, 1);
  272.             sb_wa (holdwin, colors.hold, 31);
  273.         }
  274.         return (1);
  275.     }
  276.     else
  277.     {
  278.         status_line (msgtxt[M_END_OF_ATTEMPT]);
  279.         flag_file (CLEAR_FLAG, &called_addr, 1);
  280.     }
  281.     if (un_attended && fullscreen)
  282.     {
  283.         sb_move (holdwin, 2, 1);
  284.         sb_wa (holdwin, colors.hold, 31);
  285.     }
  286.     write_stats ();
  287.     return (2);
  288. }
  289.  
  290. int handle_inbound_mail( void )
  291. {
  292.     long t;                              /* used for the timeouts  */
  293.     int mr;                                           /* Modem response */
  294.  
  295.  
  296.     caller = 0;
  297.     b_init();
  298.  
  299. inloop:
  300.  
  301.     if (!(server_mode && CARRIER) && !CHAR_AVAIL ())                   /* Any action from modem? */
  302.     {
  303.         time_release ();
  304.         return (0);                                        /* No, nothing to do      */
  305.     }
  306.  
  307. #ifdef NEVER /* should not need this any more */
  308.  
  309.     /* if outbound only, then return */
  310.     if ((cur_event >= 0) && (e_ptrs[cur_event]->behavior & MAT_OUTONLY))
  311.     {
  312.         time_release ();
  313.         return (0);
  314.     }
  315.  
  316. #endif
  317.  
  318.     mail_only = 1;
  319.     if ((cur_event >= 0) && (e_ptrs[cur_event]->behavior & MAT_BBS))
  320.         mail_only = 0;
  321.  
  322. should_answer:
  323.  
  324.     screen_blank = 0;
  325.  
  326.     if (un_attended && fullscreen)
  327.         sb_show ();
  328.  
  329.     if (server_mode && CARRIER)
  330.         goto got_carrier;
  331.  
  332.     if (((mr = modem_response (500)) == 3) && (ans_str != NULL))              /* RING detected */
  333.     {
  334.          /*
  335.          * Try to make sure we don't send out the answer string while stuff is
  336.          * still coming from the modem.  Most modems don't like that kind of
  337.          * sequence (including HST's!). 
  338.          */
  339.          
  340.         t = timerset (100);
  341.         while (CHAR_AVAIL () && (!timeup (t)))
  342.         {
  343.             t = timerset (100);
  344.             (void) MODEM_IN ();
  345.         }
  346.         CLEAR_INBOUND ();
  347.         mdm_cmd_string (ans_str, 0);               /* transmit the answer
  348.                                                           * string */
  349.         
  350.         goto should_answer;
  351.     }
  352.     else if (mr != 2 && mr != 5)                                    /* NOT connect */
  353.     {
  354.         if (un_attended && fullscreen) 
  355.             do_ready ("Ring");
  356.  
  357.         t = timerset (6000);                               /* 1 minute               */
  358.         while ((!timeup (t))
  359.             && (!CHAR_AVAIL ())
  360.             && (!KEYPRESS ()))
  361.             time_release ();                                /* wait for another result */
  362.         if (KEYPRESS ())                                       /* If aborted by user,    */
  363.         {
  364.             /* Reinit modem after failure, SWG 24th June 1991 */
  365.  
  366.             mdm_hangup();
  367.             FOSSIL_CHAR();
  368.             return 1;
  369.         }
  370.         
  371.         t = timerset (3000);
  372.         while (!timeup(t))
  373.         {
  374.         if (CARRIER)
  375.         goto inloop;
  376.         }
  377.         goto got_carrier;
  378.             
  379. /*        goto inloop; */                                       /* else proceed along     */
  380.     }
  381.  
  382. got_carrier:
  383.  
  384.     if (mr == 5)                            /* Fax connects don't set DCD */
  385.         call_fax ();
  386.     else
  387.         if (CARRIER)                        /* if we have a carrier,  */
  388.         {
  389.             b_session (0);                    /* do a mail session      */
  390.         
  391.             /* We got inbound mail */
  392.             if (got_arcmail || got_packet || got_mail)
  393.                 receive_exit();
  394.         }
  395.  
  396.     mdm_hangup();
  397.     
  398.     return (1);
  399. }
  400.  
  401. void receive_exit( void )
  402. {
  403.     char junk1[150];
  404.     int i;
  405.  
  406.     if (got_arcmail && (cur_event >= 0) && (e_ptrs[cur_event]->errlevel[2]))
  407.     {
  408.         status_line (msgtxt[M_EXIT_COMPRESSED],
  409.         e_ptrs[cur_event]->errlevel[2]);
  410.  
  411.         errl_exit(e_ptrs[cur_event]->errlevel[2]);
  412.     }
  413.  
  414.     if (cur_event >= 0)
  415.     {
  416.         for (i = 0; i < 6; i++)
  417.         {
  418.             if (user_exits[i])
  419.             {
  420.                 status_line (msgtxt[M_EXIT_AFTER_EXTENT],
  421.                 &(e_ptrs[cur_event]->err_extent[i][0]),
  422.                 e_ptrs[cur_event]->errlevel[i + 3]);
  423.                 errl_exit (e_ptrs[cur_event]->errlevel[i + 3]);
  424.             }
  425.         }
  426.     }
  427.  
  428.     if ((got_mail || got_packet) &&
  429.         (cur_event >= 0) && (e_ptrs[cur_event]->errlevel[1]))
  430.     {
  431.         status_line (msgtxt[M_EXIT_AFTER_MAIL],
  432.         e_ptrs[cur_event]->errlevel[1]);
  433.  
  434.         errl_exit (e_ptrs[cur_event]->errlevel[1]);
  435.     }
  436.  
  437.     if ((aftermail != NULL) && (got_mail || got_packet || got_arcmail))
  438.     {
  439.         status_line (msgtxt[M_AFTERMAIL]);
  440.         mdm_init (modem_busy);
  441.         exit_DTR ();
  442.         screen_clear ();
  443.         vfossil_cursor (1);
  444.         (void) strcpy (junk1, aftermail);
  445.         if (cur_event >= 0)
  446.             (void) strcat (junk1, e_ptrs[cur_event]->cmd);
  447.         close_up ();
  448.         b_spawn (junk1);
  449.         come_back ();
  450.         DTR_ON ();
  451.         status_line (msgtxt[M_OK_AFTERMAIL]);
  452.         mdm_init (modem_init);
  453.     }
  454.  
  455.     /* b_init(); */    /* Dont clear this at all!!!! */
  456. }
  457.  
  458. void errl_exit( int n )
  459. {
  460.     write_sched ();
  461.  
  462.     status_line ("+%s, %s", msgtxt[M_END], xfer_id);
  463.     mdm_init (modem_busy);                            /* Reinitialize the modem  */
  464.     exit_DTR ();
  465.     /*SCB*/ if (fullscreen)
  466.         gotoxy (0, SB_ROWS);
  467.  
  468.     if (vfossil_installed)
  469.         vfossil_close ();
  470.  
  471.     if (!share)
  472.         MDM_DISABLE ();
  473.     if (reset_port)
  474.         exit_port();
  475.     
  476.     exit(n);
  477. }
  478.  
  479.  
  480. /*
  481.  * return directory where outbound stuff for maddr should be found
  482.  *
  483.  * This is:
  484.  *    hold\      : Default Zone
  485.  *  hold.zzz\  : Other zone in our domain
  486.  *  domainarea\abrev[.zzz]\
  487.  */
  488.  
  489. char *HoldAreaNameMunge( ADDR *maddr )
  490. {
  491.     static char munged[80];
  492.     register char *p, *q;
  493.     int i;
  494.  
  495.     ADDRESS *ad;
  496.     char *domain;
  497.  
  498.     /*
  499.      * If address hasn't got a domain and we are using domains then try to
  500.      * guess where the mail might be!  Basically compare zones with our
  501.      * aliases
  502.      *
  503.      * Or if the other guy is using our default domain consider that he might
  504.      * have that as the only domain.
  505.      */
  506.     
  507.     ad = &alias[0];
  508.     domain = maddr->Domain;
  509.  
  510.     /* If we are using Domains and the other guy isn't or is using our default */
  511.  
  512.     if(ad->ad.Domain && !domain)
  513.     {
  514.         domain = ad->ad.Domain;            /* Default domain */
  515.         i = 0;
  516.         while(i < num_addrs)
  517.         {
  518.             if(ad->ad.Zone == maddr->Zone)
  519.             {
  520.                 domain = ad->ad.Domain;
  521.                 break;
  522.             }
  523.             i++;
  524.             ad++;
  525.         }
  526.     }
  527.  
  528.     if (domain && (domain != alias[0].ad.Domain))
  529.     {
  530.         *domain_loc = '\0';
  531.         strcpy (munged, domain_area);
  532.         q = &munged[strlen (munged)];
  533.         for (i = 0; domain_name[i] != NULL; i++)
  534.         {
  535.             if(domain_name[i] == domain)
  536.             {
  537.                 if (domain_abbrev[i] != NULL)
  538.                 {
  539.                     p = domain_abbrev[i];
  540.                     while (*p)
  541.                         *q++ = *p++;
  542.                     if (no_zones)
  543.                         (void) sprintf (q, "\\");
  544.                     else
  545.                         (void) sprintf (q, ".%03x\\", maddr->Zone);
  546.                 }
  547.                 break;
  548.             }
  549.         }
  550.     }
  551.     else
  552.     {
  553.         p = hold_area;
  554.         if((maddr->Zone == alias[0].ad.Zone) || no_zones)    /* Default zone */
  555. #ifdef DEBUG1
  556.         {
  557.             status_line(">HoldAreaNameMunge(%s) = %s", Full_Addr_Str(maddr), p);
  558.             return p;
  559.         }
  560. #else
  561.             return(p);
  562. #endif
  563.         q = munged;
  564.         while (*p)
  565.             *q++ = *p++;
  566.         --q;
  567.         if (*(q-4) == '.') q -= 4;
  568.         (void) sprintf(q,".%03x\\",maddr->Zone);
  569.     }
  570.  
  571. #ifdef DEBUG1
  572.     status_line(">HoldAreaNameMunge(%s) = %s", Full_Addr_Str(maddr), munged);
  573. #endif
  574.  
  575.     return(munged);
  576. }
  577.  
  578.  
  579. void mailer_banner( void )
  580. {
  581.     if (fullscreen && un_attended)
  582.     {
  583.         vfossil_cursor (0);
  584.         sb_move (settingswin, SET_EVNT_ROW, SET_COL);
  585.         (void) sprintf (junk, "%-2d", cur_event + 1);
  586.         sb_puts (settingswin, (unsigned char *) junk);
  587.         (void) sprintf (junk, "%-5u Com%d", cur_baud, port_ptr + 1);
  588.         sb_move (settingswin, SET_PORT_ROW, SET_COL);
  589.         sb_puts (settingswin, (unsigned char *) junk);
  590.         clear_filetransfer ();
  591.     }
  592.  
  593.     (void) set_baud (max_baud.rate_value, 0);
  594. }
  595.  
  596. void clear_filetransfer( void )
  597. {
  598.     if (fullscreen && un_attended)
  599.         sb_fillc (filewin, ' ');
  600. }
  601.  
  602. static char ebuf[50];
  603. static char *estring (e, how_big)
  604. int e;
  605. int how_big;
  606. {
  607.     char j[10];
  608.  
  609.     ebuf[0] = '\0';
  610.     if (e >= 0)
  611.     {
  612.         if (e_ptrs[e]->behavior & MAT_BBS)
  613.         {
  614.             (void) strcat (ebuf, "B");
  615.             if (how_big)
  616.                 strcat (ebuf, " ");
  617.         }
  618.         if (e_ptrs[e]->behavior & MAT_CM)
  619.         {
  620.             (void) strcat (ebuf, "C");
  621.             if (how_big)
  622.                 strcat (ebuf, " ");
  623.         }
  624.         if (e_ptrs[e]->behavior & MAT_DYNAM)
  625.         {
  626.             (void) strcat (ebuf, "D");
  627.             if (how_big)
  628.                 strcat (ebuf, " ");
  629.         }
  630.         if (how_big && (e_ptrs[e]->behavior & MAT_FORCED))
  631.             (void) strcat (ebuf, "F ");
  632.         if (e_ptrs[e]->behavior & MAT_NOCM)
  633.         {
  634.             (void) strcat (ebuf, "K");
  635.             if (how_big)
  636.                 strcat (ebuf, " ");
  637.         }
  638.         if (e_ptrs[e]->behavior & MAT_LOCAL)
  639.         {
  640.             (void) strcat (ebuf, "L");
  641.             if (how_big)
  642.             {
  643.                 if (e_ptrs[e]->node_cost > 0)
  644.                     sprintf (j, "<%d ", e_ptrs[e]->node_cost + 1);
  645.                 else
  646.                     sprintf (j, ">%d ", -e_ptrs[e]->node_cost - 1);
  647.                 (void) strcat (ebuf, j);
  648.             }
  649.         }
  650.         if (how_big && (e_ptrs[e]->behavior & MAT_NOMAIL24))
  651.             (void) strcat (ebuf, "M ");
  652.         if (e_ptrs[e]->behavior & MAT_NOREQ)
  653.         {
  654.             (void) strcat (ebuf, "N");
  655.             if (how_big)
  656.                 strcat (ebuf, " ");
  657.         }
  658.         if (e_ptrs[e]->behavior & MAT_OUTONLY)
  659.         {
  660.             (void) strcat (ebuf, "S");
  661.             if (how_big)
  662.                 strcat (ebuf, " ");
  663.         }
  664.         if (e_ptrs[e]->behavior & MAT_NOOUT)
  665.         {
  666.             (void) strcat (ebuf, "R");
  667.             if (how_big)
  668.                 strcat (ebuf, " ");
  669.         }
  670.         if (how_big && (e_ptrs[e]->behavior & MAT_NOOUTREQ))
  671.             (void) strcat (ebuf, "X");
  672.     }
  673.     return (ebuf);
  674. }
  675.  
  676. void do_ready( char *str )
  677. {
  678.     if (fullscreen && un_attended)
  679.     {
  680.         if (!doing_poll)
  681.         {
  682.             clear_filetransfer ();
  683.         }
  684.  
  685.         sb_move (settingswin, SET_EVNT_ROW, SET_COL);
  686.         (void) sprintf (junk, "%-2d/%-6.6s", cur_event + 1, estring (cur_event, 0));
  687.         sb_puts (settingswin, (unsigned char *) junk);
  688.         sb_move (settingswin, SET_STAT_ROW, SET_COL);
  689.         /* SWG: truncate/pad with spaces */
  690.         sprintf(junk, "%-11.11s", str);
  691.         sb_puts(settingswin, (unsigned char *) junk);
  692. #ifndef MULTITASK
  693.         sprintf(junk, "Memory: %-10ld", Malloc(-1L));
  694.         sb_move (settingswin, SET_TASK_ROW, 2);
  695.         sb_puts (settingswin, (unsigned char *) junk);
  696. #endif
  697.         sb_show ();
  698.     }
  699. }
  700.  
  701. void list_next_event( void )
  702. {
  703.     int i;
  704.     char *p;
  705.     char j[100];
  706.  
  707.     i = time_to_next (0);
  708.  
  709.     if ((next_event >= 0) && fullscreen)
  710.     {
  711.         clear_filetransfer ();
  712.         sb_move (filewin, 1, 2);
  713.         sprintf (j, msgtxt[M_NEXT_EVENT], next_event + 1, i);
  714.         sb_puts (filewin, (unsigned char *) j);
  715.         p = estring (next_event, 1);
  716.         if (*p != '\0')
  717.         {
  718.             sb_move (filewin, 2, 2);
  719.             sprintf (j, msgtxt[M_EVENT_FLAGS], p);
  720.             sb_puts (filewin, (unsigned char *) j);
  721.         }
  722.         sb_show ();
  723.     }
  724. }
  725.