如何利用C语言设计一个表示时钟的驻留程序. 有劳各方豪杰!

到百度贴吧首页
新闻   网页   贴吧   知道   MP3   图片   视频   百科
    吧内搜索 | 帮助

转贴次数:1

如何利用C语言设计一个表示时钟的驻留程序. 有劳各方豪杰!

1楼


222.40.81.*

2楼

运行于DOS还是Windows?

3楼

Windows 的哪用驻留?

至于 Dos 下的 TSR,等我翻个旧东西出来吧。
要用 Turbo/Borland C++ 编译,不好意思,什么版本我忘了,以前可以用的。
现在 Windows 下的 Dos,不知道可不可以用了。 
我以前把这个写成通用的类库,你看看怎么驻留程序和替换 Dos 的时钟中断,再改就好了。

分三部分:
tsrdrive.h - 头文件
tsrdrive.cpp - 编译成 .lib
boss.cpp - 一个示范程序,驻留后按热键可清屏,然后显示一个 C:\,上班玩游戏,骗老板用的。

Dos 早就过时,现在的多任务操作系统不需要这些,不要太钻牛角尖了。

4楼

// TSRDrive.h
/***************************************************************************
 *   Copyright (C) 1996 by akuma@tds                                       *
 *                                                                         *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *

5楼

 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
// **************************************************************************
// * Program Name : common TSR program driver
// *     Filename : TSRdrive.H
// *     Category : driver
// *   Programmer : akuma@tds
// *      Version : 1.00
// *   File Index : none
// *         Date : July 25th 96'
// *     Comments : for Borland C/C++ compiler
// *
// * Copyright (C) akuma@tds.
// * All rights reserved.
// **************************************************************************
#if ! defined (hrTSRdriver)
# define hrTSRdriver

#include <Dos.h>
#include <Mem.h>

# define Multiplex_ID  0xC0
# define InstallCheck  0x00
# define Installed     0xFF
# define Deinstall     0x01
# define EnablePopup   0x02
# define DisablePopup  0x03

6楼

# define GetHotkey     0x04
# define ChangeHotkey  0x05

# define PSP_terminate 0x0A
# define PSP_parent    0x16
# define PSP_ENV_addr  0x2C
# define maxSDAList      20
# define TSRStacksize  8192

# define PARAGRAPHS(x) ((FP_OFF(x) + 15) >> 4)

#if ! defined (tyInterruptPtr)
# define tyInterruptPtr 0x0100

typedef void interrupt (* InterruptPtr)() ;

#endif // define InterruptPtr


#if ! defined (stHotkey)
# define stHotkey 0x0100

struct Hotkey
{

// ***************
// * constructor *
// ***************
public:
  Hotkey(unsigned int sc, unsigned int km = 0x00) ;

// ****************
// * Data members *
// ****************
public:
  unsigned int keymask;
  unsigned int scancode;

} ;

// Hotkey constructor implementation
inline Hotkey::Hotkey(unsigned int sc, unsigned int km)
{
  keymask = km;
  scancode = sc;
}

#endif // define Hotkey


#if ! defined (stSDAList)
# define stSDAList 0x0100

struct SDAList
{
  void far * SDAPtr ;
  unsigned int size ;
} ;

#endif // define SDAList


#if ! defined (clTSRdriver)
# define clTSRdriver 0x0100

class TSRdriver
{

// ***************
// * constructor *
// ***************
public:
  TSRdriver(Hotkey * TheKey, void (* Work)(void),
            unsigned char MultiplexID ) ;

// ********************
// * Member Functions *
// ********************
public:
  int init() ;

  int  exist() ;
  void Disable() ;
  void Enable() ;
  int  uninstall() ;
  void getHotkey(Hotkey& Thekey) ;
  void changeHotkey(Hotkey& Thekey) ;
  void resident(int Exitcode = 0x00) ;

protected:
// TSR driver's ISR
  static void interrupt far NewInt08 (...) ;
  static void interrupt far NewInt09 (...) ;
  static void interrupt far NewInt13 (...) ;
  static void interrupt far NewInt1B (...) ;

7楼

  static void interrupt far NewInt23 (...) ;
  static void interrupt far NewInt24 (...) ;
  static void interrupt far NewInt28 (...) ;
  static void interrupt far NewInt2A (...) ;
  static void interrupt far NewInt2F (...) ;

private:
  static void popupTSR(void) ;

  static int  initSDA(void) ;
  static int  saveSDA(void) ;
  static void restoreSDA(void) ;
  static void setStack(void) ;
  static void restoreStack(void) ;
  static void setpsp(unsigned aPSP) ;
  static unsigned int eraseTSR(void) ;


// ****************
// * Data members *
// ****************
public:
// popup sign
  static unsigned char popupenable ;
  static unsigned char residentsize ;

protected:
// original ISR address
  static void interrupt far ( * OldInt08 )(...) ;
  static void interrupt far ( * OldInt09 )(...) ;
  static void interrupt far ( * OldInt13 )(...) ;
  static void interrupt far ( * OldInt1B )(...) ;
  static void interrupt far ( * OldInt23 )(...) ;
  static void interrupt far ( * OldInt24 )(...) ;
  static void interrupt far ( * OldInt28 )(...) ;
  static void interrupt far ( * OldInt2A )(...) ;
  static void interrupt far ( * OldInt2F )(...) ;

  static void ( * TSRwork )(void) ;

// signs
  static unsigned char multiplex_id;
  static unsigned char TSR_Error;

  static unsigned int far * Dosworking;
  static unsigned char Int13working;
  static unsigned char Int2Aworking;
  static unsigned char Hotkeypressed;
  static unsigned char TSRworking;
  static Hotkey * TSRHotkey;
  static int workvar;

private:
  static unsigned int DosLevel ;
  static unsigned int savedSS ;
  static unsigned int savedSP ;
  static unsigned int savedDS ;

8楼

  static unsigned long TerminateAddr ;
  static unsigned char far * StackPtr ;

// vars. for Dos 3.x
  static char far * SDAPtr ;
  static char far * savedSDAPtr ;
  static int v3SDAsizeInDos ;
  static int v3SDAsizeAlways ;
  static int v3size ;

// vars. for Dos 4.x +
  static int SDAnumber ;
  static SDAList SDAs [maxSDAList] ;
  static char far * savedSDAPtrs [maxSDAList] ;
  static int SDAflags [maxSDAList] ;

} ;

inline int
TSRdriver::exist()
{
  _AH = multiplex_id ;
  _AL = InstallCheck ;

  geninterrupt(0x2F) ;

  return ( _AL == Installed ) ;
}

inline void
TSRdriver::Disable()
{
  _AH = multiplex_id ;
  _AL = DisablePopup ;

  geninterrupt(0x2F) ;
}

inline void
TSRdriver::Enable()
{
  _AH = multiplex_id ;
  _AL = EnablePopup ;

  geninterrupt(0x2F) ;
}

inline void
TSRdriver::changeHotkey(Hotkey& Thekey)
{
  _AH = multiplex_id ;
  _AL = ChangeHotkey ;
  _BX = Thekey.keymask ;
  _DX = Thekey.scancode ;

  geninterrupt(0x2F) ;
}

inline void
TSRdriver::getHotkey(Hotkey& Thekey)
{
  _AH = multiplex_id ;
  _AL = GetHotkey ;

  geninterrupt(0x2F) ;

  Thekey.keymask = _BX ;
  Thekey.scancode = _DX ;
}
# define getDosSDAv3 0x5D06
# define getDosSDAv4 0x5D0B

#endif // define TSRdriver


#endif // header end.

9楼

// TSRDrive.cpp
/***************************************************************************
 *   Copyright (C) 1996 by akuma@tds                                       *
 *                                                                         *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *

10楼

 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

void interrupt far ( * TSRdriver::OldInt08 )(...) = NULL;
void interrupt far ( * TSRdriver::OldInt09 )(...) = NULL ;
void interrupt far ( * TSRdriver::OldInt13 )(...) = NULL ;
void interrupt far ( * TSRdriver::OldInt1B )(...) = NULL ;
void interrupt far ( * TSRdriver::OldInt23 )(...) = NULL ;
void interrupt far ( * TSRdriver::OldInt24 )(...) = NULL ;
void interrupt far ( * TSRdriver::OldInt28 )(...) = NULL ;
void interrupt far ( * TSRdriver::OldInt2A )(...) = NULL ;
void interrupt far ( * TSRdriver::OldInt2F )(...) = NULL ;

void ( * TSRdriver::TSRwork )(void) = NULL ;

unsigned char TSRdriver::multiplex_id = Multiplex_ID;

unsigned char TSRdriver::TSR_Error = NULL;

unsigned char TSRdriver::popupenable = NULL;
unsigned char TSRdriver::residentsize  = NULL;

unsigned int far * TSRdriver::Dosworking = NULL;

11楼

unsigned char TSRdriver::Int13working = NULL;
unsigned char TSRdriver::Int2Aworking = NULL;
unsigned char TSRdriver::Hotkeypressed = NULL;
unsigned char TSRdriver::TSRworking = NULL;
Hotkey * TSRdriver::TSRHotkey = NULL;
int TSRdriver::workvar = NULL;

unsigned int TSRdriver::DosLevel = NULL;

unsigned int TSRdriver::savedSS = NULL;
unsigned int TSRdriver::savedSP = NULL;
unsigned int TSRdriver::savedDS = NULL;
unsigned long TSRdriver::TerminateAddr = NULL;
unsigned char far * TSRdriver::StackPtr = NULL;

char far * TSRdriver::SDAPtr = NULL;
char far * TSRdriver::savedSDAPtr = NULL;
int TSRdriver::v3SDAsizeInDos = NULL;
int TSRdriver::v3SDAsizeAlways = NULL;
int TSRdriver::v3size = NULL;

int TSRdriver::SDAnumber = NULL;
SDAList TSRdriver::SDAs [maxSDAList] ;
char far * TSRdriver::savedSDAPtrs [maxSDAList] ;
int TSRdriver::SDAflags [maxSDAList] ;


void interrupt
TSRdriver::NewInt08 (...)
{
  ( * OldInt08 )() ;
  if ( Hotkeypressed && ! Int2Aworking )
    if ( ! Int13working )
      popupTSR() ;
}

void interrupt
TSRdriver::NewInt09 (...)
{
  if ( inportb(0x60) == TSRHotkey->scancode ) {
    workvar = peekb(0x00, 0x417) ;
    if ( popupenable &&
       (( workvar & TSRHotkey->keymask ) ^ TSRHotkey->keymask) == 0 ) {
// reset keyboard
      workvar = inportb(0x61) ;
      outportb(0x61, workvar | 0x80) ;
      outportb(0x61, workvar) ;
      disable() ;
      outportb(0x20, 0x20) ;
      enable() ;

      if ( ! TSRworking )
        Hotkeypressed = 1 ;
      return ;
    }
  }
  ( * OldInt09 )() ;
}

void interrupt
TSRdriver::NewInt13 (...)
{
  Int13working ++ ;
  ( * OldInt13 )() ;
  -- Int13working ;
}

void interrupt
TSRdriver::NewInt1B (...)
{
// do nothing.

12楼

}

void interrupt
TSRdriver::NewInt23 (...)
{
// do nothing.
}

void interrupt
TSRdriver::NewInt24 (...)
{
  if ( _osmajor >= 3 )
    _AX = 3 ;
  else
    _AX = 0 ;
}

void interrupt
TSRdriver::NewInt28 (...)
{
  ( * OldInt28 ) () ;
  if ( Hotkeypressed && ! Int2Aworking )
    popupTSR() ;
}

void interrupt
TSRdriver::NewInt2A (...)
{
  switch ( _AX & 0xFF00 )
  {
    case 0x8000 :
      Int2Aworking ++ ;
      break ;
    case 0x8100 :
    case 0x8200 :
      if (Int2Aworking)
        Int2Aworking -- ;
      break ;
    default :
      break ;
  }
  ( * OldInt2A ) () ;
}

void interrupt
TSRdriver::NewInt2F (...)
{
  if ( _AH == multiplex_id )
    switch ( _AL )
    {
      case InstallCheck :
        _AX |= Installed ;
        break ;
      case Deinstall :
        TerminateAddr = ((long)_BX << 16) + _DX ;
        _AX = eraseTSR() ;
        break ;
      case EnablePopup :
        popupenable = 1 ;
        break ;
      case DisablePopup :
        popupenable = 0 ;
        break ;
      default :
        break ;
    }
  else ( * OldInt2F ) () ;
}

void
TSRdriver::setpsp (unsigned aPSP)
{
  _AH = 0x50 ;
  _BX = aPSP ;
  geninterrupt(0x21) ;
}

int
TSRdriver::uninstall()
{

  _AH = multiplex_id ;
  _AL = Deinstall ;
  savedSS = _SS ;
  savedSP = _SP ;

13楼


  _BX = _CS ;
  _DX = FP_OFF(TerminateAddr) ;

  geninterrupt(0x2F) ;

  return _AX ;
}

void
TSRdriver::popupTSR ()
{
  TSRworking = 1 ;
  setStack() ;

  OldInt1B = getvect(0x1B) ;
  OldInt23 = getvect(0x23) ;
  OldInt24 = getvect(0x24) ;

  setvect(0x1B, NewInt1B) ;
  setvect(0x23, NewInt23) ;
  setvect(0x24, NewInt24) ;

  if ( saveSDA() ) {
    Hotkeypressed = 0 ;

    ( * TSRwork ) () ;

    restoreSDA() ;
  }

  setvect(0x1B, OldInt1B) ;
  setvect(0x23, OldInt23) ;
  setvect(0x24, OldInt24) ;

  restoreStack() ;
  TSRworking = 0 ;
}

void
TSRdriver::setStack(void)
{
  asm pop ax                           ;// get return offset
  asm pop bx                           ;// get return segment
  savedSS = _SS                        ;// save the register SS
  savedSP = _SP                        ;// save the register SP
  _SS = FP_SEG(StackPtr)               ;// point to TSR's stack
  _SP = FP_OFF(StackPtr)               ;//
  asm push bx                          ;// save return segment
  asm push ax                          ;// save return offset
}

void
TSRdriver::restoreStack(void)
{
  asm pop bx                           ;// get return offset

14楼

  asm pop cx                           ;// get return segment
  FP_SEG(StackPtr) = _SS               ;// save the register SS
  FP_OFF(StackPtr) = _SP               ;// save the register SP
  _SS = savedSS                        ;// restore the register SS
  _SP = savedSP                        ;// restore the register SP
  asm push cx                          ;// set to return
  asm push bx                          ;// set to return
}

int
TSRdriver::initSDA(void)
{

  if ( ( _osmajor == 3 ) && ( _osminor >= 10 ) )
    DosLevel = 3 ;
  else if ( _osmajor >= 4 )
    DosLevel = 4 ;
  else DosLevel = 0 ;

  switch ( DosLevel )
  {
    case 0 :
      return 1 ;

    case 3 :
      _AX = getDosSDAv3 ;
      geninterrupt(0x21) ;
      FP_SEG(SDAPtr) = _DS ;
      FP_OFF(SDAPtr) = _SI ;
      v3SDAsizeInDos = _CX ;
      v3SDAsizeAlways = _DX ;
      v3size = 0 ;
      if ( ( savedSDAPtr = new char(v3SDAsizeInDos) ) == 0 )
        return 3 ;
      else
        return 0 ;

    default :
      SDAList far * SDALPtr ;
      int far * ifPtr ;

15楼


      _AX = getDosSDAv4 ;
      geninterrupt(0x21) ;
      FP_SEG(ifPtr) = _DS ;
      FP_OFF(ifPtr) = _SI ;
      SDAnumber = * ifPtr ;

      ifPtr ++ ;

      SDALPtr = (SDAList far *)ifPtr ;

      if ( SDAnumber > maxSDAList )
        return 2 ;

      for (int i = 0; i < SDAnumber; i++) {
        SDAs[i].SDAPtr = SDALPtr -> SDAPtr ;
        SDAs[i].size = SDALPtr -> size ;
        if ( !(savedSDAPtrs[i] = new char(SDAs[i].size & 0x7FFF ) ) )
          return 3 ; // not enough memory.
        SDAflags[i] = 0 ;
        SDALPtr ++ ;
      }
      return 0;
  }
}

int
TSRdriver::saveSDA(void)
{
  switch (DosLevel)
  {
    case 3 :
      if ( SDAPtr && ! Int2Aworking ) {
        v3size = ( * Dosworking ) ? v3SDAsizeInDos : v3SDAsizeAlways ;
        movedata(FP_SEG(SDAPtr), FP_SEG(SDAPtr),
                 FP_SEG(savedSDAPtr), FP_SEG(savedSDAPtr), v3size ) ;
        return 1 ;
      }
      else return 0 ;

    case 4 :
      for (int i = 0; i < SDAnumber; i++) {
        if ( SDAs[i].size & 0x8000 ) {
          movedata(FP_SEG(SDAs[i].SDAPtr),
                   FP_OFF(SDAs[i].SDAPtr),
                   FP_SEG(savedSDAPtrs[i]),
                   FP_OFF(savedSDAPtrs[i]),

16楼

                   SDAs[i].size & 0x7FFF ) ;
        }
        else if ( * Dosworking ) {
          movedata(FP_SEG(SDAs[i].SDAPtr),
                   FP_OFF(SDAs[i].SDAPtr),
                   FP_SEG(savedSDAPtrs[i]),
                   FP_OFF(savedSDAPtrs[i]),
                   SDAs[i].size ) ;
        }
      }
      return 1 ;
  }
  return 0 ;
}

void
TSRdriver::restoreSDA(void)
{
  switch ( DosLevel )
  {
    case 3 :
      if ( v3size && SDAPtr ) {
        movedata(FP_SEG(savedSDAPtr), FP_SEG(savedSDAPtr),
                 FP_SEG(SDAPtr), FP_SEG(SDAPtr),
                 v3size ) ;
        v3size = 0 ;
      }
      break ;

    case 4 :
      for (int i = 0; i <  SDAnumber; i++) {
        movedata(FP_SEG(savedSDAPtrs[i]),
                 FP_OFF(savedSDAPtrs[i]),
                 FP_SEG(SDAs[i].SDAPtr),
                 FP_OFF(SDAs[i].SDAPtr),
                 SDAs[i].size ) ;
        SDAflags[i] = 0 ;
      }
  }
}

unsigned int
TSRdriver::eraseTSR(void)
{
  setStack() ;

  if ( ( NewInt08 == getvect(0x08) ) &&
       ( NewInt09 == getvect(0x09) ) &&

17楼

       ( NewInt13 == getvect(0x13) ) &&
       ( NewInt28 == getvect(0x28) ) &&
       ( NewInt2A == getvect(0x2A) ) &&
       ( NewInt2F == getvect(0x2F) )    ) {
    setvect(0x08, OldInt08) ;
    setvect(0x09, OldInt09) ;
    setvect(0x13, OldInt13) ;
    setvect(0x28, OldInt28) ;
    setvect(0x2A, OldInt2A) ;
    setvect(0x2F, OldInt2F) ;

    * (int far *)(((long)_psp << 16) + PSP_parent) = getpsp() ;

    * (long far *)(((long)_psp << 16) + PSP_terminate) = TerminateAddr ;

    setpsp(_psp) ;

    _AL = 0 ;
    _DX = 0 ;
    geninterrupt(0x21) ;

    return 0 ;
  }
  return restoreStack(), 1 ;
}

TSRdriver::TSRdriver
( Hotkey * TheKey, void (* Work)(void),
  unsigned char MultiplexID)
{
  TSRHotkey = TheKey ;
  TSRwork = Work ;
  multiplex_id = MultiplexID ;
}

int
TSRdriver::init()
{
  if ( exist() )
    return TSR_Error = 0 ;

  _AH = 0x34 ;
  geninterrupt(0x21) ;
  FP_SEG(Dosworking) = _ES ;
  FP_OFF(Dosworking) = _BX ;

  StackPtr = new char (TSRStacksize) ;
  if ( StackPtr == 0 )
    return TSR_Error = 3 ;
  StackPtr += TSRStacksize ;

  TSR_Error = initSDA() ;
  return TSR_Error ;
}

void
TSRdriver::resident(int Exitcode)
{
  unsigned int far * fp ;
  unsigned int dummy ;

  if ( TSR_Error ) return ;

  OldInt08 = getvect(0x08) ;
  OldInt09 = getvect(0x09) ;
  OldInt13 = getvect(0x13) ;
  OldInt28 = getvect(0x28) ;
  OldInt2A = getvect(0x2A) ;
  OldInt2F = getvect(0x2F) ;

  setvect(0x08, NewInt08) ;
  setvect(0x09, NewInt09) ;
  setvect(0x13, NewInt13) ;
  setvect(0x28, NewInt28) ;
  setvect(0x2A, NewInt2A) ;
  setvect(0x2F, NewInt2F) ;

  FP_SEG(fp) = _psp ;
  FP_OFF(fp) = PSP_ENV_addr ;
  _dos_freemem( * fp ) ;

  residentsize = _DS + PARAGRAPHS( StackPtr ) - _psp ;

  _dos_setblock(residentsize, _psp, &dummy) ;

  _dos_keep(Exitcode, residentsize) ;
}

18楼

// boss.cpp
/***************************************************************************
 *   Copyright (C) 1996 by akuma@tds                                       *
 *                                                                         *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *

20楼

  endl<<"By akuma@tds. July 29th 96'"<<endl
      <<"Hot key: Alt + P"<<endl;

  if (AppTSR.exist()) {
    cerr<<"Boss already exist."<<endl;

    if (argc >= 2)
      for (int i = 2; i < argc; i++)
        switch (argv[i-1][0]) {
          case '/':
          case '-':
            switch (argv[i-1][1]) {
              case 'U':
              case 'u':
                AppTSR.uninstall() ;
                break ;
              case 'D':
              case 'd':
                AppTSR.Disable() ;
                break ;
              case 'E':
              case 'e':
                AppTSR.Enable() ;
                break ;
              case 'H':
              case 'h':
              case '?':
                helpmessage(argv[0]) ;
                break ;
              default:
                cerr<<"Switch error: "<<argv[i-1][1]<<endl;
            }
            break ;
          default:
            cerr<<"Parameter error: "<<argv[i]<<endl;
        }
  }

  switch (AppTSR.init()) {
    case 0:
      cerr<<"Boss V2.0 Installed."<<endl;
      break;
    case 1:
      cerr<<"Initialize fail."<<endl;
      break;
    case 2:
      cerr<<"Too meny Dos SDA area."<<endl;
      break;
    case 3:
      cerr<<"Not enough memory."<<endl;
      break;
  }

  AppTSR.resident() ;
}

21楼

小弟冒昧的问一句哈
什么是"时钟的驻留"

222.51.116.*

22楼

神啊,这还是C语言吗?怎么这么复杂啊。。
220.164.32.*

23楼

C语言不复杂吗?
222.243.31.*

24楼

上帝啊~~~~~~
我什么时候才能有这样的水平啊 !!!!!!

25楼

怎么看怎么象C++代码!
220.172.188.*

26楼

本来就是 C++ 代码
59.41.40.*

27楼

变态滴,看都看不懂,有几个看懂滴,举手看看...
220.161.122.*

28楼

用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!用C语言编啊!!!
222.205.82.*

29楼

没看懂,我急需C语言计时器
218.26.60.*

30楼

dos.h里的void delay(int milisecound)和void sleep(int secound)可以吗?

31楼

哇天哪。我都看都看不懂。

发表回复

内 容:
用户名:
  
©2010 Baidu 贴吧协议  意见反馈