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

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

?? tgi.c

?? 《Web編程專家指南》
?? C
字號(hào):
/*
 *  Task  Gateway  Interface
 *  A. Montefusco
 *  June 10, 1995
 *
 *
 */

#define  INCL_DOSSEMAPHORES
#define  INCL_DOSERRORS
#define  INCL_DOSPROCESS
#define  INCL_DOSMEMMGR
#include <os2.h>
#include <string.h>
#include <stdio.h>
#include "debug.h"
#include "tgi.h"
#include "tgiglob.h"


/*
 *  Non-shared DLL variables
 *  For each task there is an istance of this data segment
 */

HMTX   hLocMutex = NULLHANDLE;

HTGI   LocTab [MAX_MOD];



long  _RegisterInstance (HTGI  hTgi, PROC_INSTANCE  *pInstData)
{
   long   rc = TGI_OK;
   TGI_MODULE  *pMod = (TGI_MODULE *) hTgi;

   if ((pMod == NULL) || (pInstData == NULL))
      return TGI_BAD_PARAM;
   else {
      PROC_INSTANCE *p;

      _LockData ();

      pInstData->pNext = pMod->pNextInstance;
      pMod->pNextInstance = pInstData;

      if (DosCreateEventSem (0, &(pInstData->hInstAva), DC_SEM_SHARED, TRUE))
         rc = TGI_SEM_CREATE;

      _UnLockData ();
      return rc;
   }
}

long  _UnRegisterInstance (HTGI  hTgi, PROC_INSTANCE  *pInstData)
{
   long   rc = TGI_OK;
   TGI_MODULE  *pMod = (TGI_MODULE *) hTgi;

   if ((pMod == NULL) || (pInstData == NULL))
      return TGI_BAD_PARAM;
   else {
      PROC_INSTANCE *p;

      _LockData ();

      if (pMod->pNextInstance == NULL) {
         rc = TGI_BAD_INSTANCE;
      } else {
         PROC_INSTANCE *pCur  = pMod->pNextInstance;

         if (pCur == pInstData) {
            pMod->pNextInstance = pMod->pNextInstance->pNext;
         } else {

            for (; (pCur != NULL) && (pCur->pNext != pInstData); pCur = pCur->pNext) ;

            if (pCur == NULL)
               rc = TGI_BAD_INSTANCE;
            else {
               pCur->pNext = pInstData->pNext;
               DosCloseEventSem (pInstData->hInstAva);
            }

         } /* endif */
      } /* endif */

      _UnLockData ();
      return rc;
   }
}


long  _DoAction (HTGI  hTgi, PROC_INSTANCE  *pInstData)
{
   long         rc = TGI_OK;
   TGI_MODULE  *pMod = (TGI_MODULE *) hTgi;

   if ((pMod == NULL) || (pInstData == NULL))
      return TGI_BAD_PARAM;
   else {
      int   mrc;
      HEV   hSrv = pInstData->hInstEnded;

      rc = (pMod->pFn) ((HREQUEST)(pInstData->pTgiData), pInstData->pCbData);

      mrc = MbxSendMsg (pInstData->pTgiData->hMbx, 0, 0);
      TRACE(fprintf (stderr, "MbxSendMsg: %d\n", mrc););
      mrc = MbxClose (pInstData->pTgiData->hMbx);
      TRACE(fprintf (stderr, "MbxClose: %d\n", mrc););

      // unlock server task
      if (!DosOpenEventSem (NULL, &hSrv)) {

         DosPostEventSem (hSrv);
         DosCloseEventSem (hSrv);
      }

      return rc;
   }
}


long  _LockOnRequest (HTGI  hTgi, PROC_INSTANCE  *pInstData)
{
   ULONG  ulPostCount;
   APIRET src;
   long   rc;

   /*
    *  set semaphore to red to wait for a request
    */
   DosResetEventSem (pInstData->hInstAva, &ulPostCount);

   src = DosWaitEventSem (pInstData->hInstAva, SEM_INDEFINITE_WAIT);

   switch (src) {
   case NO_ERROR:
      rc = TGI_UNLOCK_OK;
      break;
   case ERROR_INTERRUPT:
      rc = TGI_EXIT;
      break;
   default:
      rc = TGI_UNLOCK_ERROR;
     break;
   } /* endswitch */

   if ((rc == TGI_UNLOCK_OK) && (_TgiRunning () != TGI_OK))
      rc = TGI_NOT_RUN;

   /*
    *  make the tgi data shared memory object visible in current context
    */
   if (rc == TGI_UNLOCK_OK) {

      APIRET  krc = DosGetSharedMem (pInstData->pTgiData, PAG_READ | PAG_WRITE);

      TRACE(fprintf (stderr, "DosGetSharedMem: %d\n", krc););

      if (krc) {
         rc = TGI_NO_MEM;
      } else {
         /* 
          *  open the callback mailbox
          */
         int  mrc = MbxOpen (pInstData->szMbxName, NULL, 
                             &(pInstData->pTgiData->hMbx));

         TRACE(fprintf (stderr, "MbxOpen: %d on [%s]\n", mrc, pInstData->szMbxName););

         if (mrc != MLBX_OK) rc = TGI_MLBX_OPEN;
      }
   }

   return rc;
}


static VOID APIENTRY DeregAllModInThisTask (void)
{
   int   i;

   TRACE(fprintf (stderr, "DeregAllModInThisTask\n"));

   for (i=0; i < sizeof(LocTab)/sizeof(LocTab[0]); ++i)
      if (LocTab[i] != 0)
         TgiDeregisterModule ( LocTab[i] );
}



/*
 *  TGI API functions
 *
 */

long   TgiRegisterModule ( char       *name,
                           PFNACTION   pFn,
                           HTGI       *pHTgi,
                           long        timeout
                         )
{
   long        rc, left;
   TGI_MODULE  *pMod;

   for (rc = TGI_NOT_RUN, left = timeout;
        (rc == TGI_NOT_RUN);
        left -= timeout / 10 + 1) {

      rc = _LockData ();
      if (rc == TGI_OK) break;

      if ( ((rc != TGI_OK) && (rc != TGI_NOT_RUN)) || (left <= 0L) ) return rc;

      DosSleep (timeout / 10);

   } 


   /*
    *  search a free slot in shared module table
    */
   if ((pMod = _GetFreeMod ()) != NULL) {

      if (_SearchModule (name, 0) == TGI_MOD_NOT_FOUND) {
         int   i;

         strncpy (pMod->szName, name, MAX_MOD_NAME-1);
         pMod->szName [MAX_MOD_NAME-1] = '\0';

         pMod->pNextInstance = NULL;
         pMod->pFn           = pFn;

         *pHTgi = (HTGI) pMod;

         // insert the module handle also in local table
         for (i=0; i < sizeof(LocTab)/sizeof(LocTab[0]); ++i)
            if (LocTab[i] == 0) {
               LocTab [i] = *pHTgi;
               break;
            }

         // to deregister the module anyway 
         if (i == 0) DosExitList (EXLST_ADD, (PFNEXITLIST)DeregAllModInThisTask);

      } else
         rc = TGI_MOD_ALREADY_REG;

   } else {
      rc = TGI_TOO_MANY_MOD;
   }

   _UnLockData ();
   return rc;
}


long   TgiProcessModule ( HTGI    hTgi,
                          void   *pCbData    )
{
   long   rc = TGI_OK;
   PROC_INSTANCE  * pProcInst;

   if ((rc = _LockData ()) != TGI_OK) return rc;

   pProcInst = _GetFreeInst ();
   pProcInst->pCbData = pCbData;

   rc = _RegisterInstance (hTgi, pProcInst);

   _UnLockData ();

   while (rc == TGI_OK) {
      int  rcLock;


      rcLock = _LockOnRequest (hTgi, pProcInst);

      if (rcLock == TGI_UNLOCK_OK) {
         _DoAction (hTgi, pProcInst);
      } else {
         rc = rcLock;
      }

   }

   if ((rc = _LockData ()) != TGI_OK) return rc;

   _UnRegisterInstance (hTgi, pProcInst);

   _DeleteInst (pProcInst);

   _UnLockData ();
   return rc;
}


long   TgiDeregisterModule ( HTGI    hTgi )
{
   long   rc = TGI_OK;
   TGI_MODULE  *pMod = (TGI_MODULE *) hTgi;

   if (pMod == NULL) return TGI_BAD_PARAM;


   if ((rc = _LockData ()) != TGI_OK) return rc;

   rc = _DeleteMod (pMod);

   _UnLockData ();
   return rc;
}



long   TgiGetPathInfo  ( HREQUEST hReq, char **pszPi )
{
   long      rc  = TGI_OK;
   TGI_DATA *pTd = (TGI_DATA *)hReq;

   *pszPi = pTd->pszPathInfo;

   return rc;
}


long   TgiGetQueryInfo ( HREQUEST hReq, char **pszQi )
{
   long   rc = TGI_OK;
   TGI_DATA *pTd = (TGI_DATA *)hReq;

   *pszQi = pTd->pszQueryInfo;

   return rc;
}


long   TgiGetFormData  ( HREQUEST hReq, char **pszFd )
{
   long   rc = TGI_OK;
   TGI_DATA *pTd = (TGI_DATA *)hReq;

   *pszFd = pTd->pszFormData;

   return rc;
}


long   TgiSetRedirFile ( HREQUEST hReq, char *pszRf  )
{
   long   rc = TGI_OK;
   TGI_DATA *pTd = (TGI_DATA *)hReq;

   return rc;
}


long   TgiPutHtml ( HREQUEST hReq, char *buf, long len )
{
   long   rc     = TGI_OK;
   TGI_DATA *pTd = (TGI_DATA *)hReq;

   if (MbxSendMsg (pTd->hMbx, buf, len) != MLBX_OK) rc = TGI_MLBX_SEND;

   return rc;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品1区2区3区| 国产在线精品免费| 666欧美在线视频| 成人性生交大片免费看中文网站| 五月天视频一区| 成人免费在线视频| 欧美精品一区二区三| 欧美乱妇15p| 91蝌蚪porny九色| 国产剧情av麻豆香蕉精品| 日韩电影在线免费看| 亚洲男人的天堂一区二区| 国产日韩欧美综合在线| 欧美一区二区久久久| 欧美三级电影在线观看| 99精品国产一区二区三区不卡| 国产伦精品一区二区三区在线观看| 亚洲一区二区免费视频| 亚洲欧美色图小说| 国产精品区一区二区三| 久久久99免费| 日韩亚洲欧美高清| 欧美猛男超大videosgay| 91黄色小视频| 色综合天天做天天爱| 成人晚上爱看视频| 国产精品69毛片高清亚洲| 韩国欧美国产1区| 美国三级日本三级久久99| 日韩一区精品视频| 亚洲成人高清在线| 亚洲电影欧美电影有声小说| 日韩伦理免费电影| 日韩美女视频一区| 亚洲人成在线播放网站岛国| 国产精品电影一区二区| 国产精品无圣光一区二区| 国产三级精品在线| 中文字幕国产一区| 国产精品国产馆在线真实露脸| 国产女人18水真多18精品一级做| 久久久久高清精品| 日本一区二区免费在线| 中文一区在线播放| 中文字幕一区二| 国产精品每日更新| 亚洲人成亚洲人成在线观看图片| 国产精品久久久久久久久久久免费看| 国产欧美精品一区二区色综合朱莉 | 91免费观看视频在线| 91麻豆精东视频| 欧美影视一区二区三区| 欧美视频在线播放| 制服丝袜中文字幕一区| 欧美videossexotv100| 久久蜜桃一区二区| 中文在线一区二区| 亚洲视频综合在线| 久久综合狠狠综合久久激情| 国产欧美日韩在线看| 亚洲蜜臀av乱码久久精品| 午夜一区二区三区视频| 久久99久久99小草精品免视看| 国产xxx精品视频大全| 99精品久久免费看蜜臀剧情介绍| 欧美色图在线观看| 日韩一级在线观看| 亚洲国产成人在线| 亚洲一区二区三区四区的| 日本不卡视频在线观看| 国产99精品在线观看| 色999日韩国产欧美一区二区| 欧美理论片在线| 欧美日韩在线观看一区二区 | 精品国产乱码久久| 久久久精品综合| 亚洲乱码国产乱码精品精的特点| 日韩国产欧美在线播放| 国产精品一级片| 日本韩国精品一区二区在线观看| 91麻豆精品国产91久久久久久 | 国产精品乱码人人做人人爱| 一区二区三区资源| 极品少妇一区二区| 色婷婷香蕉在线一区二区| 日韩一区二区免费在线观看| 欧美韩日一区二区三区四区| 亚洲一区二区三区精品在线| 精品一区二区免费| 欧美最猛性xxxxx直播| 精品国产乱码久久久久久久久| 亚洲欧美一区二区不卡| 韩国女主播一区| 欧美日韩一级二级三级| 国产精品初高中害羞小美女文| 日韩电影在线免费看| 色综合网色综合| 久久久久久亚洲综合影院红桃| 亚洲小少妇裸体bbw| 国产69精品久久99不卡| 日韩欧美国产系列| 亚洲一区二区三区四区五区黄| 国产高清精品久久久久| 正在播放一区二区| 一区二区三区日本| 成人福利视频网站| 久久久五月婷婷| 日本欧美在线观看| 欧美在线999| 136国产福利精品导航| 狠狠色丁香九九婷婷综合五月| 欧美日韩国产一二三| 亚洲欧美日韩在线| 成人黄色av网站在线| 欧美va日韩va| 日韩电影在线一区| 欧美片网站yy| 亚洲国产精品久久人人爱 | 国产一区二区影院| 91精品蜜臀在线一区尤物| 亚洲精品国产无天堂网2021| 成人免费看黄yyy456| 国产午夜精品美女毛片视频| 六月丁香综合在线视频| 欧美一卡二卡三卡| 视频一区视频二区在线观看| 在线观看网站黄不卡| 亚洲精品五月天| 91高清视频在线| 一区二区三区在线播| 日本韩国欧美一区| 亚洲永久免费视频| 精品视频一区三区九区| 亚洲成a人片在线观看中文| 欧美三区在线观看| 亚洲午夜一区二区| 欧美群妇大交群中文字幕| 午夜精品福利一区二区蜜股av| 欧美日韩午夜精品| 男人操女人的视频在线观看欧美| 欧美猛男男办公室激情| 日本vs亚洲vs韩国一区三区二区 | 成人精品小蝌蚪| 国产精品久久久久影视| 91影院在线观看| 一区二区三区在线免费播放| 欧美日韩在线播放一区| 丝袜美腿亚洲色图| 精品久久久久久久久久久久久久久| 精品一区二区三区影院在线午夜 | 不卡一区二区三区四区| 综合久久久久综合| 国产91精品精华液一区二区三区| 国产精品国产三级国产有无不卡| 欧美日韩三级一区二区| 欧美主播一区二区三区| 亚洲国产精品久久艾草纯爱| 欧美三日本三级三级在线播放| 日韩国产精品久久久久久亚洲| 91精品国产综合久久精品app| 日本不卡一区二区三区| 久久精品欧美日韩| 色综合天天性综合| 日韩在线a电影| 国产日韩影视精品| 在线免费观看不卡av| 久久激五月天综合精品| 日本一区二区三区国色天香 | 久久综合九色综合欧美亚洲| 国产成人精品亚洲777人妖| 亚洲免费观看高清完整版在线 | 亚洲欧洲精品天堂一级 | 色哟哟精品一区| 午夜激情久久久| 国产婷婷一区二区| 91成人免费网站| 毛片基地黄久久久久久天堂| 日本一区二区三区国色天香| 欧美性感一区二区三区| 国产在线精品免费av| 亚洲黄色片在线观看| 欧美成人精品福利| 91国产丝袜在线播放| 狠狠色丁香婷婷综合| 夜夜精品视频一区二区| www激情久久| 在线视频一区二区三| 国产福利不卡视频| 五月天婷婷综合| 成人欧美一区二区三区白人| 欧美v亚洲v综合ⅴ国产v| 91久久精品国产91性色tv| 国产精品伊人色| 调教+趴+乳夹+国产+精品| 中文在线一区二区| 欧美成人一区二区三区片免费| 色综合久久九月婷婷色综合| 国产精品影视天天线| 婷婷开心久久网| 亚洲黄一区二区三区|