home *** CD-ROM | disk | FTP | other *** search
/ FreeWare Collection 2 / FreeSoftwareCollection2pd199x-jp.img / ms_dos / xscrfm51 / xsave.c < prev    next >
C/C++ Source or Header  |  1990-06-14  |  2KB  |  92 lines

  1. /*
  2.     save the transcript buffer  (Ver 1.4)
  3.  
  4.     written by Oka  /  Feb. 7, 1988
  5.     
  6.         modified by SHU
  7.     Ver 1.1 on Mar.7,1990
  8.         using LSIC-86 試食版
  9. */
  10.  
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <dos.h>
  14.  
  15. #define  XSERV_INT  0xF9
  16. #define  RBUFSIZ    1024
  17. #define  WBUFSIZ     256
  18.  
  19. main(ac, av)
  20.     int     ac;
  21.     char   *av[];
  22. {
  23.     FILE   *fptr;
  24.     char    rbuf[RBUFSIZ];
  25.     char    wbuf[WBUFSIZ];
  26.     char    c;
  27.     unsigned int  rptr, rcnt, i, j;
  28.     unsigned int  xread(char *, unsigned int, unsigned int);
  29.  
  30.     if (ac < 2)
  31.     {
  32.         puts("XSAVE : xscript buffer saver ver 1.1");
  33.         puts("Usage : xsave filename");
  34.         exit(1);
  35.     }
  36.  
  37.     if ( (fptr = fopen(av[1], "w")) == NULL )    /* textモードを使用 */
  38.     {
  39.         printf("Can not create .. %s \n", av[1]);
  40.         exit(2);
  41.     }
  42.  
  43.     rptr = 0;
  44.     while ( (rcnt = xread(rbuf, RBUFSIZ, rptr)) > 0 )
  45.     {
  46.         rptr += rcnt;
  47.         i = 0;
  48.         while ( i < rcnt )
  49.         {
  50.             for (j=0; j<WBUFSIZ-1; ++j)
  51.             {
  52.                 if ( i >= rcnt ) break;
  53.                 if ( (c = rbuf[i++]) == 0x0d )
  54.                 {
  55.                     wbuf[j++] = '\n';
  56.                     break;
  57.                 }
  58.                 wbuf[j] = c;
  59.             }
  60.             wbuf[j] = '\0';
  61.             if ( fputs( wbuf, fptr ) == EOF )
  62.             {
  63.                 printf("Can not write .. %s \n", av[1]);
  64.                 exit(3);
  65.             }
  66.         }
  67.     }
  68.     fclose( fptr );
  69.     printf("function complete.\n");
  70.     exit(0);
  71. }
  72.  
  73.  
  74. /* read the transcript buffer */
  75.  
  76. unsigned int
  77. xread(buf, size, ptr)
  78.     char   *buf;
  79.     unsigned int  size;
  80.     unsigned int  ptr;
  81. {
  82.     union REGS regs;
  83.  
  84.     regs.h.ah = 7;        /* transcript buffer read function code */
  85.     regs.x.bx = ptr;
  86.     regs.x.cx = size;
  87.     regs.x.dx = (unsigned int) buf;
  88.     int86( XSERV_INT, ®s, ®s );
  89.     return( regs.x.ax );
  90. }
  91.  
  92.