home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / DOOG / CTASK.ZIP / RES.C < prev    next >
C/C++ Source or Header  |  1989-12-13  |  4KB  |  179 lines

  1.  
  2. /*
  3.    Test program for checking CTask DOS TSR compatibility.
  4. */
  5.  
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <stdarg.h>
  9. #include <fcntl.h>
  10. #include <io.h>
  11. #include <errno.h>
  12.  
  13. #include "tsk.h"
  14. #include "sio.h"
  15.  
  16. #define PORT   0x00     /* COM1, absolute */
  17. #define BAUD   9600L    /* Baudrate */
  18.  
  19. #define STACKSIZE 2048
  20.  
  21. unsigned int _stklen = 2 * STACKSIZE;  /* For Turbo C: One task + main task Stack */
  22.  
  23. tcb tcb1;
  24. sioptr siop;
  25.  
  26. byte fbuf[512];
  27. char fname[128];
  28. word rcvbuf [128];
  29. byte xmtbuf [128];
  30.  
  31. int ofile;
  32.  
  33. #if (TURBO)
  34. #define stayres(len)    keep (0, (len))
  35. #else
  36. #define stayres(len)    _dos_keep (0, (len))
  37. #define sound(x)
  38. #define nosound()
  39. #endif
  40.  
  41. struct mem_control {
  42.                    byte id;
  43.                    word owner;
  44.                    word paragraphs;
  45.                    };
  46.  
  47. void exit_resident (void)
  48. {
  49.    struct mem_control far *mem;
  50.  
  51.    mem = MK_FP (_psp - 1, 0);
  52.    stayres (mem->paragraphs);
  53. }
  54.  
  55.  
  56. void comprintf (char *fmt, ...);
  57.  
  58. void comprintf (fmt)
  59.    char *fmt;
  60. {
  61.    va_list argptr;
  62.    char buf [256];
  63.    int res, i;
  64.  
  65.    va_start (argptr, fmt);
  66.    res = vsprintf (buf, fmt, argptr);
  67.    for (i = 0; i < res; i++)
  68.       v24_send (siop, buf [i], 0L);
  69.    va_end (argptr);
  70. }
  71.  
  72.  
  73. /*
  74.    Task1 does something in the backgound.
  75. */
  76.  
  77. void far task1 (void)
  78. {
  79.   int retval;
  80.  
  81.    while (1) 
  82.       {
  83.       t_delay (36L);  /* 2 seconds = 36 */
  84.       if (fname [0]) 
  85.          {
  86.          if ((ofile = open (fname, O_RDONLY)) == -1) 
  87.             {
  88.             comprintf ("*** Open file ERROR %d ***\n\n", errno);
  89.             sound (800);
  90.             t_delay (2L);
  91.             nosound ();
  92.             }
  93.          else 
  94.             {
  95.             comprintf ("Open file OK\n");
  96.             while ((retval = read (ofile, fbuf, 512)) > 0) 
  97.                {
  98.                 t_delay (2L);
  99.                comprintf ("Read block OK\n");
  100.                }
  101.             if (retval == -1)
  102.                {
  103.                comprintf ("*** Read block ERROR %d ***\n", errno);
  104.                 sound (200);
  105.                t_delay (8L);
  106.                nosound ();
  107.                }
  108.             else 
  109.                {
  110.                comprintf ("Read File Complete\n\n");
  111.                sound (4000);
  112.                t_delay (1L);
  113.                nosound ();
  114.                }
  115.             close (ofile);
  116.             }
  117.          }
  118.       else 
  119.          {
  120.          sound (200);
  121.          t_delay (1L);
  122.          nosound ();
  123.          }
  124.       }
  125. }
  126.  
  127.  
  128. int main (int argc, char *argv [])
  129. {
  130.    char stack1 [STACKSIZE];
  131.    int port, i;
  132.    
  133.    if (argc >= 2) 
  134.       strcpy (fname, argv [1]);
  135.    else 
  136.       fname[0] = '\0';
  137.  
  138.    port = PORT;
  139.    if (argc > 2)
  140.       {
  141.       port = 0;
  142.       i = 0;
  143.       if (argv [2][0] == '-')
  144.          {
  145.          port = 0x80;
  146.          i = 1;
  147.          }
  148.       if (argv [2][i] >= '1' && argv [2][i] <= '3')
  149.          port |= argv [2][i] - '1';
  150.       }
  151.  
  152.    install_tasker (0, 0, IFL_STD, "Tsio");
  153.    siop = v24_install (port, 1, rcvbuf, sizeof (rcvbuf), 
  154.                        xmtbuf, sizeof (xmtbuf));
  155.  
  156.    if (siop == NULL)
  157.       {
  158.       remove_tasker ();
  159.       return 1;
  160.       }
  161.  
  162.    v24_change_baud (siop, BAUD);
  163.    v24_protocol (siop, XONXOFF, 40, 60);
  164.  
  165.    create_task (&tcb1, task1, stack1, STACKSIZE, PRI_STD, NULL
  166. #if (TSK_NAMEPAR)
  167.                 ,"SIO-TASK"
  168. #endif
  169.                 );
  170.  
  171.    start_task (&tcb1);
  172.    set_priority (NULL, PRI_STD);
  173.    preempt_on ();
  174.    schedule ();
  175.    exit_resident ();
  176. }
  177.  
  178.  
  179.