diff CoCoOS9/level2v3/CMDS/merge.asm @ 31:bd2b07db8917 cocoos9lv2v3

CoCoOS9 version
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Jul 2018 15:16:13 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CoCoOS9/level2v3/CMDS/merge.asm	Sat Jul 14 15:16:13 2018 +0900
@@ -0,0 +1,83 @@
+********************************************************************
+* Merge - Merge files into one file
+*
+* $Id: merge.asm,v 1.1.1.1 2001/02/21 23:30:54 boisy Exp $
+*
+* Ed.    Comments                                       Who YY/MM/DD
+* ------------------------------------------------------------------
+* 4      Added in '-z' option, which reads filenames to ADK 94/12/11
+*        merge from STDIN
+
+         nam   Merge
+         ttl   Merge files into one file
+
+         ifp1
+         use   defsfile
+         endc
+
+tylg     set   Prgrm+Objct   
+atrv     set   ReEnt+rev
+rev      set   $01
+edition  set   4
+
+         mod   eom,name,tylg,atrv,start,size
+
+path     rmb   1
+param    rmb   2
+d.ptr    rmb   2
+d.size   rmb   2
+d.buffer rmb   2496       should reserve 7k, leaving some room for parameters
+size     equ   .
+
+name     fcs   /Merge/
+         fcb   edition    change to 6, as merge 5 has problems?
+
+start    pshs  u          save start address of memory
+         stx   <param     and parameter area start
+         tfr   x,d
+         subd  #$0107     take out 1 bytes in DP, and 1 page for the stack
+         subd  ,s++       take out start address of data area
+         std   <d.size    save size of data buffer
+         leau  d.buffer,u point to some data
+         stu   <d.ptr     save another pointer
+
+do.file  ldx   <param     get first filename
+space    lda   ,x+        grab a character
+         cmpa  #C$SPAC    space?
+         beq   space      yes, skip it
+         leax  -1,x       otherwise point to last non-space
+
+         clrb  
+         cmpa  #C$CR      was the character a CR?
+         beq   Exit       yes, exit
+
+         lda   #READ.
+         os9   I$Open     open the file for reading
+         bcs   Exit       crap out if error
+         sta   <path      save path number
+         stx   <param     and save new address of parameter area
+
+read.lp  lda   <path      get the current path number
+         ldy   <d.size    and size of data to read
+         ldx   <d.ptr     and pointer to data buffer
+         os9   I$Read     read data into the buffer
+         bcs   chk.err    check errors
+
+         lda   #$01       to STDOUT
+         os9   I$Write    dump it out in one shot
+         bcc   read.lp    loop if no errors
+         bra   Exit       otherwise exit ungracefully
+
+chk.err  cmpb  #E$EOF     end of the file?
+         bne   Error      no, error out
+         lda   <path      otherwise get the current path number
+         os9   I$Close    close it
+         bcc   do.file    if no error, go get next filename
+
+Error    coma             set carry
+Exit     os9   F$Exit     and exit
+
+         emod
+eom      equ   *
+         end
+