home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / top2src.zip / CHARCHAT.C < prev    next >
C/C++ Source or Header  |  1997-12-06  |  2KB  |  86 lines

  1. #include "top.h"
  2.  
  3. /* Code to implement windowed chat inside TOP (INCOMPLETE). */
  4.  
  5. // These all go to header when ready
  6.  
  7. typedef struct cbc_window_str
  8.     {
  9.     XINT posx, posy;
  10.     XINT fsizex, fsizey;
  11.     XINT tsizex, tsizey;
  12.     } cbc_window_typ;
  13.  
  14. char cbcechochars;
  15. unsigned char *cbcbuf;
  16. XINT cbcbufpos;
  17. XINT cbcinfil, cbcoutfil;
  18.  
  19. // cfg.cbcbuflen
  20. // cfg.cbcpolltime
  21. // cfg.cbcforcewrite
  22. // cbc channel stuff
  23. // also window tracking stuff
  24.  
  25. char cbc_putch(XINT pchar, char tonode)
  26.     {
  27.  
  28.     if (cbcbufpos < cfg.cbcbuflen)
  29.         {
  30.         cbcbuf[cbcbufpos++] = pchar;
  31.         return 1;
  32.         }
  33.     else
  34.         {
  35.         // Try to realloc() as well as log a warning
  36.         return 0;
  37.         }
  38.  
  39.     }
  40.  
  41. XINT cbc_writebuf(XINT hnd)
  42.     {
  43.  
  44.     rec_locking(REC_LOCK, hnd, 0L, 1L);
  45.     write(hnd, cbcbuf, strlen(cbcbufpos));
  46.     rec_locking(REC_UNLOCK, hnd, 0L, 1L);
  47.  
  48.     cbcbuf[0] = '\0'
  49.     cbcbufpos = 0;
  50.     // Try to re-realloc() if strlen is longer than the size.
  51.  
  52.     }
  53.  
  54. XINT cbc_readfile(void)
  55.     {
  56.     unsigned char *readbuf = NULL;
  57.     long rfsize;
  58.  
  59.     rfsize = filelength(cbcinfil);
  60.  
  61.     if (rfsize <= 1)
  62.         {
  63.         return 0;
  64.         }
  65.  
  66.     readbuf = malloc(rfsize);
  67.     if (readbuf == NULL)
  68.         {
  69.         // err
  70.         return 0;
  71.         }
  72.  
  73.     rec_locking(REC_LOCK, cbcinfil, 0L, 1L);
  74.     write(cbcinfil, readbuf, rfsize - 1L);
  75.     rec_locking(REC_UNLOCK, cbcinfil, 0L, 1L);
  76.  
  77.     readbuf[rfsize - 1] = '\0';
  78.  
  79.     top_output(OUT_SCREEN, readbuf);
  80.  
  81.     dofree(readbuf);
  82.  
  83.     return (rfsize - 1L);
  84.     }
  85.     
  86.