Subversion Repositories NedoOS

Rev

Rev 1509 | Details | Compare with Previous | Last modification | View Log

Rev Author Line No. Line
1410 alone 1
NVVIEW_XYTOP=0x0000 ; ⮬ ᬥ - 
2
;NVVIEW_HGT=txtscrhgt-1 ; ⮬ 㬥 - 
3
NVVIEW_WID=80 ; ⮬ 㬥 - ஫
841 alone 4
       if PRSTDIO
574 alone 5
_NVVIEW_PANELCOLOR=0x0700;0x38
841 alone 6
       else
7
_NVVIEW_PANELCOLOR=0x38
8
       endif
8 dimkam 9
 
10
editcmd_3
11
        call ifcmdnonempty_typedigit
650 alone 12
editcmd_F3
8 dimkam 13
        call getfcbundercursor ;->fcb
23 dimkam 14
        ld a,(fcb+FCB_FATTRIB)
8 dimkam 15
        and FATTRIB_DIR;#10
16
        ret nz
17
 
654 alone 18
        ;call nv_openfcb ;autopush nv_closefcb
19
        ;ret nz ;error
20
        ld hl,fcb_filename
21
        ld de,filenametext
22
        call cpmname_to_dotname
23
 
24
        call setcurpaneldir
25
 
600 alone 26
        call setdrawtablesneeded
889 alone 27
        ld hl,editcmd_reprintall_noreaddir ;TODO  ᫨ 䠩 ?
8 dimkam 28
        push hl
889 alone 29
nvview
654 alone 30
        ld de,filenametext
31
;de=filename
32
        OS_OPENHANDLE
33
        or a
34
        ret nz ;error
35
        ld a,b
36
        ld (curhandle),a
37
        ;ld hl,nv_closehandle
38
        ;push hl
8 dimkam 39
 
841 alone 40
       if PRSTDIO
574 alone 41
        ld de,0
889 alone 42
        call nv_setxy ;keeps de,hl,ix
574 alone 43
        CLS_
841 alone 44
       else
45
        ld e,_COLOR
46
        OS_CLS
47
       endif
8 dimkam 48
 
49
        ld hl,unreservepages
50
        push hl
51
 
52
        ld hl,0
53
        ld de,0
54
nvview_load0
55
        push de
56
        push hl
57
        call reservepage
58
        pop hl
59
        pop de
60
        ret nz ;no memory
615 alone 61
;nvview_load0nonewpg        
574 alone 62
        ld a,0xc000/256
8 dimkam 63
        call cmd_loadpage
608 alone 64
        jr nz,nvview_load0q
8 dimkam 65
        add hl,bc
66
        jr nc,$+3
1518 alone 67
        inc de
615 alone 68
         ;TODO nvview_load0nonewpg with new pointer if no new page
608 alone 69
        ld a,b
70
        or c
71
        jr nz,nvview_load0
72
nvview_load0q
1518 alone 73
;dehl=true file size (for TRDOSFS)
74
        ld (filesize),hl
75
        ld (filesizeHSW),de
608 alone 76
        call nv_closehandle
8 dimkam 77
 
849 alone 78
        call setunchanged
79
 
80
        ld hl,filenametext
81
        ld de,tshown_filename
82
        ld b,TSPACES_FILENAME_SZ
83
        call strcopy_maxb
84
 
8 dimkam 85
        xor a
86
        ld h,a
87
        ld l,a
88
        call nvview_settop
89
 
90
        ;call nvview_panel        
91
 
92
        call nvview_calclines
9 dimkam 93
        ld hl,1;0
8 dimkam 94
        ld (nvview_ncurline),hl
95
 
96
nvview_redrawloop
97
        ;jp nvview_hexeditor
98
 
99
        call nvview_prcurpage
100
nvview_mainloop
606 dimkam 101
nvview_mainloop_nokey
1167 alone 102
        YIELD
841 alone 103
       if PRSTDIO
104
        GETKEY_
1167 alone 105
        jr nz,nvview_mainloop_keyq
1168 alone 106
        ;GETKEY_
107
        ;jr nz,nvview_mainloop_keyq
108
        ;GETKEY_
109
        ;jr nz,nvview_mainloop_keyq ;event 뢠 3-ᨬ
841 alone 110
       else
111
        GET_KEY
842 alone 112
        ;jr z,nvview_mainloop_nokeygo
751 alone 113
; ᮡ⨥ (a=0:  )
841 alone 114
        ld a,c ;keynolang
606 dimkam 115
        ;cp NOKEY
841 alone 116
         or a
1167 alone 117
        jr nz,nvview_mainloop_keyq
841 alone 118
       endif
1167 alone 119
        call nvview_panel ;97359 t
606 dimkam 120
        jr nvview_mainloop_nokey
8 dimkam 121
nvview_mainloop_keyq
122
        cp key_redraw
123
        jr z,nvview_redrawloop
116 alone 124
        cp key_esc
8 dimkam 125
        ret z
116 alone 126
        cp key_tab
9 dimkam 127
        jp z,nvview_hexeditor
8 dimkam 128
        ld hl,nvview_mainloop
129
        push hl
116 alone 130
        cp key_up
8 dimkam 131
        jp z,nvview_up
116 alone 132
        cp key_down
8 dimkam 133
        jp z,nvview_down
116 alone 134
        cp key_pgup
8 dimkam 135
        jp z,nvview_pgup
116 alone 136
        cp key_pgdown
8 dimkam 137
        jp z,nvview_pgdown
858 alone 138
         cp key_csenter
139
         jp z,hexeditor_save
140
         cp key_F2
141
         jp z,hexeditor_save
1167 alone 142
        cp key_F1;'s'
8 dimkam 143
        jp z,nvview_changeencoding
116 alone 144
        cp key_home
8 dimkam 145
        jp z,nvview_home
116 alone 146
        cp key_sspgup;ext3
9 dimkam 147
        jp z,nvview_home
116 alone 148
        cp key_end
8 dimkam 149
        jp z,nvview_end
116 alone 150
        cp key_sspgdown;ext4
9 dimkam 151
        jp z,nvview_end
116 alone 152
        cp key_left
8 dimkam 153
        jp z,nvview_left
116 alone 154
        cp key_right
8 dimkam 155
        jp z,nvview_right
1167 alone 156
        cp key_ins;'w'
8 dimkam 157
        jp z,nvview_wrap
158
        ret
159
 
160
nvview_hexeditor
344 alone 161
        ;pop af ;᭨  
606 dimkam 162
        ld de,0x0000
889 alone 163
        call nv_setxy ;keeps de,hl,ix
8 dimkam 164
        ld hl,(curtoptextaddr)
165
        ld a,(curtoptextHSB)
166
        ld (hexaddrlineHSB),a
167
        ld a,l
168
        and 0xf0
169
        ld l,a
170
        ld (hexaddrline),hl
171
        ld hl,0
172
        ld (hexcuraddrxy),hl
667 alone 173
        jp hexeditor_redrawloop
8 dimkam 174
nvview_hexeditorq
175
        call nvview_calclines
176
        ld hl,(hexaddrline)
177
        ld a,(hexaddrlineHSB)
178
        call nvview_nextline
179
        call nvview_prevline ;line beginning (TODO fix uneven sizes in wrap mode)
180
 
181
        call nvview_settop
182
        call nvview_calccurline
183
 
184
        jp nvview_redrawloop
185
 
186
nvview_wrap
187
        ld a,(wrapflag)
188
        xor 128
189
        ld (wrapflag),a
190
        ld hl,0
191
        ld (nvview_prline_shift),hl
192
        ld hl,(curtoptextaddr)
193
        ld a,(curtoptextHSB)
194
        call nvview_pgdown_pgup_ahl;nvview_prcurpage
195
        call nvview_calclines
196
        ld hl,(curtoptextaddr)
197
        ld a,(curtoptextHSB)
842 alone 198
        jp nvview_calccurline
8 dimkam 199
 
200
nvview_right
201
        ld a,(nvview_prline_shift)
202
        add a,8
203
        ret c
204
        ld (nvview_prline_shift),a
600 alone 205
        call nvview_prcurpage
206
        jp clear_keyboardbuffer
8 dimkam 207
 
208
nvview_left
209
        ld a,(nvview_prline_shift)
210
        sub 8
211
        ret c
212
        ld (nvview_prline_shift),a
600 alone 213
        call nvview_prcurpage
214
        jp clear_keyboardbuffer
8 dimkam 215
 
216
nvview_prcurpage
217
        ld hl,(curtoptextaddr)
218
        ld a,(curtoptextHSB)
219
        jp nvview_prpage
220
 
221
nvview_home
9 dimkam 222
        ld hl,1;0
223
        ld (nvview_ncurline),hl
8 dimkam 224
        xor a
225
        ld h,a
226
        ld l,a
227
        call nvview_settop
228
        jp nvview_prpage
229
 
230
nvview_end
608 alone 231
        ld hl,(filesize)
232
        ld a,(filesizeHSW)
1410 alone 233
        ;ld b,NVVIEW_HGT
234
        ld bc,(nvviewhgt-1) ;b
8 dimkam 235
nvview_end0
236
        push bc
237
        call nvview_prevline
238
        pop bc
631 alone 239
        djnz nvview_end0
8 dimkam 240
        call nvview_calccurline
241
        jp nvview_prpage
242
 
243
deccurline
244
        push hl
245
        ld hl,(nvview_ncurline)
246
        dec hl
247
        ld (nvview_ncurline),hl
248
        pop hl
249
        ret
250
 
251
inccurline
252
        push hl
253
        ld hl,(nvview_ncurline)
254
        inc hl
255
        ld (nvview_ncurline),hl
256
        pop hl
257
        ret
258
 
259
nvview_up
260
        ld hl,(curtoptextaddr)
261
        ld a,(curtoptextHSB)
262
        call isbof
263
        ret z
264
        call nvview_prevline
265
        call nvview_settop
266
        push af
267
        push hl
268
        ld de,NVVIEW_XYTOP
1410 alone 269
        ;ld hl,256*NVVIEW_HGT + NVVIEW_WID
270
        ld hl,(nvviewhgt-1) ;h
271
        ld l,NVVIEW_WID
841 alone 272
       if PRSTDIO
273
        call scrolldown
274
       else
275
        OS_SCROLLDOWN
276
       endif
8 dimkam 277
        ld de,NVVIEW_XYTOP
889 alone 278
        call nv_setxy ;keeps de,hl,ix
8 dimkam 279
        pop hl
280
        pop af
281
        call nvview_prline
1410 alone 282
         ;ld de,+(txtscrhgt-1)*256+79
283
        ld de,(scrhgt-1) ;d
284
        dec d ;᫥ ப ࠭
285
        ld e,txtscrwid-1
667 alone 286
         call nv_setxy ;avoid cursor at 0x0100
8 dimkam 287
        call deccurline
288
        ld hl,(curbottomtextaddr)
289
        ld a,(curbottomtextHSB)
290
        call nvview_prevline
291
        jp nvview_setbottom
292
 
293
nvview_down
294
curbottomtextaddr=$+1
295
        ld hl,0
296
curbottomtextHSB=$+1
297
        ld a,0
298
        call iseof
299
        ret z
300
        push af
301
        push hl
302
        ld de,NVVIEW_XYTOP
1410 alone 303
        ;ld hl,256*NVVIEW_HGT + NVVIEW_WID
304
        ld hl,(nvviewhgt-1) ;h
305
        ld l,NVVIEW_WID
306
       push de
307
       push hl
841 alone 308
       if PRSTDIO
309
        call scrollup
310
       else
311
        OS_SCROLLUP
312
       endif
1410 alone 313
        ;ld de,NVVIEW_XYTOP+((NVVIEW_HGT-1)*256)
314
       pop hl
315
       pop de
316
       dec h
317
       ld l,0
318
       add hl,de
319
       ex de,hl ;de=NVVIEW_XYTOP+((NVVIEW_HGT-1)*256)
889 alone 320
        call nv_setxy ;keeps de,hl,ix
8 dimkam 321
        pop hl
322
        pop af
323
        call nvview_prline_nextline
324
        call nvview_setbottom
325
        call inccurline
326
curtoptextaddr=$+1
327
        ld hl,0
328
curtoptextHSB=$+1
329
        ld a,0
330
        call nvview_nextline
331
nvview_settop        
332
        ld (curtoptextaddr),hl
333
        ld (curtoptextHSB),a
334
        ret
335
 
336
nvview_pgup
337
        ld hl,(curtoptextaddr)
338
        ld a,(curtoptextHSB)
339
nvview_pgup_go
1410 alone 340
        ;ld b,NVVIEW_HGT
341
        ld bc,(nvviewhgt-1) ;b
8 dimkam 342
nvview_pgup0
343
        push bc
344
        call nvview_prevline
345
         call nc,deccurline
346
        pop bc
631 alone 347
        djnz nvview_pgup0
8 dimkam 348
        call nvview_prpage
349
        jp clear_keyboardbuffer
350
 
351
nvview_pgdown
352
         ld hl,(nvview_ncurline)
1410 alone 353
         ;ld bc,NVVIEW_HGT
354
        ld bc,(nvviewhgt) ;c
355
        ld b,0
8 dimkam 356
         add hl,bc
357
         ld (nvview_ncurline),hl
358
        ld hl,(curbottomtextaddr)
359
        ld a,(curbottomtextHSB)
360
nvview_pgdown_pgup_ahl
1410 alone 361
        ;ld b,NVVIEW_HGT
362
        ld bc,(nvviewhgt-1) ;b
8 dimkam 363
nvview_pgdown0
364
        push bc
365
        call nvview_nextline
366
         call nc,inccurline
367
        pop bc
631 alone 368
        djnz nvview_pgdown0
8 dimkam 369
        jr nvview_pgup_go
370
        if 1==0
1410 alone 371
        ;ld b,NVVIEW_HGT
372
        ld bc,(nvviewhgt-1) ;b
8 dimkam 373
nvview_pgdown1
374
        push bc
375
        call nvview_prevline
376
         call nc,deccurline
377
        pop bc
631 alone 378
        djnz nvview_pgdown1
8 dimkam 379
        call nvview_prpage
380
        jp clear_keyboardbuffer
381
        endif
382
 
383
nvview_calccurline
384
        ;ld hl,(curtoptextaddr)
385
        ;ld a,(curtoptextHSB)
386
;ahl=curtextline (kept)
387
        push af
388
        push hl
389
        ld (nvview_calccurline_old),hl
390
        ld (nvview_calccurline_oldHSB),a
9 dimkam 391
        ld ix,1;0
392
         or h
393
         or l
394
         jr z,nvview_calccurline_countq
8 dimkam 395
        xor a
396
        ld h,a
397
        ld l,a
398
nvview_calccurline_count0
9 dimkam 399
        call nvview_nextline;nvview_pseudoprline
8 dimkam 400
        push hl
401
nvview_calccurline_old=$+1
402
        ld bc,0
403
        or a
404
        sbc hl,bc ;nc: hl>=old
405
        ld l,a
406
nvview_calccurline_oldHSB=$+1
407
        sbc a,0
408
        ld a,l
409
        pop hl
410
        inc ix
9 dimkam 411
        jr c,nvview_calccurline_count0 ;cy: ahl<old
412
nvview_calccurline_countq
413
        ;push ix
414
        ;pop hl
415
        ld (nvview_ncurline),ix;hl
8 dimkam 416
        pop hl
417
        pop af
418
        ret
419
 
420
nvview_calclines
421
;out ix = lines
422
        ld ix,0
423
        xor a
424
        ld h,a
425
        ld l,a
426
nvview_calclines0
427
        inc ix
428
        call nvview_nextline
429
        call iseof
430
        jp nz,nvview_calclines0
431
        ld (nlines),ix
432
        ret
433
 
434
clear_keyboardbuffer
435
        push bc
600 alone 436
        ld b,50;5
8 dimkam 437
clear_keyboardbuffer0
438
        push bc
841 alone 439
       if PRSTDIO
574 alone 440
        GETKEY_
841 alone 441
       else
442
        GET_KEY
443
       endif
8 dimkam 444
        pop bc
631 alone 445
        djnz clear_keyboardbuffer0
8 dimkam 446
        pop bc
447
        ret
448
 
449
nvview_changeencoding
450
        ld hl,nvview_prline_recodepatch
451
        ld a,(hl)
452
        xor 0x7e ;"ld a,(hl)"
1410 alone 453
        ld (hl),a ;TODO utf8
8 dimkam 454
        call nvview_prcurpage
455
        ;ret
456
nvview_panel
1410 alone 457
        ;ld de,+(txtscrhgt-1)*256
458
        ld de,(scrhgt-1) ;d
459
        dec d ;᫥ ப ࠭
460
        ld e,0
889 alone 461
        call nv_setxy ;keeps de,hl,ix
574 alone 462
        ld de,_NVVIEW_PANELCOLOR;#38
841 alone 463
       if PRSTDIO
574 alone 464
        SETCOLOR_
841 alone 465
       else
466
        call nv_setcolor
467
       endif
8 dimkam 468
        ld a,(nvview_prline_recodepatch)
469
        or a
470
        ld hl,t866
471
        jr z,$+5
472
        ld hl,twin
574 alone 473
         ld c,0
8 dimkam 474
        call prtext
475
 
849 alone 476
fchanged=$+1
8 dimkam 477
        ld a,' '
889 alone 478
        MYPRCHAR
8 dimkam 479
nvview_ncurline=$+1
480
        ld hl,0
1518 alone 481
        ld de,0
482
        call prdword_dehl
8 dimkam 483
        ld a,'/'
889 alone 484
        MYPRCHAR
8 dimkam 485
        ld hl,(nlines)
1518 alone 486
        ld de,0
487
        call prdword_dehl
8 dimkam 488
        ld a,' '
889 alone 489
        MYPRCHAR
608 alone 490
        ld hl,(filesize)
1518 alone 491
        ld de,(filesizeHSW)
492
        call prdword_dehl
849 alone 493
        ld de,tspaces_filename
494
        ld hl,TSPACES_FILENAME_SZ
608 alone 495
        call sendchars
574 alone 496
        ;ld e,NVVIEW_PANELCOLOR;#38
497
        ;OS_PRATTR
498
        ld de,_COLOR;#38
841 alone 499
       if PRSTDIO
574 alone 500
        SETCOLOR_
841 alone 501
       else
502
        call nv_setcolor
503
       endif
8 dimkam 504
        ret
505
 
849 alone 506
tspaces_filename
507
        db ' '
508
tshown_filename
509
        ds TSPACES_FILENAME_SZ,' '
510
 
8 dimkam 511
twin
512
        db "WIN",0
513
t866
514
        db "866",0
515
 
516
 
517
isbof
518
        push bc
519
        ld c,a
520
        or h
521
        or l
522
        ld a,c
523
        pop bc
524
        ret
525
iseof
526
        push bc
527
        push de
528
        push hl
608 alone 529
        ld de,(filesize)
530
        ld bc,(filesizeHSW)
8 dimkam 531
        ld b,a
532
        or a
533
        sbc hl,de
534
        sbc a,c
535
        ld a,b
536
        pop hl
537
        pop de
538
        pop bc
539
        ret
540
 
541
nvview_prpage
542
;ahl=addr
543
        ld (curtoptextaddr),hl
544
        ld (curtoptextHSB),a
634 alone 545
        push af
8 dimkam 546
        ld de,NVVIEW_XYTOP
889 alone 547
        call nv_setxy ;keeps de,hl,ix
634 alone 548
        pop af
1410 alone 549
        ;ld b,NVVIEW_HGT
550
        ld bc,(nvviewhgt-1) ;b
8 dimkam 551
nvview_prpage0
552
        push bc
634 alone 553
        ;push de
554
        ;push af
8 dimkam 555
        ;push hl
634 alone 556
        ;call nv_setxy
8 dimkam 557
        ;pop hl
634 alone 558
        ;pop af
8 dimkam 559
        call nvview_prline_nextline
634 alone 560
        ;pop de
8 dimkam 561
        pop bc
634 alone 562
        ;inc d
631 alone 563
        djnz nvview_prpage0
8 dimkam 564
nvview_setbottom
565
        ld (curbottomtextaddr),hl
566
        ld (curbottomtextHSB),a
567
        ret
568
 
569
nvview_prevline
570
;ahl=addr
571
;line < 16K
572
;out: ahl, CY=error
573
        call isbof
574
         scf
575
        ret z
344 alone 576
;।    #0d  #0d,#0a  祣
8 dimkam 577
        ld (findprevline_old),hl
578
        ld (findprevline_oldHSB),a
579
 
580
        or a
581
        ld bc,0xffff
582
        jr nz,$+4
583
         ld b,h
584
         ld c,l
585
 
586
        ld de,0x4000
587
        or a
588
        sbc hl,de
589
        sbc a,e;0
590
        push af
591
        push hl
592
        call ahl_to_pgaddr
593
        set 6,h
344 alone 594
;hl=c000+,  㬥
8 dimkam 595
;bc=number of chars to go != 0
596
 
344 alone 597
;।    #0d  #0d,#0a  祣
8 dimkam 598
        dec hl
599
        dec bc
600
        ld a,b
601
        or c
602
        jr z,nvview_prevlineq
603
        ld a,0x0a
604
        cp (hl)
605
        jr nz,nvview_prevline_nolf
606
        dec hl
607
        dec bc
608
        ld a,b
609
        or c
610
        jr z,nvview_prevlineq
611
nvview_prevline_nolf
612
        ld a,0x0d
613
        cp (hl)
614
        jr nz,nvview_prevline_nocr
615
        dec hl
616
        dec bc
617
        ld a,b
618
        or c
619
        jr z,nvview_prevlineq
620
nvview_prevline_nocr
344 alone 621
;ᥩ  室 । ᨬ  ।饩 ப (  )
8 dimkam 622
nvview_prevline0
623
        ld a,(hl)
624
        cp 0x0d
625
        jr z,nvview_prevline_cr
626
        cp 0x0a
627
        jr z,nvview_prevline_lf
628
        dec hl
629
        dec bc
630
        ld a,b
631
        or c
632
        jr nz,nvview_prevline0
633
;beginning of file
634
        jr nvview_prevlineq
635
nvview_prevline_cr
636
nvview_prevline_lf
344 alone 637
;ᥩ  室   ᨬ  ப । ।饩
8 dimkam 638
        inc hl
639
nvview_prevlineq
640
        ex de,hl ;new addr (bits 13..0), bit 14 = overflow
641
        pop hl ;old addr
642
        pop af
643
        call pgaddr_to_ahl
644
        call iswrapon ;CY=on
645
        ret nc ;no wrap
646
 
647
findprevline_linewrap
344 alone 648
;ahl =  砫 ப
649
;।    #0d  #0d,#0a
650
; ᥢ ᪮쪮 ᥢப,     ⥪饩
8 dimkam 651
findprevline_linewrap_count0
652
         push af
653
         push hl
654
        call nvview_pseudoprline
655
        push hl
656
findprevline_old=$+1
657
        ld bc,0
658
        or a
659
        sbc hl,bc ;nc: hl>=old
660
        ld l,a
661
findprevline_oldHSB=$+1
662
        sbc a,0
663
        ld a,l
664
        pop hl
665
         pop de ;old addr
666
         pop bc ;b=old HSB
667
        jr c,findprevline_linewrap_count0
668
        ex de,hl
669
        ld a,b
344 alone 670
;ahl= ᥢ ࠭
8 dimkam 671
        ret ;nc
672
 
673
getmaxlinesize
674
;ahl = addr
675
;out: bc=max line size before eof, z=(bc==0)
676
        push af
677
        push hl
678
        ex de,hl
608 alone 679
        ld hl,(filesize)
8 dimkam 680
        ld c,a
608 alone 681
        ld a,(filesizeHSW)
8 dimkam 682
        or a
683
        sbc hl,de
684
        sbc a,c
685
        ld bc,0
686
        jr c,getmaxlinesize_aftereof
687
        dec bc
688
        or a
689
        jr nz,$+4 ;filesize-addr >= 0x10000, will be 0xffff
690
         ld b,h
691
         ld c,l ;filesize-addr
692
getmaxlinesize_aftereof
693
        pop hl
694
        pop af
695
        ld e,a
696
        ld a,b
697
        or c
698
        ld a,e
699
        ret
700
 
701
nvview_prline_nextline
702
        push af
703
        push hl
704
        call nvview_prline
705
        pop hl
706
        pop af
707
nvview_nextline
708
;if eof, returns eof addr
709
;ahl=addr
710
;line < 16K
711
;out: ahl, CY=error
712
        call iswrapon ;CY=on
713
        jp c,nvview_pseudoprline
714
        call getmaxlinesize ;bc=max line size before eof, z=(bc==0)
715
         scf
716
        ret z
717
        push af
718
        push hl
719
        call ahl_to_pgaddr
720
;bc=number of chars to go != 0
721
nvview_nextline0
722
        ld a,(hl)
723
        inc hl
724
        dec bc
725
        cp 0x0d
726
        jr z,nvview_nextline_cr
727
        cp 0x0a
602 alone 728
        jr z,nvview_nextline_cr;lf
8 dimkam 729
        ld a,b
730
        or c
731
        jr nz,nvview_nextline0
732
nvview_nextlineq
733
        ex de,hl ;new addr (bits 13..0), bit 14 = overflow
734
        pop hl ;old addr
735
        pop af
736
pgaddr_to_ahl
737
;de = new addr (bits 13..0), bit 14 = overflow
738
;ahl = old addr
739
        bit 6,d
740
        ld bc,0x4000
741
        jr z,$+4
742
        add hl,bc
743
        adc a,c;0
744
        ld c,a
745
        ld l,e
746
        ld a,d
747
        xor h
748
        and 0x3f
749
        xor h
750
        ld h,a ;bits 13..0 copied
751
        ld a,c ;ahl = new addr
752
        ret ;nc
753
nvview_nextline_cr
754
        ld a,b
755
        or c
756
        jr z,nvview_nextlineq
757
        ld a,(hl)
758
        cp 0x0a
759
        jr nz,nvview_nextline_lf
760
        inc hl
842 alone 761
nvview_nextline_lf=nvview_nextlineq
8 dimkam 762
        jr nvview_nextlineq
763
 
764
nvview_prline
765
;ahl=addr
766
;check for last line (vs. file size)
767
;if filesize-addr < 80, then b=filesize-addr, else b=80
768
        call getmaxlinesize ;bc=max line size before eof, z=(bc==0)
769
        jr z,nvview_prlinespc_all;ret z
770
        call ahl_to_pgaddr
771
;hl=#8000+0..#3fff
772
;bc=max line size before eof != 0
773
nvview_prline_shift=$+1
774
        ld de,0
775
        call istherecr_or_lf ;add hl,de
602 alone 776
        ;jr nz,$+3
777
        ;dec hl ;hl=cr/lf address
8 dimkam 778
 
779
        push hl
780
        ld h,b
781
        ld l,c
782
        or a
783
        sbc hl,de
784
        ld b,h
785
        ld c,l ;bc=bc-lineshift
786
        pop hl
842 alone 787
        ;ld a,NVVIEW_WID
788
        jr c,nvview_prlinespc_all
789
        jr z,nvview_prlinespc_all ;maxlinesize<=lineshift
8 dimkam 790
 
791
        push hl
792
        ld hl,NVVIEW_WID
793
        call minhl_bc_tobc
794
        ld b,c
795
        pop hl
796
;b=number of chars to print != 0
602 alone 797
        ld de,prlinebuf
842 alone 798
        ld c,0;NVVIEW_WID
8 dimkam 799
nvview_prline0
800
        ld a,(hl)
801
        inc hl
802
        cp 0x0d
803
        jr z,nvview_prline_cr
804
        cp 0x0a
615 alone 805
        jr z,nvview_prline_cr;lf
602 alone 806
        ;push bc
8 dimkam 807
        push hl
808
        ld h,twinto866/256
809
        ld l,a
810
nvview_prline_recodepatch=$
811
        nop ;/ld a,(hl)
849 alone 812
       if PRSTDIO
813
        cp 0x1b
814
        jr nz,$+3
815
        xor a ;can't print 0x1b!
816
       endif
602 alone 817
        ld (de),a ;PRCHAR_
818
        inc de
8 dimkam 819
        pop hl
602 alone 820
        ;pop bc
842 alone 821
        inc c;dec c
631 alone 822
        djnz nvview_prline0
615 alone 823
        ;call print_prlinebuf
824
        ;jr nz,nvview_prline_lf
825
        ;ret
8 dimkam 826
nvview_prline_cr
842 alone 827
;c=linesize [80-linesize]
602 alone 828
        call print_prlinebuf
842 alone 829
;c=x
615 alone 830
;nvview_prline_lf
344 alone 831
; ஡   ப
634 alone 832
        jr nvview_prlinespc
606 dimkam 833
nvview_prlinespc_all
842 alone 834
        ld c,0;NVVIEW_WID
8 dimkam 835
nvview_prlinespc
836
        push af
837
        push hl
605 alone 838
        ;ld l,b
839
        ;ld h,0
840
        ;ld de,tspaces
841
        ;call sendchars
628 alone 842
         ld a,c
842 alone 843
         ;or a
844
         ;ld a,NVVIEW_WID
845
         ;sub c
846
         ;ld c,a
847
         cp NVVIEW_WID
628 alone 848
        call nz,clearrestofline_crlf
602 alone 849
        pop hl
850
        pop af
851
        ret
852
 
853
print_prlinebuf
854
        push af
8 dimkam 855
        push bc
602 alone 856
        push hl
842 alone 857
;c=x [NVVIEW_WID-᫮ ᨬ]
602 alone 858
        ld de,prlinebuf
842 alone 859
        ;ld a,NVVIEW_WID
860
        ;sub c
861
        ld l,c;a
602 alone 862
        ld h,0
842 alone 863
        inc l
864
        dec l
865
         ld c,h
841 alone 866
         call nz,sendchars
602 alone 867
        pop hl
8 dimkam 868
        pop bc
869
        pop af
870
        ret
871
 
602 alone 872
prlinebuf
873
        ds NVVIEW_WID
874
 
8 dimkam 875
nvview_pseudoprline
876
;ahl=addr
877
;out: ahl, CY=error
878
;check for last line (vs. file size)
879
;if filesize-addr < 80, then b=filesize-addr, else b=80
880
        call getmaxlinesize ;bc=max line size before eof, z=(bc==0)
881
         scf
882
        ret z
883
        push af
884
        push hl
885
        call ahl_to_pgaddr
886
;hl=#8000+0..#3fff
887
;bc=max line size before eof != 0
888
        push hl
889
        ld hl,NVVIEW_WID
890
        call minhl_bc_tobc
891
        ld b,c
892
        pop hl
893
;b=number of chars to print != 0
894
        ld c,NVVIEW_WID
895
nvview_pseudoprline0
896
        ld a,(hl)
897
        inc hl
898
        cp 0x0d
899
        jr z,nvview_pseudoprline_cr
900
        cp 0x0a
901
        jr z,nvview_pseudoprline_lf
902
        dec c
631 alone 903
        djnz nvview_pseudoprline0
628 alone 904
         ld a,(hl)
905
         inc hl
906
         cp 0x0d
907
         jr z,nvview_pseudoprline_crok
908
         cp 0x0a
909
         jr z,nvview_pseudoprline_lf
910
         dec hl
8 dimkam 911
        jp nvview_nextlineq
912
nvview_pseudoprline_cr
913
        dec b
914
        jp z,nvview_nextlineq
628 alone 915
nvview_pseudoprline_crok
8 dimkam 916
        ld a,(hl)
917
        cp 0x0a
918
        jr nz,nvview_pseudoprline_lf
919
        inc hl
920
nvview_pseudoprline_lf
921
        jp nvview_nextlineq
922
 
923
istherecr_or_lf
924
;hl=addr
925
;de=length to search
602 alone 926
;out: z=found, hl=at match or after area
8 dimkam 927
        ld a,d
928
        or e
929
        jr z,istherecr_or_lf_fail
930
         push hl
931
        ld a,0x0d
932
        call istherecrlfgo
602 alone 933
        jr z,popafZret;ret z
8 dimkam 934
         pop hl
935
        ld a,0x0a
936
istherecrlfgo
937
        push bc
938
        ld b,d
939
        ld c,e
631 alone 940
        cpir ;TODO ᪮쪮 ࠧ १  , ᫨ 稢 ,   ४
8 dimkam 941
        pop bc
602 alone 942
        ret nz ;nz=not found
943
         dec hl
8 dimkam 944
        ret ;z=found
945
istherecr_or_lf_fail
946
        dec a
947
        ret ;nz=not found
948
 
602 alone 949
popafZret
8 dimkam 950
        pop af
602 alone 951
        cp a ;Z
8 dimkam 952
        ret
953
 
608 alone 954
;nvview_closefcb
955
;        ld de,fcb
956
;        OS_FCLOSE
957
;        ret
8 dimkam 958
 
849 alone 959
setunchanged
960
        ld a,' '
961
        jr setchanged_a
962
setchanged
963
        ld a,'*'
964
setchanged_a
965
        ld (fchanged),a
966
        ret
967
 
8 dimkam 968
iswrapon
969
;CY = on
970
wrapflag=$
971
        scf;or a ;/scf
972
        ret
973
 
974
reservepage
975
;new page, set page in textpages, npages++, set page in #c000
976
;nz=error
977
        OS_NEWPAGE
978
        or a
979
        ret nz
980
npages=$+1
981
        ld hl,textpages
982
        ld (hl),e
983
        inc l
984
        ld (npages),hl
985
        ld a,e
1410 alone 986
        SETPGC000
8 dimkam 987
        xor a
988
        ret ;z
989
 
990
unreservepages
991
unreservepages0
992
        call unreservepage
993
        jr z,unreservepages0
994
        ret
995
 
996
unreservepage
997
;del page, npages--
998
;nz=error
999
        ld hl,(npages)
1000
        ld a,l
1001
        or a
1002
        jr z,unreservepage_fail
1003
        dec l
1004
        ld (npages),hl
1005
        ld e,(hl)
1006
        OS_DELPAGE
1007
        xor a
1008
        ret ;z
1009
unreservepage_fail
1010
        xor a
1011
        dec a
1012
        ret ;nz
1013
 
1014
ahl_to_pgaddr
667 alone 1015
;keeps bc,de
8 dimkam 1016
;counts physical hl
1017
        rl h
1018
        rla
1019
        rl h
1020
        rla
1021
        srl h
1022
        scf
1023
        rr h
1024
        push bc
1025
        call setpg32k
1026
        pop bc
1027
        ret
1028
 
1029
setpg32k
1030
;a=page number in table (0..)
1031
        push hl
1032
        ld l,a
1033
        ld h,textpages/256
1034
        ld a,(hl)
1410 alone 1035
        SETPG8000
8 dimkam 1036
        inc l
1037
        ld a,(hl)
1410 alone 1038
        SETPGC000
8 dimkam 1039
        pop hl
1040
        ret
608 alone 1041
 
1042
filesize
1043
        dw 0
1044
filesizeHSW
1045
        dw 0
1046
 
8 dimkam 1047
nlines
1048
        dw 0