diff options
Diffstat (limited to 'riscos/content-handlers/awrender.s')
-rw-r--r-- | riscos/content-handlers/awrender.s | 390 |
1 files changed, 0 insertions, 390 deletions
diff --git a/riscos/content-handlers/awrender.s b/riscos/content-handlers/awrender.s deleted file mode 100644 index 5bcafe520..000000000 --- a/riscos/content-handlers/awrender.s +++ /dev/null @@ -1,390 +0,0 @@ -#if defined(__aof__) - AREA |ARM$$code|,CODE,READONLY - - IMPORT messages_get - IMPORT realloc - IMPORT strcpy - IMPORT |__rt_stkovf_split_big| - - EXPORT awrender_init - EXPORT awrender_render - - -aw_rsz_block * 0 -aw_rsz_size * 4 -aw_fixed_block * 8 -aw_fixed_size * 12 -aw_sl * 16 -aw_fp * 20 -sizeof_aw * 24 - - -; os_error *awrender_init(byte **doc, size_t *doc_size, void *init_routine, void *init_workspace); - -awrender_init MOV ip,sp - STMFD sp!,{a1,a2,v1,v2,fp,ip,lr,pc} - SUB fp,ip,#4 - SUB ip,sp,#512 - CMP ip,sl - BLMI |__rt_stkovf_split_big| - - LDR v2,=aw_temp - LDR a1,[a1] - MOV v1,a3 - LDR a3,[a2] - MOV ip,a4 - STR a1,[v2,#aw_rsz_block] - STR a3,[v2,#aw_rsz_size] - MOV a2,#-1 - STR a2,[v2,#aw_fixed_block] - STR a3,[v2,#aw_fixed_size] - STR sl,[v2,#aw_sl] - STR fp,[v2,#aw_fp] - ADR a2,aw_callback - MOV lr,pc - MOV pc,v1 - MOVVC a1,#0 - - ;return updated block ptr & size to caller - - LDR a2,[fp,#-28] - LDR a3,[fp,#-24] - LDR ip,[v2,#aw_rsz_block] - LDR lr,[v2,#aw_rsz_size] - STR ip,[a2] - STR lr,[a3] - - LDMEA fp,{v1,v2,fp,sp,pc} - - -; os_error *awrender_render(const char *doc, -; const struct awinfo_block *info, -; const os_trfm *trans, -; const int *vdu_vars, -; char **rsz_block, -; size_t *rsz_size, -; int wysiwyg_setting, -; int output_dest, -; size_t doc_size, -; void *routine, -; void *workspace); - -awrender_render MOV ip,sp - STMFD sp!,{v1-v4,fp,ip,lr,pc} - SUB fp,ip,#4 - SUB ip,sp,#512 - CMP ip,sl - BLMI |__rt_stkovf_split_big| - - LDR R12,[fp,#20] - LDR R14,=aw_temp - LDR R5,[fp,#4] - LDR R6,[fp,#12] - LDR R4,[R5] ;resizable block - LDR R7,[fp,#16] - STR R4,[R14,#aw_rsz_block] - STR R0,[R14,#aw_fixed_block] ;document ptr - STR R12,[R14,#aw_fixed_size] ;document size - LDR R12,[fp,#8] - - STR R5,[sp,#-4]! ;ptr to receive block - STR R12,[sp,#-4]! ;ptr to receive size - - LDR R12,[R12] - ADR R5,aw_callback - STR R12,[R14,#aw_rsz_size] - - STR sl,[R14,#aw_sl] - STR fp,[R14,#aw_fp] - - LDR R12,[fp,#28] - MOV lr,pc - LDR pc,[fp,#24] - MOVVC a1,#0 - - ;return updated block ptr & size to caller - - LDR R7,=aw_temp - LDR R12,[sp],#4 - LDR R4,[sp],#4 - LDR R5,[R7,#aw_rsz_size] - LDR R6,[R7,#aw_rsz_block] - STR R5,[R12] - STR R6,[R4] - - LDMEA fp,{v1-v4,fp,sp,pc} - - -; Callback routine for block resizing -; (passed to AWRender init and render routines) -; -; entry R11 = reason code -; 0 = CallBackReason_Memory -; 3 = CallBackReason_Interface -; (0 => return capabilities) -; exit R0 => base of resizable block -; R1 = size of resizable block -; R2 => base of fixed block (or -1 if no fixed block) -; R3 = size of fixed block (or document in resizable block) -; VC if resize successful, VS and R0 => error otherwise - -aw_callback TEQ R11,#3 - TEQEQ R0,#0 - MOVEQ R0,#1<<10 ;background colour supplied - TEQ R11,#0 - LDREQ R11,=aw_temp - MOVNE PC,R14 - - CMP R0,#-1 ;read block size? - LDRNE R2,[R11,#aw_rsz_size] - MOVNE R1,R0 ;new block size - LDR R0,[R11,#aw_rsz_block] - BEQ aw_read - - ; Note: because ArtworksRenderer seems to call - ; this routine for every scanline rendered - ; we never call realloc unless we have to in - ; order to expand the block. Also it calls - ; us with a size request of 0 which we must - ; safely ignore otherwise rendering will stop. - - CMP R1,R2 - BLS aw_read - - STMFD R13!,{R1,R10-R12,R14} - LDR sl,[R11,#aw_sl] - LDR fp,[R11,#aw_fp] - BL realloc - LDMFD R13!,{R1,R10-R12,R14} - - CMP R0,#0 ;did it work? - BEQ aw_nomem - - STR R0,[R11] - STR R1,[R11,#aw_rsz_size] - -aw_read ; return details of fixed block - - LDR R2,[R11,#aw_fixed_block] - LDR R3,[R11,#aw_fixed_size] - SUBS R11,R11,R11 ;clear V - MOV PC,R14 - -aw_nomem STMFD R13!,{R10,R12,R14} - LDR sl,[R11,#aw_sl] - LDR fp,[R11,#aw_fp] - ADR R0,tok_nomem - BL messages_get - MOV a2,a1 - LDR a1,=errblk + 4 - BL strcpy - SUB R0,R0,#4 ;error number already 0 - MOV R11,#0 ;restore reason code - CMP PC,#1<<31 ;set V - LDMFD R13!,{R10,R12,PC} - -tok_nomem = "NoMemory",0 - ALIGN - - - AREA |ARM$$zidata|,DATA,NOINIT - -aw_temp % sizeof_aw -errblk % 256 - - END - -#elif defined(__ELF__) - - .text - -.set aw_rsz_block, 0 -.set aw_rsz_size, 4 -.set aw_fixed_block, 8 -.set aw_fixed_size, 12 -.set aw_sl, 16 -.set aw_fp, 20 -.set sizeof_aw, 24 - -@ os_error *awrender_init(byte **doc, size_t *doc_size, void *init_routine, void *init_workspace); - - .global awrender_init -awrender_init: MOV ip,sp - STMFD sp!,{a1,a2,v1,v2,fp,ip,lr,pc} - SUB fp,ip,#4 - SUB ip,sp,#512 - CMP ip,sl - BLMI __rt_stkovf_split_big - - LDR v2,=aw_temp - LDR a1,[a1] - MOV v1,a3 - LDR a3,[a2] - MOV ip,a4 - STR a1,[v2,#aw_rsz_block] - STR a3,[v2,#aw_rsz_size] - MOV a2,#-1 - STR a2,[v2,#aw_fixed_block] - STR a3,[v2,#aw_fixed_size] - STR sl,[v2,#aw_sl] - STR fp,[v2,#aw_fp] - ADR a2,aw_callback - MOV lr,pc - MOV pc,v1 - MOVVC a1,#0 - - @ return updated block ptr & size to caller - - LDR a2,[fp,#-28] - LDR a3,[fp,#-24] - LDR ip,[v2,#aw_rsz_block] - LDR lr,[v2,#aw_rsz_size] - STR ip,[a2] - STR lr,[a3] - - LDMEA fp,{v1,v2,fp,sp,pc} - - -@ os_error *awrender_render(const char *doc, -@ const struct awinfo_block *info, -@ const os_trfm *trans, -@ const int *vdu_vars, -@ char **rsz_block, -@ size_t *rsz_size, -@ int wysiwyg_setting, -@ int output_dest, -@ size_t doc_size, -@ void *routine, -@ void *workspace); - - .global awrender_render -awrender_render: MOV ip,sp - STMFD sp!,{v1-v4,fp,ip,lr,pc} - SUB fp,ip,#4 - SUB ip,sp,#512 - CMP ip,sl - BLMI __rt_stkovf_split_big - - LDR R12,[fp,#20] - LDR R14,=aw_temp - LDR R5,[fp,#4] - LDR R6,[fp,#12] - LDR R4,[R5] @ resizable block - LDR R7,[fp,#16] - STR R4,[R14,#aw_rsz_block] - STR R0,[R14,#aw_fixed_block] @ document ptr - STR R12,[R14,#aw_fixed_size] @ document size - LDR R12,[fp,#8] - - STR R5,[sp,#-4]! @ ptr to receive block - STR R12,[sp,#-4]! @ ptr to receive size - - LDR R12,[R12] - ADR R5,aw_callback - STR R12,[R14,#aw_rsz_size] - - STR sl,[R14,#aw_sl] - STR fp,[R14,#aw_fp] - - LDR R12,[fp,#28] - MOV lr,pc - LDR pc,[fp,#24] - MOVVC a1,#0 - - @ return updated block ptr & size to caller - - LDR R7,=aw_temp - LDR R12,[sp],#4 - LDR R4,[sp],#4 - LDR R5,[R7,#aw_rsz_size] - LDR R6,[R7,#aw_rsz_block] - STR R5,[R12] - STR R6,[R4] - - LDMEA fp,{v1-v4,fp,sp,pc} - - -@ Callback routine for block resizing -@ (passed to AWRender init and render routines) -@ -@ entry R11 = reason code -@ 0 = CallBackReason_Memory -@ 3 = CallBackReason_Interface -@ (0 => return capabilities) -@ exit R0 => base of resizable block -@ R1 = size of resizable block -@ R2 => base of fixed block (or -1 if no fixed block) -@ R3 = size of fixed block (or document in resizable block) -@ VC if resize successful, VS and R0 => error otherwise - -aw_callback: TEQ R11,#3 - TEQEQ R0,#0 - MOVEQ R0,#1<<10 @ background colour supplied - TEQ R11,#0 - LDREQ R11,=aw_temp - MOVNE PC,R14 - - CMP R0,#-1 @ read block size? - LDRNE R2,[R11,#aw_rsz_size] - MOVNE R1,R0 @ new block size - LDR R0,[R11,#aw_rsz_block] - BEQ aw_read - - @ Note: because ArtworksRenderer seems to call - @ this routine for every scanline rendered - @ we never call realloc unless we have to in - @ order to expand the block. Also it calls - @ us with a size request of 0 which we must - @ safely ignore otherwise rendering will stop. - - CMP R1,R2 - BLS aw_read - - STMFD R13!,{R1,R10-R12,R14} - LDR sl,[R11,#aw_sl] - LDR fp,[R11,#aw_fp] - BL realloc - LDMFD R13!,{R1,R10-R12,R14} - - CMP R0,#0 @ did it work? - BEQ aw_nomem - - STR R0,[R11] - STR R1,[R11,#aw_rsz_size] - -aw_read: @ return details of fixed block - - LDR R2,[R11,#aw_fixed_block] - LDR R3,[R11,#aw_fixed_size] - SUBS R11,R11,R11 @ clear V - MOV PC,R14 - -aw_nomem: STMFD R13!,{R10,R12,R14} - LDR sl,[R11,#aw_sl] - LDR fp,[R11,#aw_fp] - ADR R0,tok_nomem - BL messages_get - MOV a2,a1 - LDR a1,=errblk + 4 - BL strcpy - SUB R0,R0,#4 @ error number already 0 - MOV R11,#0 @ restore reason code - CMP PC,#1<<31 @ set V - LDMFD R13!,{R10,R12,PC} - -tok_nomem: .asciz "NoMemory" - .align - - .bss - -aw_temp: .space sizeof_aw - .type aw_temp, %object - .size aw_temp, . - aw_temp - -errblk: .space 256 - .type errblk, %object - .size errblk, . - errblk - - .end -#endif - |