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

📄 playlib.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/***  PLAYLIB.C****  Public domain for TC only by Lynn R. Lively**  Modified by Bob Stout*/#include <dos.h>#include <stdlib.h>#include "pchwio.h"#include "sound.h"#ifndef __ZTC__ static void (INTERRUPT FAR *n_oldtmint) (void);#endif#define TIMER_TICK_INTR 0x1cstatic NOTE *     n_buff;static unsigned   n_buff_sz;static NOTE *     n_head;static NOTE *     n_tail;static unsigned   play_duration;static unsigned   play_freq;/*** Add note to note buff. Return = 1 (note added), 0 (Out of note buff)*/int playb_note (unsigned freq, unsigned duration){      if (++n_tail == (n_buff + n_buff_sz))            n_tail = n_buff;      if (n_tail == n_head)      {            --n_tail;            return (0);      }      n_tail->freq     = freq;      n_tail->duration = duration;      return (1);}/*** ISR for background music.*/#ifndef __ZTC__ static void INTERRUPT FAR play_intr (void)#else static int play_intr (struct INT_DATA *idp)#endif{      int_off ();#ifndef __ZTC__      (*n_oldtmint) ();                   /* Call Old timer interrupt.  */#else      int_prev(idp);#endif      if (play_duration == 0)      {            soundoff ();            if (++n_head == (n_buff + n_buff_sz))                  n_head = n_buff;            if (n_head == n_tail)            {                  --n_head;                  int_on ();                  return;            }            play_duration = n_head->duration;            if (0 != (play_freq = n_head->freq))                  soundon();            dosound (play_freq);      }      else  --play_duration;      int_on ();#ifdef __ZTC__      return 1;                           /* Don't chain                */#endif}/*** Call this function to init background music. buff_sz is number of** notes in the note buffer. Returns pointer to buff or NULL if** out of heap space.*/NOTE * playb_open (unsigned buff_sz){      n_buff =      n_head =      n_tail =  (NOTE *) calloc (buff_sz, sizeof (NOTE));      if (n_buff != (NOTE *) NULL)      {            n_buff_sz     = buff_sz;            play_duration =            play_freq     = 0;            #ifdef __ZTC__            int_intercept(TIMER_TICK_INTR, play_intr, 256);#else            n_oldtmint    = getvect (TIMER_TICK_INTR);            setvect (TIMER_TICK_INTR, play_intr);#endif      }      return (n_buff);}/*** Return things to normal and free allocated space.*/void playb_close (void){      soundoff ();#ifndef __ZTC__      setvect (TIMER_TICK_INTR, n_oldtmint);#else      int_restore(TIMER_TICK_INTR);#endif      free (n_buff);}

⌨️ 快捷键说明

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