Window creation/X11: Difference between revisions
Content added Content deleted
(add task to ARM64 assembly Raspberry Pi) |
|||
Line 6: | Line 6: | ||
Implementations of this task should ''avoid using a toolkit'' as much as possible. |
Implementations of this task should ''avoid using a toolkit'' as much as possible. |
||
<br><br> |
<br><br> |
||
=={{header|AArch64 Assembly}}== |
|||
{{works with|as|Raspberry Pi 3B version Buster 64 bits}} |
|||
<lang AArch64 Assembly> |
|||
/* ARM assembly AARCH64 Raspberry PI 3B */ |
|||
/* program creatFenX1164.s */ |
|||
/* link with gcc options -lX11 -L/usr/lpp/X11/lib */ |
|||
/*******************************************/ |
|||
/* Constantes file */ |
|||
/*******************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly*/ |
|||
.include "../includeConstantesARM64.inc" |
|||
.equ ClientMessage, 33 |
|||
/*******************************************/ |
|||
/* Initialized data */ |
|||
/*******************************************/ |
|||
.data |
|||
szRetourligne: .asciz "\n" |
|||
szMessErreur: .asciz "Server X11 not found.\n" |
|||
szMessErrfen: .asciz "Error create X11 window.\n" |
|||
szLibDW: .asciz "WM_DELETE_WINDOW" // message close window |
|||
/*******************************************/ |
|||
/* UnInitialized data */ |
|||
/*******************************************/ |
|||
.bss |
|||
.align 4 |
|||
qDisplay: .skip 8 // Display address |
|||
qDefScreen: .skip 8 // Default screen address |
|||
identWin: .skip 8 // window ident |
|||
wmDeleteMessage: .skip 16 // ident close message |
|||
stEvent: .skip 400 // provisional size |
|||
buffer: .skip 500 |
|||
/**********************************************/ |
|||
/* -- Code section */ |
|||
/**********************************************/ |
|||
.text |
|||
.global main // program entry |
|||
main: |
|||
mov x0,#0 // open server X |
|||
bl XOpenDisplay |
|||
cmp x0,#0 |
|||
beq erreur |
|||
// Ok return Display address |
|||
ldr x1,qAdrqDisplay |
|||
str x0,[x1] // store Display address for future use |
|||
mov x28,x0 // and in register 28 |
|||
// load default screen |
|||
ldr x2,[x0,#264] // at location 264 |
|||
ldr x1,qAdrqDefScreen |
|||
str x2,[x1] //store default_screen |
|||
mov x2,x0 |
|||
ldr x0,[x2,#232] // screen list |
|||
//screen areas |
|||
ldr x5,[x0,#+88] // white pixel |
|||
ldr x3,[x0,#+96] // black pixel |
|||
ldr x4,[x0,#+56] // bits par pixel |
|||
ldr x1,[x0,#+16] // root windows |
|||
// create window x11 |
|||
mov x0,x28 //display |
|||
mov x2,#0 // position X |
|||
mov x3,#0 // position Y |
|||
mov x4,600 // weight |
|||
mov x5,400 // height |
|||
mov x6,0 // bordure ??? |
|||
ldr x7,0 // ? |
|||
ldr x8,qBlanc // background |
|||
str x8,[sp,-16]! // argument fot stack |
|||
bl XCreateSimpleWindow |
|||
add sp,sp,16 // for stack alignement |
|||
cmp x0,#0 // error ? |
|||
beq erreurF |
|||
//mov x3,sp |
|||
ldr x1,qAdridentWin |
|||
str x0,[x1] // store window ident for future use |
|||
mov x27,x0 // and in register 27 |
|||
// Correction of window closing error |
|||
mov x0,x28 // Display address |
|||
ldr x1,qAdrszLibDW // atom name address |
|||
mov x2,#1 // False create atom if not exist |
|||
bl XInternAtom |
|||
cmp x0,#0 |
|||
ble erreurF |
|||
ldr x1,qAdrwmDeleteMessage // address message |
|||
str x0,[x1] |
|||
mov x2,x1 // address atom create |
|||
mov x0,x28 // display address |
|||
mov x1,x27 // window ident |
|||
mov x3,#1 // number of protocoles |
|||
bl XSetWMProtocols |
|||
cmp x0,#0 |
|||
ble erreurF |
|||
// Display window |
|||
mov x1,x27 // ident window |
|||
mov x0,x28 // Display address |
|||
bl XMapWindow |
|||
1: // events loop |
|||
mov x0,x28 // Display address |
|||
ldr x1,qAdrstEvent // events structure address |
|||
bl XNextEvent |
|||
ldr x0,qAdrstEvent // events structure address |
|||
ldr w0,[x0] // type in 4 fist bytes |
|||
cmp w0,#ClientMessage // message for close window |
|||
bne 1b // no -> loop |
|||
ldr x0,qAdrstEvent // events structure address |
|||
ldr x1,[x0,56] // location message code |
|||
ldr x2,qAdrwmDeleteMessage // equal ? |
|||
ldr x2,[x2] |
|||
cmp x1,x2 |
|||
bne 1b // no loop |
|||
mov x0,0 // end Ok |
|||
b 100f |
|||
erreurF: // error create window |
|||
ldr x0,qAdrszMessErrfen |
|||
bl affichageMess |
|||
mov x0,1 |
|||
b 100f |
|||
erreur: // error no server x11 active |
|||
ldr x0,qAdrszMessErreur |
|||
bl affichageMess |
|||
mov x0,1 |
|||
100: // program standard end |
|||
mov x8,EXIT |
|||
svc 0 |
|||
qBlanc: .quad 0xF0F0F0F0 |
|||
qAdrqDisplay: .quad qDisplay |
|||
qAdrqDefScreen: .quad qDefScreen |
|||
qAdridentWin: .quad identWin |
|||
qAdrstEvent: .quad stEvent |
|||
qAdrszMessErrfen: .quad szMessErrfen |
|||
qAdrszMessErreur: .quad szMessErreur |
|||
qAdrwmDeleteMessage: .quad wmDeleteMessage |
|||
qAdrszLibDW: .quad szLibDW |
|||
/********************************************************/ |
|||
/* File Include fonctions */ |
|||
/********************************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly */ |
|||
.include "../includeARM64.inc" |
|||
</lang> |
|||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |
||
{{works with|ALGOL 68G|tested with release mk15-0.8b.fc9.i386}} |
{{works with|ALGOL 68G|tested with release mk15-0.8b.fc9.i386}} |