Branch data Line data Source code
1 : : /* do not edit automatically generated by mc from M2FileName. */
2 : : /* M2FileName.mod construct file names.
3 : :
4 : : Copyright (C) 2001-2025 Free Software Foundation, Inc.
5 : : Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
6 : :
7 : : This file is part of GNU Modula-2.
8 : :
9 : : GNU Modula-2 is free software; you can redistribute it and/or modify
10 : : it under the terms of the GNU General Public License as published by
11 : : the Free Software Foundation; either version 3, or (at your option)
12 : : any later version.
13 : :
14 : : GNU Modula-2 is distributed in the hope that it will be useful, but
15 : : WITHOUT ANY WARRANTY; without even the implied warranty of
16 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 : : General Public License for more details.
18 : :
19 : : You should have received a copy of the GNU General Public License
20 : : along with GNU Modula-2; see the file COPYING3. If not see
21 : : <http://www.gnu.org/licenses/>. */
22 : :
23 : : #define INCLUDE_MEMORY
24 : : #include "config.h"
25 : : #include "system.h"
26 : : #include <stdbool.h>
27 : : # if !defined (PROC_D)
28 : : # define PROC_D
29 : : typedef void (*PROC_t) (void);
30 : : typedef struct { PROC_t proc; } PROC;
31 : : # endif
32 : :
33 : : #define _M2FileName_C
34 : :
35 : : #include "GM2FileName.h"
36 : : # include "GASCII.h"
37 : : # include "GDynamicStrings.h"
38 : :
39 : : # define MaxFileName 0
40 : : # define MaxStemName 0
41 : : # define Directory '/'
42 : :
43 : : /*
44 : : CalculateFileName - calculates and returns a new string filename given a module
45 : : and an extension. String, Extension, is concatenated onto
46 : : Module and thus it is safe to `Mark' the extension for garbage
47 : : collection.
48 : : */
49 : :
50 : : extern "C" DynamicStrings_String M2FileName_CalculateFileName (DynamicStrings_String Module, DynamicStrings_String Extension);
51 : :
52 : : /*
53 : : CalculateStemName - calculates the stem name for given a module.
54 : : This name length will be operating system and
55 : : compiler specific.
56 : : */
57 : :
58 : : extern "C" DynamicStrings_String M2FileName_CalculateStemName (DynamicStrings_String Module);
59 : :
60 : : /*
61 : : ExtractExtension - given a, filename, return the filename without
62 : : the extension, Ext.
63 : : */
64 : :
65 : : extern "C" DynamicStrings_String M2FileName_ExtractExtension (DynamicStrings_String filename, DynamicStrings_String ext);
66 : :
67 : : /*
68 : : ExtractModule - given a, filename, return the module name including any
69 : : extension. A new string is returned.
70 : : */
71 : :
72 : : extern "C" DynamicStrings_String M2FileName_ExtractModule (DynamicStrings_String filename);
73 : :
74 : :
75 : : /*
76 : : CalculateFileName - calculates and returns a new string filename given a module
77 : : and an extension. String, Extension, is concatenated onto
78 : : Module and thus it is safe to `Mark' the extension for garbage
79 : : collection.
80 : : */
81 : :
82 : 181518 : extern "C" DynamicStrings_String M2FileName_CalculateFileName (DynamicStrings_String Module, DynamicStrings_String Extension)
83 : : {
84 : 181518 : if (MaxFileName == 0)
85 : : {
86 : 181518 : return DynamicStrings_ConCat (DynamicStrings_Slice (Module, 0, MaxFileName), Extension);
87 : : }
88 : : else
89 : : {
90 : : return DynamicStrings_ConCat (DynamicStrings_Slice (Module, 0, MaxFileName-(DynamicStrings_Length (Extension))), Extension);
91 : : }
92 : : /* static analysis guarentees a RETURN statement will be used before here. */
93 : : __builtin_unreachable ();
94 : : }
95 : :
96 : :
97 : : /*
98 : : CalculateStemName - calculates the stem name for given a module.
99 : : This name length will be operating system and
100 : : compiler specific.
101 : : */
102 : :
103 : 0 : extern "C" DynamicStrings_String M2FileName_CalculateStemName (DynamicStrings_String Module)
104 : : {
105 : 0 : return DynamicStrings_Slice (Module, 0, MaxStemName);
106 : : /* static analysis guarentees a RETURN statement will be used before here. */
107 : : __builtin_unreachable ();
108 : : }
109 : :
110 : :
111 : : /*
112 : : ExtractExtension - given a, filename, return the filename without
113 : : the extension, Ext.
114 : : */
115 : :
116 : 0 : extern "C" DynamicStrings_String M2FileName_ExtractExtension (DynamicStrings_String filename, DynamicStrings_String ext)
117 : : {
118 : 0 : if (DynamicStrings_Equal (ext, DynamicStrings_Mark (DynamicStrings_Slice (filename, static_cast<int> (-(DynamicStrings_Length (ext))), 0))))
119 : : {
120 : 0 : return DynamicStrings_Slice (filename, 0, static_cast<int> (-(DynamicStrings_Length (ext))));
121 : : }
122 : : else
123 : : {
124 : : return filename;
125 : : }
126 : : /* static analysis guarentees a RETURN statement will be used before here. */
127 : : __builtin_unreachable ();
128 : : }
129 : :
130 : :
131 : : /*
132 : : ExtractModule - given a, filename, return the module name including any
133 : : extension. A new string is returned.
134 : : */
135 : :
136 : 0 : extern "C" DynamicStrings_String M2FileName_ExtractModule (DynamicStrings_String filename)
137 : : {
138 : 0 : int i;
139 : :
140 : 0 : i = DynamicStrings_Index (filename, Directory, 0);
141 : 0 : if (i == -1)
142 : : {
143 : 0 : return DynamicStrings_Dup (filename);
144 : : }
145 : : else
146 : : {
147 : 0 : return DynamicStrings_Slice (filename, i+1, 0);
148 : : }
149 : : /* static analysis guarentees a RETURN statement will be used before here. */
150 : : __builtin_unreachable ();
151 : : }
152 : :
153 : 15392 : extern "C" void _M2_M2FileName_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
154 : : {
155 : 15392 : }
156 : :
157 : 0 : extern "C" void _M2_M2FileName_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
158 : : {
159 : 0 : }
|