XML/Output: Difference between revisions
Content added Content deleted
No edit summary |
(add task to ARM64 assembly Raspberry Pi) |
||
Line 27: | Line 27: | ||
'''Note to editors:''' Program output with escaped characters will be viewed as the character on the page so you need to 'escape-the-escapes' to make the RC entry display what would be shown in a plain text viewer (See [[Talk:XML_Creation#Escaping_Escapes|this]]). |
'''Note to editors:''' Program output with escaped characters will be viewed as the character on the page so you need to 'escape-the-escapes' to make the RC entry display what would be shown in a plain text viewer (See [[Talk:XML_Creation#Escaping_Escapes|this]]). |
||
Alternately, output can be placed in <nowiki><lang xml></lang></nowiki> tags without any special treatment. |
Alternately, output can be placed in <nowiki><lang xml></lang></nowiki> tags without any special treatment. |
||
=={{header|AArch64 Assembly}}== |
|||
{{works with|as|Raspberry Pi 3B version Buster 64 bits}} |
|||
<lang AArch64 Assembly> |
|||
/* ARM assembly AARCH64 Raspberry PI 3B */ |
|||
/* program outputXml64.s */ |
|||
/* use special library libxml2 */ |
|||
/* special link gcc with options -I/usr/include/libxml2 -lxml2 */ |
|||
/*******************************************/ |
|||
/* Constantes file */ |
|||
/*******************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly*/ |
|||
.include "../includeConstantesARM64.inc" |
|||
/*********************************/ |
|||
/* Initialized data */ |
|||
/*********************************/ |
|||
.data |
|||
szMessEndpgm: .asciz "Normal end of program.\n" |
|||
szFileName: .asciz "file2.xml" |
|||
szFileMode: .asciz "w" |
|||
szMessError: .asciz "Error detected !!!!. \n" |
|||
szName1: .asciz "April" |
|||
szName2: .asciz "Tam O'Shanter" |
|||
szName3: .asciz "Emily" |
|||
szRemark1: .asciz "Bubbly: I'm > Tam and <= Emily" |
|||
szRemark2: .asciz "Burns: \"When chapman billies leave the street ...\"" |
|||
szRemark3: .asciz "Short & shrift" |
|||
szVersDoc: .asciz "1.0" |
|||
szLibCharRem: .asciz "CharacterRemarks" |
|||
szLibChar: .asciz "Character" |
|||
szLibName: .asciz "Name" |
|||
szCarriageReturn: .asciz "\n" |
|||
tbNames: .quad szName1 // area of pointer string name |
|||
.quad szName2 |
|||
.quad szName3 |
|||
.quad 0 // area end |
|||
tbRemarks: .quad szRemark1 // area of pointer string remark |
|||
.quad szRemark2 |
|||
.quad szRemark3 |
|||
.quad 0 // area end |
|||
/*********************************/ |
|||
/* UnInitialized data */ |
|||
/*********************************/ |
|||
.bss |
|||
.align 4 |
|||
/*********************************/ |
|||
/* code section */ |
|||
/*********************************/ |
|||
.text |
|||
.global main |
|||
main: // entry of program |
|||
ldr x0,qAdrszVersDoc |
|||
bl xmlNewDoc // create doc |
|||
mov x19,x0 // doc address |
|||
mov x0,#0 |
|||
ldr x1,qAdrszLibCharRem |
|||
bl xmlNewNode // create root node |
|||
mov x20,x0 // node characterisation address |
|||
mov x0,x19 // doc |
|||
mov x1,x20 // node root |
|||
bl xmlDocSetRootElement |
|||
ldr x22,qAdrtbNames |
|||
ldr x23,qAdrtbRemarks |
|||
mov x24,#0 // loop counter |
|||
1: // start loop |
|||
mov x0,#0 |
|||
ldr x1,qAdrszLibChar // create node |
|||
bl xmlNewNode |
|||
mov x21,x0 // node character |
|||
// x0 = node address |
|||
ldr x1,qAdrszLibName |
|||
ldr x2,[x22,x24,lsl #3] // load name string address |
|||
bl xmlNewProp |
|||
ldr x0,[x23,x24,lsl #3] // load remark string address |
|||
bl xmlNewText |
|||
mov x1,x0 |
|||
mov x0,x21 |
|||
bl xmlAddChild |
|||
mov x0,x20 |
|||
mov x1,x21 |
|||
bl xmlAddChild |
|||
add x24,x24,#1 |
|||
ldr x2,[x22,x24,lsl #3] // load name string address |
|||
cmp x2,#0 // = zero ? |
|||
bne 1b // no -> loop |
|||
ldr x0,qAdrszFileName |
|||
ldr x1,qAdrszFileMode |
|||
bl fopen // file open |
|||
cmp x0,#0 |
|||
blt 99f |
|||
mov x24,x0 //FD |
|||
mov x1,x19 |
|||
mov x2,x20 |
|||
bl xmlDocDump // write doc on the file |
|||
mov x0,x24 // close file |
|||
bl fclose |
|||
mov x0,x19 // close document |
|||
bl xmlFreeDoc |
|||
bl xmlCleanupParser |
|||
ldr x0,qAdrszMessEndpgm |
|||
bl affichageMess |
|||
b 100f |
|||
99: // error |
|||
ldr x0,qAdrszMessError |
|||
bl affichageMess |
|||
100: // standard end of the program |
|||
mov x0,0 // return code |
|||
mov x8,EXIT // request to exit program |
|||
svc 0 // perform the system call |
|||
qAdrszMessError: .quad szMessError |
|||
qAdrszMessEndpgm: .quad szMessEndpgm |
|||
qAdrszVersDoc: .quad szVersDoc |
|||
qAdrszLibCharRem: .quad szLibCharRem |
|||
qAdrszLibChar: .quad szLibChar |
|||
qAdrszLibName: .quad szLibName |
|||
qAdrtbNames: .quad tbNames |
|||
qAdrtbRemarks: .quad tbRemarks |
|||
qAdrszCarriageReturn: .quad szCarriageReturn |
|||
qStdout: .quad STDOUT |
|||
qAdrszFileName: .quad szFileName |
|||
qAdrszFileMode: .quad szFileMode |
|||
/************************************/ |
|||
/* Strings comparaison */ |
|||
/************************************/ |
|||
/* x0 et x1 contains strings addresses */ |
|||
/* x0 return 0 dans x0 if equal */ |
|||
/* return -1 if string x0 < string x1 */ |
|||
/* return 1 if string x0 > string x1 */ |
|||
comparString: |
|||
stp x2,lr,[sp,-16]! // save registers |
|||
stp x3,x4,[sp,-16]! // save registers |
|||
mov x2,#0 // indice |
|||
1: |
|||
ldrb w3,[x0,x2] // one byte string 1 |
|||
ldrb w4,[x1,x2] // one byte string 2 |
|||
cmp w3,w4 |
|||
blt 2f // less |
|||
bgt 3f // greather |
|||
cmp w3,#0 // 0 final |
|||
beq 4f // equal and end |
|||
add x2,x2,#1 // |
|||
b 1b // else loop |
|||
2: |
|||
mov x0,#-1 // less |
|||
b 100f |
|||
3: |
|||
mov x0,#1 // greather |
|||
b 100f |
|||
4: |
|||
mov x0,#0 // equal |
|||
b 100f |
|||
100: |
|||
ldp x3,x4,[sp],16 // restaur 2 registers |
|||
ldp x2,lr,[sp],16 // restaur 2 registers |
|||
ret // return to address lr x30 |
|||
/********************************************************/ |
|||
/* File Include fonctions */ |
|||
/********************************************************/ |
|||
/* for this file see task include a file in language AArch64 assembly */ |
|||
.include "../includeARM64.inc" |
|||
</lang> |
|||
=={{header|Ada}}== |
=={{header|Ada}}== |
||
{{works with|GNAT}} |
{{works with|GNAT}} |