📄 sdrv_textoutrect.s01
字号:
NAME sdrv_textoutrect(16)
RSEG BBC_PUTS(0)
EXTERN BAPI_PutS
EXTERN PutCharErrFlag
PUBLIC Sdrv_TextOutRect
EXTERN StrHeight
EXTERN region
EXTERN region_win
EXTERN ?CLZ80L_4_04_L00
RSEG BBC_PUTS
Sdrv_TextOutRect:
; 1. /*
; 2. ********************************************************************************
; 3. * ACTOS
; 4. * ui dirver show picture
; 5. *
; 6. * (c) Copyright 2002-2003, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * File : Sdrv_TextOutRect.c
; 10. * By : Rcmai
; 11. * Version: 1> v1.00 first version 10/17/2003 10:46PM
; 12. ********************************************************************************
; 13. */
; 14. #include "display.h"
; 15. #include "Drv_S6B33B0A.h"
; 16.
; 17. #pragma memory=constseg(BBS_PUTS)
; 18. #pragma memory=default
; 19.
; 20. #pragma memory=dataseg(BBD_PUTS)
; 21. #pragma memory=default
; 22.
; 23. #pragma codeseg(BBC_PUTS)
; 24.
; 25. ////*******************************************************************************/
; 26. ///* non_banked void Sdrv_TextOutRect(region_t * region, char *str);
; 27. //** FUNCTION: Sdrv_TextOutRect
; 28. //**
; 29. //** Description: 在指定的区域上输出一个字符串,如串的长度超过区域则自动换行
; 30. // 直到字符结束或区域用完
; 31. //** input
; 32. //** region_t * TORregion: 指定输出字符的区域 ;
; 33. //** strlen: 字符串首址
; 34. //**
; 35. //** output
; 36. //** none
; 37. //********************************************************************************/
; 38. non_banked void Sdrv_TextOutRect(region_t * TORregion, char *str)
; 39. {
PUSH IX
PUSH BC
PUSH DE
PUSH AF
PUSH AF
; 40. char *str_tmp;//记录当前输出到的字符首址
; 41. region_t oldregion_bak;//备份原来的窗口值
; 42.
; 43. oldregion_bak = region_win;
LD HL,0
ADD HL,SP
EX DE,HL
LD HL,region_win
LD BC,4
LDIR
; 44.
; 45. //设置输出窗口
; 46. region_win = *TORregion;
LD DE,region_win
LD HL,4
ADD HL,SP
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
LD BC,4
LDIR
; 47.
; 48. //
; 49. str_tmp = str;
LD HL,6
ADD HL,SP
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
PUSH HL
POP IX
; 50.
; 51. //设置输出字符串的起点
; 52. region.x = region_win.x;
LD A,(region_win)
LD (region),A
; 53. region.y = region_win.y;
LD A,(region_win+1)
LD (region+1),A
?0002:
; 54. do
; 55. {
; 56. str_tmp = BAPI_PutS(str_tmp, -1);
LD C,255
PUSH IX
POP DE
CALL BAPI_PutS
PUSH HL
POP IX
; 57. region.x = region_win.x; //回到区域首列
LD A,(region_win)
LD (region),A
; 58. region.y += StrHeight; //加刚才那一行的高度
LD A,(StrHeight)
LD B,A
LD A,(region+1)
ADD A,B
LD (region+1),A
; 59. }while(PutCharErrFlag == RESULT_PUTCHAR_X_ERR);//x轴超限,要回到下一行
LD A,(PutCharErrFlag)
DEC A
JR Z,?0002
?0000:
; 60. region_win = oldregion_bak;//恢复原来的窗口
LD DE,region_win
LD HL,0
ADD HL,SP
LD BC,4
LDIR
; 61. return;
; 62. }
POP HL
POP HL
POP HL
POP HL
POP IX
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -