CLGO SCRIPT
_____________________________________________________________________________
CLGO SCRIPT控制台绘图脚本语言,具有类似C语言的函数定义、函数调用、递归、循环、
逻辑判断等语法功能。在内存中解释运行,速度迅猛。同时,CLGO语言具有非常简单的
语法结构、关键词、非常适合快速上手。简短的语句就能绘出美妙的画面。
_____________________________________________________________________________
下载:[attach]10383[/attach]
命令:
-----------------------------------------------------------------------------
关键词(不区分大小写) 中文释义 用法说明
-----------------------------------------------------------------------------
___________________________________全局变量__________________________________
$PENX 横坐标
$PENY 纵坐标
$PENW 笔宽 取值0-255
$PENC 笔色 取值0-15
$PENB 笔背景色 取值0-15
$PENS 笔光滑度 取值0-6
$PENA 笔透明度 取值0-255
$HEADING 笔头角度 取值0-360
$RANDOM 随机数 取值随机
$YEAR、$MONTH、$DAY、$HOUR、$MINUTE、$SECOND 时间变量
$TP0 - $TP9 用户变量 供用户使用的全局变量
___________________________________绘图命令___________________________________
FD 前进 FD 100 //前进100步
BK 后退 BK 100 //后退100步
LT 左转 LT 90 //左转 90度
RT 右转 RT 90 //右转 90度
PU 抬笔 PU //抬笔
PD 落笔 PD //落笔
PE 笔擦 PE //笔擦
HOME 回家 笔归位至中央、笔头朝上
CLEAN 清图 清除绘图区
___________________________________语句命令___________________________________
IF~ELIF 如果~再则 条件指令
REPEAT 重复 RP 4[循环体]
WHILE 当 WHILE 条件[循环体]
FOR 循环 FOR 变量 初值 终值[循环体]步长
___________________________________语句词语___________________________________
NOT 逻辑否
AND 逻辑与
OR 逻辑或
___________________________________扩展命令___________________________________
PAUSE 暂停 请按任意键继续
WAIT 等待 WAIT 3000 //等待3秒
STOP 停止 停止子过程
EXIT 退出 退出整个脚本
FILL 颜色填充 用颜色填充笔所在的封闭区域
ECHO 显示字符 ECHO 你好
EVAL 计算表达式值 EVAL sin(pi/6)+cos(pi/3)
READ 获取按键
OVAL 画椭圆 OVAL 100 50 //画横向半径为100,纵向半径为50的椭圆
RECT 画矩形 RECT 100 50 //画横向长度为100,纵向长度为50的矩形
ROTE 旋转 ROTE 30 //画布旋转30度
MEMUSE 启用内存画布
MEMSEE 查看内存画布
MEMOUT 抛弃内存画布
-----------------------------------------------------------------------------
释符:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
行注释 // 行内容
段注释 /*
段内容
*/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数学类关键词(必须小写):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
常数类
pi 3.1415926535897932
e 2.7182818284590452
通用类
round 四舍五入
floor 整取
abs 绝对值
ceil 向上舍入
deg 角度转弧度
exp e的次幂
sqrt 开方
fac 阶乘
lg 常用对数,以10为底
ln 自然对数
+ 加
- 减
* 乘
/ 除
% 取余数
^ 次方
! 阶乘
三角函数类
sin、cos、tan
arcsin、arccos、arctan
双曲函数类
sinh、cosh、tanh
arcsinh、arccosh、arctanh
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
十六色系:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
{ 0, 0, 0,RGB( 0, 0, 0)}, //黑色
{ 0, 0,255,RGB( 0, 0,255)}, //蓝色
{ 0,255, 0,RGB( 0,255, 0)}, //绿色
{ 0,255,255,RGB( 0,255,255)}, //青色
{255, 0, 0,RGB(255, 0, 0)}, //红色
{238,130,238,RGB(238,130,238)}, //紫兰
{165, 42, 42,RGB(165, 42, 42)}, //棕色
{211,211,211,RGB(211,211,211)}, //浅灰
{169,169,169,RGB(169,169,169)}, //深灰
{173,216,230,RGB(173,216,230)}, //淡蓝
{144,238,144,RGB(144,238,144)}, //浅绿
{224,255,255,RGB(224,255,255)}, //淡青
{248, 29, 56,RGB(248, 29, 56)}, //亮红
{255, 0,255,RGB(255, 0,255)}, //洋紫
{255,255, 0,RGB(255,255, 0)}, //黄色
{255,255,255,RGB(255,255,255)} //白色
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
批处理调用示例复制代码
- /*
- CLGO SCRIPT, COPYRIGHT@2017~2019 BY HAPPY, VERSION 1.0
- CLGO.EXE
- LINK: -lline -L./ -lgdi32 -lgdiplus
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdbool.h>
- #include <windows.h>
- #include <wincon.h>
- #include <io.h>
- #include <conio.h>
- #include <math.h>
- #include <time.h>
- #include <unistd.h>
- #include <gdiplus\gdiplus.h>
- /***************定义宏变量***************/
- //堆栈尺寸
- #define STACK_SIZE 1024
- //循环体最大层数
- #define LOOP_LEVELS 64
- //变量名最大长度
- #define MAX_WORDS_SIZE 64
- //定义变量值最大长度
- #define MAX_VALUE_SIZE 16
- //绘图系关键词数
- #define KEY_SIZE 20
- //循环系关键词数
- #define CYC_SIZE 5
- //逻辑系关键词
- #define LGC_SIZE 3
- //全局变量解释数
- #define GLOBAL_SIZE 25
- /***************全局类变量***************/
- //主窗句柄
- HWND hCMD;
- HWND hWND2;
- HWND hWND3;
- //主窗区域
- RECT winRECT={0};
- LPRECT lrRECT;
- //画布句柄
- HDC hDC;
- HDC hDC1;
- HDC hDC2;
- HDC hDC3;
- //内存变量
- char* tRAM;
- //缓存容器
- char cacheTain[1025]={0};
- //画线可见,可见即PD,不可见即PU
- BOOL penMODE=TRUE;
- //启用内存背景
- BOOL memMODE=FALSE;
- /***************关键词类目***************/
- //运算符栈
- char STACK1[STACK_SIZE]={0};
- //逆波兰栈
- char STACK2[STACK_SIZE]={0};
- //浮点数栈
- double STACK3[STACK_SIZE]={0};
- //数学函数关键词
- static const char* MATH_WORDS[]={"e", "pi", "sqrt", "lg", "ln", "sin", "cos", "tan", "arcsin", "arccos", "arctan", "deg", "abs", "round", "floor", "ceil", "exp", "sinh", "cosh", "tanh", "arcsinh", "arccosh", "arctanh", NULL};
- //绘图系关键词
- static const char* KEY_WORDS[]={"FD", "BK", "LT", "RT", "PU", "PD", "PE", "CLEAN", "ECHO", "HOME", "STOP", "EXIT", "FILL", "PAUSE", "WAIT", "ROTE", "MEMUSE", "MEMSEE", "MEMOUT", "EVAL"};
- static const char KEY_LLENS[]={ 2, 2, 2, 2, 2, 2, 2, 5, 4, 4, 4, 4, 4, 5, 4, 4, 6, 6, 6, 4};
- //循环系关键词
- static const char* CYC_WORDS[]={"IF", "REPEAT", "WHILE", "FOR", "ELIF"};
- static const char CYC_LLENS[]={ 2, 6, 5, 3, 4};
- //逻辑系关键词
- static const char* LGC_WORDS[]={"NOT", "AND", "OR"};
- static const char LGC_LLENS[]={ 3, 3, 2};
- //定义解释器全局变量
- static const char* GLOBAL_WORDS[]={"$PENX", "$PENY", "$HEADING", "$PENB", "$PENW", "$PENC", "$PENS", "$PENA", "$RANDOM", "$YEAR", "$MONTH", "$DAY", "$HOUR", "$MINUTE", "$SECOND", "$TP0", "$TP1", "$TP2", "$TP3", "$TP4", "$TP5", "$TP6", "$TP7", "$TP8", "$TP9"};
- static const char GLOBAL_LLENS[]={ 5, 5, 8, 5, 5, 5, 5, 5, 7, 5, 6, 4, 5, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4};
- double GLOBAL_VALUE[]={ 0, 0, 0, 0, 1, 15, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- /***************申明函数类***************/
- HWND WINAPI GetConsoleWindow();
- float EvalLine(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring);
- /***************RGB 结构体***************/
- typedef struct{
- BYTE R;
- BYTE G;
- BYTE B;
- COLORREF VALUE;
- }STRGB;
- //十六色系数组
- STRGB LOGO_RGB[16]={
- { 0, 0, 0,RGB( 0, 0, 0)}, //黑色
- { 0, 0,255,RGB( 0, 0,255)}, //蓝色
- { 0,255, 0,RGB( 0,255, 0)}, //绿色
- { 0,255,255,RGB( 0,255,255)}, //青色
- {255, 0, 0,RGB(255, 0, 0)}, //红色
- {238,130,238,RGB(238,130,238)}, //紫兰
- {165, 42, 42,RGB(165, 42, 42)}, //棕色
- {211,211,211,RGB(211,211,211)}, //浅灰
- {169,169,169,RGB(169,169,169)}, //深灰
- {173,216,230,RGB(173,216,230)}, //淡蓝
- {144,238,144,RGB(144,238,144)}, //浅绿
- {224,255,255,RGB(224,255,255)}, //淡青
- {248, 29, 56,RGB(248, 29, 56)}, //亮红
- {255, 0,255,RGB(255, 0,255)}, //洋紫
- {255,255, 0,RGB(255,255, 0)}, //黄色
- {255,255,255,RGB(255,255,255)} //白色
- };
- /***************计算函数群***************/
- //阶乘函数
- long long fact(long long n)
- {
- return (n<2) ?1 :n*(fact(n-1));
- }
- //逆波兰核心
- double RevPolishCore(const char* expression)
- {
- STACK3[0]=0;
- char *op=(char*)expression, *S1=STACK1, *S2=STACK2, **key, *cp, *kp;
- double *S3=STACK3, di, ni;
- //生成逆波兰
- while(*op!='\0'){
- switch(*op){
- case ' ' :
- case '\t':
- case '\r':
- case '\n':
- //过滤空字符
- op++;
- continue;
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z':
- //识别数学函数关键词
- key=(char**)MATH_WORDS;
- while(*key !=NULL){
- cp=op, kp=*key;
- //比对关键词字母
- while(*cp==*kp && *kp!='\0'){
- cp++, kp++;
- }
- //验证关键词结尾
- if((*cp<'a'||*cp>'z') && (*kp=='\0')){
- op=cp;
- break;
- }
- key++;
- }
- //构建伪双目
- if(*key !=NULL){
- *(S2++)='.';
- *(S2++)=' ';
- //伪双目入栈
- while('A'<=(*S1) && (*S1)<='Z'){
- *(S2++)=*(S1--);
- }
- *(++S1)=key-(char**)MATH_WORDS+65;
- continue;
- }else{
- //无法识别的数学函数
- fputs("Unrecognized math function\n", stderr);
- exit(1);
- }
- break;
- case '(':
- *(++S1)=*op;
- if(*(op+1)=='-' || *(op+1)=='+'){
- *(S2++)='0', *(S2++)=' ';
- }
- break;
- case ')':
- while(*S1!='(')
- {
- *(S2++)=*(S1--);
- }
- //舍弃'('
- S1--;
- break;
- case '+':
- case '-':
- while(S1!=STACK1 && *S1!='(')
- {
- *(S2++)=*(S1--);
- }
- *(++S1)=*op;
- break;
- case '^':
- //指数符
- while('A'<=(*S1) && (*S1)<='Z')
- {
- *(S2++)=*(S1--);
- }
- *(++S1)=*op;
- break;
- case '!':
- //阶乘符
- *(S2++)=*op;
- break;
- case '%':
- case '*':
- case '/':
- while(('A'<=(*S1) && (*S1)<='Z') ||*S1=='%' ||*S1=='*' ||*S1=='/' ||*S1=='^'){
- *(S2++)=*(S1--);
- }
- *(++S1)=*op;
- break;
- default :
- if((*op<'0' || *op>'9') && (*op!='.')){
- //无法识别的运算符
- fputs("Unrecognized operator\n", stderr);
- exit(1);
- }
- //浮点数入栈
- while(('0'<=*op && *op<='9') ||*op=='.'){
- *(S2++)=*(op++);
- }
- op--;
- *(S2++)=' ';
- break;
- }
- op++;
- }
- //收尾逆波兰
- while(S1 !=STACK1){*(S2++)=*(S1--);}
- *S2=' ';
- //计算逆波兰
- op=STACK2;
- while(*op!=' '){
- switch(*op){
- case 'A':
- *S3=2.7182818284590452;
- break;
- case 'B':
- *S3=3.1415926535897932;
- break;
- case 'C':
- if(*S3 <0){
- //负数没有平方根
- fputs("Negative numbers have no square root\n", stderr);
- exit(1);
- }
- *(S3-1)=sqrt(*S3);
- S3--;
- break;
- case 'D':
- if(*S3 <0){
- //负数没有对数
- fputs("Negative numbers are not logarithmic\n", stderr);
- exit(1);
- }
- *(S3-1)=log10(*S3);
- S3--;
- break;
- case 'E':
- if(*S3 <0){
- //负数没有自然对数
- fputs("Negative numbers have no natural logarithms\n", stderr);
- exit(1);
- }
- *(S3-1)=log(*S3);
- S3--;
- break;
- case 'F':
- *(S3-1)=sin(*S3);
- S3--;
- break;
- case 'G':
- *(S3-1)=cos(*S3);
- S3--;
- break;
- case 'H':
- if(*S3==3.1415926535897932/2){
- //π/2没有正切值
- fputs("The pi/2 has no tangent\n", stderr);
- exit(1);
- }
- *(S3-1)=tan(*S3);
- S3--;
- break;
- case 'I':
- *(S3-1)=asin(*S3);
- S3--;
- break;
- case 'J':
- *(S3-1)=acos(*S3);
- S3--;
- break;
- case 'K':
- *(S3-1)=atan(*S3);
- S3--;
- break;
- case 'L':
- *(S3-1)=(*S3)*3.1415926535897932/180.0;
- S3--;
- break;
- case 'M':
- *(S3-1)=(*S3<0)?(-(*S3)):(*S3);
- S3--;
- break;
- case 'N':
- *(S3-1)=round(*S3);
- S3--;
- break;
- case 'O':
- *(S3-1)=floor(*S3);
- S3--;
- break;
- case 'P':
- *(S3-1)=ceil(*S3);
- S3--;
- break;
- case 'Q':
- *(S3-1)=exp(*S3);
- S3--;
- break;
- case 'R':
- *(S3-1)=sinh(*S3);
- S3--;
- break;
- case 'S':
- *(S3-1)=cosh(*S3);
- S3--;
- break;
- case 'T':
- *(S3-1)=tanh(*S3);
- S3--;
- break;
- case 'U':
- *(S3-1)=asinh(*S3);
- S3--;
- break;
- case 'V':
- *(S3-1)=acosh(*S3);
- S3--;
- break;
- case 'W':
- *(S3-1)=atanh(*S3);
- S3--;
- break;
- case '+':
- *(S3-1)+=*S3;
- S3--;
- break;
- case '-':
- *(S3-1)-=*S3;
- S3--;
- break;
- case '*':
- *(S3-1)*=*S3;
- S3--;
- break;
- case '%':
- case '/':
- if(*S3 !=0){
- if(*op=='%'){
- //取余数
- *(S3-1)=(int)*(S3-1) % (int)*S3;
- }else{
- *(S3-1)/=*S3;
- }
- }else{
- //除数不能为零
- fputs("Divisor is zero error\n", stderr);
- exit(1);
- }
- S3--;
- break;
- case '^':
- if(*(S3-1)==0 && *S3<0){
- //除数不能为零
- fputs("Function pow's divisor is zero error\n", stderr);
- exit(1);
- }
- *(S3-1)=pow(*(S3-1), *S3);
- S3--;
- break;
- case '!':
- if(*S3 <0){
- //负数没有阶乘
- fputs("Negative numbers have no factorial\n", stderr);
- exit(1);
- }
- *S3=fact((long long)(*S3));
- break;
- default :
- //字符串转浮点
- di=0, ni=1;
- while('0'<=*op && *op<='9'){
- di=10*di+(*op)-'0';
- op++;
- }
- if(*op=='.'){
- op++;
- while('0'<=*op && *op<='9'){
- di=10*di+(*op)-'0';
- op++, ni*=10;
- }
- }
- *(++S3)=di/ni;
- break;
- }
- op++;
- }
- //返回计算结果
- return *S3;
- }
- /***************辅助函数群***************/
- //获取时间
- inline int getTIME(int i)
- {
- time_t timep;
- struct tm *p;
- time(&timep);
- p=localtime(&timep);
- switch(i){
- case 9:
- return p->tm_year+1900;
- case 10:
- return p->tm_mon+1;
- case 11:
- return p->tm_mday;
- case 12:
- return p->tm_hour;
- case 13:
- return p->tm_min;
- case 14:
- return p->tm_sec;
- default:
- return -1;
- }
- return -1;
- }
- //测空字符
- inline BOOL isEND(const char c,const char* endstring)
- {
- if(c=='\0'){return TRUE;}
- while(*endstring!='\0'){
- if(c==*(endstring++)){
- return TRUE;
- }
- }
- return FALSE;
- }
- //过滤行TAB缩进或前空格
- char* passNULL(char* Str)
- {
- if(Str!=NULL){
- while(*Str=='\t' ||*Str==' '){Str++;}
- }
- return Str;
- }
- //识别关键字
- BOOL isKEY(char* Line, char* key, const char* endstring)
- {
- char *op=Line, *kp=key;
- while(*kp!='\0'){
- if((('a'<= *op && *op<='z')?*op-32:*op) != (('a'<= *kp && *kp<='z')?*kp-32:*kp)){break;}
- op++;kp++;
- }
- if(
- *kp=='\0' &&
- isEND(*op, endstring)
- ){
- return TRUE;
- }
- return FALSE;
- }
- //切分变量名
- int ARGS(char* Str, char** WORDS, int PRO_NUM, int LineNUM, char* Line)
- {
- if(PRO_NUM==0){return 0;}
- //过滤回车符
- Str[strlen(Str)-2]='\0';
- int i=0;
- char* lp=Str;
- char* tp;
- strtok(lp, " ");
- while(i<PRO_NUM){
- WORDS[i]=(char*)calloc(MAX_WORDS_SIZE, sizeof(char));
- if((tp=strtok(NULL, " "))==NULL){break;}
- strcpy(WORDS[i++], tp);
- }
- if(i==0){WORDS[i]=(char*)calloc(MAX_WORDS_SIZE, sizeof(char)); return 1;}
- if(i<PRO_NUM){fprintf(stdout, "[%d]:Missing Parameter %s\n", LineNUM, Line);exit(1);}
- return i;
- }
- //切分参数
- int ARGP(char* Str, char** WORDS, int PRO_NUM, char** PRO_WORDS, char** PRO_VALUE)
- {
- int i=-1;
- char* tp;
- strtok(Str, " ");
- while((tp=strtok(NULL, " "))!=NULL && *tp!='\r'){
- WORDS[++i]=(char*)calloc(MAX_VALUE_SIZE, sizeof(char));
- itoa(EvalLine(tp, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"), WORDS[i], 10);
- }
- if(i==-1){WORDS[++i]=(char*)calloc(MAX_VALUE_SIZE, sizeof(char));}
- return i+1;
- }
- //关键词解析函数
- int Identify_KeyWords(char* Line, int SENSITIVE_NUM, char** WORDS, const char* endstring)
- {
- int i, SN;
- for(SN=0; SN<SENSITIVE_NUM; SN++){
- char *op=Line, *kp=WORDS[SN];
- while(*kp!='\0'){
- if(
- (('a'<= *op && *op<='z')?*op-32:*op) != (('a'<= *kp && *kp<='z')?*kp-32:*kp)
- ){
- break;
- }
- op++;kp++;
- }
- if(
- *kp=='\0' &&
- isEND(*op, endstring)
- ){
- return SN;
- }
- }
- return -1;
- }
- //计算含变量表达式函数
- float EvalLine(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
- {
- char* op=cacheTain;
- char* cp=(char*)exp;
- char* Line_Cache=op;
- int i=-1;
- while(!isEND(*cp, " \t\r\n\0")){
- if(!isEND(*cp, ":$ \t\r\n\0")){
- *(op++)=*(cp++);
- continue;
- }
- if((*cp==':') && (i=Identify_KeyWords(cp, PRO_NUM, WORDS, endstring))!=-1){
- char* tmp=VALUE[i];
- *op++='(';
- while(*tmp!='\0'){*(op++)=*(tmp++);}
- *op++=')';
- cp+=strlen(WORDS[i]);
- }else if((*cp=='$') && (i=Identify_KeyWords(cp, GLOBAL_SIZE, (char**)GLOBAL_WORDS, endstring))!=-1){
- //准备临时容器
- char* tmp=(char*)calloc(16, sizeof(char));
- //解析变量名
- switch(i){
- case 8:
- itoa(rand(), tmp, 10);
- break;
- case 9:
- case 10:
- case 11:
- case 12:
- case 13:
- case 14:
- itoa(getTIME(i), tmp, 10);
- break;
- default:
- _gcvt(GLOBAL_VALUE[i], 10, tmp);
- break;
- }
- *op++='(';
- while(*tmp!='\0'){*(op++)=*(tmp++);}
- *op++=')';
- free(tmp);
- cp+=GLOBAL_LLENS[i];
- }
- }
- *op='\0' ;
- return (float)RevPolishCore(Line_Cache);
- }
- //赋值函数
- BOOL AssignMent(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
- {
- char *gp=(char*)exp, *cp=gp;
- while(!isEND(*cp, "=")){
- cp++;
- }
- cp++;
- int i=-1;
- if(gp[0]==':'){
- if(gp[1]==':'){return TRUE;}
- i=Identify_KeyWords(gp, PRO_NUM, WORDS, " \t=");
- itoa(EvalLine(cp, PRO_NUM, WORDS, VALUE, endstring), VALUE[i], 10);
- }else if(gp[0]=='$'){
- i=Identify_KeyWords(gp, GLOBAL_SIZE, (char**)GLOBAL_WORDS, " \t=");
- GLOBAL_VALUE[i]=EvalLine(cp, PRO_NUM, WORDS, VALUE, endstring);
- switch(i){
- case 3:
- GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%16 :16+(int)GLOBAL_VALUE[i]%16;
- STRGB* bgRGB=&LOGO_RGB[(int)GLOBAL_VALUE[i]];
- //创建画刷
- HBRUSH m_brush=CreateSolidBrush(bgRGB->VALUE);
- //填充背景
- FillRect(hDC1, lrRECT, m_brush);
- //删除画刷
- DeleteObject(m_brush);
- break;
- break;
- case 4:
- if(GLOBAL_VALUE[i]<0){GLOBAL_VALUE[i]=-GLOBAL_VALUE[i];}
- break;
- case 5:
- GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%16 :360+(int)GLOBAL_VALUE[i]%16;
- break;
- case 6:
- GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%6 :(0-(int)GLOBAL_VALUE[i])%6;
- break;
- case 7:
- GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%255 :(0-(int)GLOBAL_VALUE[i])%255;
- break;
- default:
- break;
- }
- }
- return TRUE;
- }
- //批量赋值
- BOOL MoreAssignMent(const char* Line, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
- {
- char *gp=(char*)Line;
- while(isEND(*gp, ":$")){
- AssignMent(gp, PRO_NUM, WORDS, VALUE, endstring);
- gp++;
- while(!isEND(*gp, " \t\0")){
- gp++;
- }
- while(!isEND(*gp, ":$\0")){gp++;}
- if(*gp=='\0'){return TRUE;}
- }
- return TRUE;
- }
- //测FOR循环
- inline BOOL isForTrue(const char* Line, int PRO_NUM, char** WORDS, char** VALUE, int CYC)
- {
- if(CYC ==0){return TRUE;}
- int i=-1;
- if((i=Identify_KeyWords(strtok((char*)Line, " "), PRO_NUM, WORDS, " \t")) !=-1){
- int staNUM=EvalLine(strtok(NULL, " "), PRO_NUM, WORDS, VALUE, "()+-*%/ \t\r\n");
- int endNUM=EvalLine(strtok(NULL, " "), PRO_NUM, WORDS, VALUE, "()+-*%/ \t\r\n");
- int var =atoi(VALUE[i]);
- if(staNUM-endNUM<0){return (var<=endNUM)?TRUE:FALSE;}
- return (var>=endNUM)?TRUE:FALSE;
- }
- return FALSE;
- }
- //真值条件判断
- BOOL JudgMent(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
- {
- char* op=cacheTain;
- char* cp=(char*)exp;
- //过滤行TAB缩进或空格
- while(*cp=='\t'|| *cp==' '){cp++;}
- if(isEND(*cp, "\r\n\0")){
- return TRUE;
- }
- char* Line_Cache=op;
- int i=-1, flag=0;
- while(!isEND(*cp, " \t\r\n\0")){
- if (*cp=='>'){
- flag+=4;
- *(op++)='-';
- *(op++)='(';
- cp++;
- continue;
- }else if(*cp=='<'){
- flag+=2;
- *(op++)='-';
- *(op++)='(';
- cp++;
- continue;
- }else if(*cp=='='){
- flag+=1;
- if(flag==1){
- *(op++)='-';
- *(op++)='(';
- }
- cp++;
- continue;
- }else if(*cp!=':'&& *cp!='$'){
- *(op++)=*(cp++);
- continue;
- }
- if((*cp==':') && (i=Identify_KeyWords(cp, PRO_NUM, WORDS, endstring))!=-1){
- char* tmp=VALUE[i];
- *op++='(';
- while(*tmp!='\0'){*(op++)=*(tmp++);}
- *op++=')';
- cp+=strlen(WORDS[i]);
- }else if((*cp=='$') && (i=Identify_KeyWords(cp, PRO_NUM, WORDS, endstring))!=-1){
- char* tmp=(char*)calloc(16, sizeof(char));
- if(i==8){
- itoa(rand(), tmp, 10);
- }else if(9<=i && i<=14){
- itoa(getTIME(i), tmp, 10);
- }else{
- _gcvt(GLOBAL_VALUE[i], 10, tmp);
- }
- *op++='(';
- while(*tmp!='\0'){*(op++)=*(tmp++);}
- *op++=')';
- cp+=GLOBAL_LLENS[i];
- }else{
- return FALSE;
- }
- }
- *(op++)=')';
- *op='\0' ;
- int m=(int)RevPolishCore(Line_Cache);
- if(
- (m >0 && (flag==4||flag==5 )) ||
- (m <0 && (flag==2||flag==3 )) ||
- (m==0 && (flag==1||flag==3||flag==5||flag==0))
- ){
- return TRUE;
- }
- return FALSE;
- }
- //批量真值判断
- BOOL MoreJudgMent(const char* Line, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
- {
- char *gp=(char*)Line;
- int li=Identify_KeyWords(gp, LGC_SIZE, (char**)LGC_WORDS, " \t");
- if(li !=-1){gp+=LGC_LLENS[li];}
- do{
- while(isEND(*gp, " \t")){
- gp++;
- }
- if(JudgMent(gp, PRO_NUM, WORDS, VALUE, endstring)){
- switch(li){
- case 0:
- return FALSE;
- case 1:
- break;
- case 2:
- return TRUE;
- default:
- return TRUE;
- }
- }else{
- switch(li){
- case 0:
- break;
- case 1:
- return FALSE;
- case 2:
- break;
- default:
- return FALSE;
- }
- }
- while(!isEND(*gp, " \t\0" )){gp++;}
- if(*gp=='\0'){return TRUE;}
- while( isEND(*gp, " \t\r\n")){gp++;}
- }while(*gp !='\0');
- }
- /***************绘图函数群***************/
- //隐藏光标
- BOOL SizeCursor(int size)
- {
- CONSOLE_CURSOR_INFO cursor_info = {(DWORD)((size==0)?25:size), (size==0)?FALSE:TRUE};
- return SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
- }
- //平滑画线函数,C++连接库
- void drawSMOOTHLINE(HDC hDC, int penWith, int mode, BYTE alpha, STRGB* penRGB, float x1, float y1, float x2, float y2);
- //封闭区域填充函数,C++连接库
- void fillAREA(HDC hDC, BYTE alpha, STRGB* penRGB, float fill_X, float fill_Y);
- //快速画线函数
- BOOL drawLINE(HDC hDC, int d)
- {
- float x1=GLOBAL_VALUE[0], y1=GLOBAL_VALUE[1];
- GLOBAL_VALUE[0]+=d * sin(GLOBAL_VALUE[2]*0.017453292519943);
- GLOBAL_VALUE[1]+=d * cos(GLOBAL_VALUE[2]*0.017453292519943);
- //当为PU抬笔时,不做绘图
- if(!penMODE){
- return FALSE;
- }
- STRGB* penRGB=&LOGO_RGB[(int)GLOBAL_VALUE[5]];
- drawSMOOTHLINE(hDC, (int)GLOBAL_VALUE[4], (int)GLOBAL_VALUE[6], (int)GLOBAL_VALUE[7], penRGB, lrRECT->right/2+x1, lrRECT->bottom/2-y1, lrRECT->right/2+GLOBAL_VALUE[0], lrRECT->bottom/2-GLOBAL_VALUE[1]);
- return TRUE;
- }
- //退步函数,实现BK
- void backWARD(int d)
- {
- GLOBAL_VALUE[0]-=d * sin(GLOBAL_VALUE[2]*0.017453292519943);
- GLOBAL_VALUE[1]-=d * cos(GLOBAL_VALUE[2]*0.017453292519943);
- }
- //图形旋转
- int RotateDC(HDC hDC, int angle)
- {
- if(angle==0){return 1;}
- XFORM Matrix;
- double rad =-angle * 0.017453292519943;
- Matrix.eM11 = (float)cos(rad);
- Matrix.eM12 = (float)sin(rad);
- Matrix.eM21 =-(float)sin(rad);
- Matrix.eM22 = (float)cos(rad);
- Matrix.eDx = (float)(GLOBAL_VALUE[0]-cos(rad)*GLOBAL_VALUE[0]+sin(rad)*GLOBAL_VALUE[1]);
- Matrix.eDy = (float)(GLOBAL_VALUE[1]-cos(rad)*GLOBAL_VALUE[1]-sin(rad)*GLOBAL_VALUE[0]);
- SetGraphicsMode(hDC, GM_ADVANCED);
- SetWorldTransform(hDC, &Matrix);
- return 0;
- }
- /***************解析函数群***************/
- //脚本解析函数
- int FileScript(char* prossName, int PRO_NUM, char** PRO_VALUE)
- {
- //初始参数,其中KLevel为当前循环层号;
- int i=0, j=0, KLevel=0, SN=-1, Line_LEN=0, fcolor=-1, BASE_VAR_NUM=PRO_NUM;
- char* prepos=NULL;
- //定义过程变量存储容器,即定义 :A型变量,后接 ::A型变量
- char** PRO_WORDS=(char**)calloc(LOOP_LEVELS, sizeof(char*));
- //初始化开关参数,SFLAG[0]==1开始;
- char* SFLAG=(char*)calloc(8, sizeof(char));
- SFLAG[2]=-1;
- //初始化循环参量数组
- int* FORI_CYCL=(int *)calloc(LOOP_LEVELS, sizeof(int ));
- int* FORI_LNUM=(int *)calloc(LOOP_LEVELS, sizeof(int ));
- char** FORI_FTEL=(char**)calloc(LOOP_LEVELS, sizeof(char*));
- char** FORI_FEND=(char**)calloc(LOOP_LEVELS, sizeof(char*));
- BOOL* FORI_IFOT=(BOOL *)calloc(LOOP_LEVELS, sizeof(BOOL ));
- //分配行容器
- char* LCache=(char*)calloc(1025, sizeof(char));
- //辅助行指针
- char* Line;
- //辅助流指针
- char* tmpfp=tRAM;
- while(*tmpfp !='\0'){
- //记录位置
- char* prepos=tmpfp;
- //指针置换
- Line=LCache;
- while(*tmpfp !='\n' && *tmpfp !='\0'){
- *(Line++)=*(tmpfp++);
- }
- if(*tmpfp =='\n'){*(Line++)=*(tmpfp++);}
- *Line='\0';
- //指针回首
- Line=LCache;
- //行计数器
- i++;
- //过滤行TAB缩进或前空格
- while(*Line=='\t'|| *Line==' '){Line++;}
- //过滤空行或行注释
- if(
- (Line[0]=='\r') ||
- (Line[0]=='\n') ||
- (Line[0]=='/' && Line[1]=='/')
- ){
- continue;
- }
- //过滤段间注释
- if(
- (Line[0]=='/' &&Line[1]=='*')
- ){
- SFLAG[0]=0;
- continue;
- }else if(
- (Line[0]=='*' &&Line[1]=='/')
- ){
- SFLAG[0]=1;
- continue;
- }
- //识别子过程名
- if(
- (isEND(Line[2], " \t\r\n\0") ) &&
- (Line[0]=='T' || Line[0]=='t') &&
- (Line[1]=='O' || Line[1]=='o')
- ){
- Line+=2;
- //过滤TO后TAB缩进,或TO后空格
- while(*Line=='\t'|| *Line==' '){Line++;}
- if(isKEY(Line, prossName, " \t\r\n\0")){
- SFLAG[0]=1;
- ARGS(Line, PRO_WORDS, PRO_NUM, i, Line);
- }else{
- SFLAG[0]=0;
- }
- continue;
- }
- //开始开关未打开,或遇到空行
- if(
- SFLAG[0]==0 ||
- isEND(Line[0], "\r\n[")
- ){continue;}
- //IF...ELIF连带性分析
- if(
- (FORI_IFOT[KLevel+1] ) &&
- (Line[0]!='E'&&Line[0]!='e') &&
- (Line[1]!='L'&&Line[1]!='l') &&
- (Line[2]!='I'&&Line[2]!='i') &&
- (Line[3]!='F'&&Line[3]!='f')
- ){
- FORI_IFOT[KLevel+1]=FALSE;
- }
- //解析循环结束标签,循环加速
- if(Line[0]==']'){
- if(KLevel>SFLAG[1]){
- if(FORI_CYCL[KLevel] <0){
- int tpadd=EvalLine(Line+1, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
- if(tpadd==0){tpadd=1;}
- itoa(atoi(PRO_VALUE[0-FORI_CYCL[KLevel]])+tpadd, PRO_VALUE[0-FORI_CYCL[KLevel]], 10);
- }
- if(FORI_FEND[KLevel]==NULL){FORI_FEND[KLevel]=tmpfp;}
- tmpfp=FORI_FTEL[KLevel];
- i=FORI_LNUM[KLevel]-1;
- }else{
- FORI_FTEL[KLevel]=NULL;
- FORI_FEND[KLevel]=NULL;
- FORI_CYCL[KLevel]=0;
- SFLAG[1]=0;
- }
- KLevel--;
- continue;
- }else{
- int ki =Identify_KeyWords(Line, CYC_SIZE, (char**)CYC_WORDS, " \t\r\n\0");
- if( ki!=-1){
- Line=passNULL(Line+CYC_LLENS[ki]);
- KLevel++;
- //解析循环
- if(
- ki==0 && FORI_CYCL[KLevel]<1 && MoreJudgMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*/><= \t\r\n") ||
- ki==1 && FORI_CYCL[KLevel]<EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n" ) ||
- ki==2 && MoreJudgMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*/><= \t\r\n") ||
- ki==3 && isForTrue(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, FORI_CYCL[KLevel]) ||
- ki==4 && (FORI_IFOT[KLevel]) && FORI_CYCL[KLevel]<1 && MoreJudgMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*/><= \t\r\n")
- ){
- if( FORI_FTEL[KLevel]==NULL ){
- FORI_FTEL[KLevel]=prepos;
- FORI_LNUM[KLevel]=i+1;
- if(ki==3){
- char *tp1, *tp2;
- //提取瞬时变量名
- if((tp1=strtok(Line, " "))==NULL){fprintf(stdout, "[%d]:Missing Parameter %s\n", i, Line);exit(1);}
- PRO_WORDS[PRO_NUM]=(char*)calloc(MAX_WORDS_SIZE, sizeof(char));
- strcpy(PRO_WORDS[PRO_NUM], tp1);
- //提取始步
- if((tp2=strtok(NULL, " "))==NULL){fprintf(stdout, "[%d]:Missing Parameter %s\n", i, Line);exit(1);}
- PRO_VALUE[PRO_NUM]=(char*)calloc(MAX_VALUE_SIZE, sizeof(char));
- itoa(EvalLine(tp2, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"), PRO_VALUE[PRO_NUM], 10);
- FORI_CYCL[KLevel] =0-PRO_NUM;
- PRO_NUM++;
- }
- if(ki==0 || ki==4){
- FORI_IFOT[KLevel]=FALSE;
- }
- }
- if(ki !=3){FORI_CYCL[KLevel] ++;}
- }else{
- if((ki==0||ki==4) && FORI_CYCL[KLevel]==0){
- FORI_IFOT[KLevel]=TRUE;
- }
- if(FORI_FEND[KLevel] !=NULL){
- if(FORI_CYCL[KLevel] <0){
- free(PRO_WORDS[PRO_NUM]);
- free(PRO_VALUE[PRO_NUM]);
- PRO_NUM-=1;
- }
- tmpfp=FORI_FEND[KLevel];
- i=FORI_LNUM[KLevel]-1;
- FORI_FTEL[KLevel]=NULL;
- FORI_FEND[KLevel]=NULL;
- FORI_CYCL[KLevel]=0;
- KLevel--;
- }else{
- SFLAG[1]=KLevel;
- }
- }
- continue;
- }
- }
- //语句块循环开关
- if(SFLAG[1]!=0){continue;}
- //变量赋值
- if(Line[0]==':'||Line[0]=='$'){
- MoreAssignMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
- continue;
- }
- //调用子过程
- if(Line[0]=='.'){
- //定义过程传参容器
- char** PAR_VALUE=(char**)calloc(LOOP_LEVELS, sizeof(char*));
- int PAR_NUM=ARGP(Line, PAR_VALUE, PRO_NUM, PRO_WORDS, PRO_VALUE);
- FileScript(Line+1, PAR_NUM, PAR_VALUE);
- free(PAR_VALUE);
- continue;
- }
- //过滤回车符
- if((Line_LEN=strlen(Line))==2){
- continue;
- }else{
- Line[Line_LEN-2]='\0';
- }
- //解析命令行
- if((SN=Identify_KeyWords(Line, KEY_SIZE, (char**)KEY_WORDS, " \t\r\n\0")) !=-1){
- Line=passNULL(Line+KEY_LLENS[SN]);
- }else{
- printf("[%d]:EEEOR LINE \"%s\"\n", i, Line);
- exit(1);
- }
- switch(SN)
- {
- case 0:
- //FD
- drawLINE(hDC, EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
- break;
- case 1:
- //BK
- backWARD(EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
- break;
- case 2:
- //LT
- GLOBAL_VALUE[2]-=EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
- break;
- case 3:
- //RT
- GLOBAL_VALUE[2]+=EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
- break;
- case 4:
- //PU
- penMODE=FALSE;
- break;
- case 5:
- //PD
- if(SFLAG[2] !=-1){
- GLOBAL_VALUE[5]=SFLAG[2];
- SFLAG[2] =-1;
- }
- penMODE=TRUE;
- break;
- case 6:
- //PE
- if(SFLAG[2] ==-1){
- SFLAG[2]=GLOBAL_VALUE[5];
- GLOBAL_VALUE[5]=GLOBAL_VALUE[3];
- }
- break;
- case 7:
- //CLEAN
- InvalidateRect(hCMD,NULL,FALSE);
- break;
- case 8:
- //ECHO, 输出字符串
- printf("%s\n", Line);
- break;
- case 9:
- //HOME
- GLOBAL_VALUE[0]=GLOBAL_VALUE[1]=GLOBAL_VALUE[2]=0;
- break;
- case 10:
- //STOP
- return 0;
- case 11:
- //EXIT
- exit(0);
- case 12:
- //FILL
- if((fcolor=EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n")) !=-1){
- fillAREA(hDC, (BYTE)((int)GLOBAL_VALUE[7]&0xFF), &LOGO_RGB[fcolor], lrRECT->right/2+GLOBAL_VALUE[0], lrRECT->bottom/2-GLOBAL_VALUE[1]);
- }
- break;
- case 13:
- //PAUSE
- getch();
- break;
- case 14:
- //WAIT
- Sleep(EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
- break;
- case 15:
- //ROTE
- //将内存画布拷屏到CMD窗口
- //BitBlt(hDC,0,0,WINDOW_WIDTH,WINDOW_HEIGHT, hDC1,0,0,SRCCOPY);
- RotateDC(hDC, EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
- break;
- case 16:
- //MEMUSE,开辟内存画布
- if(!memMODE){
- BitBlt(hDC3,0,0,lrRECT->right,lrRECT->bottom, hDC1,0,0,SRCCOPY);
- memMODE=TRUE;
- }
- BitBlt(hDC2,0,0,lrRECT->right,lrRECT->bottom, hDC3,0,0,SRCCOPY);
- hDC=hDC2;
- break;
- case 17:
- //MEMSEE,展示内存画布
- BitBlt(hDC1,0,0,lrRECT->right,lrRECT->bottom, hDC2,0,0,SRCCOPY);
- BitBlt(hDC2,0,0,lrRECT->right,lrRECT->bottom, hDC3,0,0,SRCCOPY);
- break;
- case 18:
- //MEMOUT,丢弃内存画布
- memMODE=FALSE;
- hDC=hDC1;
- break;
- case 19:
- //EVAL,表达式计算输出
- printf("%.12g\n", EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
- break;
- default:
- printf("[%d]:EEEOR LINE 。\n", i);
- exit(1);
- break;
- }
- }
- free(PRO_WORDS);
- free(SFLAG);
- free(FORI_CYCL);
- free(FORI_LNUM);
- free(FORI_FTEL);
- free(FORI_FEND);
- free(FORI_IFOT);
- free(LCache);
- return 0;
- }
- /*************MAIN主函数入口*************/
- int main(int argc, char** argv)
- {
- if(argc==2){
- //隐藏光标
- SizeCursor(0);
- //初始化变量
- int fsize=0;
- //初始化随机种子
- srand((unsigned)time(NULL));
- //读文件流
- FILE* fp;
- if( (fp=fopen(argv[1], "rb"))==NULL ){
- fputs("Failed to read file.", stdout);
- return 2;
- }
- //测量尺寸
- fseek(fp, 0, SEEK_END);
- fsize=ftell(fp);
- //超过1M的脚本,拒绝执行
- if(fsize > 1*1024*1024){
- fputs("File size is too large, out of memory.", stdout);
- return 1;
- //小于10字节的,拒绝执行
- }else if(fsize < 10){
- fputs("File size is too small, in of memory.", stdout);
- return 1;
- }
- //指针复原
- fseek(fp, 0, SEEK_SET);
- //读入内存
- tRAM=(char*)calloc(fsize+3, sizeof(char));
- tRAM[fsize]='\r', tRAM[fsize+1]='\n', tRAM[fsize+2]='\0';
- fread(tRAM, fsize, 1, fp);
- //释放文件
- fclose(fp);
- //获取CMD窗口句柄
- hCMD=GetConsoleWindow();
- //获取CMD窗口大小
- lrRECT=&winRECT;
- GetClientRect(hCMD, lrRECT);
- //CMD画布
- hDC1=GetDC(hCMD);
- HBITMAP hBitmap1=CreateCompatibleBitmap(hDC1, lrRECT->right, lrRECT->bottom);
- SelectObject(hDC1, hBitmap1);
- //内存画布
- hWND2=NULL;
- hDC2=CreateCompatibleDC(GetDC(hWND2));
- HBITMAP hBitmap2=CreateCompatibleBitmap(hDC1, lrRECT->right, lrRECT->bottom);
- SelectObject(hDC2, hBitmap2);
- //辅助画布
- hWND3=NULL;
- hDC3=CreateCompatibleDC(GetDC(hWND3));
- HBITMAP hBitmap3=CreateCompatibleBitmap(hDC1, lrRECT->right, lrRECT->bottom);
- SelectObject(hDC3, hBitmap3);
- //运行脚本
- char** PAR_VALUE=(char**)calloc(LOOP_LEVELS, sizeof(char*));
- //主DC选择CMD画布
- hDC=hDC1;
- //寻找主函数入口点
- FileScript("MAIN", 1, PAR_VALUE);
- //释放DC
- ReleaseDC(NULL, hDC3);
- ReleaseDC(NULL, hDC2);
- ReleaseDC(hCMD, hDC1);
- DeleteDC(hDC3);
- DeleteDC(hDC2);
- DeleteDC(hDC1);
- DeleteObject(hBitmap3);
- DeleteObject(hBitmap2);
- DeleteObject(hBitmap1);
- //释放内存
- free(PAR_VALUE);
- free(tRAM);
- return 0;
- }
- //异常则抛出使用说明
- fputs("COPYRIGHT@2017~2019 BY HAPPY, VERSION 1.0\nUSAGE: CLGO [FILE]\n", stdout);
- return 1;
- }
CLGO语言能绘图、能计算、能做动画、能开发游戏、能制作窗体菜单,1.0版由于时间仓促功能不是很多,bug也在所难免,但之后的版本会发生质的改变,敬请期待。复制代码
- /*
- @ECHO OFF&CLS&COLOR 0F&MODE CON COLS=100 LINES=30&CLGO "%~F0"&PAUSE>NUL&EXIT /B
- COPYRIGHT@2017~2019 BY HAPPY
- */
- TO MAIN
- $PENX=-36 $PENY=126 $PENS=2 $PENW=2 $PENA=180 $HEADING=12
- //MEMUSE
- REPEAT 12
- [
- $PENC=$RANDOM%15+1
- REPEAT 75
- [
- FD 100
- BK 100
- RT 2
- ]
- FD 250
- ]
- //MEMSEE
- //MEMOUT
复制代码
- @echo off
- Rem 我的第一个Clogo绘图程序
- set rand=%random%
- certutil -decode "%~f0" "%tmp%\%rand%.exe"
- MODE CON COLS=100 LINES=30&"%tmp%\%rand%.exe" "%~F0"&PAUSE>NUL&EXIT /B
- to First :x :y :w :c :a :循环 :旋转角度
- repeat 20 [
- make :PENX=rand(:x)
- make :PENY=rand(:y)
- make :PENW=rand(:w)
- make :PENC=rand(:c)
- make :HEADING=rand(:a)
- make :旋转角度=rand(:旋转角度)
- REPEAT 100 [
- make :循环=:循环+10
- pd
- fd :循环
- pu
- bk :循环
- LT :旋转角度
- wait 1
- ]
- ]
- TO MAIN
- First 150 100 3 15 180 0 30
- -----BEGIN BASE64-----
- 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
- aHxVQADoRvT//2hUVUAA6Dz0//9oLFVAAOgy9P//aABVQADoKPT//2joVEAA6B70
- //9orFRAAOgU9P//aIhUQADoCvT//2hwVEAA6AD0//+LVfzd2N0CX15bi+Vdw4v/
- 1xVAAPQUQAB3FEAAmRRAALIUQAAUFUAAzxNAANYUQACyFUAAAAAICAAICAgICAgI
- CAgICAgICAgICAgACAgICAEICAIDAQQIBAgBCAgICAgICAgICAUICAgICAgGBgYG
- BgYGBgYGBgYGBgYGBgYGBgYGBgYGBggICAcICAYGBgYGBgYGBgYGBgYGBgYGBgYG
- BgYGBgYGi/+UG0AAeRtAAEMbQABeG0AAJhxAALUWQAD/FkAADhdAADMXQABcF0AA
- hRdAAKAXQAC7F0AA7BdAAAoYQAAoGEAARxhAAGQYQAB/GEAArRhAAB4ZQABGGUAA
- cxlAAJEZQACvGUAAzRlAAPIZQAAEGkAALBpAAKIaQADFGkAA5BtAAGIcQAAAICAg
- IAECIAMgACAgICAgICAgICAEICAgICAgBQYHCAkKCwwNDg8QERITFBUWFxgZGhsc
- HR4gICAfzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM
- VYvsg+wIU4tdCFbrA41JAIoLuFxYQACEyXUHuAEAAADrDooQQDrKdPKAOAB19DPA
- Q4XAdNuLRQiAODqJXfgPhfwBAACAeAE6dQpoMFhAAOgc8v//V4t9DE+D/+58Z40M
- vQQAAAC48HBAACvBiUX86wOLRfyLVQiF/3kEizDrBotFEIs0uIoKigY6yHQQD77Y
- D77Jg8MgO8uLXfh1CITAdARCRuvgihKA+iB0CoD6CXQFgPo9dQWAPgB0FINF/ARP
- g//ufaxoLFZAAOih8f//g//ufPGF/w+JPQEAAItVFItFEItNDFJQUYPO/1Mr9+it
- 8///3RT1OHFAAIPG/YPEEIP+BA+HNAEAAP8ktQwhQADZ7tjZ3+D2xEF0Ut0FKFhA
- ANjZ3+D2xAV7Q+jBIAAAixTFzHFAAI0ExchxQABS/xUkUEAAiw0gc0AAi/ChGHNA
- AFZQUf8VbFFAAFb/FShQQABfuAEAAABeW4vlXcNo2FdAAN3Y6Pfw///Z7tjZ3+D2
- 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
- rgcAAItV8IhCAemjBwAAi0XwgHgBAA+**cAAIvGjVABighAhMl1+SvCg/**4R/
- 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
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAOJfAAAwYAAAGmAAAA5gAAD+XwAA8l8AANhfAADGXwAA
- sl8AAJ5fAACOXwAAAAAAAPBlAAAAZgAAFmYAACxmAADwZAAA2F4AAB5fAAAWXwAA
- Bl8AAO5eAADWZQAAxmUAALJlAACUZQAAeGUAAGRlAABQZQAANGUAACRlAAAOZQAA
- 2mQAAAAAAABGZgAAymQAALhkAACeZAAAlGQAAIxkAAB+ZAAAdGQAAF5kAAAoZAAA
- FGQAAAJkAAD4YwAA7GMAANhjAABIYgAAWGIAAGJiAABqYgAAdGIAAHxiAACGYgAA
- lGIAAJ5iAACoYgAAsGIAALhiAADCYgAAzGIAANZiAADgYgAA6mIAAPRiAAD8YgAA
- BmMAAA5jAAAWYwAAIGMAAChjAAAwYwAAOGMAAE5jAABeYwAAbGMAAHxjAACGYwAA
- jmMAAJxjAACoYwAAtGMAAMJjAABQZgAAAAAAAExfAABeXwAAal8AAHJfAABAXwAA
- AAAAALxhAACsYQAAlGEAAHxhAABoYQAAUmEAADxhAAAoYQAAFGEAANBhAADqYAAA
- ymAAALRgAACkYAAAkmAAAIZgAAB6YAAAaGAAAFRgAADiYQAA9GEAAAZiAAAYYgAA
- KmIAAAJhAAAAAAAAAAAAAIlBQAAAAAAAAAAAAF1DQADpREAAQUZAAAAAAAAAAAAA
- AAAAAIIyoVgAAAAAAgAAADgAAABYWgAAWEoAADpQRU45AAAAOlBFTjgAAAA6UEVO
- NwAAADpQRU42AAAAOlBFTjUAAAA6UEVONAAAADpQRU4zAAAAOlBFTjIAAAA6UEVO
- MQAAADpQRU4wAAAAOlBFTkEAAAA6UEVOUwAAADpQRU5DAAAAOlBFTlcAAAA6UEVO
- QgAAADpIRUFESU5HAAAAADpQRU5ZAAAAOlBFTlgAAABPUgAAQU5EAE5PVABFTElG
- AAAAAEZPUgBXSElMRQAAAFJFUEVBVAAASUYAAFJFQ1QAAAAAT1ZBTAAAAABTRVRY
- WQAAAE1BS0UAAAAATUVNT1VUAABNRU1TRUUAAE1FTVVTRQAAUk9URQAAAABXQUlU
- AAAAAFRFWFQAAAAARklMTAAAAABFWElUAAAAAFNUT1AAAAAASE0AAFBSAABDUwAA
- UEUAAFBEAABQVQAAUlQAAExUAABCSwAARkQAAEZBQ1QAAAAASU5UAFJBTkQAAAAA
- QVJDVEFOSABBUkNDT1NIAEFSQ1NJTkgAVEFOSAAAAABDT1NIAAAAAFNJTkgAAAAA
- RVhQAENFSUwAAAAAUkVBRAAAAABST1VORAAAAEFCUwBERUcAQVJDVEFOAABBUkND
- T1MAAEFSQ1NJTgAAVEFOAENPUwBTSU4ATE4AAExHAABTUVJUAAAAAFBJAABUSU1F
- AAAAAAICAgICAgICAgIEBAQEBAQEBAQEBQQEAAIGBQMEAAAAAwMCAJBaQABAKEAA
- 0CpAAFslZF06JXMgICAgJyVzCgBNaXNzaW5nIHBhcmFtZXRlcgAAADoKAAAgAAAA
- RGl2aXNvciBpcyB6ZXJvIGVycm9yAAAATmVnYXRpdmUgbnVtYmVycyBoYXZlIG5v
- IGZhY3RvcmlhbAAAQSBuZWdhdGl2ZSBudW1iZXIgY2FuIG5vdCBiZSB1c2VkIGFz
- IGEgcmFuZG9tIHVwcGVyIGJvdW5kAAAAVGhlIHBpLzIgaGFzIG5vIHRhbmdlbnQA
- TmVnYXRpdmUgbnVtYmVycyBoYXZlIG5vIG5hdHVyYWwgbG9nYXJpdGhtcwBOZWdh
- dGl2ZSBudW1iZXJzIGFyZSBub3QgbG9nYXJpdGhtaWMAAAAATmVnYXRpdmUgbnVt
- YmVycyBoYXZlIG5vIHNxdWFyZSByb290AAAAAFRoZSAndGltZShuKScgcmVxdWly
- ZXMgJ24nIGJldHdlZW4gMCB0byA1AAAARnVuY3Rpb24gcG93J3MgZGl2aXNvciBp
- cyB6ZXJvIGVycm9yAAAAAAAAAAAAAFA/AAAAAAAAAEAXbMEWbMF2PxgtRFT7Ifk/
- AAAAAAAAFEAAAAAAAABIQAAAAAAAACRAAAAAAAAA4D8YLURU+yEJQFVucmVjb2du
- aXplZCBudW1iZXIAVmFyaWFibGUgIG5vdCBleGlzdABVbnJlY29nbml6ZWQgbWF0
- aCBmdW5jdGlvbgAAVGhlIGJyYWNrZXRzICcoJyBvciAnKScgYXJlIG5vdCBjbG9z
- ZWQAAAAAAABUaGUgJzpQRU5BJyByZXByZXNlbnRzIHRoZSBhbHBoYSBvZiB0aGUg
- cGVuLCBhbmQgb25seSBiZSBiZXR3ZWVuIDAgdG8gMjU1AAAAAAAAAAAAAAAA4G9A
- VGhlICc6UEVOUycgcmVwcmVzZW50cyB0aGUgc21vb3RoIG9mIHRoZSBwZW4sIGFu
- ZCBvbmx5IGJlIGJldHdlZW4gMCB0byA1AAAAAAAAAABUaGUgJzpQRU5DJyByZXBy
- ZXNlbnRzIHRoZSBjb2xvciBvZiB0aGUgcGVuLCBhbmQgb25seSBiZSBiZXR3ZWVu
- IDAgdG8gMTUAAAAAAAAAAFRoZSAnOlBFTlcnIHJlcHJlc2VudHMgdGhlIHdpZHRo
- IG9mIHRoZSBwZW4sIGFuZCBvbmx5IGJlIGJldHdlZW4gMCB0byA5OQAAAAAAAAAA
- AAAAAADAWEBUaGUgJzpQRU5CJyByZXByZXNlbnRzIHRoZSBiYWNrZ3JvdW5kIGNv
- bG9yLCBhbmQgb25seSBiZSBiZXR3ZWVuIDAgdG8gMTUAAAAAAAAAAAAAAAAAAC5A
- VGhlIGxvb3AgdmFyaWFibGVzICc6OicgYXJlIG5vdCBhc3NpZ25hYmxlAAA9AAAA
- OgAAACAJAAA6AAAATmVlZHMgbW9yZSBwYXJhbWV0ZXJzAAAAIAkAAFdyb25nIGxv
- Z2ljACAJDQoAAAAADQoAACAJDQoAAAAAVW5pbnRlcnByZXRlZCBjaGFyYWN0ZXJz
- AAAAACUuMTJnAAAATWlzc2luZyAnfScA5JxSokbfkT/knFKiRt+RvyxbQABAKEAA
- 0CpAAAAAAEBbJWRdOlVuZGVmaW5lZCBwcm9jZWR1cmUgbmFtZSAgICAnJXMKAAAA
- RXJyb3IgbGluZQAAKCkrLSolLyAJDQoAKCkrLSovPjw9IAkNCgAAAA0KWwBNQUlO
- AAAAAEZpbGUgc2l6ZSBpcyB0b28gc21hbGwsICBpbiBvZiBtZW1vcnkuAABGaWxl
- IHNpemUgaXMgdG9vIGxhcmdlLCBvdXQgb2YgbWVtb3J5LgAARmFpbGVkIHRvIHJl
- YWQgZmlsZS4AAAAAcmIAAENPUFlSSUdIVEAyMDE3fjIwMTkgQlkgSEFQUFksIFZF
- UlNJT04gMy4wClVTQUdFOiBDTEdPIFtGSUxFXQoAAAB8W0AAIEBAAJCjQADoo0AA
- SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAA0HJAANBbQAABAAAAUlNEU614Yp0GrBZBt7VKVO1bUYUCAAAA
- RTpcbGlcZGVza1zmlrBcUmVsZWFzZVxDTEdPLnBkYgAAAAAAAAAAAAAAAABIckAA
- pFpAAAAAAAAAAAAAAgAAALRaQADAWkAA3FpAAAAAAABIckAAAQAAAAAAAAD/////
- AAAAAEAAAACkWkAAZHJAAAAAAAAEAAAA/////wAAAABAAAAA+FpAAAAAAAAAAAAA
- AQAAAAhbQAAQW0AAAAAAAGRyQAAAAAAAAAAAAP////8AAAAAQAAAAPhaQAAAAAAA
- AAAAAAAAAACIckAAQFtAAAAAAAAAAAAAAwAAAFBbQABgW0AAwFpAANxaQAAAAAAA
- iHJAAAIAAAAAAAAA/////wAAAABAAAAAQFtAAAAAAAAAAAAAAAAAALByQACQW0AA
- AAAAAAAAAAABAAAAoFtAAKhbQAAAAAAAsHJAAAAAAAAAAAAA/////wAAAABAAAAA
- kFtAAAAAAAAAAAAAAAAAABlJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAA
- 0P///wAAAAD+////DUNAACFDQAAAAAAA/v///wAAAADM////AAAAAP7///9LREAA
- dERAAAAAAAD+////AAAAANT///8AAAAA/v///wAAAADRREAAAAAAAP7///8AAAAA
- zP///wAAAAD+////AAAAAO5GQAAAAAAA/v///wAAAADY////AAAAAP7///97SEAA
- jkhAACxdAAAAAAAAAAAAADJfAAAwUAAAWF4AAAAAAAAAAAAAgl8AAFxRAAD8XAAA
- AAAAAAAAAABKYAAAAFAAAHBeAAAAAAAAAAAAADxiAAB0UQAAhF0AAAAAAAAAAAAA
- QGMAAIhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJfAAAwYAAAGmAAAA5gAAD+XwAA
- 8l8AANhfAADGXwAAsl8AAJ5fAACOXwAAAAAAAPBlAAAAZgAAFmYAACxmAADwZAAA
- 2F4AAB5fAAAWXwAABl8AAO5eAADWZQAAxmUAALJlAACUZQAAeGUAAGRlAABQZQAA
- NGUAACRlAAAOZQAA2mQAAAAAAABGZgAAymQAALhkAACeZAAAlGQAAIxkAAB+ZAAA
- dGQAAF5kAAAoZAAAFGQAAAJkAAD4YwAA7GMAANhjAABIYgAAWGIAAGJiAABqYgAA
- dGIAAHxiAACGYgAAlGIAAJ5iAACoYgAAsGIAALhiAADCYgAAzGIAANZiAADgYgAA
- 6mIAAPRiAAD8YgAABmMAAA5jAAAWYwAAIGMAAChjAAAwYwAAOGMAAE5jAABeYwAA
- bGMAAHxjAACGYwAAjmMAAJxjAACoYwAAtGMAAMJjAABQZgAAAAAAAExfAABeXwAA
- al8AAHJfAABAXwAAAAAAALxhAACsYQAAlGEAAHxhAABoYQAAUmEAADxhAAAoYQAA
- FGEAANBhAADqYAAAymAAALRgAACkYAAAkmAAAIZgAAB6YAAAaGAAAFRgAADiYQAA
- 9GEAAAZiAAAYYgAAKmIAAAJhAAAAAAAAZwNNdWx0aUJ5dGVUb1dpZGVDaGFyAC8E
- U2V0Q29uc29sZUN1cnNvckluZm8AAGQCR2V0U3RkSGFuZGxlAACyBFNsZWVwALcB
- R2V0Q29uc29sZVdpbmRvdwAAS0VSTkVMMzIuZGxsAAD2AEZpbGxSZWN0AAC+AUlu
- dmFsaWRhdGVSZWN0AABlAlJlbGVhc2VEQwAhAUdldERDABQBR2V0Q2xpZW50UmVj
- dABVU0VSMzIuZGxsAADmAERlbGV0ZU9iamVjdAAAVABDcmVhdGVTb2xpZEJydXNo
- AACuAlNldFdvcmxkVHJhbnNmb3JtAI0CU2V0R3JhcGhpY3NNb2RlABMAQml0Qmx0
- AAA1AUV4dEZsb29kRmlsbAAABAJHZXRQaXhlbAAAdwJTZWxlY3RPYmplY3QAAOMA
- RGVsZXRlREMAADAAQ3JlYXRlQ29tcGF0aWJsZURDAAAvAENyZWF0ZUNvbXBhdGli
- bGVCaXRtYXAAAEdESTMyLmRsbACRAEdkaXBEZWxldGVNYXRyaXgAAIoAR2RpcERl
- bGV0ZUJydXNoAO0AR2RpcEZyZWUAACEAR2RpcEFsbG9jAHoAR2RpcENyZWF0ZVBl
- bjEAAJQAR2RpcERlbGV0ZVBlbgCQAEdkaXBEZWxldGVHcmFwaGljcwAAVwBHZGlw
- Q3JlYXRlRm9udEZhbWlseUZyb21OYW1lAACPAEdkaXBEZWxldGVGb250RmFtaWx5
- AACOAEdkaXBEZWxldGVGb250AABqAEdkaXBDcmVhdGVNYXRyaXgAAOgBR2RpcFJv
- dGF0ZU1hdHJpeAAAZgJHZGlwVHJhbnNsYXRlTWF0cml4AIIAR2RpcENyZWF0ZVNv
- bGlkRmlsbABbAEdkaXBDcmVhdGVGcm9tSERDAEkCR2RpcFNldFNtb290aGluZ01v
- ZGUAAFcCR2RpcFNldFdvcmxkVHJhbnNmb3JtALsAR2RpcERyYXdMaW5lAADEAEdk
- aXBEcmF3UmVjdGFuZ2xlAKwAR2RpcERyYXdFbGxpcHNlAMgAR2RpcERyYXdTdHJp
- bmcAAFYAR2RpcENyZWF0ZUZvbnQAADIAR2RpcENsb25lQnJ1c2gAAHQCR2RpcGx1
- c1NodXRkb3duAHUCR2RpcGx1c1N0YXJ0dXAAAGdkaXBsdXMuZGxsACEDX2xvY2Fs
- dGltZTY0AABxBF90aW1lNjQAbwVjbG9jawDEBW1hbGxvYwAAcwVleGl0AACDBWZw
- cmludGYAZQFfX2lvYl9mdW5jAABrBWNhbGxvYwAADAZzdHJ0b2sAAOEFcmFuZAAA
- bAVjZWlsAAAYAV9DSXBvdwAAHQFfQ0l0YW5oABMBX0NJY29zaAAaAV9DSXNpbmgA
- DgFfQ0lhY29zAA8BX0NJYXNpbgCGBWZwdXRzAO8Fc3ByaW50ZgCLBWZyZWUAAPIF
- c3JhbmQAdgVmY2xvc2UAAIkFZnJlYWQAkwVmdGVsbACRBWZzZWVrAIEFZm9wZW4A
- TVNWQ1IxMDAuZGxsAABlAD8/M0BZQVhQQVhAWgAAxQFfYW1zZ19leGl0AABjAV9f
- Z2V0bWFpbmFyZ3MA3AFfY2V4aXQAACoCX2V4aXQALQFfWGNwdEZpbHRlcgBkAV9f
- aW5pdGVudgCwAl9pbml0dGVybQCxAl9pbml0dGVybV9lAOwBX2NvbmZpZ3RocmVh
- ZGxvY2FsZQCiAV9fc2V0dXNlcm1hdGhlcnIAAOsBX2NvbW1vZGUAAEUCX2Ztb2Rl
- AACfAV9fc2V0X2FwcF90eXBlAAACAT90ZXJtaW5hdGVAQFlBWFhaAO4AP190eXBl
- X2luZm9fZHRvcl9pbnRlcm5hbF9tZXRob2RAdHlwZV9pbmZvQEBRQUVYWFoAAPsB
- X2NydF9kZWJ1Z2dlcl9ob29rAACNBF91bmxvY2sAWwFfX2RsbG9uZXhpdAAjA19s
- b2NrAMkDX29uZXhpdAAhAl9leGNlcHRfaGFuZGxlcjRfY29tbW9uALgCX2ludm9r
- ZV93YXRzb24AAO8BX2NvbnRyb2xmcF9zAADsAkludGVybG9ja2VkRXhjaGFuZ2UA
- 6QJJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZQAA0wJIZWFwU2V0SW5mb3JtYXRp
- b24AAOoARW5jb2RlUG9pbnRlcgAEA0lzUHJvY2Vzc29yRmVhdHVyZVByZXNlbnQA
- wARUZXJtaW5hdGVQcm9jZXNzAADAAUdldEN1cnJlbnRQcm9jZXNzANMEVW5oYW5k
- bGVkRXhjZXB0aW9uRmlsdGVyAAClBFNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRl
- cgAAA0lzRGVidWdnZXJQcmVzZW50AMoARGVjb2RlUG9pbnRlcgCnA1F1ZXJ5UGVy
- Zm9ybWFuY2VDb3VudGVyAJMCR2V0VGlja0NvdW50AADFAUdldEN1cnJlbnRUaHJl
- YWRJZAAAwQFHZXRDdXJyZW50UHJvY2Vzc0lkAHkCR2V0U3lzdGVtVGltZUFzRmls
- ZVRpbWUAhwJfZ2V0Y2gAABkDX2tiaGl0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAEAAADYUkAA0FJAAMhSQADEUkAAvFJAAAxUQAAIVEAA
- AFRAAPxTQAD4U0AA9FNAAPBTQADsU0AA5FNAANxTQADUU0AA0FNAAMxTQADEU0AA
- vFNAALRTQACwU0AAqFNAAKBTQACYU0AAkFNAAIhTQACAU0AAeFNAAHRTQABsU0AA
- AAAAALhSQAC0UkAAsFJAAGhTQABkU0AAYFNAAFxTQABYU0AAVFNAAFBTQABMU0AA
- SFNAAERTQAA8U0AANFNAACxTQAAkU0AAHFNAABRTQAAMU0AABFNAAPxSQAD0UkAA
- 7FJAAORSQADcUkAAAAAAAKhSQACgUkAAlFJAAIxSQACEUkAAfFJAAHRSQABsUkAA
- ZFJAAFxSQABUUkAATFJAAERSQAA8UkAANFJAACxSQAAkUkAAHFJAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAuQAAAAAAAAAAA
- AAAAAADgb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAD/AAAA/wAA/wAAAP8AAAD//wAA//8A/wAAAP8AAADugu4A7oLuAKUqKgClKioA
- 09PTANPT0wCpqakAqampAK3Y5gCt2OYAkO6QAJDukADg//8A4P//APgdOAD4HTgA
- /wD/AP8A/wD//wAA//8AAP///wD///8ABFpAAAAAAAAuP0FWQnJ1c2hAR2RpcGx1
- c0BAAARaQAAAAAAALj9BVkdkaXBsdXNCYXNlQEdkaXBsdXNAQAAAAARaQAAAAAAA
- Lj9BVlNvbGlkQnJ1c2hAR2RpcGx1c0BAAAAAAAAAAAAEWkAAAAAAAC4/QVZ0eXBl
- X2luZm9AQAAAAAAAAAAAAE7mQLuxGb9E///////////+////AQAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
- GAAAABgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEA
- CQQAAEgAAABgsAAAlgEAAAAAAAAAAAAAAAAAAAAAAADvu788P3htbCB2ZXJzaW9u
- PSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQo8YXNz
- ZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBt
- YW5pZmVzdFZlcnNpb249IjEuMCI+DQogIDx0cnVzdEluZm8geG1sbnM9InVybjpz
- Y2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYzIj4NCiAgICA8c2VjdXJpdHk+DQog
- ICAgICA8cmVxdWVzdGVkUHJpdmlsZWdlcz4NCiAgICAgICAgPHJlcXVlc3RlZEV4
- ZWN1dGlvbkxldmVsIGxldmVsPSJhc0ludm9rZXIiIHVpQWNjZXNzPSJmYWxzZSI+
- PC9yZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbD4NCiAgICAgIDwvcmVxdWVzdGVkUHJp
- dmlsZWdlcz4NCiAgICA8L3NlY3VyaXR5Pg0KICA8L3RydXN0SW5mbz4NCjwvYXNz
- ZW1ibHk+AAAAAAAAAAAAAAAQAAAEAQAADDAWMCgwXDBgMGQwaDBsMHAwNTFTMVox
- YDFqMXUxKjI1MjsyTTJWMnEyeTK9Mm4zhDOJM5AznjPEM8sz0jNlNLQ0xjQsNes1
- 9zUDNg82HDYqNjU2PTZJNlI2XTZjNnI2eDaANoY2qjaxNs42yzdZOMY40jjcOP84
- NDlFOlQ6cTp+OgY8RDzhPOs89Tz/PAk9Ez0dPSc9QD1EPUg9TD1QPVQ9WD1cPWA9
- 2D3cPeA95D3oPew98D30Pfg9/D0APgQ+CD4MPhA+FD4YPhw+ID4kPig+LD4wPjQ+
- OD48PkA+RD5IPkw+UD5UPlg+0z4LPyY/hj+2P8w/3T/yP/k/ACAAACABAAAAMAYw
- DTAWMB0wLjBGMFowcDCEMJowqjDAMNAwDDEQMRQxGDEcMS8xQzF+MZcx2zHgMegx
- 9DEWMi4yljKpMsIy4zIOMxUzmzOzMyQ0MDQ0NDg0PDRANGQ0aDRsNHA0dDR4NHw0
- gDSENIg0jDSQNKo0rzTKNNY0MzVkNa01tDXlNf81GjYrNjI2YDZnNrE2wTbKNtA2
- 5DboNuw28Db0Nvg2/DYAN0U3SzdcN2Y3cjd4N4c3vDfEN8s30TfXNxU4IDhMOHo4
- fziJOLk4ADkoOXU5iTmQObA57Dn1OQQ6CjosOoE6pDoIO0A8dDzGPOY87Tz1PP08
- Az0aPSw9Sz1bPXY9gT2IPbA9uz3qPUc+Tj5UPq0+Bz9BPwAAADAAABACAABVMMAw
- xTDiMBMxhDG/MU4yjDKTMqoyyzLTMmQzaTOUM7EzyjMQNBk0MzQ8NEc0bTRzNI80
- mjSjNLE0vDTENMo00DTgNBg1HzUlNS81NTU7NUg1TjVaNWE1ZzVtNXk1fzWLNZM1
- mjWkNas1sjW9New1OzZINmU2fDaFNoo2oDatNrM2vDbCNtc25DbqNvA2+jYANwk3
- GzcqNy83RTdZN183aTd5N5g3nzemN+Y3/DcPOB84KTgyOD04RDhsOHc4fTiWOJw4
- pjitOLQ4wDgiOSg5Mjk4OUE5TDlTOXs5hjmMOaM5qjmxObw5IzopOjM6OTpCOk06
- VDp8Ooc6jTqpOts69DoPOx07WztgO2o7hTuLO5U7oDvYO9w74DvkO+g77DvwO/Q7
- +Dv8OwA8BDwIPAw8EDwUPBg8HDwgPCQ8KDwsPDA8TjxXPF08djx9PI48lzydPMA8
- xzzRPNg84zz0PP08Az0dPSY9LD1HPUw9Vj1hPW09dT18PYM9ij2xPbY9vD3CPcY9
- zD3SPeY9+j0APhI+HT4jPiw+NT47PkA+UT5cPmM+bD5xPnY+gT6MPpc+nj6nPq0+
- sj63Psg+0j7cPuM+6z7wPvs+Bj8MPxQ/Gz8hPys/MT85P0I/TD9gP2k/iD+OP5Q/
- mj+gP6Y/rD+yP7g/vj/EP8o/0D/WP9w/4j/oP+4/9D/6PwAAAEAAAEwBAAAAMAYw
- DDASMBgwMDCmMLIwzjBeMWQxajFwMXYxfDGKMZQxmzGhMaYxqzGwMbUxuzHDMdcx
- 5DHxMQUyDjIpMjMyRjJQMlUyWjJ8MoEyijKPMpwyrTKzMroyzjLTMtky4TLnMu0y
- +jIAMwkzKDMwMzkzPzNHM1MzZTNwM3YziDOQM5szpzOtM7YzvDPBM8YzyzPSM9gz
- 6jPyM/gzBDQPNCQ0KzSJNO008jQFNQs1ETUXNR01IzUqNTE1ODU/NUY1TTVUNVw1
- ZDVsNXg1gTWGNYw1ljWfNao1tjW7Ncs10DXWNdw18jX5NUI2SDZSNlk2ZDZqNn02
- kjadNrM2yzbVNhI3Fzc4Nz03XDf4N/03DzgtOEE4RziuOLQ4wTjeOCs5MDlyOZU5
- ojmuObY5vjnKOfM5+zkGOgw6EjoYOh46JDoqOjA6NjoAUAAAcAAAAOAx7DHwMfQx
- ODQ8NEA06DjsOPA4ADoEOgg6DDpMOlA6nDqgOrA6tDq4OsA62DrcOvQ6BDsIOxA7
- KDs4Ozw7TDtQO1Q7WDtgO3g7iDuMO5w7oDuoO8A7/DsAPBw8IDxAPGA8fDyAPAAA
- AHAAAKgAAAAEMAgwDDAQMBQwGDAcMCAwJDAoMCwwMDA0MDgwPDBAMEQwSDBMMFAw
- VDBYMFwwYDBkMGgwbDBwMHQweDB8MIQwiDCMMJAwlDCYMJwwoDCkMKgwrDCwMLQw
- uDC8MMAwxDDIMMww0DDUMNgw3DDgMOQw6DDwMPQw+DD8MAAxBDEIMQwxEDEUMRgx
- HDEgMSQxKDEsMTAxNDFIMmQyiDKwMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- -----END BASE64-----
欢迎光临 批处理之家 (http://www.bathome.net/) | Powered by Discuz! 7.2 |