亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? display.c

?? program to simulate tank levels
?? C
字號:
/****************************************************************

                          D I S P L A Y . C


This module deals with the Tank Monitor Display.


Copyright 1999 by Addison Wesley Longman, Inc.

All rights reserved.  No part of this document or the 
computer-coded information from which it is derived may be 
reproduced, stored in a retrieval system, or transmitted, in 
any form or by any means -- electronic, mechanical, 
photocopying, recording or otherwise -- without the prior 
written permission of Addison Wesley Longman, Inc.


                     C H A N G E   R E C O R D

  Date        Who            Description
--------  ------------  -----------------------------------------
05/08/99  DES           Module released
****************************************************************/

/* System Include Files */
#include "os_cfg.h"
#include "ix86s.h"
#include "ucos.h"
#include "probstyl.h"
#include <stdio.h>

/* Program Include Files */
#include "publics.h"

/* Local Defines */
#define MSG_UPDATE            0x0001
#define MSG_DISP_RESET_ALARM  0x0002
#define MSG_DISP_NO_PROMPT    0x0003
#define MSG_DISP_OFLOW        0x0040
#define MSG_DISP_LEAK         0x0080
#define MSG_USER_REQUEST      0x8000
#define MSG_DISP_TIME         (MSG_USER_REQUEST | 0x0001)
#define MSG_DISP_TANK         (MSG_USER_REQUEST | 0x0400)
#define MSG_DISP_PROMPT       (MSG_USER_REQUEST | 0x0800)

/* Static Functions */
static far void vDisplayTask (void *p_vData);

/* Static Data */
   /* The stack and input queue for the display task */
      #define STK_SIZE 1024
      static UWORD DisplayTaskStk[STK_SIZE];

      #define Q_SIZE 10
      static OS_EVENT *QDisplayTask;
      static void *a_pvQDisplayData[Q_SIZE];


/*****   vDisplaySystemInit   ***********************************

This routine initializes the display system.

RETURNS: None.

*/

void vDisplaySystemInit(

/*
INPUTS:  */
   void)
{

/*
LOCAL VARIABLES:  */

/*-------------------------------------------------------------*/

   QDisplayTask = OSQCreate (&a_pvQDisplayData[0], Q_SIZE);

   OSTaskCreate (vDisplayTask,  NULLP, 
      (void *)&DisplayTaskStk[STK_SIZE], TASK_PRIORITY_DISPLAY);
}

/*****   vDisplayTask   *****************************************

This routine is the task that handles the display

RETURNS: None.

*/

static far void vDisplayTask(

/*
INPUTS:  */
   void *p_vData)       /* Unused pointer to data */
{

/*
LOCAL VARIABLES:  */
   BYTE byErr;          /* Error code back from the OS */
   WORD wMsg;           /* Message received from the queue */
   int a_iTime[4];      /* Time of day */
   char a_chDisp[21];   /* Place to construct display string. */
   WORD wUserRequest;   /* Code indicating what user requested 
                           to display. */
   int iLevel;          /* Tank level to display. */
   int iTankLeaking;    /* Tank that is leaking. */
   int iTankOverflow;      /* Tank that is overflowing. */
   int iPrompt;         /* Command prompt we are displaying. */

/*-------------------------------------------------------------*/

   /* Keep the compiler warnings away. */
   p_vData = p_vData;

   /* Initialize the display */
   vTimeGet (a_iTime);
   sprintf (a_chDisp, "     %02d:%02d:%02d", 
      a_iTime[0], a_iTime[1], a_iTime[2]);
   vHardwareDisplayLine (a_chDisp);
   wUserRequest = MSG_DISP_TIME;

   /* Note that we don't know of anything that is leaking, 
      overflowing, etc. yet. */
   iTankLeaking = NO_TANK;
   iTankOverflow = NO_TANK;
   iPrompt = -1;

   while (TRUE)
   {
      /* Wait for a queue. */
      wMsg = (int) OSQPend (QDisplayTask, WAIT_FOREVER, &byErr);

      if (wMsg & MSG_USER_REQUEST)
      {
         if (wMsg & ~MSG_USER_REQUEST & MSG_DISP_PROMPT)
            /* Store the prompt we've been asked to display. */
            iPrompt = wMsg - MSG_DISP_PROMPT;

         else
            /* Store what the user asked us to display. */
            wUserRequest = wMsg; 
      }

      else if (wMsg & MSG_DISP_LEAK) 
         /* Store the number of the leaking tank. */
         iTankLeaking = wMsg - MSG_DISP_LEAK;

      else if (wMsg & MSG_DISP_OFLOW)
         /* Store the number of the overflowing tank. */
         iTankOverflow = wMsg - MSG_DISP_OFLOW;
 
      else if (wMsg IS MSG_DISP_RESET_ALARM) 
      {
         iTankLeaking = NO_TANK;
         iTankOverflow = NO_TANK;
         iPrompt = -1;
      }
      else if (wMsg IS MSG_DISP_NO_PROMPT) 
         iPrompt = -1;

      /* ELSE it's an update message. */

      /* Now do the display. */
      if (iTankOverflow IS_NOT NO_TANK)
         /* A tank is leaking.  This takes priority. */
         sprintf (a_chDisp, "Tank %d: OVERFLOW!!",
            iTankOverflow + 1);

      else if (iTankLeaking IS_NOT NO_TANK)
         /* A tank is leaking.  This takes priority. */
         sprintf (a_chDisp, "Tank %d: LEAKING!!", 
            iTankLeaking + 1);

      else if (iPrompt >= 0)
         sprintf (a_chDisp, p_chGetCommandPrompt (iPrompt));

      else if (wUserRequest IS MSG_DISP_TIME)
      {
         /* Display the time. */
         vTimeGet (a_iTime);
         sprintf (a_chDisp, "     %02d:%02d:%02d", 
               a_iTime[0], a_iTime[1], a_iTime[2]);
      }

      else
      {
         /* User must want tank level displayed.  Get a level. */
         if (iTankDataGet (wUserRequest - MSG_DISP_TANK, 
                  &iLevel, NULLP, 1) 
               IS 1)
            /* We have data for this tank; display it. */
            sprintf (a_chDisp, "Tank %d: %d gls.", 
               wUserRequest - MSG_DISP_TANK + 1, iLevel);
         else
            /* A level for this tank is not yet available. */
            sprintf (a_chDisp, "Tank %d: N/A.", 
               wUserRequest - MSG_DISP_TANK + 1);
      }

      vHardwareDisplayLine (a_chDisp);
   }  
}


/*****   vDisplay.....   ****************************************

This routine is called when something happens that may require 
the display to be updated.
*/

void vDisplayUpdate(void)
{
   OSQPost (QDisplayTask, (void *) MSG_UPDATE);
}

/*
This routine is called when the user requests displaying 
   a tank level.
*/

void vDisplayTankLevel(int iTank)
{
   /* Check that the parameter is valid. */
   ASSERT (iTank >= 0 AND iTank < COUNTOF_TANKS);

   OSQPost (QDisplayTask, (void *) (MSG_DISP_TANK + iTank));
}

/*
This routine is called when the user requests displaying 
   the time.
*/

void vDisplayTime(void)
{
   OSQPost (QDisplayTask, (void *) MSG_DISP_TIME);
}

/*
This routine is called when the command processor needs 
   a prompt display.
*/

void vDisplayPrompt(int iPrompt)    /* Index number of prompt. */
{
   /* We can only encode a certain number of prompts. */
   ASSERT (iPrompt < 0x400);

   OSQPost (QDisplayTask, (void *) (MSG_DISP_PROMPT + iPrompt));
}

/*
This routine is called when the command processor doesn't need 
   a prompt display any more.
*/

void vDisplayNoPrompt(void)   
{
   OSQPost (QDisplayTask, (void *) MSG_DISP_NO_PROMPT);
}

/*
This routine is called when a leak is detected.
*/

void vDisplayLeak(int iTank)
{
   /* Check that the parameter is valid. */
   ASSERT (iTank >= 0 AND iTank < COUNTOF_TANKS);

   OSQPost (QDisplayTask, (void *) (MSG_DISP_LEAK + iTank));
}

/*
This routine is called when an overflow is detected.
*/

void vDisplayOverflow(int iTank)
{
   /* Check that the parameter is valid. */
   ASSERT (iTank >= 0 AND iTank < COUNTOF_TANKS);

   OSQPost (QDisplayTask, (void *) (MSG_DISP_OFLOW + iTank));
}

/*
This routine is called when the user resets the alarm.
*/

void vDisplayResetAlarm(void)
{
   OSQPost (QDisplayTask, (void *) MSG_DISP_RESET_ALARM);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女久久久精品| 欧美日韩国产欧美日美国产精品| 另类成人小视频在线| 视频一区中文字幕| 日韩国产精品大片| 首页亚洲欧美制服丝腿| 欧美96一区二区免费视频| 日韩电影在线免费观看| 久久精品国产久精国产| 久久99精品一区二区三区三区| 麻豆国产欧美日韩综合精品二区| 美日韩黄色大片| 国产一区二区三区最好精华液| 国产精品亚洲视频| 91日韩一区二区三区| 日本乱人伦aⅴ精品| 欧美伊人久久大香线蕉综合69 | 国产一区二区美女| 国产91精品欧美| 91麻豆123| 欧美色图在线观看| 日韩欧美在线影院| 久久久精品综合| 中文字幕一区二区三区精华液| 亚洲欧美日韩电影| 日韩综合一区二区| 韩国中文字幕2020精品| 成人一道本在线| 色噜噜狠狠成人中文综合 | 国产精品久久久久永久免费观看 | 视频一区二区三区中文字幕| 日本韩国精品一区二区在线观看| 欧美日韩亚洲国产综合| 日韩欧美一区二区三区在线| 欧美高清在线精品一区| 一区二区在线观看免费视频播放| 天天色综合天天| 国产真实乱偷精品视频免| 成人黄色大片在线观看| 欧洲一区二区av| 精品国产91洋老外米糕| 一区在线中文字幕| 三级久久三级久久久| 国产一区二区影院| 欧美在线影院一区二区| 精品国产免费久久| 亚洲欧美日韩小说| 男男视频亚洲欧美| 色哟哟国产精品| 26uuu国产一区二区三区| 一区精品在线播放| 老色鬼精品视频在线观看播放| 成人午夜激情影院| 91精品免费观看| 国产精品无码永久免费888| 亚欧色一区w666天堂| 国产电影精品久久禁18| 欧美性色黄大片手机版| 精品剧情v国产在线观看在线| 亚洲少妇30p| 国产一区二区不卡老阿姨| 欧洲视频一区二区| 国产午夜精品久久| 奇米影视一区二区三区| 一本一本久久a久久精品综合麻豆| 精品日韩欧美在线| 亚洲国产人成综合网站| 国产成人精品影视| 日韩一级免费一区| 亚洲激情男女视频| 国产精品123区| 欧美一区二区三区小说| 一区二区三区免费看视频| 国产成人8x视频一区二区| 欧美一区二区三区免费在线看| 亚洲日本韩国一区| 成人免费毛片a| 精品国产91洋老外米糕| 奇米在线7777在线精品| 欧美日韩在线直播| 综合婷婷亚洲小说| 成人免费毛片片v| 国产肉丝袜一区二区| 久久精品99国产精品| 欧美日韩一二区| 亚洲精品免费视频| av在线不卡免费看| 中文一区一区三区高中清不卡| 久久成人久久爱| 日韩一二三区不卡| 亚洲一本大道在线| 91福利视频网站| 国产精品国产三级国产aⅴ中文 | 色婷婷亚洲综合| 国产日韩欧美精品一区| 国产在线播放一区三区四| 欧美一区二区视频免费观看| 爽爽淫人综合网网站| 欧美精品欧美精品系列| 亚洲一区二区3| 在线看国产一区| 亚洲一区二区三区美女| 日本精品一区二区三区四区的功能| 中文字幕在线观看一区二区| 成人综合激情网| 天堂精品中文字幕在线| 欧美中文字幕一区二区三区| 亚洲精品菠萝久久久久久久| 色综合夜色一区| 一区二区在线观看不卡| 在线一区二区观看| 亚洲综合区在线| 欧美美女一区二区三区| 日本中文一区二区三区| 日韩一级片在线观看| 国内一区二区在线| 欧美国产精品中文字幕| zzijzzij亚洲日本少妇熟睡| 日韩毛片视频在线看| 日本韩国欧美一区二区三区| 亚洲成人av一区二区| 91 com成人网| 国产一区二区三区在线观看免费| 国产日韩欧美精品一区| 91影视在线播放| 亚洲成人精品一区二区| 日韩无一区二区| 国产精品系列在线播放| 成人欧美一区二区三区白人| 91成人国产精品| 青椒成人免费视频| 国产免费观看久久| 91成人在线精品| 人人超碰91尤物精品国产| 久久综合久久综合亚洲| av中文字幕在线不卡| 天天色 色综合| 久久久精品国产99久久精品芒果 | 4438x亚洲最大成人网| 国产一区二区三区在线观看免费视频| 国产精品乱码人人做人人爱| 在线观看国产精品网站| 久久99久久99| 亚洲色图一区二区| 日韩一卡二卡三卡四卡| 99久久综合狠狠综合久久| 日韩和的一区二区| 中文字幕第一区二区| 欧美日精品一区视频| 国产麻豆视频一区| 亚洲影院理伦片| 久久在线观看免费| 欧美性猛片aaaaaaa做受| 激情综合色播五月| 怡红院av一区二区三区| 久久婷婷综合激情| 欧美三级乱人伦电影| 国产精品综合一区二区三区| 亚洲一区二区三区精品在线| 国产婷婷色一区二区三区在线| 欧美视频一区二区三区| 国产91精品欧美| 日本女优在线视频一区二区| 中文字幕一区二区三区乱码在线| 精品va天堂亚洲国产| 91在线观看免费视频| 久久99久久99| 亚洲午夜精品网| 国产精品麻豆一区二区| 欧美成人国产一区二区| 欧美性大战久久久| 福利一区二区在线| 美女视频一区在线观看| 亚洲另类一区二区| 欧美精彩视频一区二区三区| 欧美一区二区三区免费观看视频| 色偷偷久久一区二区三区| 国产精品综合一区二区| 奇米精品一区二区三区四区| 亚洲免费电影在线| 中文字幕欧美国产| 日韩三级在线观看| 欧美日韩成人一区二区| 97久久超碰精品国产| 丁香一区二区三区| 狠狠色伊人亚洲综合成人| 首页综合国产亚洲丝袜| 亚洲午夜精品一区二区三区他趣| **欧美大码日韩| 国产日韩欧美在线一区| 日韩视频一区二区| 51精品秘密在线观看| 欧美日韩精品免费观看视频| 色悠悠亚洲一区二区| 99精品久久久久久| 99久久久久免费精品国产| 福利一区二区在线观看| 高清国产一区二区三区| 国产91精品欧美| 不卡高清视频专区|