@@ -1345,8 +1345,13 @@ open: jsr Open
1345
1345
jsr intbasic ::MON_COUT
1346
1346
:
1347
1347
jsr print_entry_name
1348
- jsr intbasic ::MON_CROUT
1349
- jsr intbasic ::MON_CROUT
1348
+
1349
+ ldx #0
1350
+ : lda header_str,x
1351
+ jsr COUT
1352
+ inx
1353
+ cpx #kHeaderStrLen
1354
+ bne :-
1350
1355
1351
1356
lda ENTRY_BUFFER + $24 - 4 ; entries_per_block
1352
1357
sta entries_per_block
@@ -1384,7 +1389,7 @@ next_entry:
1384
1389
lda ENTRY_BUFFER + $00 ; storage_type / name_length
1385
1390
beq next_entry ; inactive - skip
1386
1391
1387
- ;; Entry display: locked, name, type, block count
1392
+ ;; Entry display: locked, name, type, block count, date
1388
1393
ldx #' '|$80
1389
1394
lda ENTRY_BUFFER + $1E ; access
1390
1395
and #%11000010 ; destroy, rename, write
@@ -1393,15 +1398,26 @@ next_entry:
1393
1398
: txa
1394
1399
jsr intbasic ::MON_COUT
1395
1400
1401
+ ;; Name
1396
1402
jsr print_entry_name
1397
1403
1404
+ ;; Type
1405
+ lda #17
1406
+ sta CH
1398
1407
jsr print_entry_type
1399
1408
1400
- lda #' '|$80
1401
- jsr intbasic ::MON_COUT
1409
+ ;; Blocks
1410
+ lda #22
1411
+ sta CH
1402
1412
ldx ENTRY_BUFFER + $13 ; blocks_used lo
1403
1413
lda ENTRY_BUFFER + $14 ; blocks_used hi
1404
1414
jsr intbasic ::PRDEC
1415
+
1416
+ ;; Date
1417
+ lda #28
1418
+ sta CH
1419
+ jsr print_entry_date
1420
+
1405
1421
jsr intbasic ::MON_CROUT
1406
1422
1407
1423
;; Next file, unless the use cancelled
@@ -1427,12 +1443,6 @@ ret: rts
1427
1443
@len := *+1
1428
1444
cpx #$00 ; self-modified
1429
1445
bne :-
1430
- ;; Pad with spaces
1431
- lda #' '|$80
1432
- : jsr intbasic ::MON_COUT
1433
- inx
1434
- cpx #16
1435
- bne :-
1436
1446
rts
1437
1447
.endproc ; print_entry_name
1438
1448
@@ -1481,13 +1491,94 @@ types:
1481
1491
.byte 0 ; sentinel
1482
1492
.endproc ; print_entry_type
1483
1493
1494
+ .proc print_entry_date
1495
+ DATE := ENTRY_BUFFER + $21
1496
+
1497
+ lda DATE
1498
+ ora DATE+1
1499
+ beq no_date
1500
+
1501
+ ;; Day
1502
+ lda DATE ; MMMDDDDD
1503
+ and #%00011111 ; 000DDDDD
1504
+ cmp #10
1505
+ bcs :+
1506
+ inc CH
1507
+ : tax
1508
+ lda #0
1509
+ jsr intbasic ::PRDEC
1510
+
1511
+ lda #'-' |$80
1512
+ jsr COUT
1513
+
1514
+ ;; Month
1515
+ lda DATE+1 ; YYYYYYYM
1516
+ lsr ; high bit of M into C
1517
+ pha
1518
+ lda DATE ; MMMDDDDD
1519
+ ror ; MMMMDDDD
1520
+ lsr ; 0MMMMDDD
1521
+ lsr ; 00MMMMDD
1522
+ lsr ; 000MMMMD
1523
+ lsr ; 0000MMMM
1524
+ tax ; 1-based to 0-based
1525
+ dex
1526
+ lda months,x
1527
+ jsr COUT
1528
+ lda months+12 ,x
1529
+ jsr COUT
1530
+ lda months+24 ,x
1531
+ jsr COUT
1532
+
1533
+ lda #'-' |$80
1534
+ jsr COUT
1535
+
1536
+ ;; Year
1537
+
1538
+ pla
1539
+ cmp #40 ; 0-39 is 2000-2039
1540
+ bcs :+ ; Per Technical Note: ProDOS #28:
1541
+ adc #100 ; ProDOS Dates -- 2000 and Beyond
1542
+ : clc
1543
+ adc #<1900
1544
+ tax
1545
+ lda #0
1546
+ adc #>1900
1547
+ jmp intbasic ::PRDEC
1548
+
1549
+ months: ; swizzled
1550
+ scrcode "JFMAMJJASOND"
1551
+ scrcode "AEAPAUUUECOE"
1552
+ scrcode "NBRRYNLGPTVC"
1553
+
1554
+ no_date:
1555
+ ldx #0
1556
+ : lda no_date_str,x
1557
+ jsr COUT
1558
+ inx
1559
+ cpx #kNoDateStrLen
1560
+ bne :-
1561
+ rts
1562
+
1563
+ no_date_str:
1564
+ scrcode "<NO DATE>"
1565
+ kNoDateStrLen := * - no_date_str
1566
+
1567
+ .endproc ; print_entry_date
1568
+
1484
1569
file_count:
1485
1570
.word 0
1486
1571
entries_per_block:
1487
1572
.byte 0
1488
1573
entries_this_block:
1489
1574
.byte 0
1490
1575
1576
+ header_str:
1577
+ .byte $8D , $8D ; CR
1578
+ scrcode " NAME TYPE BLOCKS MODIFIED"
1579
+ .byte $8D , $8D ; CR
1580
+ kHeaderStrLen := * - header_str
1581
+
1491
1582
.endproc ; CatCmd
1492
1583
1493
1584
;;; ============================================================
0 commit comments