Rev 975 | Details | Compare with Previous | Last modification | View Log
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 447 | alone | 1 | STRINGBUFSZ=MAXLINKSZ ;512;256 |
| 31 | Alone | 2 | |
| 3 | ;for text |
||
| 4 | stringbuf1header |
||
| 5 | TEXT_BASE |
||
| 6 | TEXT_NEXT=$-TEXT_BASE |
||
| 7 | ds 3 ;next |
||
| 8 | TEXT_PREV=$-TEXT_BASE |
||
| 9 | ds 3 ;prev |
||
| 10 | TEXT_Y=$-TEXT_BASE |
||
| 11 | ds 2 ;y |
||
| 12 | TEXT_X=$-TEXT_BASE |
||
| 13 | ds 1 ;x |
||
| 32 | Alone | 14 | TEXT_TEXT=$-TEXT_BASE |
| 31 | Alone | 15 | stringbuf1 |
| 16 | ds STRINGBUFSZ |
||
| 447 | alone | 17 | db 0 ; 砩 STRINGBUFSZ |
| 31 | Alone | 18 | |
| 19 | firstpointer |
||
| 20 | dw 0 |
||
| 21 | firstpointerHSB |
||
| 22 | db 0 |
||
| 23 | |||
| 24 | ;for href |
||
| 25 | stringbuf2header |
||
| 26 | HREF_BASE |
||
| 27 | HREF_NEXT=$-HREF_BASE |
||
| 28 | ds 3 ;next |
||
| 29 | HREF_PREV=$-HREF_BASE |
||
| 30 | ds 3 ;prev |
||
| 31 | HREF_Y=$-HREF_BASE |
||
| 32 | ds 2 ;y |
||
| 33 | HREF_X=$-HREF_BASE |
||
| 34 | ds 1 ;x |
||
| 35 | HREF_ENDY=$-HREF_BASE |
||
| 344 | alone | 36 | ds 2 ;endy (TODO 뫮 ࠧ 騬 뫮, ࠧ묨 ﬨ ਨ) |
| 31 | Alone | 37 | HREF_ENDX=$-HREF_BASE |
| 344 | alone | 38 | ds 1 ;endx (TODO 뫮 ࠧ 騬 뫮, ࠧ묨 ﬨ ਨ) |
| 31 | Alone | 39 | HREF_VISITED=$-HREF_BASE |
| 40 | ds 1 ;visited |
||
| 32 | Alone | 41 | HREF_TEXT=$-HREF_BASE |
| 31 | Alone | 42 | stringbuf2 |
| 43 | ds STRINGBUFSZ |
||
| 447 | alone | 44 | db 0 ; 砩 STRINGBUFSZ |
| 31 | Alone | 45 | |
| 46 | first2pointer |
||
| 47 | dw 0 |
||
| 48 | first2pointerHSB |
||
| 49 | db 0 |
||
| 50 | |||
| 344 | alone | 51 | ; ९ STRINGBUFSZ! |
| 31 | Alone | 52 | printtostringbuf2 |
| 53 | curstringbuf2addr=$+1 |
||
| 54 | ld hl,stringbuf2 |
||
| 104 | alone | 55 | push de |
| 56 | ld de,stringbuf2+STRINGBUFSZ |
||
| 57 | or a |
||
| 58 | sbc hl,de |
||
| 59 | add hl,de |
||
| 60 | pop de |
||
| 61 | ret nc |
||
| 31 | Alone | 62 | ld (hl),a |
| 63 | inc hl |
||
| 64 | ld (curstringbuf2addr),hl |
||
| 65 | ret |
||
| 66 | |||
| 67 | linklastpointer_next_ahl_setlastpointer |
||
| 68 | ;if (not isnull(lastpointer)) lastpointer->next=addr else firstpointer=addr |
||
| 69 | ;lastpointer = addr |
||
| 70 | push af |
||
| 71 | push hl |
||
| 72 | ex af,af' |
||
| 73 | ld b,h |
||
| 74 | ld c,l |
||
| 75 | ld hl,(lastpointer) |
||
| 76 | ld a,(lastpointerHSB) |
||
| 77 | call isnull |
||
| 78 | jr z,linklastpointer_lastnull |
||
| 79 | call writeword ;bc |
||
| 80 | ex af,af' |
||
| 55 | Alone | 81 | ;cp 0xff |
| 82 | ;jr z,$ |
||
| 31 | Alone | 83 | ld c,a |
| 55 | Alone | 84 | ex af,af' |
| 31 | Alone | 85 | call writebyte ;c |
| 86 | jr linklastpointer_lastnullq |
||
| 87 | linklastpointer_lastnull |
||
| 55 | Alone | 88 | ex af,af' |
| 31 | Alone | 89 | ld (firstpointer),bc |
| 90 | ld (firstpointerHSB),a |
||
| 91 | linklastpointer_lastnullq |
||
| 92 | pop hl |
||
| 93 | pop af |
||
| 94 | ld (lastpointer),hl |
||
| 95 | ld (lastpointerHSB),a |
||
| 96 | ret |
||
| 97 | |||
| 98 | linklast2pointer_next_ahl_setlast2pointer |
||
| 99 | ;if (not isnull(last2pointer)) last2pointer->next=addr else first2pointer=addr |
||
| 100 | ;last2pointer = addr |
||
| 101 | push af |
||
| 102 | push hl |
||
| 103 | ex af,af' |
||
| 104 | ld b,h |
||
| 105 | ld c,l |
||
| 106 | ld hl,(last2pointer) |
||
| 107 | ld a,(last2pointerHSB) |
||
| 108 | call isnull |
||
| 109 | jr z,linklast2pointer_lastnull |
||
| 110 | call writeword ;bc |
||
| 111 | ex af,af' |
||
| 112 | ld c,a |
||
| 55 | Alone | 113 | ex af,af' |
| 31 | Alone | 114 | call writebyte ;c |
| 115 | jr linklast2pointer_lastnullq |
||
| 116 | linklast2pointer_lastnull |
||
| 55 | Alone | 117 | ex af,af' |
| 31 | Alone | 118 | ld (first2pointer),bc |
| 119 | ld (first2pointerHSB),a |
||
| 120 | linklast2pointer_lastnullq |
||
| 121 | pop hl |
||
| 122 | pop af |
||
| 123 | ld (last2pointer),hl |
||
| 124 | ld (last2pointerHSB),a |
||
| 125 | ret |
||
| 126 | |||
| 127 | savestringbuf1 |
||
| 128 | ;add terminator |
||
| 129 | ;find size |
||
| 130 | ;form header |
||
| 131 | ;reservemem & put |
||
| 132 | ;if (not isnull(lastpointer)) link lastpointer->next = addr |
||
| 133 | ;lastpointer = addr |
||
| 134 | ;initialize stringbuf1 |
||
| 135 | ld hl,(curstringbuf1addr) |
||
| 136 | xor a |
||
| 137 | ld (hl),a |
||
| 138 | inc hl |
||
| 139 | ld de,stringbuf1header |
||
| 140 | ;or a |
||
| 141 | sbc hl,de ;hl=size |
||
| 142 | ld b,h |
||
| 143 | ld c,l |
||
| 144 | |||
| 145 | ;form header: |
||
| 146 | ld hl,-1 |
||
| 147 | ld a,-1 |
||
| 148 | ld (stringbuf1header+TEXT_NEXT),hl |
||
| 149 | ld (stringbuf1header+TEXT_NEXT+2),a |
||
| 150 | lastpointer=$+1 |
||
| 151 | ld hl,-1 |
||
| 152 | lastpointerHSB=$+1 |
||
| 153 | ld a,-1 |
||
| 154 | ld (stringbuf1header+TEXT_PREV),hl |
||
| 155 | ld (stringbuf1header+TEXT_PREV+2),a |
||
| 156 | laststringy=$+1 |
||
| 157 | ld hl,0 |
||
| 158 | ld (stringbuf1header+TEXT_Y),hl |
||
| 159 | laststringx=$+1 |
||
| 160 | ld a,0 |
||
| 161 | ld (stringbuf1header+TEXT_X),a |
||
| 162 | |||
| 163 | ;if iscentered then TEXT_X = (textfieldwidth-textlength)/2 |
||
| 501 | alone | 164 | ;TODO FIX: 뫪 ⮩ ப ⮦ ᤢ X! 㦥 ࠭!!! |
| 31 | Alone | 165 | iscentered=$+1 |
| 166 | ld a,0 |
||
| 167 | or a |
||
| 168 | jr z,savestringbuf1_notcentered |
||
| 169 | call countlinewidth ;hl |
||
| 170 | ld a,80 ;TODO textfieldwidth |
||
| 171 | sub l |
||
| 172 | rra |
||
| 173 | ld (stringbuf1header+TEXT_X),a |
||
| 174 | savestringbuf1_notcentered |
||
| 175 | |||
| 176 | if 1==0 |
||
| 177 | push bc |
||
| 178 | push de |
||
| 179 | push hl |
||
| 180 | |||
| 181 | ld hl,(stringbuf1header+TEXT_Y) |
||
| 182 | ld bc,25 |
||
| 183 | or a |
||
| 184 | sbc hl,bc |
||
| 185 | add hl,bc |
||
| 186 | jr nc,notest1 |
||
| 187 | ld a,l |
||
| 188 | add a,a |
||
| 189 | add a,a |
||
| 190 | add a,a |
||
| 191 | ld d,a |
||
| 192 | ld a,(stringbuf1header+TEXT_X) |
||
| 193 | ld e,a |
||
| 194 | call setxymc_stateful |
||
| 195 | ld hl,stringbuf1 |
||
| 196 | test10 |
||
| 197 | ld a,(hl) |
||
| 198 | or a |
||
| 199 | jr z,notest1 |
||
| 200 | inc hl |
||
| 201 | push hl |
||
| 202 | ;halt |
||
| 203 | call prcharmc_stateful |
||
| 204 | pop hl |
||
| 205 | jr test10 |
||
| 206 | |||
| 207 | notest1 |
||
| 208 | pop hl |
||
| 209 | pop de |
||
| 210 | pop bc |
||
| 211 | endif |
||
| 212 | |||
| 213 | ex de,hl |
||
| 214 | ;hl=from |
||
| 215 | ;bc=size |
||
| 216 | ;out: ahl=addr |
||
| 217 | ;jr $ |
||
| 218 | call reservemem_puttomem |
||
| 219 | call linklastpointer_next_ahl_setlastpointer |
||
| 220 | initstringbuf1 |
||
| 221 | xor a |
||
| 222 | ld (iscentered),a |
||
| 223 | ;ld (ncharsinline),a |
||
| 224 | ld hl,stringbuf1 |
||
| 225 | ld (curstringbuf1addr),hl |
||
| 32 | Alone | 226 | jp setfontweight |
| 31 | Alone | 227 | |
| 228 | savestringbuf2 |
||
| 229 | ;add terminator |
||
| 230 | ;find size |
||
| 231 | ;form header |
||
| 232 | ;reservemem & put |
||
| 233 | ;if (not isnull(lastpointer)) lastpointer->next=addr else firstpointer=addr |
||
| 234 | ;lastpointer = addr |
||
| 235 | ;initialize stringbuf2 |
||
| 236 | ld hl,(curstringbuf2addr) |
||
| 447 | alone | 237 | ld de,stringbuf2 |
| 238 | or a |
||
| 239 | sbc hl,de |
||
| 240 | add hl,de |
||
| 241 | ret z ; ࠭塞, ࢮ 뫪 div??? |
||
| 31 | Alone | 242 | xor a |
| 243 | ld (hl),a |
||
| 244 | inc hl |
||
| 245 | ld de,stringbuf2header |
||
| 246 | ;or a |
||
| 247 | sbc hl,de ;hl=size |
||
| 248 | push hl ;size |
||
| 249 | |||
| 250 | ;form header: |
||
| 32 | Alone | 251 | ld a,(prcharvirtual_stateful_x) |
| 31 | Alone | 252 | ld (stringbuf2header+HREF_ENDX),a |
| 253 | ld hl,(curprintvirtualy) |
||
| 254 | ld (stringbuf2header+HREF_ENDY),hl |
||
| 255 | ld a,-1 |
||
| 32 | Alone | 256 | ld h,a |
| 257 | ld l,a |
||
| 31 | Alone | 258 | ld (stringbuf2header+HREF_NEXT),hl |
| 259 | ld (stringbuf2header+HREF_NEXT+2),a |
||
| 260 | last2pointer=$+1 |
||
| 261 | ld hl,-1 |
||
| 262 | last2pointerHSB=$+1 |
||
| 263 | ld a,-1 |
||
| 264 | ld (stringbuf2header+HREF_PREV),hl |
||
| 265 | ld (stringbuf2header+HREF_PREV+2),a |
||
| 266 | hrefyposition=$+1 |
||
| 267 | ld hl,0 |
||
| 268 | ld (stringbuf2header+HREF_Y),hl |
||
| 269 | hrefxposition=$+1 |
||
| 270 | ld a,0 |
||
| 271 | ld (stringbuf2header+HREF_X),a |
||
| 272 | xor a |
||
| 273 | ld (stringbuf2header+HREF_VISITED),a ;TODO check history |
||
| 274 | ;jr $ |
||
| 275 | |||
| 276 | if 1==0 |
||
| 277 | push de |
||
| 278 | push hl |
||
| 279 | |||
| 280 | ld hl,(stringbuf2header+HREF_Y) |
||
| 281 | ld bc,25 |
||
| 282 | or a |
||
| 283 | sbc hl,bc |
||
| 284 | add hl,bc |
||
| 285 | jr nc,notest |
||
| 286 | ld a,l |
||
| 287 | add a,a |
||
| 288 | add a,a |
||
| 289 | add a,a |
||
| 290 | ld d,a |
||
| 291 | ld a,(stringbuf2header+HREF_X) |
||
| 292 | ld e,a |
||
| 293 | call setxymc_stateful |
||
| 294 | ld a,'@' |
||
| 295 | call prcharmc_stateful |
||
| 296 | |||
| 297 | notest |
||
| 298 | pop hl |
||
| 299 | pop de |
||
| 300 | endif |
||
| 301 | |||
| 302 | ex de,hl |
||
| 303 | pop bc ;size |
||
| 304 | ;hl=from |
||
| 305 | ;bc=size |
||
| 306 | ;out: ahl=addr |
||
| 307 | ;jr $ |
||
| 308 | call reservemem_puttomem |
||
| 309 | call linklast2pointer_next_ahl_setlast2pointer |
||
| 310 | initstringbuf2 |
||
| 311 | ld hl,stringbuf2 |
||
| 312 | ld (curstringbuf2addr),hl |
||
| 313 | ret |
||
| 314 | |||
| 32 | Alone | 315 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 316 | |||
| 317 | setdefaultfontweight |
||
| 318 | xor a |
||
| 319 | ld (curbold),a |
||
| 320 | ld (curlink),a |
||
| 68 | Alone | 321 | ld (curlinkimg),a |
| 322 | ld (curmark),a |
||
| 32 | Alone | 323 | ld (curitalic),a |
| 324 | ld (curunderline),a |
||
| 325 | ld (curstroke),a |
||
| 326 | ret |
||
| 327 | |||
| 328 | setfontweight |
||
| 329 | ld a,(printableflag) |
||
| 330 | or a |
||
| 331 | ret z |
||
| 332 | ld a,1 |
||
| 333 | call prcharvirtual_stateful |
||
| 334 | curbold=$+1 |
||
| 335 | ld a,0 |
||
| 336 | curlink=$+1 |
||
| 337 | or 0 |
||
| 68 | Alone | 338 | curlinkimg=$+1 |
| 339 | or 0 |
||
| 32 | Alone | 340 | curmark=$+1 |
| 341 | or 0 |
||
| 342 | inc a |
||
| 343 | call prcharvirtual_stateful |
||
| 344 | ld a,2 |
||
| 345 | call prcharvirtual_stateful |
||
| 346 | curitalic=$+1 |
||
| 347 | ld a,0 |
||
| 348 | inc a |
||
| 349 | call prcharvirtual_stateful |
||
| 350 | ld a,3 |
||
| 351 | call prcharvirtual_stateful |
||
| 352 | curstroke=$+1 |
||
| 353 | ld a,0 |
||
| 354 | inc a |
||
| 355 | call prcharvirtual_stateful |
||
| 356 | ld a,4 |
||
| 357 | call prcharvirtual_stateful |
||
| 358 | curunderline=$+1 |
||
| 359 | ld a,0 |
||
| 360 | inc a |
||
| 361 | jp prcharvirtual_stateful |
||
| 362 | |||
| 31 | Alone | 363 | prcharvirtual_tab_stateful |
| 364 | ld a,(prcharvirtual_stateful_x) |
||
| 365 | and 7 ;0..7 |
||
| 366 | cpl ;-1..-8 |
||
| 367 | add a,9 |
||
| 368 | ld b,a ;8..1 |
||
| 369 | prcharvirtual_tab_stateful0 |
||
| 370 | push bc |
||
| 371 | ld a,' ' |
||
| 372 | call prcharvirtual_stateful |
||
| 373 | pop bc |
||
| 374 | djnz prcharvirtual_tab_stateful0 |
||
| 375 | ret |
||
| 376 | |||
| 32 | Alone | 377 | prcharvirtual_controlcode |
| 378 | cp 0x09 ;tab |
||
| 379 | jr z,prcharvirtual_tab_stateful |
||
| 380 | cp 0x0a ;LF |
||
| 975 | dimkam | 381 | jp z,prcharvirtual_crlf_stateful |
| 32 | Alone | 382 | cp 0x0d ;CR |
| 383 | ret z |
||
| 384 | jr prcharvirtual_stateful_nocontrolcode |
||
| 385 | |||
| 31 | Alone | 386 | prcharvirtual_stateful |
| 387 | ;a=code |
||
| 32 | Alone | 388 | printableflag=$+1 |
| 389 | ld l,0 |
||
| 390 | dec l |
||
| 391 | ret nz |
||
| 392 | cp 32 |
||
| 393 | jr c,prcharvirtual_controlcode |
||
| 394 | prcharvirtual_stateful_nocontrolcode |
||
| 31 | Alone | 395 | push af |
| 396 | cp 0x80 |
||
| 397 | jr c,prcharvirtual_noutf8 |
||
| 398 | utf8flag=$+1 |
||
| 399 | ld l,0 |
||
| 400 | dec l |
||
| 401 | jr nz,prcharvirtual_noutf8 |
||
| 402 | sub 0xd0 |
||
| 403 | jr z,prcharvirtual_utf8_d0 |
||
| 404 | cp 1 |
||
| 405 | jr z,prcharvirtual_utf8_d0 |
||
| 344 | alone | 406 | cp 0xe2-0xd0 ;dash = e2 80 94 ( 80 ᯮ "" = d1 80) |
| 32 | Alone | 407 | jr z,prcharvirtual_utf8_e2 |
| 408 | cp 0xc2-0xd0 ;bullet = c2 b7 |
||
| 409 | jr z,prcharvirtual_utf8_c2 |
||
| 410 | ;sub 0x80 |
||
| 31 | Alone | 411 | prcharvirtual_utf8_add=$+1 |
| 412 | add a,0x00 |
||
| 32 | Alone | 413 | ;add a,0x80 |
| 414 | cp 0x01 |
||
| 415 | jr z,prcharvirtual_utf8_yo |
||
| 416 | cp 0x20 |
||
| 417 | jr nc,prcharvirtual_noutf8 |
||
| 418 | pop af |
||
| 419 | ret |
||
| 420 | prcharvirtual_utf8_yo |
||
| 344 | alone | 421 | ld a,0xb8;'' |
| 31 | Alone | 422 | jr prcharvirtual_noutf8 |
| 32 | Alone | 423 | prcharvirtual_utf8_c2 |
| 424 | ld a,0xb7-0xb7+0xd0 |
||
| 425 | ld (prcharvirtual_utf8_add),a |
||
| 426 | pop af |
||
| 427 | ret |
||
| 428 | prcharvirtual_utf8_e2 |
||
| 429 | ld a,'-'-0x94+0xd0 |
||
| 430 | ld (prcharvirtual_utf8_add),a |
||
| 431 | pop af |
||
| 432 | ret |
||
| 31 | Alone | 433 | prcharvirtual_utf8_d0 |
| 434 | add a,a |
||
| 435 | add a,a |
||
| 436 | add a,a |
||
| 437 | add a,a |
||
| 438 | add a,a |
||
| 439 | add a,a |
||
| 440 | ld (prcharvirtual_utf8_add),a |
||
| 441 | pop af |
||
| 442 | ret |
||
| 443 | prcharvirtual_noutf8 |
||
| 444 | ld h,twinto866/256 |
||
| 445 | ld l,a |
||
| 446 | ld a,(hl) |
||
| 975 | dimkam | 447 | ;call printtostringbuf1 |
| 448 | |||
| 449 | ; ९ STRINGBUFSZ! |
||
| 450 | ;printtostringbuf1 |
||
| 451 | curstringbuf1addr=$+1 |
||
| 452 | ld hl,stringbuf1 |
||
| 453 | push de |
||
| 454 | ld de,stringbuf1+STRINGBUFSZ |
||
| 455 | or a |
||
| 456 | sbc hl,de |
||
| 457 | add hl,de |
||
| 458 | pop de |
||
| 459 | jr nc,.over_full |
||
| 460 | cp ' ' |
||
| 461 | jr nz,.no_space |
||
| 462 | .last_char=$+1 |
||
| 463 | cp ' ' |
||
| 464 | jr nz,.no_space |
||
| 31 | Alone | 465 | pop af |
| 975 | dimkam | 466 | ret |
| 467 | .no_space |
||
| 468 | ld (.last_char),a |
||
| 469 | ld (last_crlf_flag),a |
||
| 470 | ld (hl),a |
||
| 471 | inc hl |
||
| 472 | ld (curstringbuf1addr),hl |
||
| 473 | |||
| 474 | .over_full |
||
| 475 | pop af |
||
| 31 | Alone | 476 | cp 32 |
| 477 | ret c |
||
| 975 | dimkam | 478 | display "prcharvirtual_stateful_x ",prcharvirtual_stateful_x |
| 31 | Alone | 479 | prcharvirtual_stateful_x=$+1 |
| 480 | ld a,0 |
||
| 481 | inc a |
||
| 482 | ld (prcharvirtual_stateful_x),a |
||
| 483 | cp 80 |
||
| 484 | ret c |
||
| 485 | prcharvirtual_crlf_stateful |
||
| 32 | Alone | 486 | ld a,(printableflag) |
| 487 | or a |
||
| 488 | jr z,prcharvirtual_x0 |
||
| 974 | dimkam | 489 | last_crlf_flag=$+1 |
| 490 | ld a,0 ;ய⨬ ⢥ ७ |
||
| 491 | or a |
||
| 975 | dimkam | 492 | jr z,prcharvirtual_x0 |
| 31 | Alone | 493 | call savestringbuf1 |
| 494 | curprintvirtualy=$+1 |
||
| 495 | ld hl,0 |
||
| 496 | inc hl |
||
| 497 | ld (laststringy),hl |
||
| 498 | ld (curprintvirtualy),hl |
||
| 32 | Alone | 499 | prcharvirtual_x0 |
| 500 | xor a |
||
| 501 | ld (prcharvirtual_stateful_x),a |
||
| 502 | ld (laststringx),a |
||
| 974 | dimkam | 503 | ld (last_crlf_flag),a |
| 31 | Alone | 504 | ret |
| 505 | |||
| 506 | countlinewidth |
||
| 507 | ;out:hl |
||
| 508 | ld a,(prcharvirtual_stateful_x) |
||
| 509 | ld hl,laststringx |
||
| 510 | sub (hl) |
||
| 511 | ld l,a ;number of visible chars in line |
||
| 512 | ld h,0 |
||
| 513 | ret |