mirror of
https://github.com/cookiengineer/audacity
synced 2025-12-14 16:46:28 +01:00
Move library tree where it belongs
This commit is contained in:
272
lib-src/libnyquist/nyquist/sys/win/msvc/winfun.c
Normal file
272
lib-src/libnyquist/nyquist/sys/win/msvc/winfun.c
Normal file
@@ -0,0 +1,272 @@
|
||||
/* winfun.c - windows user interface functions for xlisp */
|
||||
/* Written by Brian Kendig. */
|
||||
/*Windows Console and DirectSound code added by Morgan Green and Chris Tchou*/
|
||||
|
||||
//#include <Quickdraw.h>
|
||||
//#include <Windows.h>
|
||||
//#include <Memory.h>
|
||||
#include <windows.h>
|
||||
#include <switches.h>
|
||||
#include "xlisp.h"
|
||||
#include "sound.h"
|
||||
|
||||
/* 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)) {
|
||||
return cvstring(szCurDir);
|
||||
/* create the result string
|
||||
stdputstr("Current Directory: ");
|
||||
stdputstr(szCurDir);
|
||||
stdputstr("\n"); */
|
||||
}
|
||||
}
|
||||
stdputstr("Directory Setting Error\n");
|
||||
|
||||
/* return nil on error*/
|
||||
return NIL;
|
||||
}
|
||||
|
||||
/* xget_temp_path -- get a path to create temp files */
|
||||
LVAL xget_temp_path()
|
||||
{
|
||||
char *p;
|
||||
char szDir[MAX_PATH];
|
||||
char szDirLC[MAX_PATH];
|
||||
int rslt = GetTempPath(MAX_PATH, szDir);
|
||||
if (rslt > MAX_PATH || rslt <= 0) {
|
||||
return cvstring("");
|
||||
} else {
|
||||
/* Vista apparently treats c:\windows with
|
||||
* special semantics, so just don't allow
|
||||
* GetTempPath to put us in c:\windows...
|
||||
*/
|
||||
strcpy(szDirLC, szDir); /* convert to lower case */
|
||||
for (p = szDirLC; *p; p++) {
|
||||
*p = tolower(*p);
|
||||
}
|
||||
if (strstr(szDirLC, "c:\\windows")) {
|
||||
/* c:\windows is bad. */
|
||||
return cvstring("");
|
||||
}
|
||||
return cvstring(szDir);
|
||||
}
|
||||
}
|
||||
|
||||
//Updated End
|
||||
|
||||
|
||||
/* osbgetc - get a character from a binary file ====== added for console*/
|
||||
/* int osbgetc(fp) FILE *fp; {return (getc(fp));} */
|
||||
int osbgetc(FILE *fp)
|
||||
{
|
||||
int c; c = (getc(fp));
|
||||
/* if (dbgflg) printf("osbgetc: got %d from FILE %x\n", c, fp); */
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
|
||||
LVAL xsystem (V) { return NIL; }
|
||||
LVAL xgetkey (V) { return NIL; }
|
||||
|
||||
|
||||
void ossymbols()
|
||||
{
|
||||
HWND mywin;
|
||||
#ifdef WIN32_SNAZZY_CONSOLE
|
||||
HANDLE myhandle;
|
||||
COORD winsize, origin;
|
||||
WORD textattrib;
|
||||
DWORD n;
|
||||
#endif
|
||||
mywin = GetForegroundWindow();
|
||||
SetConsoleTitle("Nyquist");
|
||||
|
||||
#ifdef WIN32_SNAZZY_CONSOLE // -eub
|
||||
myhandle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
origin.X = 0;
|
||||
origin.Y = 0;
|
||||
winsize.X = 100;
|
||||
winsize.Y = 40;
|
||||
textattrib = BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
|
||||
|
||||
FillConsoleOutputAttribute(myhandle, textattrib, winsize.X * winsize.Y, origin, &n);
|
||||
SetConsoleScreenBufferSize(myhandle, winsize);
|
||||
FillConsoleOutputAttribute(myhandle, textattrib, winsize.X * winsize.Y, origin, &n);
|
||||
SetConsoleTextAttribute(myhandle, textattrib);
|
||||
#endif
|
||||
|
||||
setvbuf(stdout, NULL, _IONBF, 0); // makes it work under NT emacs 20.3 -eub
|
||||
|
||||
}
|
||||
|
||||
|
||||
LVAL xsetupconsole()
|
||||
{
|
||||
HWND mywin;
|
||||
HANDLE myhandle;
|
||||
COORD winsize, origin;
|
||||
WORD textattrib;
|
||||
DWORD n;
|
||||
mywin = GetForegroundWindow();
|
||||
SetConsoleTitle("Nyquist");
|
||||
|
||||
myhandle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
origin.X = 0;
|
||||
origin.Y = 0;
|
||||
winsize.X = 100;
|
||||
winsize.Y = 40;
|
||||
textattrib = BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
|
||||
|
||||
FillConsoleOutputAttribute(myhandle, textattrib, winsize.X * winsize.Y, origin, &n);
|
||||
SetConsoleScreenBufferSize(myhandle, winsize);
|
||||
FillConsoleOutputAttribute(myhandle, textattrib, winsize.X * winsize.Y, origin, &n);
|
||||
SetConsoleTextAttribute(myhandle, textattrib);
|
||||
return NIL;
|
||||
}
|
||||
|
||||
void get_xlisp_path(char *p, long p_max)
|
||||
{
|
||||
HKEY hkey;
|
||||
DWORD dwType;
|
||||
LVAL lval;
|
||||
extern LVAL s_search_path;
|
||||
|
||||
*p = 0; /* for simplicity, we assume if !*p that path was not found */
|
||||
/* therefore, no path is equivalent to an empty string path */
|
||||
|
||||
/* first, look for path in global variable *SEARCH-PATH* */
|
||||
lval = getvalue(s_search_path);
|
||||
if (lval && stringp(lval)) {
|
||||
strncpy(p, getstring(lval), p_max);
|
||||
p[p_max - 1] = 0; /* make sure string is terminated, even if truncated */
|
||||
}
|
||||
if (*p) return; /* we got search path, so don't look in registry */
|
||||
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE", 0, KEY_READ, &hkey) !=
|
||||
ERROR_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
if (RegOpenKeyEx(hkey, "CMU", 0, KEY_READ, &hkey) !=
|
||||
ERROR_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
if (RegOpenKeyEx(hkey, "Nyquist", 0, KEY_READ, &hkey) !=
|
||||
ERROR_SUCCESS) {
|
||||
return;
|
||||
}
|
||||
if (RegQueryValueEx(hkey, "XLISPPATH", NULL, &dwType, p, &p_max) !=
|
||||
ERROR_SUCCESS) {
|
||||
*p = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
LVAL xget_user()
|
||||
{
|
||||
// not implemented for Windows, just use "nyquist"
|
||||
return cvstring("nyquist");
|
||||
}
|
||||
|
||||
|
||||
#ifdef WINGUI
|
||||
/* NOTE: define WINGUI in the Project Settings for the NyqWin projects.
|
||||
* Do not define WINGUI for console versions of Nyquist
|
||||
*/
|
||||
|
||||
/****************************************************************************
|
||||
* fileopen
|
||||
* Inputs:
|
||||
* char *deflt: the default file name (e.g. from command line)
|
||||
* char *extension: default extension
|
||||
* char *mode: read ("r") or write ("w")
|
||||
* char *prompt: prompt for user
|
||||
* Returns:
|
||||
* opened file pointer
|
||||
* Effect:
|
||||
* opens file, prompts for user input if necessary and warns about
|
||||
* possible confusion. If deflt is a null string or NULL, the user will
|
||||
* be prompted for a name. The routine loops until a file is opened.
|
||||
* If the mode is "r", a check is made to see if the file exists
|
||||
* with and without the extension. If both exist a warning is given.
|
||||
* For mode "w", a check is made to see if the file will be overwritten.
|
||||
* The extension is automatically added if the default or user-typed
|
||||
* file has no "." At the bottom of the loop body, if no file has
|
||||
* been opened, the user is prompted for another file name.
|
||||
****************************************************************************/
|
||||
|
||||
char fileopen_name[100]; /* name of the opened file */
|
||||
|
||||
HINSTANCE hInst; /* current instance */
|
||||
HWND hMainWindow; /* main window handle */
|
||||
|
||||
|
||||
char *getfilename(char *deflt, char *extension, char *mode, char *prompt)
|
||||
{
|
||||
char filter[64];
|
||||
char *filter_ptr = NULL;
|
||||
OPENFILENAME open_file_name;
|
||||
|
||||
if (extension && extension[0] == 0) extension = NULL;
|
||||
if (strcmp(extension, "lsp") == 0) {
|
||||
strcpy(filter, "Lisp files");
|
||||
} else if (extension) {
|
||||
sprintf(filter, "%s files", extension);
|
||||
}
|
||||
if (extension) {
|
||||
sprintf(filter + strlen(filter), "%c*.%s%cAll files%c*.*%c",
|
||||
0, extension, 0, 0, 0);
|
||||
filter_ptr = filter;
|
||||
}
|
||||
if (!deflt) deflt = ""; /* treat NULL as the empty string */
|
||||
strcpy(fileopen_name, deflt);
|
||||
|
||||
open_file_name.lStructSize = sizeof(OPENFILENAME);
|
||||
open_file_name.hwndOwner = hMainWindow;
|
||||
|
||||
open_file_name.hInstance = hInst;
|
||||
open_file_name.lpstrFilter = filter_ptr;
|
||||
open_file_name.lpstrCustomFilter = NULL;
|
||||
open_file_name.nMaxCustFilter = 0;
|
||||
open_file_name.nFilterIndex = 0;
|
||||
open_file_name.lpstrFile = fileopen_name;
|
||||
open_file_name.nMaxFile = 100;
|
||||
open_file_name.lpstrFileTitle = NULL;
|
||||
open_file_name.nMaxFileTitle = 0;
|
||||
open_file_name.lpstrInitialDir = NULL;
|
||||
open_file_name.lpstrTitle = prompt;
|
||||
open_file_name.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
|
||||
open_file_name.nFileOffset = 0;
|
||||
open_file_name.nFileExtension = 0;
|
||||
open_file_name.lpstrDefExt = extension;
|
||||
open_file_name.lCustData = 0;
|
||||
open_file_name.lpfnHook = 0;
|
||||
open_file_name.lpTemplateName = 0;
|
||||
if (((*mode == 'r') && GetOpenFileName(&open_file_name)) ||
|
||||
((*mode == 'w') && GetSaveFileName(&open_file_name))) {
|
||||
return open_file_name.lpstrFile;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
FILE *fileopen(char *deflt, char *extension, char *mode, char *prompt)
|
||||
{
|
||||
FILE *fp = NULL; /* file corresponding to filename */
|
||||
if (getfilename(deflt, extension, mode, prompt)) {
|
||||
fp = fopen(fileopen_name, mode);
|
||||
}
|
||||
return fp;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user