home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / rxfiles.zip / rxrename.asm < prev    next >
Assembly Source File  |  1998-09-17  |  4KB  |  123 lines

  1. ;-----------------------------------------------------------------------
  2. ; RXRENAME.RX by ML /AT /Fe RXRENAME.RX RXRENAME.ASM
  3. ;
  4. ; RXRENAME( old, new )
  5. ;        renames resp. moves old file to new file on the same drive
  6. ;        returning the DOS result code, i.e. 0 if successful.  It's
  7. ;        also posible to rename a directory.  Wildcards in the file
  8. ;        names are not allowed.
  9. ;-----------------------------------------------------------------------
  10.  
  11. code     segment para public 'CODE'
  12.  
  13.          assume cs:code, ds:code, es:code, ss:code
  14.  
  15. RXSTR    struct
  16.  RxLen   dw     ?
  17.  RxPtr   dd     ?
  18. RXSTR    ends
  19.  
  20. PRXSTR   TYPEDEF far ptr RXSTR
  21.  
  22. SHVBLOCK struct
  23.  ShvNext dd     ?
  24.  ShvNam  RXSTR  <>
  25.  ShvVal  RXSTR  <>
  26.  ShvNamL dw     ?
  27.  ShvValL dw     ?
  28.  ShvCode db     ?
  29.  ShvRet  db     ?
  30. SHVBLOCK ends
  31.  
  32.          org    16h
  33. RXpid    dw     ?               ;_psp:0x16 parent (REXX) pid
  34.  
  35.          org    2Ch
  36. envseg   dw     ?               ;_psp:0x2C environment segment
  37.  
  38.          org    54h
  39. DOSREXX4 dd     ?               ;_psp:0x54 'REXX' signature
  40. SHVENTRY dd     ?               ;_psp:0x58 shared variable handler
  41.  
  42.          org    82h
  43. RXARGC   dw     ?               ;_psp:0x82 number of arguments
  44. RXARGV   PRXSTR ?               ;_psp:0x84 arg.s (length, pointer)
  45. RXRESULT dd     ?               ;_psp:0x88 RESULT buffer (256 bytes)
  46. _RXNAME  db     ?               ;_psp:0x8C (undocumented)
  47.  
  48.          org    100h            ;COM entry point at CS:100
  49. start:   jmp    stack           ;set stack, release memory
  50.  
  51. ;-----------------------------------------------------------------------
  52. main     proc   near            ;enter after initialization
  53.  
  54.          cmp    word ptr DOSREXX4+2,'XX'
  55.          jne    fail
  56.          cmp    RXARGC,2
  57.          jne    fail
  58.          les    si,RXARGV
  59.  
  60.          push   ds
  61.          lds    dx,es:RXSTR.RxPtr[si]   ;DS:DX 1st argument pointer
  62.          add    si,sizeof RXSTR
  63.          les    di,es:RXSTR.RxPtr[si]   ;ES:DI 2nd argument pointer
  64.  
  65.          mov    ah,56h          ;rename DS:DX to ES:DI
  66.          int    21h
  67.          jc     result          ;if carry AL = error
  68.          xor    al,al           ;else okay (AL := 0)
  69.  
  70. result:  pop    ds              ;restore data segment
  71.          les    di,RXRESULT     ;ES:DI RESULT buffer
  72.  
  73.          mov    ah,0            ;AX = exit code 0..255
  74.          mov    cl,100          ;AL = quotient  0..  2
  75.          div    cl              ;AH = remainder 0.. 99
  76.  
  77.          mov    cx,'00'
  78.          or     al,cl
  79.          cmp    al,ch
  80.          je     lt_100
  81.          xor    ch,ch
  82.          stosb                  ;e.g. 1 of exit code 123
  83.  
  84. lt_100:  mov    al,ah
  85.          aam                    ;adjust remainder 0..99
  86.          xchg   al,ah
  87.          or     al,cl
  88.          cmp    al,ch
  89.          je     lt_010
  90.          stosb                  ;e.g. 2 of exit code 123
  91.  
  92. lt_010:  mov    al,ah
  93.          or     al,cl
  94.          stosb                  ;e.g. 3 of exit code 123
  95.  
  96.          xor    al,al           ;REXX function ended
  97.          jmp    exit
  98.  
  99. fail:    mov    al,1            ;REXX function error
  100. exit:    mov    ah,4Ch          ;terminate with RC AL
  101.          int    21h
  102.  
  103. main     endp
  104.  
  105. ;-----------------------------------------------------------------------
  106.          align  16
  107. stkparas equ    32              ;stack size 512 = 32 * 16
  108.  
  109. stack    label  near            ;initialise *.com program
  110.  
  111.          mov    bx,offset stack + 16 * stkparas
  112.          mov    sp,bx           ;new stack 100h above init
  113.          mov    cl,4
  114.          shr    bx,cl           ;used number of paragraphs:
  115.          mov    ah,4ah          ;modify allocated memory to
  116.          int    21h             ;needed size i.e. free rest
  117.  
  118.          jmp    main            ;current SP must be beyond
  119.  
  120. ;-----------------------------------------------------------------------
  121. code     ends
  122.          end    start           ;program entry point
  123.