home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wunderki.zip / FDIR.ASM < prev    next >
Assembly Source File  |  1993-08-16  |  6KB  |  129 lines

  1. ;//////////////////////////////////////////////////////
  2. ;/                                                    /
  3. ;/ Run-time Library für Borland Pascal 7.0 unter OS/2 /
  4. ;/ Routinen für Dateien.                              /
  5. ;/                                                    /
  6. ;/ 1993 Matthias Withopf / c't                        /
  7. ;/ Originalversion (c) 1988,92 Borland International  /
  8. ;/                                                    /
  9. ;//////////////////////////////////////////////////////
  10.  
  11.                 .286p                                         
  12.  
  13.                 _NOMACROS_ = 1                  ; keine Macros definieren
  14.                 INCLUDE SE.ASM
  15.                 INCLUDE OS2.ASM
  16.  
  17. DATA            SEGMENT WORD PUBLIC
  18.                 EXTRN   InOutRes:WORD
  19. DATA            ENDS
  20.  
  21. CODE            SEGMENT BYTE PUBLIC
  22.                 ASSUME  CS:CODE,DS:DATA
  23.                 EXTRN   ConvErrCode:NEAR
  24.  
  25.                 ; 
  26.                 ; Procedure Erase(Var f);
  27.                 ;
  28.  
  29.                 PUBLIC  EraseFile
  30. EraseFile       PROC    PASCAL FAR
  31.                 ARG     A_FileP : DWORD
  32.                 LES     BX,A_FileP              ; lese Zeiger auf FileRec
  33.                 ADD     BX,fName                ; lese Zeiger auf Dateinamen
  34.                 PUSH    ES                      ; übergebe Zeiger
  35.                 PUSH    BX                      ; auf Dateinamen
  36.                 XOR     AX,AX                   ; übergebe
  37.                 PUSH    AX                      ; 0L
  38.                 PUSH    AX                      ; (reserviert)
  39.                 CALL    DosDelete               ; lösche Datei
  40.                 CALL    ConvErrCode             ; konvertiere Fehlercode nach OS/2-Code
  41.                 OR      AX,AX                   ; ist Fehler aufgetreten ?
  42.                 JZ      @@Exit                  ; nein -> weiter
  43.                 MOV     InOutRes,AX             ; speichere Fehlercode
  44. @@Exit:         RET
  45. EraseFile       ENDP
  46.  
  47.                 ;
  48.                 ; Procedure Rename(Var f;NewName : PChar); 
  49.                 ;
  50.  
  51.                 PUBLIC  RenameFileC
  52. RenameFileC     PROC    FAR
  53.                 MOV     DL,1                    ; setze Flag für PChar-Argument
  54.                 JMP     SHORT RenFile
  55. RenameFileC     ENDP
  56.  
  57.                 ;
  58.                 ; Procedure Rename(Var f;NewName : String); 
  59.                 ;
  60.  
  61.                 PUBLIC  RenameFile
  62. RenameFile      PROC    FAR
  63.                 XOR     DL,DL                   ; lösche Flag für PChar-Argument
  64. RenameFile      ENDP
  65.  
  66.                 ;
  67.                 ; Gemeinsame Routine für Umbenennen einer Datei.
  68.                 ;
  69.  
  70. RenFile         PROC    PASCAL FAR
  71.                 ARG     A_FileP   : DWORD, \
  72.                         A_NameP   : DWORD
  73.                 LOCAL   L_NewName : BYTE : 80
  74.                 PUSH    DS                      ; rette Datensegment
  75.                 LDS     SI,A_NameP              ; lese Zeiger auf neuen Dateinamen in DS:SI
  76.                 LEA     DI,L_NewName            ; lese Zeiger auf 
  77.                 PUSH    SS                      ; Buffer für neuen Namen
  78.                 POP     ES                      ; ES:DI
  79.                 CLD                             ; der Name darf
  80.                 MOV     CX,79                   ; max. 79 Zeichen lang sein
  81.                 OR      DX,DX                   ; PChar-Argument ?
  82.                 JNE     @@CopyLoop              ; ja -> weiter
  83.                 LODSB                           ; lese Längenbyte
  84.                 CMP     CL,AL                   ; ist max. Länge überschritten ?
  85.                 JBE     @@CopyLoop              ; nein -> weiter
  86.                 MOV     CL,AL                   ; setze max. Länge
  87.                 JCXZ    @@CopyEnd               ; falls Leerstring -> nicht kopieren
  88. @@CopyLoop:     LODSB                           ; lese Zeichen aus neuem Namen
  89.                 OR      AL,AL                   ; Ende erreicht ?
  90.                 JE      @@CopyEnd               ; ja -> weiter
  91.                 STOSB                           ; speichere Zeichen
  92.                 LOOP    @@CopyLoop              ; -> bis alle Zeichen kopiert sind
  93. @@CopyEnd:      XOR     AL,AL                   ; schließe Namen
  94.                 STOSB                           ; mit Nullbyte ab
  95.                 LDS     BX,A_FileP              ; lese Zeiger auf FileRec 
  96.                 ADD     BX,fName                ; Zeiger auf Namen in DS:DX
  97.                 PUSH    DS                      ; übergebe Zeiger
  98.                 PUSH    BX                      ; auf alten Namen
  99.                 LEA     BX,L_NewName            ; lese Zeiger auf neuen Namen
  100.                 PUSH    SS                      ; übergebe Zeiger
  101.                 PUSH    BX                      ; auf neuen Namen
  102.                 XOR     AX,AX                   ; übergebe
  103.                 PUSH    AX                      ; 0L
  104.                 PUSH    AX                      ; (reserviert)
  105.                 CALL    DosMove                 ; benenne Datei um
  106.                 OR      AX,AX                   ; ist Fehler aufgetreten ?
  107.                 JZ      @@SetNewName            ; nein -> weiter
  108.                 CALL    ConvErrCode             ; konvertiere Fehlercode nach OS/2-Code
  109.                 MOV     InOutRes,AX             ; speichere Fehlercode
  110.                 JMP     SHORT @@Exit            ; -> Ende
  111.  
  112. @@SetNewName:   LEA     SI,L_NewName            ; lese Zeiger auf 
  113.                 PUSH    SS                      ; neuen Dateinamen
  114.                 POP     DS                      ; in DS:SI
  115.                 LES     DI,A_FileP              ; lese Zeiger auf FileRec
  116.                 ADD     DI,fName                ; lese Zeiger auf Namen in FileRec
  117.                 CLD                             ; lese Zeichen
  118. @@NewNameLoop:  LODSB                           ; aus neuem Namen
  119.                 STOSB                           ; speichere in FileRec
  120.                 OR      AL,AL                   ; Ende erreicht ?
  121.                 JNE     @@NewNameLoop           ; nein -> weiter kopieren
  122. @@Exit:         POP     DS                      ; hole Datensegment zurück
  123.                 RET
  124. RenFile         ENDP
  125.  
  126. CODE            ENDS
  127.  
  128.                 END
  129.