forked from KolibriOS/kolibrios
cmm move small aps into cmm/misc folder
git-svn-id: svn://kolibrios.org@7911 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
114
programs/cmm/experimental/python/static/function.h
Normal file
114
programs/cmm/experimental/python/static/function.h
Normal file
@@ -0,0 +1,114 @@
|
||||
|
||||
|
||||
:void copyVariable(dword x)
|
||||
{
|
||||
load_const(DSDWORD[x],DSBYTE[x+4],DSDWORD[x+5]);
|
||||
}
|
||||
|
||||
|
||||
:dword LenStdout = 0;
|
||||
:void _stdout(dword txt)
|
||||
{
|
||||
dword addr = txt;
|
||||
WHILE(DSBYTE[addr]) addr++;
|
||||
IF(!LenStdout)
|
||||
{
|
||||
LenStdout = addr-txt;
|
||||
CreateFile(LenStdout,txt,"/sys/stdout");
|
||||
}
|
||||
ELSE
|
||||
{
|
||||
AddFile(LenStdout,addr-txt,txt,"/sys/stdout");
|
||||
LenStdout+=addr-txt;
|
||||
}
|
||||
}
|
||||
:dword std__stdStr(dword count)
|
||||
{
|
||||
return _str(popFast());
|
||||
}
|
||||
:dword stdcall std__stdout(dword count)
|
||||
{
|
||||
std__str(count);
|
||||
popStack();
|
||||
_stdout(DSDWORD[EAX]);
|
||||
}
|
||||
:dword stdcall std__len(dword c)
|
||||
{
|
||||
popFast();
|
||||
load_const(DSDWORD[EAX+5],PY_INT,0);
|
||||
RETURN 0;
|
||||
}
|
||||
|
||||
:dword stdcall std__INT40(dword c)
|
||||
{
|
||||
X = popFast();
|
||||
Y = DSDWORD[X+5];
|
||||
X = DSDWORD[X];
|
||||
X = DSDWORD[X];
|
||||
X = DSDWORD[X];
|
||||
test(X,1);
|
||||
|
||||
RETURN 0;
|
||||
}
|
||||
|
||||
:void hexAddress(dword x,y)
|
||||
{
|
||||
dword i = 0;
|
||||
i = 8;
|
||||
WHILE(i)
|
||||
{
|
||||
DSBYTE[x] = DSBYTE[y&0xF+#arraySymbolHEX];
|
||||
y>>=4;
|
||||
x--;
|
||||
i--;
|
||||
}
|
||||
}
|
||||
#define rSize DSBYTE[#RDATA+5]
|
||||
#define rData DSBYTE[#RDATA]
|
||||
#define rType DSBYTE[#RDATA+4]
|
||||
|
||||
:dword stdcall std__str(dword c)
|
||||
{
|
||||
dword n = 0;
|
||||
dword m = 0;
|
||||
dword l = 0;
|
||||
dword v = 0;
|
||||
dword f = "<function a at 0x00000000>";
|
||||
dword t = 0;
|
||||
dword o = 0;
|
||||
|
||||
v = popFast();
|
||||
IF(DSBYTE[v+4] == PY_STR)
|
||||
{
|
||||
copyVariable(v);
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch(DSBYTE[v+4])
|
||||
{
|
||||
case PY_BOOL:
|
||||
if(DSDWORD[v])
|
||||
{
|
||||
load_const("True",PY_STR,4);
|
||||
return 0;
|
||||
}
|
||||
load_const("False",PY_STR,5);
|
||||
return 0;
|
||||
break;
|
||||
case PY_INT:
|
||||
m = malloc(MEMBUF);
|
||||
l = itoa(DSDWORD[v],m);
|
||||
load_const(m,PY_STR,l);
|
||||
return 0;
|
||||
break;
|
||||
case PY_NONE:
|
||||
load_const("None",PY_STR,4);
|
||||
return 0;
|
||||
break;
|
||||
case PY_FNC:
|
||||
hexAddress(f+24,v);
|
||||
load_const(f,PY_STR,26);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user