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

📄 winstuff.c

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 C
字号:
/* winstuff.c - windows interface routines for xlisp *//* Written by Chris Tchou. *//* This file contains the stuff that the other xlisp files call directly. */#include <windows.h>		/*Added by Ning Hu	Apr.2001 */#include <stdio.h>//#include <QuickDraw.h>	/* for Random */#include <memory.h>		/* for DisposPtr */#include <string.h>//#include <SegLoad.h>	/* for ExitToShell */#include "xlisp.h"#include "userio.h"#define DELETE 0x08/* externals */extern FILE *tfp;  /* transcript file pointer */extern int cursorPos;extern char *macgets (void);//Added by Ning Hu	Apr.2001extern int _isatty(int);					extern int redirect_flag;//Add end/* local variables */int lposition;static char *linebuf = NULL, *lineptr;static int numChars;//int isascii (char c) { return 1; }  /* every char is an ascii char, isn't it? */void osinit (char *banner) {//	int i;    char version[] = "\nWindows console interface by Chris Tchou and Morgan Green.\n";//	InitMac ();  /* initialize the mac interface routines *///	lposition = 0;  /* initialize the line editor *///	for (i = 0; banner[i] != '\0'; i++) macputc (banner[i]);//	for (i = 0; version[i] != '\0'; i++) macputc (version[i]);    printf(banner);    printf(version);    // Added by Ning Hu, to communicate between compiler GUI and Nyquist console	Apr.2001    if( _isatty( _fileno( stdout ) ) ){        redirect_flag = 0;#ifdef DEBUG      printf( "stdout has not been redirected to a file\n" );		//for debugging use#endif    }    else {        redirect_flag = 1;#ifdef DEBUG      printf( "stdout has been redirected to a file\n");			//for debugging use#endif    }    // Add End}/* osrand - return next random number in sequence */long osrand (long rseed) {#ifdef OLDBUTINTERESTING// note that this takes a seed and returns a big number,// whereas I think XLisp's RANDOM is defined differently    long k1;    /* make sure we don't get stuck at zero */    if (rseed == 0L) rseed = 1L;    /* algorithm taken from Dr. Dobbs Journal, November 1985, page 91 */    k1 = rseed / 127773L;    if ((rseed = 16807L * (rseed - k1 * 127773L) - k1 * 2836L) < 0L)    rseed += 2147483647L;    /* return a random number between 0 and MAXFIX */    return rseed;#endif    return rand() % rseed;	// rseed is a misnomer}FILE *osaopen (char *name, char *mode) {    return fopen (name, mode);}FILE *osbopen (char *name, char *mode) {    char nmode[4];    strcpy (nmode, mode); strcat (nmode, "b");    return (fopen (name, nmode));}int osclose (FILE *fp) { return (fclose (fp)); }int osaputc (int ch, FILE *fp) { return (putc (ch, fp)); }int osbputc (int ch, FILE *fp) { return (putc (ch, fp)); }/* osagetc - get a character from an ascii file */int osagetc(fp)  FILE *fp;{    return (getc(fp));}extern int abort_flag;extern int redirect_flag;			//Added by Ning Hu	Apr.2001int ostgetc (void) {/*	int i;    if (numChars <= 0) {  /* get some more *//*		if (linebuf) DisposPtr (linebuf);        linebuf = macgets ();        i = 0;        while (linebuf[i] != '\0') i++;        numChars = i;        if (tfp) for (i = 0; i < numChars; i++) osaputc (linebuf[i], tfp);        lineptr = linebuf;    }    numChars--;    if (*lineptr == '\r') {        lineptr++;        return '\n';    } else return (*lineptr++);*///  return getchar();			// console		//Old code--removed by Ning Hu    // Added by Ning Hu		Apr.2001    int ch = getchar();    oscheck(); /* in case user typed ^C */    if (ch == BREAK_CHAR && abort_flag == BREAK_LEVEL) {        abort_flag = 0;    }    switch (ch) {          case ABORT_CHAR:	/* control-c */            xltoplevel();            break;          case '\025':	/* control-u */            xlcleanup();          case '\020':	/* control-p */            xlcontinue();            break;          case BREAK_CHAR:            ostputc('\n');	/* control-b */            xlbreak("BREAK",s_unbound);            break;          default:            break;    }    return ch;    //Add End}void ostputc (int ch) {//	macputc (ch);    putchar(ch);			// console    if (tfp) osaputc (ch, tfp);}void osflush (void) {    lineptr = linebuf;    numChars = 0;    lposition = 0;}void oscheck (void) {				    MSG lpMsg;/*DoEvent ();*/		    check_aborted();	//	printf("Current Thread: %d\n", GetCurrentThreadId());		//for debugging use    if ((redirect_flag) && (PeekMessage(&lpMsg, NULL, 0, 0, PM_REMOVE)!=0)) {         if (lpMsg.message == WM_CHAR) {            switch (lpMsg.wParam) {                case ABORT_CHAR: abort_flag = ABORT_LEVEL;                                break;                case BREAK_CHAR: abort_flag = BREAK_LEVEL;                                break;            }        }      //printf("Get message: %d %d \n", lpMsg.wParam, BREAK_CHAR);				//for debugging use    }	    if (abort_flag == ABORT_LEVEL) {	        abort_flag = 0;        osflush();        xltoplevel();    } else if (abort_flag == BREAK_LEVEL) {        abort_flag = 0;        osflush();        xlbreak("BREAK",s_unbound);    }}//Update endvoid oserror (char *msg) {    char line[100], *p;    sprintf (line,"error: %s\n",msg);    for (p = line; *p != '\0'; ++p) ostputc (*p);}void osfinish (void) {    /* dispose of everything... *///	if (linebuf) DisposPtr (linebuf);//	MacWrapUp ();//	ExitToShell ();}int renamebackup (char *filename) { return 0; }long randomseed = 1L;long random () {// note that this takes a seed and returns a big number,// whereas I think XLisp's RANDOM is defined differently    long k1;    /* algorithm taken from Dr. Dobbs Journal, November 1985, page 91 */    k1 = randomseed / 127773L;    if ((randomseed = 16807L * (randomseed - k1 * 127773L) - k1 * 2836L) < 0L)      randomseed += 2147483647L;    /* return a random number between 0 and MAXFIX */    return randomseed;}/* Added by Ning Hu		May.2001 xsetdir - set current directory of the process */LVAL xsetdir() {    TCHAR ssCurDir[MAX_PATH], szCurDir[MAX_PATH];    strcpy(ssCurDir, getstring(xlgastring()));    xllastarg();    if (SetCurrentDirectory(ssCurDir)) {        if (GetCurrentDirectory(            sizeof(szCurDir)/sizeof(TCHAR), szCurDir)) {	        /* create the result string */            stdputstr("Current Directory:");            stdputstr(szCurDir);            stdputstr("\n");        }	        else stdputstr("Directory Setting Error\n");    }    else stdputstr("Directory Setting Error\n");    /* return the new string */    return (NIL);}//Updated End

⌨️ 快捷键说明

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