⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 res.c

📁 一个多任务操作系统CTask的源代码 用C语言编写
💻 C
字号:

/*
   Test program for checking CTask DOS TSR compatibility.

   This program goes TSR, and then repeatedly reads a file, and
   outputs status messages to the serial port.

   The program is called with res [filename] [port]
   where [port] is  "-"    output to COM1 (relative)
                    "-1"   output to COM1 (relative)
                    "-2"   output to COM2 (relative)
                    "1"    output to COM1 (absolute)
   If no filename is given, nothing is done in the background.
   If no port is given, COM1 (absolute) is used.
*/

#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <fcntl.h>
#include <dos.h>
#include <errno.h>

#include "tsk.h"
#include "tskprf.h"

#define PORT   1
#define BAUD   1152

#define STACKSIZE 2048

unsigned int _stklen = 2 * STACKSIZE;  /* For Turbo C: One task + main task Stack */

tcb tcb1;

byte fbuf[512];
char fname[128];

int ofile;

#if (TSK_TURBO)
#define stayres(len)    keep (0, (len))
#else
#define stayres(len)    _dos_keep (0, (len))
#define sound(x)
#define nosound()
#endif

struct mem_control {
                   byte id;
                   word owner;
                   word paragraphs;
                   };

void exit_resident (void)
{
   struct mem_control far *mem;

   mem = MK_FP (_psp - 1, 0);
   stayres (mem->paragraphs);
}


/*
   Task1 does something in the backgound.
*/

void far task1 (void)
{
  int retval;
  unsigned nr;

   while (1) 
      {
      t_delay (36L);  /* 2 seconds = 36 */
      if (fname [0]) 
         {
         if (_dos_open (fname, O_RDONLY, &ofile)) 
            {
            tsk_cprintf ("\n*OF ERR %d*\007\n", errno);
            sound (800);
            t_delay (2L);
            nosound ();
            }
         else 
            {
            tsk_cprintf ("O");
            while (!(retval = _dos_read (ofile, fbuf, 512, &nr)))
               {
               if (!nr)
                  break;
	            t_delay (2L);
               tsk_cprintf ("r");
               }
            if (retval)
               {
               tsk_cprintf ("\n*Rd ERR %d*\007\n", errno);
	            sound (200);
               t_delay (8L);
               nosound ();
               }
            else 
               {
               tsk_cprintf ("C");
               sound (4000);
               t_delay (1L);
               nosound ();
               }
            _dos_close (ofile);
            }
         }
      else 
         {
         sound (200);
         t_delay (1L);
         nosound ();
         }
      }
}


int main (int argc, char *argv [])
{
   char stack1 [STACKSIZE];
   int port, i;
   
   if (argc >= 2) 
      strcpy (fname, argv [1]);
   else 
      fname[0] = '\0';

   port = PORT;
   if (argc > 2)
      {
      port = 1;
      i = 0;
      if (argv [2][0] == '-')
         i = 1;
      if (argv [2][i] >= '1' && argv [2][i] <= '4')
         port = argv [2][i] - '0';
      }

   install_tasker (0, 0, IFL_STD, "Tres");
   tsk_cprint_init (port, BAUD);

   create_task (&tcb1, task1, stack1, STACKSIZE, PRI_STD, NULL TN("SIO-TASK"));

   start_task (&tcb1);
   set_priority (NULL, PRI_STD);
   preempt_on ();
   yield ();
   exit_resident ();
   return 0; /* dummy */
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -