home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 January / VPR0101A.BIN / OLS / TAR32053 / tar32053.exe / SRC / IOCTRL.C < prev    next >
C/C++ Source or Header  |  1999-05-23  |  4KB  |  215 lines

  1. /*ioctrl.c*/
  2. #include "defconf.h"
  3. #include "ioctrl.h"
  4.  
  5. #ifdef DLL
  6. /* #define IO_TEST 2 */
  7. #include <stdarg.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. #define PRINT_BUF 10000
  12.  
  13. char dll_output_buffer_test[10]="";
  14. int dll_output_buflen_test=10;
  15.  
  16. static char *dll_output_buffer;
  17. static int dll_output_buflen=-1;
  18.  
  19. static char *dll_output_ptr;
  20.  
  21. /* for test play */
  22. void ioctrl_output_init_test(void)
  23. {
  24.     if(dll_output_buflen==-1 || dll_output_buffer==dll_output_buffer_test){
  25.         dll_output_buffer=dll_output_buffer_test;
  26.         dll_output_buflen=dll_output_buflen_test;
  27.         dll_output_ptr=dll_output_buffer;
  28.     }
  29. }
  30. void ioctrl_output_init(char *buf,int buflen)
  31. {
  32.     dll_output_buffer=buf;
  33.     dll_output_buflen=buflen;
  34.     dll_output_ptr=dll_output_buffer;
  35. }
  36.  
  37. void ioctrl_output_end(void)
  38. {
  39. #if IO_TEST >=2
  40.     orig_printf("#########ioctrl_output_end(begin)########%s###(end)########\n",dll_output_buffer);
  41. #endif
  42. }
  43. int ioctrl_output_string(const char *string)
  44. {
  45.     if(dll_output_ptr>=dll_output_buffer+dll_output_buflen){
  46.         /* nothing */
  47.         return -1;
  48.     }
  49.     while(dll_output_ptr<dll_output_buffer+dll_output_buflen-1 && *string!='\0'){
  50.         *dll_output_ptr=*string;
  51.         dll_output_ptr++;
  52.         string++;
  53.     }
  54.     *dll_output_ptr='\0';
  55.     return 0;
  56. }
  57. int ioctrl_output_n_string(const char *string,long n)
  58. {
  59.     int c=0;
  60.  
  61.     if(dll_output_ptr>=dll_output_buffer+dll_output_buflen){
  62.         /* nothing */
  63.         return -1;
  64.     }
  65.     while(dll_output_ptr<dll_output_buffer+dll_output_buflen-1 && c<n /* *string!='\0' */){
  66.         *dll_output_ptr=*string;
  67.         dll_output_ptr++;
  68.         string++;
  69.         c++;
  70.     }
  71.     *dll_output_ptr='\0';
  72.     return c;
  73. }
  74.  
  75. int ioctrl_output_char(int c)
  76. {
  77.     if(dll_output_ptr>=dll_output_buffer+dll_output_buflen){
  78.         return -1;
  79.     }
  80.     if(dll_output_ptr<dll_output_buffer+dll_output_buflen-1){
  81.         *dll_output_ptr=(char)c;
  82.         dll_output_ptr++;
  83.         /* string++; */
  84.     }
  85.     *dll_output_ptr='\0';
  86.     return 0;
  87. }
  88.  
  89. int ioctrl_vprintf(const char *format,va_list arg)
  90. {
  91.     char tmpbuf[PRINT_BUF];
  92.     int ret=0;
  93.  
  94.     vsprintf(tmpbuf,format,arg);
  95. #ifdef IO_TEST
  96.     ret=orig_printf("PRINTF:%s",tmpbuf);
  97. #endif
  98. #if !defined(IO_TEST) || IO_TEST>=2
  99.     ret=ioctrl_output_string(tmpbuf);
  100. #endif
  101.     return ret;
  102. }
  103. int ioctrl_printf(const char *format,...)
  104. {
  105.     va_list arg;
  106.     int ret;
  107.     
  108.     va_start(arg,format);
  109.     ret=ioctrl_vprintf(format,arg);
  110.     va_end(arg);
  111.     return ret;
  112. }
  113.  
  114. int ioctrl_fprintf(FILE *fp,const char *format,...)
  115. {
  116.     va_list arg;
  117.     int ret;
  118.  
  119.     va_start(arg,format);
  120.     if(fp==stdout || fp==stderr){
  121.         ret=ioctrl_vprintf(format,arg);
  122.     }else{
  123.         ret=vfprintf(fp,format,arg);
  124.     }
  125.     va_end(arg);
  126.     return ret;
  127. }
  128.  
  129. int ioctrl_puts(const char *string)
  130. {
  131.     int ret;
  132. #ifdef IO_TEST
  133.     orig_printf("PUTS:");
  134.     ret=orig_puts(string);
  135. #endif
  136. #if !defined(IO_TEST) || IO_TEST>=2
  137.     ret=ioctrl_output_string(string);
  138.     ret=ioctrl_output_char('\n');
  139. #endif
  140.     return ret;
  141. }
  142. int ioctrl_fputs(const char *string,FILE *fp)
  143. {
  144.     int ret;
  145.     if(fp==stdout || fp==stderr){
  146.         ret=ioctrl_puts(string);
  147.     }else{
  148.         ret=orig_fputs(string,fp);
  149.     }
  150.     return ret;
  151. }
  152. int ioctrl_putchar(int c)
  153. {
  154.     int ret;
  155.     /* assmume 0<=c<=255...*/
  156. #ifdef IO_TEST
  157.     orig_printf("PUTCHAR:");
  158.     ret=orig_putchar(c);
  159. #endif
  160. #if !defined(IO_TEST) || IO_TEST>=2
  161.     ret=ioctrl_output_char(c);
  162. #endif
  163.     return ret;
  164. }
  165. int ioctrl_putc(int c,FILE *fp)
  166. {
  167.     int ret;
  168.     if(fp==stdout || fp==stderr){
  169.         ret=ioctrl_putchar(c);
  170.     }else{
  171.         ret=orig_putc(c,fp);
  172.     }
  173.     return ret;
  174. }
  175. void ioctrl_perror( const char *string )
  176. {
  177.     if(0<=errno && errno<_sys_nerr){
  178.         fprintf(stderr,"%s: %s\n",string,_sys_errlist[errno]);
  179.     }
  180. }
  181. size_t ioctrl_fwrite( const void*buffer, size_t size, size_t count, FILE *stream )
  182. {
  183.     if(stream==stdout || stream==stderr){
  184.         int ret;
  185. #ifdef IO_TEST
  186.         orig_printf("FWRITE:");
  187.         ret=orig_fwrite(buffer,size,count,stdout);
  188. #endif
  189. #if !defined(IO_TEST) || IO_TEST>=2
  190.         ret=ioctrl_output_n_string(buffer,size*count);
  191. #endif
  192.         return ret;
  193.     }else{
  194.         return orig_fwrite(buffer,size,count,stream);
  195.     }
  196. }
  197. int ioctrl_write( int handle, const void *buffer, unsigned int count )
  198. {
  199.     if(handle==1 || handle==2){
  200.         int ret;
  201. #ifdef IO_TEST
  202.         orig_printf("WRITE:");
  203.         ret=orig_write(1,buffer,count);
  204. #endif
  205. #if !defined(IO_TEST) || IO_TEST>=2
  206.         ret=ioctrl_output_n_string(buffer,count);
  207. #endif
  208.         return ret;
  209.     }else{
  210.         return orig_write(handle,buffer,count);
  211.     }
  212. }
  213.  
  214. #endif  /* DLL */
  215.