Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
GrTextBase.txt365 linesDownload Raw Back to Gr
1 2#help_index "TextBase Layer;Char/TextBase Layer"3#help_file "::/Doc/TextBase"4 5asm {6//************************************7_TEXT_CHAR::8//Bool TextChar(CTask *task,Bool allow_border=FALSE,I64 x,I64 y,I64 d);9//Must be called 30fps in Fs->draw_it() callback.10        PUSH    RBP11        MOV     RBP,RSP12        MOV     RCX,U64 SF_ARG1[RBP]13        MOV     RBX,U64 CTask.scroll_x[RCX]14        SAR     RBX,315        ADD     RBX,U64 SF_ARG3[RBP]16        MOV     RAX,U64 CTask.scroll_y[RCX]17        SAR     RAX,318        ADD     RAX,U64 SF_ARG4[RBP]19 20        TEST    U8 SF_ARG2[RBP],0xFF21        JNZ     @@1022 23//Border not allowed24        TEST    RBX,RBX         //Check X25        JS      @@0526        ADD     RBX,U64 CTask.win_left[RCX]27        CMP     RBX,U64 CTask.win_right[RCX]28        JG      @@0529        TEST    RBX,RBX30        JS      @@0531        CMP     RBX,TEXT_COLS32        JGE     @@0533        TEST    RAX,RAX         //Check Y34        JS      @@0535        ADD     RAX,U64 CTask.win_top[RCX]36        CMP     RAX,U64 CTask.win_bottom[RCX]37        JG      @@0538        TEST    RAX,RAX39        JS      @@0540        CMP     RAX,TEXT_ROWS41        JGE     @@0542        JMP     @@1543 44@@05:   XOR     RAX,RAX         //return FALSE45        POP     RBP46        RET1    4047 48//Border allowed49@@10:   MOV     RDX,-1          //Check X50        CMP     RBX,RDX51        JL      @@0552        ADD     RBX,U64 CTask.win_left[RCX]53        MOV     RDX,U64 CTask.win_right[RCX]54        INC     RDX55        CMP     RBX,RDX56        JG      @@0557        TEST    RBX,RBX58        JS      @@0559        CMP     RBX,TEXT_COLS60        JGE     @@0561        MOV     RDX,-1          //Check Y62        CMP     RAX,RDX63        JL      @@0564        ADD     RAX,U64 CTask.win_top[RCX]65        MOV     RDX,U64 CTask.win_bottom[RCX]66        INC     RDX67        CMP     RAX,RDX68        JG      @@0569        TEST    RAX,RAX70        JS      @@0571        CMP     RAX,TEXT_ROWS72        JGE     @@0573 74@@15:   IMUL2   RAX,TEXT_COLS75        ADD     RBX,RAX76        SHL     RBX,277        ADD     RBX,U64 [&gr.text_base]78        MOV     RAX,U64 SF_ARG5[RBP]79        MOV     U32 [RBX],EAX80 81        MOV     RAX,TRUE82        POP     RBP83        RET1    4084//************************************85_TEXT_LEN_STR::86//Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,I64 attr,U8 *s)87//Must be called 30fps in Fs->draw_it() callback.88        PUSH    RBP89        MOV     RBP,RSP90        PUSH    RSI91        PUSH    RDI92        MOV     RBX,U64 SF_ARG1[RBP]93        MOV     RSI,U64 SF_ARG6[RBP]94        MOV     RDI,U64 CTask.scroll_x[RBX]95        SAR     RDI,396        ADD     RDI,U64 SF_ARG2[RBP]97        MOV     RCX,U64 SF_ARG4[RBP]98 99        TEST    RDI,RDI100        JNS     @@05101        ADD     RCX,RDI102        SUB     RSI,RDI103        XOR     RDI,RDI104@@05:   ADD     RDI,U64 CTask.win_left[RBX]105        MOV     RDX,RCX106        ADD     RDX,RDI107        DEC     RDX108        CMP     RDX,U64 CTask.win_right[RBX]109        JLE     @@10110        MOV     RAX,RDX111        SUB     RAX,U64 CTask.win_right[RBX]112        SUB     RDX,RAX113        SUB     RCX,RAX114@@10:   TEST    RDI,RDI115        JNS     @@15116        ADD     RCX,RDI117        SUB     RSI,RDI118        XOR     RDI,RDI119@@15:   INC     RDX120        SUB     RDX,TEXT_COLS121        JLE     @@20122        SUB     RCX,RDX123@@20:   CMP     RCX,1124        JL      @@30125 126        MOV     RAX,U64 CTask.scroll_y[RBX]127        SAR     RAX,3128        ADD     RAX,U64 SF_ARG3[RBP]129        TEST    RAX,RAX130        JS      @@30131        ADD     RAX,U64 CTask.win_top[RBX]132        CMP     RAX,U64 CTask.win_bottom[RBX]133        JG      @@30134        TEST    RAX,RAX135        JS      @@30136        CMP     RAX,TEXT_ROWS137        JGE     @@30138 139        IMUL2   RAX,TEXT_COLS140        ADD     RDI,RAX141        SHL     RDI,2142        ADD     RDI,U64 [&gr.text_base]143        MOV     RAX,U64 SF_ARG5[RBP]144@@25:   LODSB145        STOSD146        DEC     RCX147        JNZ     @@25148 149        POP     RDI150        POP     RSI151        MOV     RAX,TRUE152        POP     RBP153        RET1    48154 155@@30:   POP     RDI156        POP     RSI157        XOR     RAX,RAX158        POP     RBP159        RET1    48160//************************************161_TEXT_LEN_ATTR_STR::162//Bool TextLenAttrStr(CTask *task,I64 x,I64 y,I64 len,U32 *_attr)163//Must be called 30fps in Fs->draw_it() callback.164        PUSH    RBP165        MOV     RBP,RSP166        PUSH    RSI167        PUSH    RDI168        MOV     RBX,U64 SF_ARG1[RBP]169        MOV     RSI,U64 SF_ARG5[RBP]170        MOV     RDI,U64 CTask.scroll_x[RBX]171        SAR     RDI,3172        ADD     RDI,U64 SF_ARG2[RBP]173        MOV     RCX,U64 SF_ARG4[RBP]174 175        TEST    RDI,RDI176        JNS     @@05177        ADD     RCX,RDI178        SHL     RDI,2179        SUB     RSI,RDI180        XOR     RDI,RDI181@@05:   ADD     RDI,U64 CTask.win_left[RBX]182        MOV     RDX,RCX183        ADD     RDX,RDI184        DEC     RDX185        CMP     RDX,U64 CTask.win_right[RBX]186        JLE     @@10187        MOV     RAX,RDX188        SUB     RAX,U64 CTask.win_right[RBX]189        SUB     RDX,RAX190        SUB     RCX,RAX191@@10:   TEST    RDI,RDI192        JNS     @@15193        ADD     RCX,RDI194        SHL     RDI,2195        SUB     RSI,RDI196        XOR     RDI,RDI197@@15:   INC     RDX198        SUB     RDX,TEXT_COLS199        JLE     @@20200        SUB     RCX,RDX201@@20:   CMP     RCX,1202        JL      @@30203 204        MOV     RAX,U64 CTask.scroll_y[RBX]205        SAR     RAX,3206        ADD     RAX,U64 SF_ARG3[RBP]207        TEST    RAX,RAX208        JS      @@30209        ADD     RAX,U64 CTask.win_top[RBX]210        CMP     RAX,U64 CTask.win_bottom[RBX]211        JG      @@30212        TEST    RAX,RAX213        JS      @@30214        CMP     RAX,TEXT_ROWS215        JGE     @@30216 217        IMUL2   RAX,TEXT_COLS218        ADD     RDI,RAX219        SHL     RDI,2220        ADD     RDI,U64 [&gr.text_base]221@@25:   MOVSD222        DEC     RCX223        JNZ     @@25224 225        POP     RDI226        POP     RSI227        MOV     RAX,TRUE228        POP     RBP229        RET1    40230 231@@30:   POP     RDI232        POP     RSI233        XOR     RAX,RAX234        POP     RBP235        RET1    40236//************************************237_TEXT_LEN_ATTR:://Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,I64 attr)238//Must be called 30fps in Fs->draw_it() callback.239        PUSH    RBP240        MOV     RBP,RSP241        PUSH    RSI242        PUSH    RDI243        MOV     RBX,U64 SF_ARG1[RBP]244        MOV     RDI,U64 CTask.scroll_x[RBX]245        SAR     RDI,3246        ADD     RDI,U64 SF_ARG2[RBP]247        MOV     RCX,U64 SF_ARG4[RBP]248 249        TEST    RDI,RDI250        JNS     @@05251        ADD     RCX,RDI252        XOR     RDI,RDI253@@05:   ADD     RDI,U64 CTask.win_left[RBX]254        MOV     RDX,RCX255        ADD     RDX,RDI256        DEC     RDX257        CMP     RDX,U64 CTask.win_right[RBX]258        JLE     @@10259        MOV     RAX,RDX260        SUB     RAX,U64 CTask.win_right[RBX]261        SUB     RDX,RAX262        SUB     RCX,RAX263@@10:   TEST    RDI,RDI264        JNS     @@15265        ADD     RCX,RDI266        XOR     RDI,RDI267@@15:   INC     RDX268        SUB     RDX,TEXT_COLS269        JLE     @@20270        SUB     RCX,RDX271@@20:   CMP     RCX,1272        JL      @@35273 274        MOV     RAX,U64 CTask.scroll_y[RBX]275        SAR     RAX,3276        ADD     RAX,U64 SF_ARG3[RBP]277        TEST    RAX,RAX278        JS      @@35279        ADD     RAX,U64 CTask.win_top[RBX]280        CMP     RAX,U64 CTask.win_bottom[RBX]281        JG      @@35282        TEST    RAX,RAX283        JS      @@35284        CMP     RAX,TEXT_ROWS285        JGE     @@35286 287        IMUL2   RAX,TEXT_COLS288        ADD     RDI,RAX289        SHL     RDI,2290        ADD     RDI,U64 [&gr.text_base]291        MOV     RBX,U64 SF_ARG5[RBP]292        MOV     RSI,RDI293@@25:   LODSD294        TEST    AL,AL295        JNZ     @@30296        MOV     RAX,RBX297        STOSD298        DEC     RCX299        JNZ     @@25300 301@@30:   POP     RDI302        POP     RSI303        MOV     RAX,TRUE304        POP     RBP305        RET1    40306 307@@35:   POP     RDI308        POP     RSI309        XOR     RAX,RAX310        POP     RBP311        RET1    40312}313public _extern _TEXT_CHAR Bool TextChar(CTask *task,Bool allow_border=FALSE,314I64 x,I64 y,I64 d); //Plot char. 30fps in Fs->draw_it() callback.315public _extern _TEXT_LEN_STR Bool TextLenStr(CTask *task,I64 x,I64 y,I64 len,316I64 attr,U8 *s); //Plot str with len.  30fps in Fs->draw_it() callback.317public _extern _TEXT_LEN_ATTR_STR Bool TextLenAttrStr(CTask *task,I64 x,I64 y,318I64 len,U32 *_attr); //Plot attr str with len.  30fps in Fs->draw_it() callback.319public _extern _TEXT_LEN_ATTR Bool TextLenAttr(CTask *task,I64 x,I64 y,I64 len,320I64 attr); //Plot attrs with len.  30fps in Fs->draw_it() callback.321 322public U0 TextPrint(CTask *task,I64 x,I64 y,I64 attr,U8 *fmt,...)323{//Plot chars. 30fps in Fs->draw_it() callback.324//You probably want GrPrint() or just Print().325  U8 *buf=StrPrintJoin(NULL,fmt,argc,argv);326  TextLenStr(task,x,y,StrLen(buf),attr<<8,buf);327  Free(buf);328}329 330public U0 TextBorder(CTask *task=NULL,331        I64 l,I64 r,I64 t,I64 b,I64 attr,Bool solid)332{//Plot border square. 30fps in Fs->draw_it() callback.333//Draws window borders or DolDoc text bttn borders.334  //Set task=sys_winmgr_task for no clipping.335  I64 i;336  if (!task) task=Fs;337  attr<<=8;338  TextChar(task,,l-1,t-1,text.border_chars[6+solid]+attr);339  TextChar(task,,r+1,t-1,text.border_chars[8+solid]+attr);340  TextChar(task,,l-1,b+1,text.border_chars[10+solid]+attr);341  TextChar(task,,r+1,b+1,text.border_chars[12+solid]+attr);342  for (i=l;i<=r;i++) {343    TextChar(task,,i,t-1,text.border_chars[2+solid]+attr);344    TextChar(task,,i,b+1,text.border_chars[2+solid]+attr);345  }346  for (i=t;i<=b;i++) {347    TextChar(task,,l-1,i,text.border_chars[4+solid]+attr);348    TextChar(task,,r+1,i,text.border_chars[4+solid]+attr);349  }350}351 352public U0 TextRect(I64 l,I64 r,I64 t,I64 b,I64 d)353{//Fill text rect. 30fps in Fs->draw_it() callback.354  I64 y,w;355  if (l>r || t>b) return;356  if (t<0) t=0;357  if (b>=TEXT_ROWS) b=TEXT_ROWS-1;358  if (l<0) l=0;359  if (r>=TEXT_COLS) r=TEXT_COLS-1;360  if (w=r-l+1)361    for (y=t;y<=b;y++)362      MemSetU32(gr.text_base(U8 *)+(y*TEXT_COLS+l)*sizeof(U32),d,w);363}364 365