home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_27_1988_Transactor_Publishing.d64 / shellram.sda / SRCHCMD.A < prev    next >
Text File  |  2023-02-26  |  9KB  |  633 lines

  1. ;
  2. ; shellram
  3. ;
  4. ;  By: Adrian Pepper
  5. ;      Toronto, Ontario
  6. ;
  7. ;  based on, but heavily modified from
  8. ;  the Pro-Line/Spinnaker
  9. ;    C POWER/POWER C shell for the
  10. ;  Commodore 64 home computer.
  11. ;
  12. ;  The shell was modified to reduce
  13. ;  the size of the code, and arrange
  14. ;  things so memory page 22 (hex $16)
  15. ;  will be free for use as a "RAMdisk
  16. ;  Interface Page", for use with the
  17. ;  Commodore 1764 256K RAM expander
  18. ;  for the Commodore 64
  19. ;
  20. ;  This (basically) allows all programs
  21. ;  designed to run under the shell to
  22. ;  operate with the RAM disk
  23. ;
  24. ;
  25. ; srchcmd.a - routines for searching
  26. ;   for and executing built-in commands
  27. ;
  28. ; srchcmd - look for a built-in command
  29. ;   execute if found
  30. ;
  31. ;
  32. ; colcmd - set to zero to remove 'col'
  33. ;   screen colour command; this also
  34. ;   moves cmdlbuf from the cassette
  35. ;   buffer, where problems may occur
  36. ;   (but never have for me) to space
  37. ;   inside the shell program itself
  38. ;
  39. colcmd=1  ; 0 means no col command
  40. ;
  41. ;
  42. ; standard constants; many should become
  43. ;  external absolute or relative definitions
  44. ;
  45.  .ref sysdev
  46.  .ref sysdrv
  47.  .ref wrkdev
  48.  .ref wrkdrv
  49. ;
  50. ; kernal routines, etc
  51. ;
  52.  .ref readst
  53.  .ref close
  54.  .ref chkin
  55.  .ref chkout
  56.  .ref clrchn
  57.  .ref chrin
  58. ;
  59.  .ref nmivec
  60. shftflg=$028d
  61. ;
  62. ;
  63.  .def srchcmd
  64. ;
  65.  .ref opnwrk
  66.  .ref kwrkfil
  67.  .ref ksysfil
  68.  .ref argv
  69. ;
  70.  .ref strload
  71.  .ref strapnd
  72.  .ref streq
  73.  .ref strfopn
  74.  .ref opnsys
  75.  .ref strechn
  76.  .ref strbout
  77. ;
  78.  .ref savnmi
  79.  .ref strout
  80.  .ref outln
  81.  .ref outchr
  82.  .ref doload
  83.  .ref clrstdo
  84.  .ref filcls
  85. ;
  86.  .ref getnum
  87. ;
  88. ; srchcmd - looks for built-in command
  89. ;  executes, and returns with clc if found
  90. ;  sec means command is not built-in
  91. ;
  92. ; note: clc returned even if built-in
  93. ;  gets errors
  94. ;
  95. srchcmd ldx #<cmdlbuf
  96.  ldy #>cmdlbuf
  97.  jsr strload
  98.  lda #$00
  99.  sta  $59
  100.  ldx  #<cmdtbl
  101.  ldy  #>cmdtbl
  102. t1180b jsr streq
  103.  beq jmpcmd
  104.  ldy #0
  105.  lda ($57),y
  106.  bne t1190f
  107.  sec ;; indicate built-in not found
  108.  rts ;; and return
  109. t1190f inc $59
  110.  ldy $58
  111.  lda $57
  112.  clc
  113.  adc #5
  114.  tax
  115.  bcc t1180b
  116.  iny
  117.  bne t1180b
  118. ;
  119. jmpcmd lda $59
  120.  asl a
  121.  tax
  122.  lda rtntbl+1,x
  123.  pha ; push pch for rts
  124.  lda rtntbl,x
  125.  pha ; push pcl for rts
  126.  rts ; indirect jump (to table entry, +1)
  127. ;
  128. ;
  129. tobye jsr filcls
  130.  lda savnmi
  131.  sta nmivec
  132.  lda savnmi+1
  133.  sta nmivec+1
  134.  jmp $fce2  ;; never to return to C shell
  135. ;
  136. toload lda  $29
  137.  cmp #$02
  138.  bne t1210f
  139.  ldx argv+2
  140.  ldy argv+3
  141.  jsr doload
  142.  clc
  143.  rts
  144. t1210f jmp argcnt
  145. ;
  146. ;
  147. ;
  148. ;
  149. cmdtbl .byte 'b,'y,'e,0,0
  150.  .byte 'l,'o,'a,'d,0
  151.  .byte 'l,'s,0,0,0
  152.  .byte 'l,0,0,0,0
  153.  .byte 'r,'m,0,0,0
  154.  .byte 'm,'v,0,0,0
  155.  .byte 'p,'r,0,0,0
  156.  .byte 'd,'i,'s,'k,0
  157.  .byte 'w,'o,'r,'k,0
  158.  .byte 's,'y,'s,0,0
  159.  .ifne colcmd,0
  160.  .byte 'c,'o,'l,0,0
  161.  .fi
  162.  .byte 0
  163. ;
  164. rtntbl .word tobye-1 ; 0 bye
  165.  .word toload-1 ; 1 bye
  166.  .word tols-1 ; 2 ls
  167.  .word tol-1 ; 3 l
  168.  .word dorm-1 ; 4 rm
  169.  .word domv-1 ; 5 mv
  170.  .word dopr-1 ; 6 pr
  171.  .word dodisk-1 ; 7 disk
  172.  .word dowork-1 ; 8 work
  173.  .word dosys-1 ; 9 sys
  174.  .ifne colcmd,0
  175.  .word docol-1 ; 10 col
  176.  .fi
  177. ;
  178. ;
  179. ;
  180. sdollar .byte "$0:"
  181.  .byte 0
  182. sstar .byte "*"
  183.  .byte 0
  184. ;
  185. tols ldx sysdev
  186.  ldy sysdrv
  187.  jmp dol
  188. tol ldx wrkdev
  189.  ldy wrkdrv
  190. ; fall through to dol
  191. dol txa
  192.  pha
  193.  tya
  194.  clc
  195.  adc #'0
  196.  sta sdollar+1
  197.  ldx #<sdollar
  198.  ldy #>sdollar
  199.  jsr strload
  200.  lda $29
  201.  cmp #$02
  202.  bne t1260f
  203.  ldx argv+2
  204.  ldy argv+3
  205.  jsr strapnd
  206.  jmp t1280f
  207. t1260f cmp #$01
  208.  beq t1270f
  209.  pla
  210.  jmp argcnt  ;; and return
  211. t1270f ldx  #<sstar
  212.  ldy #>sstar
  213.  jsr strapnd
  214. t1280f pla
  215.  tax
  216.  lda #$04
  217.  ldy #0
  218.  jsr strfopn
  219.  bcc t1300f
  220.  jsr strbout
  221.  clc
  222.  rts ; error return
  223. ;
  224. t1300f jsr clrstdo
  225.  ldx #4
  226.  jsr chkin
  227.  jsr chrin
  228.  jsr chrin
  229.  lda #$0d
  230.  jsr outchr
  231.  lda #0
  232.  sta oreadst
  233. t1310b jsr chrrdst
  234.  bcs dirend
  235.  jsr chrrdst
  236.  bcs dirend
  237.  jsr chrrdst
  238.  bcs dirend
  239.  pha
  240.  jsr chrrdst
  241.  tay
  242.  pla
  243.  tax
  244.  jsr dolsubr
  245.  ldx #0
  246. t1320b lda dolsbuf,x
  247.  cmp #$20
  248.  beq t1330f
  249.  jsr outchr
  250.  inx
  251.  cpx #3
  252.  bne t1320b
  253. t1330f lda #$20
  254.  jsr outchr
  255. t1340b jsr chrrdst
  256.  bcs dirend
  257.  cmp #0
  258.  beq t1350f
  259.  jsr outchr
  260.  jmp t1340b
  261. t1350f lda #$0d
  262.  jsr outchr
  263. t1360f lda $cb
  264.  eor #$40
  265.  ora shftflg
  266.  bne t1360f
  267.  jmp t1310b
  268. dirend lda #$0d
  269.  jsr outchr
  270.  clc
  271.  rts
  272. ;
  273. dolsubr stx vdola
  274.  sty vdolb
  275.  ldx #3
  276.  lda #$20
  277. t1370b sta dolsbuf,x
  278.  dex
  279.  bpl t1370b
  280.  ldx #0
  281.  ldy #3
  282. t1380b lda #0
  283.  sta vdold
  284. t1390b sec
  285.  lda vdola
  286.  sbc doltbl1,y
  287.  sta vdolc
  288.  lda vdolb
  289.  sbc doltbl2,y
  290.  bcc t1400f
  291.  sta vdolb
  292.  lda vdolc
  293.  sta vdola
  294.  inc vdold
  295.  bne t1390b
  296. t1400f lda vdold
  297.  bne t1410f
  298.  cpx #0
  299.  beq t1420f
  300. t1410f clc
  301.  adc #$30
  302.  sta dolsbuf,x
  303.  inx
  304. t1420f dey
  305.  bpl t1380b
  306.  txa
  307.  bne t1430f
  308.  lda #$30
  309.  sta dolsbuf
  310. t1430f rts
  311. ;
  312. doltbl1 .byte $01,$0a,$64,$e8
  313. doltbl2 .byte $00,$00,$00,$03
  314.  .def vdolc   ; not clear why shellmain needs this
  315. vdola .byte $00
  316. vdolb .byte $00
  317. vdolc .byte $00
  318. vdold .byte $00
  319. dolsbuf .byte $00
  320.  .byte $00
  321.  .byte $00
  322.  .byte $00
  323. ;
  324. chrrdst lda oreadst
  325.  cmp #0
  326.  beq t1440f
  327.  sec
  328.  rts
  329. t1440f jsr chrin
  330.  pha
  331.  jsr readst
  332.  sta oreadst
  333.  pla
  334.  clc
  335.  rts
  336. oreadst .bss 1
  337. ;
  338. ; dodisk - do user specified "disk" command
  339. ;
  340. dodisk lda  $29
  341.  cmp #$02
  342.  beq t1450f
  343.  jmp argcnt
  344. t1450f ldx argv+2
  345.  ldy argv+3
  346.  jsr strload
  347. ; jmp sndwrk  ;; and return clc
  348. ;
  349. ; sndwrk - send string in (x,y) to work device
  350. ;
  351. sndwrk ldx #<snewlin
  352.  ldy #>snewlin
  353.  jsr strapnd
  354.  ldx #<kwrkfil
  355.  jsr chkout
  356.  jsr strbout  ;; send to work command channel
  357.  jsr clrchn
  358.  ldx wrkdev
  359.  jsr strechn
  360.  bcc t1460f
  361.  jsr strbout
  362. t1460f clc  ;; always return clc
  363.  rts
  364. ;
  365. ; rm - remove (delete) a file
  366. ;
  367. sszero .byte "s0:"
  368.  .byte 0
  369. dorm lda $29
  370.  cmp #2
  371.  beq t1480f
  372.  jmp argcnt
  373. t1480f clc
  374.  lda wrkdrv
  375.  adc #$30
  376.  sta sszero+1
  377.  ldx #<sszero
  378.  ldy #>sszero
  379.  jsr strload
  380.  ldx argv+2
  381.  ldy argv+3
  382.  jsr strapnd
  383.  jmp sndwrk  ;; and return clc
  384. ;
  385. ;
  386. ; mv - move (rename) a file
  387. ;
  388. srzero .byte "r0:"
  389.  .byte 0
  390. seqzero .byte "=0:"
  391.  .byte 0
  392. domv lda $29
  393.  cmp #$03
  394.  beq t1520f
  395.  jmp argcnt
  396. t1520f clc
  397.  lda wrkdrv
  398.  adc #'0
  399.  sta srzero+1
  400.  sta seqzero+1
  401.  ldx #<srzero
  402.  ldy #>srzero
  403.  jsr strload
  404.  ldx argv+4
  405.  ldy argv+5
  406.  jsr strapnd
  407.  ldx #<seqzero
  408.  ldy #>seqzero
  409.  jsr strapnd
  410.  ldx argv+2
  411.  ldy argv+3
  412.  jsr strapnd
  413.  jmp sndwrk  ;; and return clc
  414. ;
  415. dopr lda $29
  416.  cmp #$02
  417.  beq t1580f
  418.  jmp argcnt
  419. t1580f ldx argv+2
  420.  ldy argv+3
  421.  jsr strload
  422.  lda #4
  423.  ldx wrkdev
  424.  tay
  425.  jsr strfopn
  426.  bcc t1610f
  427.  jsr strbout
  428.  clc
  429.  rts  ; error return
  430. t1610f jsr clrstdo
  431.  ldx #4
  432.  jsr chkin
  433. t1630b jsr chrin
  434.  tax
  435.  jsr readst
  436.  pha
  437.  txa
  438.  jsr outchr
  439.  pla
  440.  beq t1630b
  441.  jsr outln
  442.  clc
  443.  rts
  444. ;  
  445. ;
  446. dowork ldx wrkdev
  447.  ldy wrkdrv
  448.  jsr dows
  449.  bcs t1635f
  450.  stx wrkdev  ; store if successful new device/drive
  451.  sty wrkdrv
  452.  lda #<kwrkfil
  453.  jsr close
  454.  jsr opnwrk
  455. t1635f clc
  456.  rts
  457. ;
  458. dosys ldx sysdev
  459.  ldy sysdrv
  460.  jsr dows
  461.  bcs t1636f
  462.  stx sysdev  ; store if successful new device/drive
  463.  sty sysdrv
  464. t1636f clc
  465.  rts
  466. ;
  467. ;
  468. ; dows - do work and sys commands
  469. ;
  470. dows lda $29
  471.  cmp #$01
  472.  beq shdrvdv  ; show, return with set carry
  473. t1640f cmp #3
  474.  beq gdevdrv ; returns (with sec
  475.             ;; only if device/drive is bad)
  476.  jsr argcnt
  477.  sec  ;; don't save x,y as device/drive
  478.  rts
  479. ;
  480. ;
  481. ;  
  482. shdrvdv lda #$20
  483.  sta devnum+1
  484.  txa
  485.  ldx #0
  486.  cmp #10
  487.  bcc t1710f
  488.  pha
  489.  lda #$31
  490.  sta devnum
  491.  pla
  492.  sec
  493.  sbc #10
  494.  inx
  495. t1710f clc
  496.  adc #'0
  497.  sta devnum,x
  498.  clc
  499.  tya
  500.  adc #'0
  501.  sta drvnum
  502.  ldx #<drvdvbf
  503.  ldy #>drvdvbf
  504.  jsr strout
  505.  sec
  506.  rts
  507. ;
  508. gdevdrv lda argv+2
  509.  sta $2a
  510.  lda argv+3
  511.  sta $2b
  512.  ldx #0
  513.  ldy #0
  514.  lda ($2a),y
  515.  cmp #$31
  516.  bne t1720f
  517.  ldx #$0a
  518.  iny
  519.  lda ($2a),y
  520.  bne t1720f
  521.  jmp drvnotp
  522. t1720f txa
  523.  clc
  524.  adc ($2a),y
  525.  sec
  526.  sbc #'0
  527.  sta devnum
  528.  iny
  529.  lda ($2a),y
  530.  beq t1730f
  531.  jmp drvnotp
  532. t1730f lda argv+4
  533.  sta $2a
  534.  lda argv+5
  535.  sta $2b
  536.  ldy #0
  537.  lda ($2a),y
  538.  cmp #$30
  539.  bcc t1740f
  540.  cmp #$32
  541.  bcs t1740f
  542.  tax
  543.  iny
  544.  lda ($2a),y
  545.  beq t1750f
  546. t1740f jmp drvnotp
  547. t1750f txa
  548.  sec
  549.  sbc #'0
  550.  sta drvnum
  551.  ldx devnum
  552.  jsr opnsys
  553.  bcs drvnotp
  554.  ldx devnum
  555.  ldy drvnum
  556.  rts
  557. ;
  558. drvdvbf .byte "device: "
  559. devnum .byte $00
  560. devnum1 .byte $00
  561.  .byte "  drive: "
  562. drvnum .byte $00,$0d,$0d,0
  563. ;
  564. ;
  565. drvnotp ldx #<sdrvnp
  566.  ldy #>sdrvnp
  567.  jsr strout
  568.  sec
  569.  rts
  570. sdrvnp .byte "drive not present"
  571. snewlin .byte $0d,0
  572. ;
  573. ;
  574.  .ifne colcmd,0
  575. ;
  576. ;
  577. ; docol - set char, bkg, status, border colours
  578. ;
  579. docol lda $29
  580.  cmp #6
  581.  bcc t1800f
  582.  jmp argcnt 
  583. t1800f asl a
  584.  sta $29
  585.  ldx #0
  586.  beq t1830f
  587. t1810b stx savx
  588.  ldy argv+1,x
  589.  lda argv,x
  590.  tax
  591.  jsr getnum
  592.  ldx savx
  593.  ldy coltbl-2,x
  594.  sty $2a
  595.  ldy coltbl-2+1,x
  596.  sty $2b
  597.  ldy #0
  598.  sta ($2a),y
  599.  ldx savx
  600. t1830f inx
  601.  inx
  602.  cpx $29
  603.  bcc t1810b
  604.  clc
  605.  rts
  606. ;
  607. savx .bss 1
  608. coltbl .word $0286   ; char (foreground) colour
  609.  .word $d021 ; background colour 1
  610.  .word dummy ; dummy, for status line
  611.  .word $d020 ; border colour
  612. dummy .bss 1
  613. ;
  614.  .fi
  615. ;
  616. argcnt ldx #<swrnarg
  617.  ldy #>swrnarg
  618.  jsr strout
  619.  clc  ;; successfully found built-in
  620.  rts  ;; even though IT had error
  621. swrnarg .byte "wrong number of arguments"
  622.  .byte $0d,$0d,0
  623. ;
  624.  .ifne colcmd,0
  625. ;
  626.  .def cmdlbuf  ; where command line read into
  627. cmdlbuf=$03fb-81  ; put command line in cassette buffer
  628.  .else
  629. ;
  630. cmdlbuf .dseg 81  ; put cmdlbuf in shell data space
  631.                   ; don't implement col command
  632.  .fi
  633.