getenv.o        \
        gotoxy.o        \
        gotoy.o         \
+       initcwd.o       \
         joy_stddrv.o    \
        kbhit.o         \
         mainargs.o      \
 
--- /dev/null
+;
+; Oliver Schmidt, 18.04.2005
+;
+
+        .export         initcwd
+        .import                __cwd
+
+        .include       "zeropage.inc"
+        .include        "mli.inc"
+
+initcwd:
+        ; Use imported buffer
+        lda    #<__cwd
+        ldx    #>__cwd
+        sta     mliparam + MLI::PREFIX::PATHNAME
+        stx     mliparam + MLI::PREFIX::PATHNAME+1
+
+        ; Get current working directory
+        lda     #GET_PREFIX_CALL
+        ldx     #PREFIX_COUNT
+        jsr     callmli
+
+        ; Check length byte
+        ldx    __cwd
+        beq    done
+
+        ; Replace trailing slash with zero
+        sta    __cwd,x         ; A = 0
+
+        ; Remove length byte
+        tax
+:       inx
+        lda    __cwd,x
+        sta    __cwd-1,x
+        bne    :-
+
+done:   rts
 
 CREATE_CALL     = $C0
 CREATE_COUNT    = 7
 
+DESTROY_CALL    = $C1
+DESTROY_COUNT   = 1
+
+RENAME_CALL     = $C2
+RENAME_COUNT    = 2
+
 ON_LINE_CALL    = $C5
 ON_LINE_COUNT   = 2
 
+SET_PREFIX_CALL = $C6
+GET_PREFIX_CALL = $C7
+PREFIX_COUNT    = 1
+
 OPEN_CALL       = $C8
 OPEN_COUNT      = 3
 
         .struct MLI
                 .union
                         .struct RW_BLOCK
-                                PARAM_COUNT    .byte
-                                UNIT_NUM       .byte
-                                DATA_BUFFER    .addr
-                                BLOCK_NUM      .word
+                                PARAM_COUNT     .byte
+                                UNIT_NUM        .byte
+                                DATA_BUFFER     .addr
+                                BLOCK_NUM       .word
                         .endstruct
                         .struct CREATE
-                                PARAM_COUNT    .byte
-                                PATHNAME       .addr
-                                ACCESS         .byte
-                                FILE_TYPE      .byte
-                                AUX_TYPE       .word
-                                STORAGE_TYPE   .byte
-                                CREATE_DATE    .word
-                                CREATE_TIME    .word
+                                PARAM_COUNT     .byte
+                                PATHNAME        .addr
+                                ACCESS          .byte
+                                FILE_TYPE       .byte
+                                AUX_TYPE        .word
+                                STORAGE_TYPE    .byte
+                                CREATE_DATE     .word
+                                CREATE_TIME     .word
                         .endstruct
-                        .struct        ON_LINE
-                                PARAM_COUNT    .byte
-                                UNIT_NUM       .byte
-                                DATA_BUFFER    .addr
+                        .struct DESTROY
+                                PARAM_COUNT     .byte
+                                PATHNAME        .addr
                         .endstruct
-                        .struct OPEN
+                        .struct RENAME
+                                PARAM_COUNT     .byte
+                                PATHNAME        .addr
+                                NEW_PATHNAME    .addr
+                        .endstruct
+                        .struct ON_LINE
+                                PARAM_COUNT     .byte
+                                UNIT_NUM        .byte
+                                DATA_BUFFER     .addr
+                        .endstruct
+                        .struct PREFIX
                                 PARAM_COUNT    .byte
                                 PATHNAME       .addr
-                                IO_BUFFER      .addr
-                                REF_NUM                .byte
+                        .endstruct
+                        .struct OPEN
+                                PARAM_COUNT     .byte
+                                PATHNAME        .addr
+                                IO_BUFFER       .addr
+                                REF_NUM         .byte
                         .endstruct
                         .struct RW
-                                PARAM_COUNT    .byte
-                                REF_NUM                .byte
-                                DATA_BUFFER    .addr
-                                REQUEST_COUNT  .word
-                                TRANS_COUNT    .word
+                                PARAM_COUNT     .byte
+                                REF_NUM         .byte
+                                DATA_BUFFER     .addr
+                                REQUEST_COUNT   .word
+                                TRANS_COUNT     .word
                         .endstruct
                         .struct CLOSE
-                                PARAM_COUNT    .byte
-                                REF_NUM                .byte
+                                PARAM_COUNT     .byte
+                                REF_NUM         .byte
                         .endstruct
                         .struct MARK
-                                PARAM_COUNT    .byte
-                                REF_NUM                .byte
-                                POSITION       .byte 3
+                                PARAM_COUNT     .byte
+                                REF_NUM         .byte
+                                POSITION        .byte 3
                         .endstruct
                         .struct EOF
-                                PARAM_COUNT    .byte
-                                REF_NUM                .byte
-                                EOF            .byte 3
+                                PARAM_COUNT     .byte
+                                REF_NUM         .byte
+                                EOF             .byte 3
                         .endstruct
                 .endunion
         .endstruct
 
-        .global                mliparam
-        .global                callmli
+        .global         mliparam
+        .global         callmli
 
-ENTRY   :=     $BF00           ; MLI call entry point
-DEVNUM  :=     $BF30           ; Most recent accessed device
-PFIXPTR :=     $BF9A           ; If = 0, no prefix active
-KVERSION:=      $BFFF          ; Kernel version number
+ENTRY   :=      $BF00          ; MLI call entry point
+DEVNUM  :=      $BF30          ; Most recent accessed device
+PFIXPTR :=      $BF9A          ; If = 0, no prefix active
+KVERSION:=      $BFFF           ; Kernel version number
 
         getenv.o        \
        gotoxy.o        \
        gotoy.o         \
+       initcwd.o       \
         joy_stddrv.o    \
        kbhit.o         \
         mainargs.o      \