added files
This commit is contained in:
commit
4d87b74c8e
135
HISTORY
Normal file
135
HISTORY
Normal file
@ -0,0 +1,135 @@
|
||||
May. 25 2014
|
||||
Added a mb_set_inputer function which allows the user to specify an INPUT reader, thanks to Michael P. Welch for suggestion
|
||||
Added a mb_remove_reserved_func function which allows the user to disable/remove a reserved statement
|
||||
|
||||
May. 22 2014
|
||||
Fixed a crash bug when missing colon in a combined line, thanks to Michael P. Welch for pointing it out
|
||||
Fixed a missing lexical cursor stepping bug in INPUT function
|
||||
|
||||
Mar. 17 2014
|
||||
Added an XCode project
|
||||
Added a safe stdin reader function mb_gets
|
||||
Fixed a crash bug in INPUT function
|
||||
|
||||
Feb. 17 2014
|
||||
Added mod by zero processing
|
||||
|
||||
Feb. 16 2014
|
||||
Fixed a crash bug in _core_for, thanks to mummylauncher for pointing it out
|
||||
|
||||
Jul. 19 2013
|
||||
Fixed a crash bug in _execute_statement, thanks to Jon Mayo for pointing it out
|
||||
|
||||
Feb. 25 2013
|
||||
Fixed a cross routine multi-statement execution bug, thanks to Bruce Kendall for pointing it out
|
||||
Fixed a memory corruption bug when loading a script file
|
||||
|
||||
Jan. 9 2013
|
||||
Fixed a crash bug when using EDIT command
|
||||
|
||||
Dec. 14 2012
|
||||
Added an invalid expression error handling
|
||||
Added an out of memory error handling
|
||||
|
||||
Dec. 5 2012
|
||||
Fixed a minus calculation bug, thanks to Bill Walker for pointing it out
|
||||
|
||||
Nov. 14 2012
|
||||
Fixed a cross routine RETURN bug, thanks to Bruce Kendall for pointing it out
|
||||
|
||||
Sep. 12 2012
|
||||
Fixed a bug in ASC
|
||||
Fixed a label parsing, jumping bug, thanks to Ahmad Hawwash for pointing above two issues out
|
||||
Fixed a crash bug in IF statement
|
||||
Added divide by zero processing
|
||||
Added calculation error raising
|
||||
|
||||
Sep. 1 2012
|
||||
Fixed a redisposing bug when retrieving a string argument, thanks to Ahmad Hawwash for pointing it out
|
||||
Fixed a memory leak after retrieving a composited string argument
|
||||
|
||||
Aug. 29 2012
|
||||
Modified an odd string comparison behavior, thanks to Matthias Nott for testing it out
|
||||
Added a warning system, disabled warning as default
|
||||
Improved compatibility with GCC
|
||||
|
||||
Aug. 3 2012
|
||||
Implemented memory occupation statistics
|
||||
Improved compatibility on 64bit systems
|
||||
Fixed some warnings under a stricter mode
|
||||
|
||||
Jul. 21 2012
|
||||
Added a compatibility macro for PRINT a newline
|
||||
Added an mb_attempt_func_end C API
|
||||
Fixed a unary minus symbol parsing bug
|
||||
|
||||
Jul. 19 2012
|
||||
Fixed a crash bug caused by a mistake in calculation priority table, thanks to Bruce Kendall for pointing it out
|
||||
|
||||
Jul. 10 2012
|
||||
Implemented KILL command
|
||||
Fixed a negative calculation bug
|
||||
Added an invalid identifier usage error handling
|
||||
Avoided some warnings on gcc
|
||||
|
||||
Jul. 5 2012
|
||||
Implemented LIST, EDIT, LOAD, SAVE commands
|
||||
|
||||
Jul. 4 2012
|
||||
Fixed some crash bugs
|
||||
Fixed some memory leaks
|
||||
|
||||
Jul. 3 2012
|
||||
Modified/added math functions: FLOOR, CEIL, FIX
|
||||
Fixed an INPUT type issue
|
||||
Changed float number formatting from using "%f" to "%g" in PRINT, thanks to Bruce Kendall for pointing above three issues out
|
||||
Refactored the way to load a script file
|
||||
Done several small improvements
|
||||
|
||||
Jun. 29 2012
|
||||
Fixed a newline mistake in PRINT
|
||||
|
||||
Jun. 29 2012
|
||||
Implemented customizable print functor
|
||||
Improved PRINT statement
|
||||
Fixed an infinity loop bug in RND function
|
||||
Fixed some crash bugs
|
||||
|
||||
Jun. 28 2012
|
||||
Fixed a cross routine RETURN bug, thanks to Bruce Kendall for pointing it out
|
||||
Fixed some memory leaks
|
||||
Refactored error position informing
|
||||
|
||||
Jun. 18 2012
|
||||
Implemented user extended abort, thanks to Bruce Kendall for giving suggestion
|
||||
|
||||
Apr. 30 2012
|
||||
Compress number to integer if necessary
|
||||
|
||||
Apr. 27 2012
|
||||
Fixed a string connecting crash bug, thanks to Ahmad Hawwash for pointing it out
|
||||
Improved portability on gcc
|
||||
|
||||
Aug. 3 2011
|
||||
Fixed hashtable removing bug
|
||||
|
||||
Jun. 18 2011
|
||||
Fixed some mistakes
|
||||
Allowed underline character appear in an identifier
|
||||
|
||||
Apr. 15 2011
|
||||
Fixed garbage collection and _label_t release bugs
|
||||
|
||||
Apr. 14 2011
|
||||
Fixed some list / comparison operator bugs
|
||||
|
||||
Feb. 15 2011
|
||||
Improved portability on Cocoa
|
||||
Improved portability on VC++ 6.0
|
||||
Fixed a suspend / resume bug
|
||||
|
||||
Feb. 9 2011
|
||||
Fixed struct mb_interpreter_t declaration warnings on gcc
|
||||
|
||||
Feb. 1 2011
|
||||
First release.
|
20
LICENSE
Normal file
20
LICENSE
Normal file
@ -0,0 +1,20 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2011 - 2014 W. Renxin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
README
Normal file
25
README
Normal file
@ -0,0 +1,25 @@
|
||||
Introduction
|
||||
MY-BASIC is a tiny cross-platform easy extendable BASIC interpreter written
|
||||
in pure C with about 5000 lines of source code. Its grammar is similar
|
||||
to structured BASIC in early era, but without line number. It is aimed to
|
||||
be either an embeddable scripting language or a standalone interpreter. The
|
||||
core is pretty light; all in a C source file and an associated header file.
|
||||
You can combine MY-BASIC with an existing C / C++ / Objective-C project
|
||||
easily, that can make them more powerful.
|
||||
|
||||
Main features
|
||||
Written in clean ANSI C, source portable
|
||||
Most GW-BASIC like syntax, but without line numbers
|
||||
Small and fast
|
||||
Not case-sensitive
|
||||
Integer / float point / string / boolean / array data types support
|
||||
IF - THEN - ELSE support
|
||||
FOR - TO - STEP - NEXT / WHILE - WEND / DO - UNTIL support
|
||||
GOTO / GOSUB - RETURN support
|
||||
Numeric functions
|
||||
String functions
|
||||
Easy to embed into C / C++ / Objective-C projects
|
||||
High expansibility
|
||||
It is free
|
||||
|
||||
Moved from old repository: https://code.google.com/p/my-basic/
|
21
clean.cmd
Normal file
21
clean.cmd
Normal file
@ -0,0 +1,21 @@
|
||||
@echo off
|
||||
echo Cleaning, a moment please...
|
||||
|
||||
attrib *.suo -s -r -h
|
||||
del /f /s /q *.suo
|
||||
del /f /s /q *.user
|
||||
del /f /s /q *.ncb
|
||||
|
||||
rd /s /q temp
|
||||
|
||||
del /f /s /q output\*.res
|
||||
del /f /s /q output\*.dep
|
||||
del /f /s /q output\*.htm
|
||||
del /f /s /q output\*.ilk
|
||||
del /f /s /q output\*.manifest
|
||||
del /f /s /q output\*.obj
|
||||
del /f /s /q output\*.pdb
|
||||
del /f /s /q output\*.idb
|
||||
del /f /s /q output\my_basic_d.exe
|
||||
|
||||
echo Cleaning done!
|
5922
core/my_basic.c
Normal file
5922
core/my_basic.c
Normal file
File diff suppressed because it is too large
Load Diff
249
core/my_basic.h
Normal file
249
core/my_basic.h
Normal file
@ -0,0 +1,249 @@
|
||||
/*
|
||||
** This source file is part of MY-BASIC
|
||||
**
|
||||
** For the latest info, see https://github.com/paladin-t/my_basic/
|
||||
**
|
||||
** Copyright (c) 2011 - 2014 W. Renxin
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
** this software and associated documentation files (the "Software"), to deal in
|
||||
** the Software without restriction, including without limitation the rights to
|
||||
** use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
** the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
** subject to the following conditions:
|
||||
**
|
||||
** The above copyright notice and this permission notice shall be included in all
|
||||
** copies or substantial portions of the Software.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
** FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
** COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
** IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef __MY_BASIC_H__
|
||||
#define __MY_BASIC_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#ifndef MBAPI
|
||||
# define MBAPI
|
||||
#endif /* MBAPI */
|
||||
|
||||
#ifndef MB_COMPACT_MODE
|
||||
# define MB_COMPACT_MODE
|
||||
#endif /* MB_COMPACT_MODE */
|
||||
|
||||
#ifdef MB_COMPACT_MODE
|
||||
# pragma pack(1)
|
||||
#endif /* MB_COMPACT_MODE */
|
||||
|
||||
#ifndef true
|
||||
# define true (!0)
|
||||
#endif
|
||||
#ifndef false
|
||||
# define false (0)
|
||||
#endif
|
||||
|
||||
#ifndef bool_t
|
||||
# define bool_t int
|
||||
#endif
|
||||
#ifndef byte_t
|
||||
# define byte_t unsigned char
|
||||
#endif
|
||||
#ifndef int_t
|
||||
# define int_t int
|
||||
#endif
|
||||
#ifndef real_t
|
||||
# define real_t float
|
||||
#endif
|
||||
|
||||
#ifndef _MSC_VER
|
||||
# ifndef _strcmpi
|
||||
# define _strcmpi strcasecmp
|
||||
# endif /* _strcmpi */
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#ifndef mb_assert
|
||||
# define mb_assert(__a) do { ((void)(__a)); assert(__a); } while(0)
|
||||
#endif /* mb_assert */
|
||||
|
||||
#ifndef mb_unrefvar
|
||||
# define mb_unrefvar(__v) ((void)(__v))
|
||||
#endif /* mb_unrefvar */
|
||||
|
||||
#ifndef MB_CODES
|
||||
# define MB_CODES
|
||||
# define MB_FUNC_OK 0
|
||||
# define MB_FUNC_BYE 1001
|
||||
# define MB_FUNC_WARNING 1002
|
||||
# define MB_FUNC_ERR 1003
|
||||
# define MB_FUNC_END 1004
|
||||
# define MB_FUNC_SUSPEND 1005
|
||||
# define MB_PARSING_ERR 3001
|
||||
# define MB_LOOP_BREAK 5001
|
||||
# define MB_LOOP_CONTINUE 5002
|
||||
# define MB_SUB_RETURN 5101
|
||||
# define MB_EXTENDED_ABORT 9001
|
||||
#endif /* MB_CODES */
|
||||
|
||||
#ifndef mb_check
|
||||
# define mb_check(__r) { int __hr = __r; if(__hr != MB_FUNC_OK) { return __hr; } }
|
||||
#endif /* mb_check */
|
||||
|
||||
#ifndef mb_reg_fun
|
||||
# define mb_reg_fun(__s, __f) mb_register_func(__s, #__f, __f)
|
||||
#endif /* mb_reg_fun */
|
||||
#ifndef mb_rem_fun
|
||||
# define mb_rem_fun(__s, __f) mb_remove_func(__s, #__f)
|
||||
#endif /* mb_rem_fun */
|
||||
#ifndef mb_rem_res_fun
|
||||
# define mb_rem_res_fun(__s, __f) mb_remove_reserved_func(__s, #__f)
|
||||
#endif /* mb_rem_res_fun */
|
||||
|
||||
struct mb_interpreter_t;
|
||||
|
||||
typedef enum mb_error_e {
|
||||
SE_NO_ERR = 0,
|
||||
/** Common */
|
||||
SE_CM_MB_OPEN_FAILED,
|
||||
SE_CM_FUNC_EXISTS,
|
||||
SE_CM_FUNC_NOT_EXISTS,
|
||||
/** Parsing */
|
||||
SE_PS_FILE_OPEN_FAILED,
|
||||
SE_PS_SYMBOL_TOO_LONG,
|
||||
SE_PS_INVALID_CHAR,
|
||||
/** Running */
|
||||
SE_RN_NOT_SUPPORTED,
|
||||
SE_RN_EMPTY_PROGRAM,
|
||||
SE_RN_SYNTAX,
|
||||
SE_RN_INVALID_DATA_TYPE,
|
||||
SE_RN_TYPE_NOT_MATCH,
|
||||
SE_RN_ILLEGAL_BOUND,
|
||||
SE_RN_DIMENSION_TOO_MUCH,
|
||||
SE_RN_OPERATION_FAILED,
|
||||
SE_RN_DIMENSION_OUT_OF_BOUND,
|
||||
SE_RN_ARRAY_OUT_OF_BOUND,
|
||||
SE_RN_LABEL_NOT_EXISTS,
|
||||
SE_RN_NO_RETURN_POINT,
|
||||
SE_RN_COLON_EXPECTED,
|
||||
SE_RN_COMMA_OR_SEMICOLON_EXPECTED,
|
||||
SE_RN_ARRAY_IDENTIFIER_EXPECTED,
|
||||
SE_RN_OPEN_BRACKET_EXPECTED,
|
||||
SE_RN_CLOSE_BRACKET_EXPECTED,
|
||||
SE_RN_ARRAY_SUBSCRIPT_EXPECTED,
|
||||
SE_RN_STRUCTURE_NOT_COMPLETED,
|
||||
SE_RN_FUNCTION_EXPECTED,
|
||||
SE_RN_STRING_EXPECTED,
|
||||
SE_RN_VAR_OR_ARRAY_EXPECTED,
|
||||
SE_RN_ASSIGN_OPERATOR_EXPECTED,
|
||||
SE_RN_INTEGER_EXPECTED,
|
||||
SE_RN_ELSE_EXPECTED,
|
||||
SE_RN_TO_EXPECTED,
|
||||
SE_RN_NEXT_EXPECTED,
|
||||
SE_RN_UNTIL_EXPECTED,
|
||||
SE_RN_LOOP_VAR_EXPECTED,
|
||||
SE_RN_JUMP_LABEL_EXPECTED,
|
||||
SE_RN_VARIABLE_EXPECTED,
|
||||
SE_RN_INVALID_ID_USAGE,
|
||||
SE_RN_CALCULATION_ERROR,
|
||||
SE_RN_DIVIDE_BY_ZERO,
|
||||
SE_RN_MOD_BY_ZERO,
|
||||
SE_RN_INVALID_EXPRESSION,
|
||||
SE_RN_OUT_OF_MEMORY,
|
||||
/** Extended abort */
|
||||
SE_EA_EXTENDED_ABORT,
|
||||
} mb_error_e;
|
||||
|
||||
typedef enum mb_data_e {
|
||||
MB_DT_NIL = -1,
|
||||
MB_DT_INT = 0,
|
||||
MB_DT_REAL,
|
||||
MB_DT_STRING,
|
||||
} mb_data_e;
|
||||
|
||||
typedef union mb_value_u {
|
||||
int_t integer;
|
||||
real_t float_point;
|
||||
char* string;
|
||||
} mb_value_u;
|
||||
|
||||
typedef struct mb_value_t {
|
||||
mb_data_e type;
|
||||
mb_value_u value;
|
||||
} mb_value_t;
|
||||
|
||||
typedef void (* mb_error_handler_t)(struct mb_interpreter_t*, enum mb_error_e, char*, int, unsigned short, unsigned short, int);
|
||||
typedef int (* mb_func_t)(struct mb_interpreter_t*, void**);
|
||||
typedef int (* mb_print_func_t)(const char*, ...);
|
||||
typedef int (* mb_input_func_t)(char*, int);
|
||||
|
||||
typedef struct mb_interpreter_t {
|
||||
void* local_func_dict;
|
||||
void* global_func_dict;
|
||||
void* global_var_dict;
|
||||
void* ast;
|
||||
void* parsing_context;
|
||||
void* running_context;
|
||||
mb_error_e last_error;
|
||||
int last_error_pos;
|
||||
unsigned short last_error_row;
|
||||
unsigned short last_error_col;
|
||||
mb_error_handler_t error_handler;
|
||||
mb_print_func_t printer;
|
||||
mb_input_func_t inputer;
|
||||
void* userdata;
|
||||
} mb_interpreter_t;
|
||||
|
||||
MBAPI unsigned int mb_ver(void);
|
||||
MBAPI const char* mb_ver_string(void);
|
||||
|
||||
MBAPI int mb_init(void);
|
||||
MBAPI int mb_dispose(void);
|
||||
MBAPI int mb_open(mb_interpreter_t** s);
|
||||
MBAPI int mb_close(mb_interpreter_t** s);
|
||||
MBAPI int mb_reset(mb_interpreter_t** s, bool_t clrf);
|
||||
|
||||
MBAPI int mb_register_func(mb_interpreter_t* s, const char* n, mb_func_t f);
|
||||
MBAPI int mb_remove_func(mb_interpreter_t* s, const char* n);
|
||||
MBAPI int mb_remove_reserved_func(mb_interpreter_t* s, const char* n);
|
||||
|
||||
MBAPI int mb_attempt_func_begin(mb_interpreter_t* s, void** l);
|
||||
MBAPI int mb_attempt_func_end(mb_interpreter_t* s, void** l);
|
||||
MBAPI int mb_attempt_open_bracket(mb_interpreter_t* s, void** l);
|
||||
MBAPI int mb_attempt_close_bracket(mb_interpreter_t* s, void** l);
|
||||
MBAPI int mb_pop_int(mb_interpreter_t* s, void** l, int_t* val);
|
||||
MBAPI int mb_pop_real(mb_interpreter_t* s, void** l, real_t* val);
|
||||
MBAPI int mb_pop_string(mb_interpreter_t* s, void** l, char** val);
|
||||
MBAPI int mb_pop_value(mb_interpreter_t* s, void** l, mb_value_t* val);
|
||||
MBAPI int mb_push_int(mb_interpreter_t* s, void** l, int_t val);
|
||||
MBAPI int mb_push_real(mb_interpreter_t* s, void** l, real_t val);
|
||||
MBAPI int mb_push_string(mb_interpreter_t* s, void** l, char* val);
|
||||
MBAPI int mb_push_value(mb_interpreter_t* s, void** l, mb_value_t val);
|
||||
|
||||
MBAPI int mb_load_string(mb_interpreter_t* s, const char* l);
|
||||
MBAPI int mb_load_file(mb_interpreter_t* s, const char* f);
|
||||
MBAPI int mb_run(mb_interpreter_t* s);
|
||||
MBAPI int mb_suspend(mb_interpreter_t* s, void** l);
|
||||
|
||||
MBAPI mb_error_e mb_get_last_error(mb_interpreter_t* s);
|
||||
MBAPI const char* mb_get_error_desc(mb_error_e err);
|
||||
MBAPI int mb_set_error_handler(mb_interpreter_t* s, mb_error_handler_t h);
|
||||
MBAPI int mb_set_printer(mb_interpreter_t* s, mb_print_func_t p);
|
||||
MBAPI int mb_set_inputer(mb_interpreter_t* s, mb_input_func_t p);
|
||||
|
||||
MBAPI int mb_gets(char* buf, int s);
|
||||
|
||||
#ifdef MB_COMPACT_MODE
|
||||
# pragma pack()
|
||||
#endif /* MB_COMPACT_MODE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __MY_BASIC_H__ */
|
20
my_basic.sln
Normal file
20
my_basic.sln
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual Studio 2008
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "my_basic", "my_basic.vcproj", "{6BBDF068-C7EB-4422-B5AF-8666948A02DE}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
debug|Win32 = debug|Win32
|
||||
release|Win32 = release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6BBDF068-C7EB-4422-B5AF-8666948A02DE}.debug|Win32.ActiveCfg = debug|Win32
|
||||
{6BBDF068-C7EB-4422-B5AF-8666948A02DE}.debug|Win32.Build.0 = debug|Win32
|
||||
{6BBDF068-C7EB-4422-B5AF-8666948A02DE}.release|Win32.ActiveCfg = release|Win32
|
||||
{6BBDF068-C7EB-4422-B5AF-8666948A02DE}.release|Win32.Build.0 = release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
310
my_basic.vcproj
Normal file
310
my_basic.vcproj
Normal file
@ -0,0 +1,310 @@
|
||||
<?xml version="1.0" encoding="gb2312"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="my_basic"
|
||||
ProjectGUID="{6BBDF068-C7EB-4422-B5AF-8666948A02DE}"
|
||||
RootNamespace="lispy"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="debug|Win32"
|
||||
OutputDirectory="output"
|
||||
IntermediateDirectory="temp/debug"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="true"
|
||||
ExceptionHandling="0"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
CompileAs="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\$(ProjectName)_d.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="release|Win32"
|
||||
OutputDirectory="output"
|
||||
IntermediateDirectory="temp/release"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="1"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
ExceptionHandling="0"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="4"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="3"
|
||||
CompileAs="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="core"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\core\my_basic.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\core\my_basic.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="doc"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\HISTORY"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\LICENSE"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\README"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="sample"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\sample\sample01.bas"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="debug|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="release|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sample\sample02.bas"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="debug|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="release|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sample\sample03.bas"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="debug|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="release|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\sample\sample04.bas"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="debug|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="release|Win32"
|
||||
ExcludedFromBuild="true"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="res"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\resource\icon.ico"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\resource\my_basic.rc"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\resource\resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\shell\main.c"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
254
my_basic_mac.xcodeproj/project.pbxproj
Normal file
254
my_basic_mac.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,254 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
03F4D7391A1D00A1009F920C /* my_basic.c in Sources */ = {isa = PBXBuildFile; fileRef = 03F4D7351A1D00A1009F920C /* my_basic.c */; };
|
||||
03F4D73A1A1D00A1009F920C /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 03F4D7381A1D00A1009F920C /* main.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
03F4D7281A1D0081009F920C /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
03F4D72A1A1D0081009F920C /* my_basic_mac */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = my_basic_mac; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
03F4D7351A1D00A1009F920C /* my_basic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = my_basic.c; sourceTree = "<group>"; };
|
||||
03F4D7361A1D00A1009F920C /* my_basic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = my_basic.h; sourceTree = "<group>"; };
|
||||
03F4D7381A1D00A1009F920C /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
03F4D7271A1D0081009F920C /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
03F4D7211A1D0081009F920C = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
03F4D7341A1D00A1009F920C /* core */,
|
||||
03F4D7371A1D00A1009F920C /* shell */,
|
||||
03F4D72B1A1D0081009F920C /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
03F4D72B1A1D0081009F920C /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
03F4D72A1A1D0081009F920C /* my_basic_mac */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
03F4D7341A1D00A1009F920C /* core */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
03F4D7351A1D00A1009F920C /* my_basic.c */,
|
||||
03F4D7361A1D00A1009F920C /* my_basic.h */,
|
||||
);
|
||||
path = core;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
03F4D7371A1D00A1009F920C /* shell */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
03F4D7381A1D00A1009F920C /* main.c */,
|
||||
);
|
||||
path = shell;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
03F4D7291A1D0081009F920C /* my_basic_mac */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 03F4D7311A1D0081009F920C /* Build configuration list for PBXNativeTarget "my_basic_mac" */;
|
||||
buildPhases = (
|
||||
03F4D7261A1D0081009F920C /* Sources */,
|
||||
03F4D7271A1D0081009F920C /* Frameworks */,
|
||||
03F4D7281A1D0081009F920C /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = my_basic_mac;
|
||||
productName = my_basic_mac;
|
||||
productReference = 03F4D72A1A1D0081009F920C /* my_basic_mac */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
03F4D7221A1D0081009F920C /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0610;
|
||||
ORGANIZATIONNAME = "W. Renxin";
|
||||
TargetAttributes = {
|
||||
03F4D7291A1D0081009F920C = {
|
||||
CreatedOnToolsVersion = 6.1;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 03F4D7251A1D0081009F920C /* Build configuration list for PBXProject "my_basic_mac" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 03F4D7211A1D0081009F920C;
|
||||
productRefGroup = 03F4D72B1A1D0081009F920C /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
03F4D7291A1D0081009F920C /* my_basic_mac */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
03F4D7261A1D0081009F920C /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
03F4D73A1A1D00A1009F920C /* main.c in Sources */,
|
||||
03F4D7391A1D00A1009F920C /* my_basic.c in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
03F4D72F1A1D0081009F920C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
03F4D7301A1D0081009F920C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
03F4D7321A1D0081009F920C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
03F4D7331A1D0081009F920C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
03F4D7251A1D0081009F920C /* Build configuration list for PBXProject "my_basic_mac" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
03F4D72F1A1D0081009F920C /* Debug */,
|
||||
03F4D7301A1D0081009F920C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
03F4D7311A1D0081009F920C /* Build configuration list for PBXNativeTarget "my_basic_mac" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
03F4D7321A1D0081009F920C /* Debug */,
|
||||
03F4D7331A1D0081009F920C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 03F4D7221A1D0081009F920C /* Project object */;
|
||||
}
|
7
my_basic_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
my_basic_mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:my_basic_mac.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
BIN
output/my_basic.exe
Normal file
BIN
output/my_basic.exe
Normal file
Binary file not shown.
BIN
output/my_basic_mac
Executable file
BIN
output/my_basic_mac
Executable file
Binary file not shown.
BIN
resource/icon.ico
Normal file
BIN
resource/icon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.9 KiB |
BIN
resource/my_basic.aps
Normal file
BIN
resource/my_basic.aps
Normal file
Binary file not shown.
113
resource/my_basic.rc
Normal file
113
resource/my_basic.rc
Normal file
@ -0,0 +1,113 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 中文(中华人民共和国) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
#pragma code_page(936)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON_MAIN ICON "icon.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,42
|
||||
PRODUCTVERSION 1,0,0,42
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "080404b0"
|
||||
BEGIN
|
||||
VALUE "Comments", "MY-BASIC"
|
||||
VALUE "CompanyName", "W. Renxin"
|
||||
VALUE "FileDescription", "MY-BASIC interpreter"
|
||||
VALUE "FileVersion", "1, 0, 0, 42"
|
||||
VALUE "InternalName", "my_basic"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2011 - 2014 W. Renxin"
|
||||
VALUE "LegalTrademarks", "MY-BASIC"
|
||||
VALUE "OriginalFilename", "my_basic.exe"
|
||||
VALUE "ProductName", "MY-BASIC"
|
||||
VALUE "ProductVersion", "1, 0, 0, 42"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x804, 1200
|
||||
END
|
||||
END
|
||||
|
||||
#endif // 中文(中华人民共和国) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
16
resource/resource.h
Normal file
16
resource/resource.h
Normal file
@ -0,0 +1,16 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by my_basic.rc
|
||||
//
|
||||
#define IDI_ICON_MAIN 101
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 102
|
||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
7
sample/sample01.bas
Normal file
7
sample/sample01.bas
Normal file
@ -0,0 +1,7 @@
|
||||
' This script is an example of MY-BASIC
|
||||
' Copyright (c) 2011 - 2014 W. Renxin. All rights reserved.
|
||||
' For more information, see https://github.com/paladin-t/my_basic/
|
||||
|
||||
s$ = "hello "
|
||||
s$ = s$ + "world"
|
||||
PRINT s$ + "!"
|
17
sample/sample02.bas
Normal file
17
sample/sample02.bas
Normal file
@ -0,0 +1,17 @@
|
||||
' This script is an example of MY-BASIC
|
||||
' Copyright (c) 2011 - 2014 W. Renxin. All rights reserved.
|
||||
' For more information, see https://github.com/paladin-t/my_basic/
|
||||
|
||||
e = 50
|
||||
|
||||
PRINT "Primes in ", e, ": ", 2, ", "
|
||||
|
||||
FOR n = 3 TO e
|
||||
m = 2
|
||||
is = 1
|
||||
WHILE m < n
|
||||
IF n MOD m = 0 THEN is = 0 ELSE m = m + 1
|
||||
IF is = 0 THEN EXIT
|
||||
WEND
|
||||
IF is = 1 THEN PRINT n, ", "
|
||||
NEXT n
|
22
sample/sample03.bas
Normal file
22
sample/sample03.bas
Normal file
@ -0,0 +1,22 @@
|
||||
' This script is an example of MY-BASIC
|
||||
' Copyright (c) 2011 - 2014 W. Renxin. All rights reserved.
|
||||
' For more information, see https://github.com/paladin-t/my_basic/
|
||||
|
||||
PRINT "Input: "
|
||||
INPUT ns$
|
||||
n = VAL(ns$)
|
||||
|
||||
x = n * 2 - 1
|
||||
a = 1 - 1 / 3
|
||||
w = (x - 5) / 2 + 1
|
||||
v = 100 / w
|
||||
|
||||
FOR y = 5 TO x STEP 2
|
||||
iy = (y - 1) / 4
|
||||
iy = FLOOR(iy)
|
||||
IF iy = (y - 1) / 4 THEN a = a + 1 / y ELSE a = a - 1 / y
|
||||
u = u + v
|
||||
NEXT
|
||||
a = a * 4
|
||||
|
||||
PRINT "PI = ", a
|
23
sample/sample04.bas
Normal file
23
sample/sample04.bas
Normal file
@ -0,0 +1,23 @@
|
||||
' This script is an example of MY-BASIC
|
||||
' Copyright (c) 2011 - 2014 W. Renxin. All rights reserved.
|
||||
' For more information, see https://github.com/paladin-t/my_basic/
|
||||
|
||||
BEGIN:
|
||||
n = 10
|
||||
DIM arr(n)
|
||||
GOSUB CALC
|
||||
GOSUB SHOW
|
||||
END
|
||||
|
||||
CALC:
|
||||
arr(0) = 1
|
||||
FOR i = 1 TO n - 1
|
||||
IF i = 1 THEN arr(i) = 1 ELSE arr(i) = arr(i - 1) + arr(i - 2)
|
||||
NEXT
|
||||
RETURN
|
||||
|
||||
SHOW:
|
||||
FOR i = 0 TO n - 1
|
||||
PRINT arr(i), ", "
|
||||
NEXT
|
||||
RETURN
|
433
shell/main.c
Normal file
433
shell/main.c
Normal file
@ -0,0 +1,433 @@
|
||||
/*
|
||||
** This source file is part of MY-BASIC
|
||||
**
|
||||
** For the latest info, see https://github.com/paladin-t/my_basic/
|
||||
**
|
||||
** Copyright (c) 2011 - 2014 W. Renxin
|
||||
**
|
||||
** Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
** this software and associated documentation files (the "Software"), to deal in
|
||||
** the Software without restriction, including without limitation the rights to
|
||||
** use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
** the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
** subject to the following conditions:
|
||||
**
|
||||
** The above copyright notice and this permission notice shall be included in all
|
||||
** copies or substantial portions of the Software.
|
||||
**
|
||||
** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
** FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
** COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
** IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
** CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# ifndef _CRT_SECURE_NO_WARNINGS
|
||||
# define _CRT_SECURE_NO_WARNINGS
|
||||
# endif /* _CRT_SECURE_NO_WARNINGS */
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# include <crtdbg.h>
|
||||
# include <conio.h>
|
||||
#else /* _MSC_VER */
|
||||
# include <unistd.h>
|
||||
#endif /* _MSC_VER */
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "../core/my_basic.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# pragma warning(disable : 4127)
|
||||
# pragma warning(disable : 4996)
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
#define _MAX_LINE_LENGTH 256
|
||||
#define _str_eq(__str1, __str2) (_strcmpi(__str1, __str2) == 0)
|
||||
|
||||
#define _LINE_INC_STEP 16
|
||||
|
||||
#define _NO_END(s) (MB_FUNC_OK == s || MB_FUNC_SUSPEND == s || MB_FUNC_WARNING == s || MB_FUNC_ERR == s || MB_FUNC_END == s)
|
||||
|
||||
typedef struct _code_line_t {
|
||||
char** lines;
|
||||
int count;
|
||||
int size;
|
||||
} _code_line_t;
|
||||
|
||||
static mb_interpreter_t* bas = 0;
|
||||
|
||||
static _code_line_t* c = 0;
|
||||
|
||||
static _code_line_t* _create_code(void) {
|
||||
_code_line_t* result = (_code_line_t*)malloc(sizeof(_code_line_t));
|
||||
result->count = 0;
|
||||
result->size = _LINE_INC_STEP;
|
||||
result->lines = (char**)malloc(sizeof(char*) * result->size);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void _destroy_code(_code_line_t* code) {
|
||||
int i = 0;
|
||||
mb_assert(code);
|
||||
for(i = 0; i < code->count; ++i) {
|
||||
free(code->lines[i]);
|
||||
}
|
||||
free(code->lines);
|
||||
free(code);
|
||||
}
|
||||
|
||||
static void _clear_code(_code_line_t* code) {
|
||||
int i = 0;
|
||||
mb_assert(code);
|
||||
for(i = 0; i < code->count; ++i) {
|
||||
free(code->lines[i]);
|
||||
}
|
||||
code->count = 0;
|
||||
}
|
||||
|
||||
static void _append_line(_code_line_t* code, char* txt) {
|
||||
mb_assert(code && txt);
|
||||
if(code->count + 1 == code->size) {
|
||||
code->size += _LINE_INC_STEP;
|
||||
code->lines = (char**)realloc(code->lines, sizeof(char*) * code->size);
|
||||
}
|
||||
code->lines[code->count++] = strdup(txt);
|
||||
}
|
||||
|
||||
static char* _get_code(_code_line_t* code) {
|
||||
char* result = 0;
|
||||
int i = 0;
|
||||
mb_assert(code);
|
||||
result = (char*)malloc((_MAX_LINE_LENGTH + 2) * code->count + 1);
|
||||
result[0] = '\0';
|
||||
for(i = 0; i < code->count; ++i) {
|
||||
result = strcat(result, code->lines[i]);
|
||||
if(i != code->count - 1) {
|
||||
result = strcat(result, "\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void _set_code(_code_line_t* code, char* txt) {
|
||||
char* cursor = 0;
|
||||
char _c = '\0';
|
||||
mb_assert(code);
|
||||
if(!txt) {
|
||||
return;
|
||||
}
|
||||
_clear_code(code);
|
||||
cursor = txt;
|
||||
do {
|
||||
_c = *cursor;
|
||||
if(_c == '\r' || _c == '\n' || _c == '\0') {
|
||||
cursor[0] = '\0';
|
||||
if(_c == '\r' && *(cursor + 1) == '\n') {
|
||||
++cursor;
|
||||
}
|
||||
_append_line(code, txt);
|
||||
txt = cursor + 1;
|
||||
}
|
||||
++cursor;
|
||||
} while(_c);
|
||||
}
|
||||
|
||||
static char* _load_file(const char* path) {
|
||||
FILE* fp = 0;
|
||||
char* result = 0;
|
||||
long curpos = 0;
|
||||
long l = 0;
|
||||
mb_assert(path);
|
||||
fp = fopen(path, "rb");
|
||||
if(fp) {
|
||||
curpos = ftell(fp);
|
||||
fseek(fp, 0L, SEEK_END);
|
||||
l = ftell(fp);
|
||||
fseek(fp, curpos, SEEK_SET);
|
||||
result = (char*)malloc((size_t)(l + 1));
|
||||
mb_assert(result);
|
||||
fread(result, 1, l, fp);
|
||||
fclose(fp);
|
||||
result[l] = '\0';
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int _save_file(const char* path, const char* txt) {
|
||||
FILE* fp = 0;
|
||||
mb_assert(path && txt);
|
||||
fp = fopen(path, "wb");
|
||||
if(fp) {
|
||||
fwrite(txt, sizeof(char), strlen(txt), fp);
|
||||
fclose(fp);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int beep(mb_interpreter_t* s, void** l) {
|
||||
int result = MB_FUNC_OK;
|
||||
|
||||
mb_assert(s && l);
|
||||
|
||||
mb_check(mb_attempt_func_begin(s, l));
|
||||
mb_check(mb_attempt_func_end(s, l));
|
||||
|
||||
putchar('\a');
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void _on_error(mb_interpreter_t* s, mb_error_e e, char* m, int p, unsigned short row, unsigned short col, int abort_code) {
|
||||
mb_unrefvar(s);
|
||||
if(SE_NO_ERR != e) {
|
||||
printf("Error:\n [POS] %d, [ROW] %d, [COL] %d,\n [CODE] %d, [MESSAGE] %s, [ABORT CODE] %d\n", p, row, col, e, m, abort_code);
|
||||
}
|
||||
}
|
||||
|
||||
static void _on_startup(void) {
|
||||
c = _create_code();
|
||||
|
||||
mb_init();
|
||||
|
||||
mb_open(&bas);
|
||||
mb_set_error_handler(bas, _on_error);
|
||||
|
||||
mb_reg_fun(bas, beep);
|
||||
}
|
||||
|
||||
static void _on_exit(void) {
|
||||
mb_close(&bas);
|
||||
|
||||
mb_dispose();
|
||||
|
||||
_destroy_code(c);
|
||||
c = 0;
|
||||
|
||||
#if defined _MSC_VER && !defined _WIN64
|
||||
if(0 != _CrtDumpMemoryLeaks()) { _asm { int 3 } }
|
||||
#endif /* _MSC_VER && !_WIN64 */
|
||||
}
|
||||
|
||||
static void _clear_screen(void) {
|
||||
#ifdef _MSC_VER
|
||||
system("cls");
|
||||
#else /* _MSC_VER */
|
||||
system("clear");
|
||||
#endif /* _MSC_VER */
|
||||
}
|
||||
|
||||
static int _new_program(void) {
|
||||
_clear_code(c);
|
||||
|
||||
return mb_reset(&bas, false);
|
||||
}
|
||||
|
||||
static void _list_program(const char* sn, const char* cn) {
|
||||
long lsn = 0;
|
||||
long lcn = 0;
|
||||
mb_assert(sn && cn);
|
||||
lsn = atoi(sn);
|
||||
lcn = atoi(cn);
|
||||
if(lsn == 0 && lcn == 0) {
|
||||
char* txt = _get_code(c);
|
||||
printf("%s\n", txt);
|
||||
free(txt);
|
||||
} else {
|
||||
long i = 0;
|
||||
long e = 0;
|
||||
if(lsn < 1 || lsn > c->count) {
|
||||
printf("Line number %ld out of bound.\n", lsn);
|
||||
|
||||
return;
|
||||
}
|
||||
if(lcn < 0) {
|
||||
printf("Invalid line count %ld.\n", lcn);
|
||||
|
||||
return;
|
||||
}
|
||||
--lsn;
|
||||
e = lcn ? lsn + lcn : c->count;
|
||||
for(i = lsn; i < e; ++i) {
|
||||
if(i >= c->count) {
|
||||
break;
|
||||
}
|
||||
printf("%s\n", c->lines[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void _edit_program(const char* no) {
|
||||
char line[_MAX_LINE_LENGTH];
|
||||
long lno = 0;
|
||||
mb_assert(no);
|
||||
lno = atoi(no);
|
||||
if(lno < 1 || lno > c->count) {
|
||||
printf("Line number %ld out of bound.\n", lno);
|
||||
|
||||
return;
|
||||
}
|
||||
--lno;
|
||||
memset(line, 0, _MAX_LINE_LENGTH);
|
||||
printf("%ld]", lno + 1);
|
||||
mb_gets(line, _MAX_LINE_LENGTH);
|
||||
c->lines[lno] = (char*)realloc(c->lines[lno], strlen(line) + 1);
|
||||
strcpy(c->lines[lno], line);
|
||||
}
|
||||
|
||||
static void _load_program(const char* path) {
|
||||
char* txt = _load_file(path);
|
||||
if(txt) {
|
||||
_new_program();
|
||||
_set_code(c, txt);
|
||||
free(txt);
|
||||
if(c->count == 1) {
|
||||
printf("Load done. %d line loaded.\n", c->count);
|
||||
} else {
|
||||
printf("Load done. %d lines loaded.\n", c->count);
|
||||
}
|
||||
} else {
|
||||
printf("Cannot load file \"%s\"\n", path);
|
||||
}
|
||||
}
|
||||
|
||||
static void _save_program(const char* path) {
|
||||
char* txt = _get_code(c);
|
||||
if(!_save_file(path, txt)) {
|
||||
printf("Cannot save file \"%s\"\n", path);
|
||||
} else {
|
||||
if(c->count == 1) {
|
||||
printf("Save done. %d line saved.\n", c->count);
|
||||
} else {
|
||||
printf("Save done. %d lines saved.\n", c->count);
|
||||
}
|
||||
}
|
||||
free(txt);
|
||||
}
|
||||
|
||||
static void _kill_program(const char* path) {
|
||||
if(!unlink(path)) {
|
||||
printf("Delete file \"%s\" successfully.\n", path);
|
||||
} else {
|
||||
printf("Delete file \"%s\" failed.\n", path);
|
||||
}
|
||||
}
|
||||
|
||||
static void _show_tip(void) {
|
||||
printf("MY-BASIC Interpreter Shell - %s.\n", mb_ver_string());
|
||||
printf("Copyright (c) 2011 - 2014 W. Renxin. All Rights Reserved.\n");
|
||||
printf("For more information, see https://github.com/paladin-t/my_basic/.\n");
|
||||
printf("Input HELP and hint enter to view help information.\n");
|
||||
}
|
||||
|
||||
static void _show_help(void) {
|
||||
printf("Commands:\n");
|
||||
printf(" CLS - Clear screen\n");
|
||||
printf(" NEW - Clear current program\n");
|
||||
printf(" RUN - Run current program\n");
|
||||
printf(" BYE - Quit interpreter\n");
|
||||
printf(" LIST - List current program\n");
|
||||
printf(" Usage: LIST [l [n]], l is start line number, n is line count\n");
|
||||
printf(" EDIT - Edit a line in current program\n");
|
||||
printf(" Usage: EDIT n, n is line number\n");
|
||||
printf(" LOAD - Load a file as current program\n");
|
||||
printf(" Usage: LOAD *.*\n");
|
||||
printf(" SAVE - Save current program to a file\n");
|
||||
printf(" Usage: SAVE *.*\n");
|
||||
printf(" KILL - Delete a file\n");
|
||||
printf(" Usage: KILL *.*\n");
|
||||
}
|
||||
|
||||
static int _do_line(void) {
|
||||
int result = MB_FUNC_OK;
|
||||
char line[_MAX_LINE_LENGTH];
|
||||
char dup[_MAX_LINE_LENGTH];
|
||||
|
||||
mb_assert(bas);
|
||||
|
||||
memset(line, 0, _MAX_LINE_LENGTH);
|
||||
printf("]");
|
||||
mb_gets(line, _MAX_LINE_LENGTH);
|
||||
|
||||
memcpy(dup, line, _MAX_LINE_LENGTH);
|
||||
strtok(line, " ");
|
||||
|
||||
if(_str_eq(line, "")) {
|
||||
/* Do nothing */
|
||||
} else if(_str_eq(line, "HELP")) {
|
||||
_show_help();
|
||||
} else if(_str_eq(line, "CLS")) {
|
||||
_clear_screen();
|
||||
} else if(_str_eq(line, "NEW")) {
|
||||
result = _new_program();
|
||||
} else if(_str_eq(line, "RUN")) {
|
||||
char* txt = _get_code(c);
|
||||
result = mb_reset(&bas, false);
|
||||
result = mb_load_string(bas, txt);
|
||||
free(txt);
|
||||
result = mb_run(bas);
|
||||
printf("\n");
|
||||
} else if(_str_eq(line, "BYE")) {
|
||||
result = MB_FUNC_BYE;
|
||||
} else if(_str_eq(line, "LIST")) {
|
||||
char* sn = line + strlen(line) + 1;
|
||||
char* cn = 0;
|
||||
strtok(sn, " ");
|
||||
cn = sn + strlen(sn) + 1;
|
||||
_list_program(sn, cn);
|
||||
} else if(_str_eq(line, "EDIT")) {
|
||||
char* no = line + strlen(line) + 1;
|
||||
_edit_program(no);
|
||||
} else if(_str_eq(line, "LOAD")) {
|
||||
char* path = line + strlen(line) + 1;
|
||||
_load_program(path);
|
||||
} else if(_str_eq(line, "SAVE")) {
|
||||
char* path = line + strlen(line) + 1;
|
||||
_save_program(path);
|
||||
} else if(_str_eq(line, "KILL")) {
|
||||
char* path = line + strlen(line) + 1;
|
||||
_kill_program(path);
|
||||
} else {
|
||||
_append_line(c, dup);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
int status = 0;
|
||||
|
||||
#if defined _MSC_VER && !defined _WIN64
|
||||
_CrtSetBreakAlloc(0);
|
||||
#endif /* _MSC_VER && !_WIN64 */
|
||||
|
||||
atexit(_on_exit);
|
||||
|
||||
_on_startup();
|
||||
|
||||
if(argc == 1) {
|
||||
_show_tip();
|
||||
do {
|
||||
status = _do_line();
|
||||
} while(_NO_END(status));
|
||||
} else if(argc == 2) {
|
||||
if(mb_load_file(bas, argv[1]) == MB_FUNC_OK) {
|
||||
mb_run(bas);
|
||||
}
|
||||
} else {
|
||||
printf("Unknown arguments\n");
|
||||
_show_tip();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user