Je suis nouveau en PL/SQL et je dois me former sur ce langage. J'ai un problème de compréhension d'un programme.

voici le code qui me pose problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
---------------------------------------------------------------
-- Recupere et affiche le contenu du repertoire en parametre --
---------------------------------------------------------------
PROCEDURE get_list_rep (PC$Rep IN VARCHAR2) IS
  LN$Lettre pls_integer := 1 ;
  LC$Rep Varchar2(256) := PC$Rep ;
  LC$Filtre  Varchar2(30) ;
  fic_out TEXT_IO.FILE_TYPE ;
  fic_name Varchar2(256)  ;
  fichier  Varchar2(256)  ;  
  LI$NumDrive pls_integer := 1 ;
  LC$Cmd Varchar2(256) ;
  LC$Ligne Varchar2(256) ;
  LI$Num pls_integer := 1 ;
  LI$Pos pls_integer ;
BEGIN
 
    If Substr( LC$Rep, Length(LC$Rep) -2, 3 ) = '\..' And Length( LC$Rep ) > 5 Then
    	 -- Retour arriere dans l'arborescence --
    	 :CTRL.Chemin := Substr( LC$Rep, 1, Instr( LC$Rep, '\', -1, 2 ) - 1);
    	 LC$Rep := :CTRL.Chemin ;
    End if ;
    clear_list('CTRL.REPS');
 
    -- Nom du fichier de sortie --
    fichier := Ltrim( To_char( SYSDATE, 'YYYYDDMMHH24MISS' ) ) || '_lst_fic.txt' ;    
    fic_name := :CTRL.MAIN_DRIVE || '\' || fichier ;
 
 
    -- Liste des répertoires --
    If :CTRL.FILTRE <> '*.*' Then
    	LC$Cmd := 'DIR /AD "' || LC$Rep || '\" > ' || fic_name ;        
    	Host( LC$Cmd, NO_SCREEN ) ;
    End if ;
 
    -- Filtre multi-choix ? --
    If Instr( :CTRL.FILTRE, ',' ) > 0 Then
    	 LI$Pos := 1 ;
    	 Loop
    	   LC$Filtre := Split( :CTRL.FILTRE, LI$Pos ) ;
    	   Exit When LC$Filtre IS NULL ;
         LC$Cmd := 'DIR /OGN "' || LC$Rep || '\' || LC$Filtre || '" >> ' || fic_name ;        
         Host( LC$Cmd, NO_SCREEN ) ;
         LI$Pos := LI$Pos + 1 ;
    	 End loop ;
    Else
       LC$Cmd := 'DIR /OGN "' || LC$Rep || '\' || :CTRL.FILTRE || '" >> ' || fic_name ;        
       Host( LC$Cmd, NO_SCREEN ) ;	
    End if ;
 
    -- Lecture de la liste des fichiers --
    fic_out := TEXT_IO.FOPEN( fic_name, 'R' ) ;
    If TEXT_IO.IS_OPEN( fic_out ) Then
    	Begin
    	Loop
    	   TEXT_IO.Get_Line( fic_out, LC$Ligne ) ;
    	   If LC$Ligne is not null Then
    	      If Substr( LC$Ligne, 25, 5 ) = '<DIR>' Then
    	      	-- nom de repertoire --
    	      	If Substr( LC$Ligne, 40, 2 ) <> '.' Then
    	          LI$Num := LI$Num + 1 ;
    	          Add_List_Element( 'CTRL.REPS', LI$Num, '\' || Substr( LC$Ligne, 40, 256 ), '\' || Substr( LC$Ligne, 40, 256 ) ) ;
    	        End if ;
    	      Elsif Substr( LC$Ligne, 1, 1 ) <> ' ' Then
    	      	-- nom de fichier --
    	      	If Instr( LC$Ligne, fichier ) = 0 Then
    	      	   LI$Num := LI$Num + 1 ;
    	      	   Add_List_Element( 'CTRL.REPS', LI$Num, Substr( LC$Ligne, 40, 256 ), Substr( LC$Ligne, 40, 256 ) ) ;
    	      	End if ;
    	      End if ;
    	   End if ;
    	End loop ;
    	Exception
    		when no_data_found Then
    		  TEXT_IO.FCLOSE( fic_out ) ;
    		  HOST( 'DEL ' || fic_name, NO_SCREEN ) ;
    	End ;
    Else
    	message('Impossible de lire : ' || LC$Rep );
    End if ;
 
END;
Tout fonctionne bien, sauf qu'à l'affichage de la liste des répertoires, le début des noms des répertoires est tronqué. Quelqu'un peut -il m'aider.

Merci