101 lines
4.3 KiB
Plaintext
101 lines
4.3 KiB
Plaintext
\codesr.xpl Complete set of intrinsics for XPL0 on the Raspberry Pi
|
|
code \var:=\Abs(int)=0, \var:=\Ran(range)=1,
|
|
\var:=\Rem(expr)=2, \adr:=\Reserve(bytes)=3,
|
|
\var:=\Swap(int)=4, \var:=\Extend(byte)=5,
|
|
Restart=6, \var:=\ChIn(dev)=7,
|
|
ChOut(dev,byte)=8, CrLf(dev)=9,
|
|
\var:=\IntIn(dev)=10, IntOut(dev,int)=11,
|
|
Text(dev,str)=12, OpenI(dev)=13,
|
|
OpenO(dev)=14, Close(dev)=15,
|
|
Abort=16, Trap(bits)=17,
|
|
\var:=\Free=18, \var:=\Rerun=19,
|
|
\adr:=\GetHP=20, SetHP(adr)=21,
|
|
\var:=\GetErr=22, Cursor(X,Y)=23,
|
|
FSet(hand,^I/^O)=24, SetRun(bool)=25,
|
|
\var:=\HexIn(dev)=26, HexOut(dev,int)=27,
|
|
\var:=\FOpen(pathname,0=r/1=w)=29, FClose(hand)=32,
|
|
\var:=\KeyHit=33, \var:=\ChkKey=33,
|
|
Sound(vol,dur,period)=39, Clear=40,
|
|
Point(X,Y,color)=41, Line(X,Y,color)=42,
|
|
Move(X,Y)=43, \var:=\ReadPix(X,Y)=44,
|
|
SetVid(mode)=45, \var:=\Fix(real)=50,
|
|
Attrib(bg:fg)=69, SetWind(X0,Y0,X1,Y1,mode,fill)=70,
|
|
RawText(dev,str)=71, Hilight(X0,Y0,X1,Y1,bg:fg)=72,
|
|
\adr:=\MAlloc(bytes)=73, Release(adr)=74,
|
|
TrapC(bool)=75, \var:=\TestC=76,
|
|
ShowMouse(bool)=77, MoveMouse=78,
|
|
RanSeed(int)=79, \rgb:=\GetPalette(reg)=80,
|
|
Paint(X,Y,W,H,image,W2)=81, \var:=\GetTime=82,
|
|
BackUp=83, SetFB(W,H,D)=84,
|
|
\var:=\OpenMouse=85, \adr:=\GetMouse=86,
|
|
\adr:=\GetMouseMove=87, ShowCursor(bool)=88,
|
|
\var:=\GetKey=89, SetPalette(reg,R,G,B)=90,
|
|
\adr:=\GetFont(set)=91, SetFont(height,adr)=92,
|
|
\var:=\GetShiftKeys=93, DelayUS(int)=94,
|
|
\adr:=\GetDateTime=95, InsertKey(byte)=96,
|
|
\adr:=\GetFB=97, WaitForVSync=98,
|
|
ShowPage(0/1)=99, CopyMem(dst,src,bytes)=100,
|
|
FillMem(adr,byte,bytes)=101, \adr:=\ReallocMem(adr,bytes)=102,
|
|
PlaySoundFile(pathname)=103, SetHexDigits(digits)=104,
|
|
\process:=\Fork(processes)=105, Join(process)=106,
|
|
\adr:=\SharedMem(bytes)=107, Lock(adr)=108,
|
|
Unlock(adr)=109;
|
|
code real
|
|
\adr:=\RlRes(int)=46, \var:=\RlIn(dev)=47,
|
|
RlOut(dev,real)=48, \var:=\Float(int)=49,
|
|
\var:=\RlAbs(real)=51, Format(int,int)=52,
|
|
\var:=\Sqrt(real)=53, \var:=\Ln(real)=54,
|
|
\var:=\Exp(real)=55, \var:=\Sin(real)=56,
|
|
\var:=\ATan2(realY,realX)=57, \var:=\Mod(real,real)=58,
|
|
\var:=\Log(real)=59, \var:=\Cos(real)=60,
|
|
\var:=\Tan(real)=61, \var:=\ASin(real)=62,
|
|
\var:=\ACos(real)=63, \var:=\Floor(real)=64,
|
|
\var:=\Ceil(real)=65, \var:=\Pow(realX,realY)=66;
|
|
|
|
include xpllib;
|
|
|
|
int Counts(128), I, Ch, Num, Maxx, SI Cnt;
|
|
char Str, Addr;
|
|
|
|
[\Read this program's compiled assembly language into a string
|
|
if not OpenInFile("funcfreq.s") then
|
|
[Text(0, "funcfreq.s not found"); exit 1];
|
|
Str:= 0; I:= 0;
|
|
loop [Str:= ReallocMem(Str, I+1);
|
|
Ch:= ChIn(3);
|
|
if Ch = EOF then quit;
|
|
Str(I):= Ch;
|
|
I:= I+1;
|
|
];
|
|
Str(I):= 0;
|
|
|
|
\Count numbers of times each intrinsic is called
|
|
for I:= 0 to 127 do Counts(I):= 0;
|
|
Addr:= Str;
|
|
loop [Addr:= StrFind(Addr, "intr");
|
|
if Addr = 0 then quit;
|
|
Addr:= Addr+4; \skip "intr"
|
|
Num:= 0;
|
|
while Addr(0)>=^0 and Addr(0)<=^9 do
|
|
[Num:= Num*10 + Addr(0) - ^0;
|
|
Addr:= Addr+1;
|
|
];
|
|
if Num < 128 then \for safety
|
|
Counts(Num):= Counts(Num)+1;
|
|
];
|
|
|
|
Print("Top ten intrinsic calls (code: freq):\n");
|
|
Cnt:= 0;
|
|
loop [Maxx:= 0;
|
|
for I:= 0 to 127 do
|
|
if Counts(I) > Maxx then
|
|
[Maxx:= Counts(I);
|
|
SI:= I;
|
|
];
|
|
Print("%2d: %2d\n", SI, Counts(SI));
|
|
Counts(SI):= 0;
|
|
Cnt:= Cnt+1;
|
|
if Cnt >= 10 then quit;
|
|
];
|
|
]
|