home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c128 / text / examples.arc / CHECK.A < prev    next >
Encoding:
Text File  |  1989-12-01  |  18.1 KB  |  490 lines

  1. ;check.asm
  2. ;=================================
  3. ; Command:  check patternlist
  4. ;=================================
  5.                                   
  6. len         = $005d               
  7. tlen        = $0060               
  8. blks        = $0024               
  9. tblks       = $0026               
  10.                                   
  11. int04       = $1704               
  12. int0a       = $170a               
  13. int0b       = $170b               
  14. int0e       = $170e               
  15. int16       = $1716               
  16. int17       = $1717               
  17. cl          = $1bf7               
  18. cdr         = $1bf8               
  19. cdv         = $1bf9               
  20. sw1         = $1bfc               
  21.                                   
  22. fnbank      = $00c7               
  23. pntr        = $00ec               
  24. hexa        = $b8c2               
  25. primm       = $ff7d               
  26. second      = $ff93               
  27. tksa        = $ff96               
  28. acptr       = $ffa5               
  29. ciout       = $ffa8               
  30. untlk       = $ffab               
  31. unlsn       = $ffae               
  32. listen      = $ffb1               
  33. talk        = $ffb4               
  34. setlfs      = $ffba               
  35. setnam      = $ffbd               
  36. open        = $ffc0               
  37. close       = $ffc3               
  38. chkin       = $ffc6               
  39. chkout      = $ffc9               
  40. clrchn      = $ffcc               
  41. chrin       = $ffcf               
  42. chrout      = $ffd2               
  43. stop        = $ffe1               
  44.                                   
  45. star        = $0b00               
  46.             .wor star             
  47.             * = star
  48.  
  49.             jmp check
  50.             dw Date
  51.                                   
  52. check       ldx #1                ;check for filename list
  53.             jsr int04             
  54.             bcc check0            ;got at least one.
  55.             jsr primm             
  56.             .asc 13,"Syntax:  check patternlist",13, 0
  57.             jmp int0e             
  58.                                   
  59. check0      lda #0                
  60.             sta tblks             
  61.             sta tblks+1           
  62.             sta tlen              
  63.             sta tlen+1            
  64.             sta tlen+2            
  65.             sta tfils             
  66.             sta tfils+1           
  67.             stx parm              ;start with parameter 1 and work up
  68.             jsr eqwls             
  69.             jsr primm             
  70.             .asc 13," d:filename          type      bytes blks",13,0
  71.             jsr eqwls             
  72. main        ldx parm              
  73.             jsr int04             ;make sure parm is there
  74.             bcc chkit             ;got one
  75. sum         jmp smmry             ;parameters all used up
  76.                                   
  77. chkit       jsr int16             ;get 1st matching filename
  78.             bcs chknxt            ;no matches. next parameter
  79.             lda cl                
  80.             sta cll               
  81.             jsr ocmd              ;open "#" file
  82.             bcc chkagn            ;ok
  83.             jsr int0b             ;error opening. print ds$
  84.             jmp int0e             ;and abort
  85. chkagn      jsr chkfil            ;check this file
  86.             jsr prtit             ;display results
  87.             jsr stop              ;check for stop key
  88.             beq sum               
  89.             jsr int17             ;check for more matches
  90.             bcc chkagn            ;ok. go again
  91.             jsr ccmd              ;close "#" file
  92. chknxt      inc parm              
  93.             bne main              ;always
  94.                                   
  95. ;-----------------------------------
  96. ; Subroutine: get file's statistics
  97. ;-----------------------------------
  98.                                   
  99. chkfil      lda $1b01             ;1st (track,sector)
  100.             sta ibuf              
  101.             lda $1b02             
  102.             sta ibuf+1            
  103.             lda #0                ;reset length
  104.             sta len               
  105.             sta len+1             
  106.             sta len+2             
  107.             sta blks              
  108.             sta blks+1            
  109. cf          jsr link              ;get block
  110.             lda ibuf+1            ;maybe length
  111.             sec                   
  112.             sbc #1                
  113.             ldx ibuf              
  114.             beq cf0               ;end of file. got length of last block in .a
  115.             lda #254              
  116. cf0         clc                   
  117.             adc len               
  118.             sta len               
  119.             bcc cf1               
  120.             inc len+1             
  121.             bne cf1               
  122.             inc len+2             
  123. cf1         inc blks              
  124.             bne cf2               
  125.             inc blks+1            
  126. cf2         lda ibuf              
  127.             bne cf                
  128.             clc                   
  129.             lda len               
  130.             adc tlen              
  131.             sta tlen              
  132.             lda len+1             
  133.             adc tlen+1            
  134.             sta tlen+1            
  135.             lda len+2             
  136.             adc tlen+2            
  137.             sta tlen+2            
  138.             clc                   
  139.             lda blks              
  140.             adc tblks             
  141.             sta tblks             
  142.             lda blks+1            
  143.             adc tblks+1           
  144.             sta tblks+1           
  145.             inc tfils             
  146.             bne tf                
  147.             inc tfils+1           
  148. tf          rts                   
  149.                                   
  150. ;------------------------------------
  151. ; subroutine: get next block of file
  152. ;------------------------------------
  153.                                   
  154. link        lda ibuf              ;track 0
  155.             bne lk0               ;no. go on
  156.             rts                   
  157.                                   
  158. lk0         jsr br                ;get 1st four bytes of block
  159.             lda blks              
  160.             ora blks+1            
  161.             bne lk1               ;skip if not 1st block of file
  162.             lda ibuf+2            
  163.             sta ldad              
  164.             lda ibuf+3            
  165.             sta ldad+1            
  166. lk1         rts                   
  167.                                   
  168. ;-------------------
  169. ; send disk command
  170. ;-------------------
  171.                                   
  172. u1          ldy #9                ;store at offset 8
  173.             lda ibuf              ;get track
  174.             jsr d3                ;convert to ascii
  175.             iny                   
  176.             lda ibuf+1            ;repeat for sector
  177.             jsr d3                
  178.             ldy #0                ;and send u1 or u2
  179. sndcmd      lda edv               ;device to exec from
  180.             jsr listen            
  181.             lda #$6f              
  182.             jsr second            
  183. sc0         lda dskcmd,y          
  184.             beq sc1               
  185.             jsr ciout             
  186.             iny                   
  187.             bne sc0               
  188. sc1         jmp unlsn             
  189.                                   
  190. dskcmd      .asc "u1: 03 0 ttt sss", 0 
  191.                                   
  192. ;-------------------------------------
  193. ; convert .a to ascii for b-r and b-w
  194. ;-------------------------------------
  195.                                   
  196. d3          ldx #$ff              ;print .a as ###
  197. d4          inx                   
  198.             sec                   
  199.             sbc #100              
  200.             bcs d4                
  201.             adc #100              
  202.             jsr d5                
  203. d2          ldx #$ff              ;print .a as ##
  204. d6          inx                   
  205.             sec                   
  206.             sbc #10               
  207.             bcs d6                
  208.             adc #10               
  209.             jsr d5                
  210.             tax                   
  211. d5          pha                   
  212.             txa                   
  213.             ora #$30              
  214.             sta dskcmd,y          
  215.             iny                   
  216.             pla                   
  217.             rts                   
  218.                                   
  219. br          jsr u1                
  220.             lda edv               ;read in a block
  221.             jsr talk              
  222.             lda esa               
  223.             ora #$60              
  224.             jsr tksa              
  225.             ldy #0                
  226. brfb        jsr acptr             
  227.             sta ibuf,y            
  228.             iny                   
  229.             cpy #4                
  230.             bne brfb              
  231.             jmp untlk             
  232.                                   
  233. ocmd        jsr int0a             ;get free la,sa
  234.             sta ccmd+1            
  235.             ldx cdv               
  236.             stx edv               
  237.             jsr setlfs            
  238.             tya                   
  239.             sta esa               
  240.             ldy #4                
  241.             jsr d2                
  242.             lda cdr               
  243.             sta dskcmd+7          
  244.             lda #1                
  245.             ldx #<num             
  246.             ldy #>num             
  247.             jsr setnam            
  248.             lda #0                
  249.             sta fnbank            
  250.             jsr open              
  251.             bcc ocmd0             
  252. ccmd        lda #0                
  253.             jsr close             
  254.             sec                   
  255. ocmd0       rts                   
  256.                                   
  257. num         .asc "#"              
  258.                                   
  259. ;-------------------------------
  260. ; display results of file check
  261. ;-------------------------------
  262.                                   
  263. cr          lda #13               
  264.             .byt $2c              
  265. qt          lda #34               
  266.             .byt $2c              
  267. sp          lda #" "              
  268.             jmp chrout            
  269.                                   
  270. prtit       jsr cr                ;new line
  271.             jsr qt                ;print "d:filename"
  272.             lda cll               ;recall drive letter
  273.             jsr chrout            
  274.             lda #":"              
  275.             jsr chrout            
  276.             ldy #0                
  277. pr0         lda $1b03,y           
  278.             cmp #$a0              
  279.             beq pr11              
  280.             jsr chrout            
  281.             iny                   
  282.             cpy #16               
  283.             bne pr0               
  284. pr11        jsr qt                
  285. pr1         jsr sp                
  286.             lda pntr              
  287.             cmp #21               
  288.             bne pr1               
  289.             bit $1b00             ;protected?
  290.             bvc pr2               
  291.             lda #">"              
  292.             .byt $2c              
  293. pr2         lda #" "              
  294.             jsr chrout            
  295.             lda $1b00             
  296.             and #7                
  297.             cmp #5                
  298.             bcc pr3               
  299.             lda #0                
  300. pr3         tay                   
  301.             lda spur,y            
  302.             jsr chrout            
  303.             lda spur+5,y          
  304.             jsr chrout            
  305.             lda spur+10,y         
  306.             jsr chrout            
  307.             jsr sp                
  308.             clc                   ;claculate end address
  309.             lda ldad              
  310.             adc len               
  311.             sta ead               
  312.             lda ldad+1            
  313.             adc len+1             
  314.             sta ead+1             
  315.             jsr h2a               ;print length in bytes
  316.             jsr sp                
  317.             lda blks+1            
  318.             ldx blks              
  319.             jsr linprt            
  320.             jsr sp                
  321.             lda $1b00             
  322.             and #7                
  323.             cmp #2                
  324.             beq prg               
  325.             cmp #4                
  326.             beq rel               
  327.             bne notprg            
  328. prg         lda #"$"              
  329.             jsr chrout            
  330.             lda ldad+1            
  331.             jsr hexa              
  332.             lda ldad              
  333.             jsr hexa              
  334.             lda #"-"              
  335.             jsr chrout            
  336.             sec                   
  337.             lda ead               
  338.             sbc #2                
  339.             sta ead               
  340.             lda ead+1             
  341.             sbc #0                
  342.             jsr hexa              
  343.             lda ead               
  344.             jsr hexa              
  345. notprg      rts                   
  346.                                   
  347. rel         jsr primm             
  348.             .asc "rl =", 0        
  349.             lda #0                
  350.             ldx $1b00+21          
  351.             jmp linprt            
  352.                                   
  353.                                   
  354. spur        .asc "?spur"          
  355.             .asc "?erse"          
  356.             .asc "?qgrl"          
  357.                                   
  358. ;-------------------------------
  359. ;output a hex # in ascii decimal
  360. ;-------------------------------
  361.                                   
  362.                                   
  363. h2a         ldx #0                ;initialize indexes
  364.             ldy #0                
  365.             sty $02               
  366. loop        lda #"0"              ;initialize digit
  367.             sta ascii,x           
  368. loop2       sec                   
  369.             lda len               
  370.             sbc table,y           
  371.             pha                   ;increment the digit?
  372.             lda len+1             
  373.             sbc table+1,y         
  374.             pha                   
  375.             lda len+2             
  376.             sbc table+2,y         
  377.             bcc nxdigt            ;branch if 'no'
  378.             sta len+2             
  379.             pla                   
  380.             sta len+1             
  381.             pla                   ;adjust the hex value
  382.             sta len               ;and increment the digit
  383.             lda #$ff              
  384.             sta $02               
  385.             inc ascii,x           
  386.             bne loop2             
  387.                                   
  388. nxdigt      pla                   
  389.             pla                   
  390.             iny                   ;prepare for next digit
  391.             iny                   
  392.             iny                   
  393.             iny                   
  394.             inx                   
  395.             bit $02               
  396.             bmi nadj              
  397.             lda #" "              
  398.             sta ascii-1,x         
  399. nadj        cpx #8                
  400.             bcc loop              
  401. npr         nop                   
  402.             ldy #0                ;prepare to send number
  403. loop3       cpy #2                
  404.             beq pcom              
  405.             cpy #5                
  406.             bne nocom             
  407. pcom        lda ascii-1,y         
  408.             cmp #" "              
  409.             beq ppcom             
  410.             lda #","              
  411. ppcom       jsr chrout            
  412. nocom       lda ascii,y           
  413.             jsr chrout            
  414.             iny                   
  415.             cpy #8                
  416.             bcc loop3             
  417.             rts                   ;done, return
  418.                                   
  419.                                   
  420. table       .wor 38528, 152       
  421.             .wor 16960, 15        
  422.             .wor 34464, 1         
  423.             .wor 10000, 0         
  424.             .wor  1000, 0         
  425.             .wor   100, 0         
  426.             .wor    10, 0         
  427.             .wor     1, 0         
  428.                                   
  429. smmry       jsr cr                
  430.             jsr eqwls             
  431.             jsr cr                
  432.             ldx tfils             
  433.             lda tfils+1           
  434.             jsr linprt            
  435.             jsr primm             
  436.             .asc " file(s)", 0    
  437. sm0         jsr sp                
  438.             lda pntr              
  439.             cmp #26               
  440.             bne sm0               
  441.             lda tlen              
  442.             sta len               
  443.             lda tlen+1            
  444.             sta len+1             
  445.             lda tlen+2            
  446.             sta len+2             
  447.             jsr h2a               
  448.             jsr sp                
  449.             ldx tblks             
  450.             lda tblks+1           
  451.             jsr linprt            
  452.             jsr cr                
  453.             jmp int0e             
  454.                                   
  455. eqwls       ldy #52               
  456. eq          lda #"="              
  457.             jsr chrout            
  458.             dey                   
  459.             bne eq                
  460.             rts                   
  461.                                   
  462. linprt      ldy #$60              
  463.             sty npr               
  464.             stx len               
  465.             sta len+1             
  466.             lda #0                
  467.             sta len+2             
  468.             jsr h2a               
  469.             lda #$ea              
  470.             sta npr               
  471.             ldy #4                
  472. lpt         lda ascii,y           
  473.             jsr chrout            
  474.             iny                   
  475.             cpy #8                
  476.             bne lpt               
  477.             rts                   
  478.                                   
  479. ascii       *=*+8                 
  480. parm        *=*+1                 
  481. cll         *=*+1                 
  482. ibuf        *=*+4                 
  483. ldad        *=*+2                 
  484. ead         *=*+2                 
  485. edv         *=*+1                 
  486. esa         *=*+1                 
  487. tfils       *=*+2                 
  488.                                   
  489.             .end                  
  490.