view level1/cmds/pd.asm @ 2758:e4a0f58a5f9b

Found that people who do not have the envirornment variable NITROS9DIR set before building the project get a error missing file "/rules.mak". Found this is caused do to the fact that the code to set this envirornment variable is in the rules.mak which can't get loaded. To fix this the code needed to set the envirornment variable that is in the rules.mak is now in the makefile(s) right before the include for the rules.mak file. This should fix the problem for those who do not have the NITROS9DIR envirornment variable preset.
author drencor-xeen
date Mon, 14 Jan 2013 14:37:46 -0600
parents 1b7bc08e2e25
children
line wrap: on
line source

********************************************************************
* p[wx]d - Print work/execution directory
*
* $Id$
*
* Edt/Rev  YYYY/MM/DD  Modified by
* Comment
* ------------------------------------------------------------------
*   1      ????/??/??
* From Tandy OS-9 Level One VR 02.00.00.

               NAM       p[wx]d
               TTL       Print work/execution directory

* Disassembled 98/09/10 23:50:10 by Disasm v1.6 (C) 1988 by RML

               IFP1      
               USE       defsfile
               ENDC      

tylg           SET       Prgrm+Objct
atrv           SET       ReEnt+rev
rev            SET       $00
edition        SET       1

               MOD       eom,name,tylg,atrv,start,size

               ORG       0
fildes         RMB       1
bufptr         RMB       2
dotdotfd       RMB       3                   LSN of ..
dotfd          RMB       3                   LSN of .
ddcopy         RMB       5
dentry         RMB       160
buffer         RMB       1
sttbuf         RMB       282
size           EQU       .

               IFNE      PXD
name           FCS       /pxd/
               ELSE      
               IFNE      PWD
name           FCS       /pwd/
               ENDC      
               ENDC      
               FCB       edition

               IFNE      PXD
badnam         FCC       "pxd"
               ELSE      
               IFNE      PWD
badnam         FCC       "pwd"
               ENDC      
               ENDC      
               FCC       ": bad name in path"
               FCB       C$CR
dotdot         FCC       "."
dot            FCC       "."
cr             FCB       C$CR
rdmsg          FCC       "read error"
               FCB       C$CR

start          leax      buffer,u            point X to buffer
               lda       #C$CR               get CR
               sta       ,x                  store at start of buffer
               stx       <bufptr             store buffer pointer
               leax      dot,pcr             point to '.'
               bsr       open                open directory
               sta       <fildes             save path
               lbsr      rdtwo               read '.' and '..' entries
               ldd       <dotdotfd           get 24 bit LSN of ..
               std       <ddcopy
               lda       <dotdotfd+2
               sta       <ddcopy+2           and save copy
pdloop                   
* Inlined the atroot routine - BGP 03/09/06
               leax      dotdotfd,u          point X at .. entry
               leay      dotfd,u             point Y at . entry
               bsr       attop               check if we're at the top
               beq       there               branch if so
               leax      dotdot,pcr          else point to '..'
* Inlined the chdir routine - BGP 03/09/06
               IFNE      PXD
               lda       #DIR.+EXEC.+READ.
               ELSE      
               IFNE      PWD
               lda       #DIR.+READ.
               ENDC      
               ENDC      
               os9       I$ChgDir
               lda       <fildes             get path to previous dir
               os9       I$Close             close it
               bcs       exit                branch if error
               leax      dot,pcr             point X to new current dir
               bsr       open                open it
               bsr       rdtwo               read . and .. entires of this dir
               bsr       findmtch            search for match
               bsr       prsent
               ldd       <dotdotfd
               std       <ddcopy
               lda       <dotdotfd+2
               sta       <ddcopy+2
               bra       pdloop
there                    
* Inlined the getdevnm routine - BGP 03/09/06
               lda       <fildes
               ldb       #SS.DevNm
               leax      sttbuf,u
               os9       I$GetStt
               bsr       prsnam

               ldx       <bufptr             point to buffer
               ldy       #$0081              get bytes to write
               lda       #$01                to stdout
               os9       I$WritLn            write
               lda       <fildes             get path
               os9       I$Close             close
               clrb      
exit           bra       exit1

               IFNE      PXD
open           lda       #DIR.+EXEC.+READ.
               ELSE      
               IFNE      PWD
open           lda       #DIR.+READ.
               ENDC      
               ENDC      
               os9       I$Open
               rts       

* Read directory entry
readent        lda       <fildes
               leax      dentry,u
               ldy       #DIR.SZ
               os9       I$Read
               rts       

findmtch       lda       <fildes             get path to current dir
               bsr       readent             read entry
               bcs       cantread            branch if error
               leax      dentry,u            point to entry buffer
               leax      <DIR.FD,x           point X to FD LSN
               leay      ddcopy,u            point Y to copy of LSN
               bsr       attop               compare the two
               bne       FindMtch            keep reading until we find match
               rts       

* Compare 3 bytes at X and Y
attop          ldd       ,x++
               cmpd      ,y++
               bne       L00C5
               lda       ,x
               cmpa      ,y
L00C5          rts       

rdtwo          bsr       readent             * read "." from directory
               ldd       <dentry+DIR.FD
               std       <dotfd
               lda       <dentry+DIR.FD+2
               sta       <dotfd+2
               bsr       readent             * read ".." from directory
               ldd       <dentry+DIR.FD
               std       <dotdotfd
               lda       <dentry+DIR.FD+2
               sta       <dotdotfd+2
               rts       

* Get name from directory entry
prsent         leax      dentry,u
prsnam         os9       F$PrsNam
               bcs       IlglName
               ldx       <bufptr
prsloop        lda       ,-y
               anda      #$7F                mask hi bit
               sta       ,-x                 save
               decb      
               bne       prsloop
               lda       #PDELIM
               sta       ,-x
               stx       <bufptr
               rts       

IlglName       leax      badnam,pcr
               bra       wrerr

cantread       leax      rdmsg,pcr
wrerr          lda       #$02
               os9       I$WritLn
exit1          os9       F$Exit

               EMOD      
eom            EQU       *
               END