Subversion Repositories Kolibri OS

Rev

Rev 1498 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1498 serge 1
 
2
 *
3
 * Module Name: aslfiles - file I/O suppoert
4
 *
5
 *****************************************************************************/
6
7
 
8
 *
9
 * 1. Copyright Notice
10
 *
11
 * Some or all of this work - Copyright (c) 1999 - 2011, Intel Corp.
2216 Serge 12
 * All rights reserved.
1498 serge 13
 *
14
 * 2. License
15
 *
16
 * 2.1. This is your license from Intel Corp. under its intellectual property
17
 * rights.  You may have additional license terms from the party that provided
18
 * you this software, covering your right to use that party's intellectual
19
 * property rights.
20
 *
21
 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22
 * copy of the source code appearing in this file ("Covered Code") an
23
 * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24
 * base code distributed originally by Intel ("Original Intel Code") to copy,
25
 * make derivatives, distribute, use and display any portion of the Covered
26
 * Code in any form, with the right to sublicense such rights; and
27
 *
28
 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29
 * license (with the right to sublicense), under only those claims of Intel
30
 * patents that are infringed by the Original Intel Code, to make, use, sell,
31
 * offer to sell, and import the Covered Code and derivative works thereof
32
 * solely to the minimum extent necessary to exercise the above copyright
33
 * license, and in no event shall the patent license extend to any additions
34
 * to or modifications of the Original Intel Code.  No other license or right
35
 * is granted directly or by implication, estoppel or otherwise;
36
 *
37
 * The above copyright and patent license is granted only if the following
38
 * conditions are met:
39
 *
40
 * 3. Conditions
41
 *
42
 * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43
 * Redistribution of source code of any substantial portion of the Covered
44
 * Code or modification with rights to further distribute source must include
45
 * the above Copyright Notice, the above License, this list of Conditions,
46
 * and the following Disclaimer and Export Compliance provision.  In addition,
47
 * Licensee must cause all Covered Code to which Licensee contributes to
48
 * contain a file documenting the changes Licensee made to create that Covered
49
 * Code and the date of any change.  Licensee must include in that file the
50
 * documentation of any changes made by any predecessor Licensee.  Licensee
51
 * must include a prominent statement that the modification is derived,
52
 * directly or indirectly, from Original Intel Code.
53
 *
54
 * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55
 * Redistribution of source code of any substantial portion of the Covered
56
 * Code or modification without rights to further distribute source must
57
 * include the following Disclaimer and Export Compliance provision in the
58
 * documentation and/or other materials provided with distribution.  In
59
 * addition, Licensee may not authorize further sublicense of source of any
60
 * portion of the Covered Code, and must include terms to the effect that the
61
 * license from Licensee to its licensee is limited to the intellectual
62
 * property embodied in the software Licensee provides to its licensee, and
63
 * not to intellectual property embodied in modifications its licensee may
64
 * make.
65
 *
66
 * 3.3. Redistribution of Executable. Redistribution in executable form of any
67
 * substantial portion of the Covered Code or modification must reproduce the
68
 * above Copyright Notice, and the following Disclaimer and Export Compliance
69
 * provision in the documentation and/or other materials provided with the
70
 * distribution.
71
 *
72
 * 3.4. Intel retains all right, title, and interest in and to the Original
73
 * Intel Code.
74
 *
75
 * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76
 * Intel shall be used in advertising or otherwise to promote the sale, use or
77
 * other dealings in products derived from or relating to the Covered Code
78
 * without prior written authorization from Intel.
79
 *
80
 * 4. Disclaimer and Export Compliance
81
 *
82
 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83
 * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84
 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
85
 * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
86
 * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
87
 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88
 * PARTICULAR PURPOSE.
89
 *
90
 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91
 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92
 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93
 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94
 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95
 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
96
 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97
 * LIMITED REMEDY.
98
 *
99
 * 4.3. Licensee shall not export, either directly or indirectly, any of this
100
 * software or system incorporating such software without first obtaining any
101
 * required license or other approval from the U. S. Department of Commerce or
102
 * any other agency or department of the United States Government.  In the
103
 * event Licensee exports any such software from the United States or
104
 * re-exports any such software from a foreign destination, Licensee shall
105
 * ensure that the distribution and export/re-export of the software is in
106
 * compliance with all laws, regulations, orders, or other restrictions of the
107
 * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108
 * any of its subsidiaries will export/re-export any technical data, process,
109
 * software, or service, directly or indirectly, to any country for which the
110
 * United States government or any agency thereof requires an export license,
111
 * other governmental approval, or letter of assurance, without first obtaining
112
 * such license, approval or letter.
113
 *
114
 *****************************************************************************/
115
116
 
117
#include "acapps.h"
118
119
 
120
        ACPI_MODULE_NAME    ("aslfiles")
121
122
 
123
124
 
2216 Serge 125
FlOpenIncludeWithPrefix (
1498 serge 126
    char                    *PrefixDir,
127
    char                    *Filename);
128
129
 
130
 
131
ACPI_STATUS
132
FlParseInputPathname (
133
    char                    *InputFilename);
134
#endif
135
136
 
137
 
138
 *
139
 * FUNCTION:    AslAbort
140
 *
141
 * PARAMETERS:  None
142
 *
143
 * RETURN:      None
144
 *
145
 * DESCRIPTION: Dump the error log and abort the compiler.  Used for serious
146
 *              I/O errors
147
 *
148
 ******************************************************************************/
149
150
 
151
AslAbort (
152
    void)
153
{
154
155
 
156
    if (Gbl_DebugFlag)
157
    {
158
        /* Print error summary to the debug file */
159
160
 
161
    }
162
163
 
164
}
165
166
 
167
 
168
 *
169
 * FUNCTION:    FlFileError
170
 *
171
 * PARAMETERS:  FileId              - Index into file info array
172
 *              ErrorId             - Index into error message array
173
 *
174
 * RETURN:      None
175
 *
176
 * DESCRIPTION: Decode errno to an error message and add the entire error
177
 *              to the error log.
178
 *
179
 ******************************************************************************/
180
181
 
182
FlFileError (
183
    UINT32                  FileId,
184
    UINT8                   ErrorId)
185
{
186
187
 
188
        strerror (errno));
189
    AslCommonError (ASL_ERROR, ErrorId, 0, 0, 0, 0, NULL, MsgBuffer);
190
}
191
192
 
193
 
194
 *
195
 * FUNCTION:    FlOpenFile
196
 *
197
 * PARAMETERS:  FileId              - Index into file info array
198
 *              Filename            - file pathname to open
199
 *              Mode                - Open mode for fopen
200
 *
201
 * RETURN:      None
202
 *
203
 * DESCRIPTION: Open a file.
204
 *              NOTE: Aborts compiler on any error.
205
 *
206
 ******************************************************************************/
207
208
 
209
FlOpenFile (
210
    UINT32                  FileId,
211
    char                    *Filename,
212
    char                    *Mode)
213
{
214
    FILE                    *File;
215
216
 
217
 
218
219
 
220
    Gbl_Files[FileId].Handle   = File;
221
222
 
223
    {
224
        FlFileError (FileId, ASL_MSG_OPEN);
225
        AslAbort ();
226
    }
227
}
228
229
 
230
 
231
 *
232
 * FUNCTION:    FlGetFileSize
233
 *
234
 * PARAMETERS:  FileId              - Index into file info array
235
 *
236
 * RETURN:      File Size
237
 *
238
 * DESCRIPTION: Get current file size. Uses seek-to-EOF. File must be open.
239
 *
240
 ******************************************************************************/
241
242
 
243
FlGetFileSize (
244
    UINT32                  FileId)
245
{
246
    FILE                    *fp;
247
    UINT32                  FileSize;
248
249
 
250
 
251
252
 
253
    FileSize = (UINT32) ftell (fp);
254
    fseek (fp, 0, SEEK_SET);
255
256
 
257
}
258
259
 
260
 
261
 *
262
 * FUNCTION:    FlReadFile
263
 *
264
 * PARAMETERS:  FileId              - Index into file info array
265
 *              Buffer              - Where to place the data
266
 *              Length              - Amount to read
267
 *
268
 * RETURN:      Status.  AE_ERROR indicates EOF.
269
 *
270
 * DESCRIPTION: Read data from an open file.
271
 *              NOTE: Aborts compiler on any error.
272
 *
273
 ******************************************************************************/
274
275
 
276
FlReadFile (
277
    UINT32                  FileId,
278
    void                    *Buffer,
279
    UINT32                  Length)
280
{
281
    UINT32                  Actual;
282
283
 
284
 
285
286
 
287
    if (Actual != Length)
288
    {
289
        if (feof (Gbl_Files[FileId].Handle))
290
        {
291
            /* End-of-file, just return error */
292
293
 
294
        }
295
296
 
297
        AslAbort ();
298
    }
299
300
 
301
}
302
303
 
304
 
305
 *
306
 * FUNCTION:    FlWriteFile
307
 *
308
 * PARAMETERS:  FileId              - Index into file info array
309
 *              Buffer              - Data to write
310
 *              Length              - Amount of data to write
311
 *
312
 * RETURN:      None
313
 *
314
 * DESCRIPTION: Write data to an open file.
315
 *              NOTE: Aborts compiler on any error.
316
 *
317
 ******************************************************************************/
318
319
 
320
FlWriteFile (
321
    UINT32                  FileId,
322
    void                    *Buffer,
323
    UINT32                  Length)
324
{
325
    UINT32                  Actual;
326
327
 
328
 
329
330
 
331
    if (Actual != Length)
332
    {
333
        FlFileError (FileId, ASL_MSG_WRITE);
334
        AslAbort ();
335
    }
336
}
337
338
 
339
 
340
 *
341
 * FUNCTION:    FlPrintFile
342
 *
343
 * PARAMETERS:  FileId              - Index into file info array
344
 *              Format              - Printf format string
345
 *              ...                 - Printf arguments
346
 *
347
 * RETURN:      None
348
 *
349
 * DESCRIPTION: Formatted write to an open file.
350
 *              NOTE: Aborts compiler on any error.
351
 *
352
 ******************************************************************************/
353
354
 
355
FlPrintFile (
356
    UINT32                  FileId,
357
    char                    *Format,
358
    ...)
359
{
360
    INT32                   Actual;
361
    va_list                 Args;
362
363
 
364
 
365
366
 
367
    va_end (Args);
368
369
 
370
    {
371
        FlFileError (FileId, ASL_MSG_WRITE);
372
        AslAbort ();
373
    }
374
}
375
376
 
377
 
378
 *
379
 * FUNCTION:    FlSeekFile
380
 *
381
 * PARAMETERS:  FileId              - Index into file info array
382
 *              Offset              - Absolute byte offset in file
383
 *
384
 * RETURN:      None
385
 *
386
 * DESCRIPTION: Seek to absolute offset
387
 *              NOTE: Aborts compiler on any error.
388
 *
389
 ******************************************************************************/
390
391
 
392
FlSeekFile (
393
    UINT32                  FileId,
394
    long                    Offset)
395
{
396
    int                     Error;
397
398
 
399
 
400
    if (Error)
401
    {
402
        FlFileError (FileId, ASL_MSG_SEEK);
403
        AslAbort ();
404
    }
405
}
406
407
 
408
 
409
 *
410
 * FUNCTION:    FlCloseFile
411
 *
412
 * PARAMETERS:  FileId              - Index into file info array
413
 *
414
 * RETURN:      None
415
 *
416
 * DESCRIPTION: Close an open file.  Aborts compiler on error
417
 *
418
 ******************************************************************************/
419
420
 
421
FlCloseFile (
422
    UINT32                  FileId)
423
{
424
    int                     Error;
425
426
 
427
 
428
    {
429
        return;
430
    }
431
432
 
433
    Gbl_Files[FileId].Handle = NULL;
434
435
 
436
    {
437
        FlFileError (FileId, ASL_MSG_CLOSE);
438
        AslAbort ();
439
    }
440
441
 
442
}
443
444
 
445
 
446
 *
447
 * FUNCTION:    FlSetLineNumber
448
 *
449
 * PARAMETERS:  Op        - Parse node for the LINE asl statement
450
 *
451
 * RETURN:      None.
452
 *
453
 * DESCRIPTION: Set the current line number
454
 *
455
 ******************************************************************************/
456
457
 
458
FlSetLineNumber (
459
    ACPI_PARSE_OBJECT       *Op)
460
{
461
462
 
463
    Gbl_LogicalLineNumber = (UINT32) Op->Asl.Value.Integer;
464
}
465
466
 
467
 
468
 *
469
 * FUNCTION:    FlAddIncludeDirectory
470
 *
471
 * PARAMETERS:  Dir             - Directory pathname string
472
 *
473
 * RETURN:      None
474
 *
475
 * DESCRIPTION: Add a directory the list of include prefix directories.
476
 *
477
 ******************************************************************************/
478
479
 
480
FlAddIncludeDirectory (
481
    char                    *Dir)
482
{
483
    ASL_INCLUDE_DIR         *NewDir;
484
    ASL_INCLUDE_DIR         *NextDir;
485
    ASL_INCLUDE_DIR         *PrevDir = NULL;
486
    UINT32                  NeedsSeparator = 0;
487
    size_t                  DirLength;
488
489
 
490
 
491
    if (!DirLength)
492
    {
493
        return;
494
    }
495
496
 
497
498
 
499
        (Dir[DirLength-1] != '\\'))
500
    {
501
        NeedsSeparator = 1;
502
    }
503
504
 
505
    NewDir->Dir = ACPI_ALLOCATE (DirLength + 1 + NeedsSeparator);
506
    strcpy (NewDir->Dir, Dir);
507
    if (NeedsSeparator)
508
    {
509
        strcat (NewDir->Dir, "/");
510
    }
511
512
 
513
     * Preserve command line ordering of -I options by adding new elements
514
     * at the end of the list
515
     */
516
    NextDir = Gbl_IncludeDirList;
517
    while (NextDir)
518
    {
519
        PrevDir = NextDir;
520
        NextDir = NextDir->Next;
521
    }
522
523
 
524
    {
525
        PrevDir->Next = NewDir;
526
    }
527
    else
528
    {
529
        Gbl_IncludeDirList = NewDir;
530
    }
531
}
532
533
 
534
 
535
 *
536
 * FUNCTION:    FlOpenIncludeWithPrefix
537
 *
538
 * PARAMETERS:  PrefixDir       - Prefix directory pathname. Can be a zero
539
 *                                length string.
540
 *              Filename        - The include filename from the source ASL.
541
 *
542
 * RETURN:      Valid file descriptor if successful. Null otherwise.
543
 *
544
 * DESCRIPTION: Open an include file and push it on the input file stack.
545
 *
546
 ******************************************************************************/
547
548
 
2216 Serge 549
FlOpenIncludeWithPrefix (
1498 serge 550
    char                    *PrefixDir,
551
    char                    *Filename)
552
{
553
    FILE                    *IncludeFile;
554
    char                    *Pathname;
555
556
 
557
 
558
559
 
560
561
 
562
    strcat (Pathname, Filename);
563
564
 
565
        Pathname);
566
567
 
568
569
 
570
    if (IncludeFile)
571
    {
572
        /* Push the include file on the open input file stack */
573
574
 
575
        return (IncludeFile);
576
    }
577
578
 
579
    return (NULL);
580
}
581
582
 
583
 
584
 *
585
 * FUNCTION:    FlOpenIncludeFile
586
 *
587
 * PARAMETERS:  Op        - Parse node for the INCLUDE ASL statement
588
 *
589
 * RETURN:      None.
590
 *
591
 * DESCRIPTION: Open an include file and push it on the input file stack.
592
 *
593
 ******************************************************************************/
594
595
 
596
FlOpenIncludeFile (
597
    ACPI_PARSE_OBJECT       *Op)
598
{
599
    FILE                    *IncludeFile;
600
    ASL_INCLUDE_DIR         *NextDir;
601
602
 
603
 
604
605
 
606
    {
607
        AslCommonError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN,
608
            Gbl_CurrentLineNumber, Gbl_LogicalLineNumber,
609
            Gbl_InputByteCount, Gbl_CurrentColumn,
610
            Gbl_Files[ASL_FILE_INPUT].Filename, " - Null parse node");
611
612
 
613
    }
614
615
 
616
     * Flush out the "include ()" statement on this line, start
617
     * the actual include file on the next line
618
     */
619
    ResetCurrentLineBuffer ();
620
    FlPrintFile (ASL_FILE_SOURCE_OUTPUT, "\n");
621
    Gbl_CurrentLineOffset++;
622
623
 
624
 
625
626
 
627
628
 
629
        (Op->Asl.Value.String[0] == '\\') ||
630
        (Op->Asl.Value.String[1] == ':'))
631
    {
632
        IncludeFile = FlOpenIncludeWithPrefix ("", Op->Asl.Value.String);
633
        if (!IncludeFile)
634
        {
635
            goto ErrorExit;
636
        }
637
        return;
638
    }
639
640
 
641
     * The include filename is not an absolute path.
642
     *
643
     * First, search for the file within the "local" directory -- meaning
644
     * the same directory that contains the source file.
645
     *
646
     * Construct the file pathname from the global directory name.
647
     */
648
    IncludeFile = FlOpenIncludeWithPrefix (Gbl_DirectoryPath, Op->Asl.Value.String);
649
    if (IncludeFile)
650
    {
651
        return;
652
    }
653
654
 
655
     * Second, search for the file within the (possibly multiple) directories
656
     * specified by the -I option on the command line.
657
     */
658
    NextDir = Gbl_IncludeDirList;
659
    while (NextDir)
660
    {
661
        IncludeFile = FlOpenIncludeWithPrefix (NextDir->Dir, Op->Asl.Value.String);
662
        if (IncludeFile)
663
        {
664
            return;
665
        }
666
667
 
668
    }
669
670
 
671
672
 
673
    sprintf (MsgBuffer, "%s, %s", Op->Asl.Value.String, strerror (errno));
674
    AslError (ASL_ERROR, ASL_MSG_INCLUDE_FILE_OPEN, Op, MsgBuffer);
675
}
676
677
 
678
 
679
 *
680
 * FUNCTION:    FlOpenInputFile
681
 *
682
 * PARAMETERS:  InputFilename       - The user-specified ASL source file to be
683
 *                                    compiled
684
 *
685
 * RETURN:      Status
686
 *
687
 * DESCRIPTION: Open the specified input file, and save the directory path to
688
 *              the file so that include files can be opened in
689
 *              the same directory.
690
 *
691
 ******************************************************************************/
692
693
 
694
FlOpenInputFile (
695
    char                    *InputFilename)
696
{
697
698
 
699
700
 
701
    AslCompilerin = Gbl_Files[ASL_FILE_INPUT].Handle;
702
703
 
704
}
705
706
 
707
 
708
 *
709
 * FUNCTION:    FlOpenAmlOutputFile
710
 *
711
 * PARAMETERS:  FilenamePrefix       - The user-specified ASL source file
712
 *
713
 * RETURN:      Status
714
 *
715
 * DESCRIPTION: Create the output filename (*.AML) and open the file.  The file
716
 *              is created in the same directory as the parent input file.
717
 *
718
 ******************************************************************************/
719
720
 
721
FlOpenAmlOutputFile (
722
    char                    *FilenamePrefix)
723
{
724
    char                    *Filename;
725
726
 
727
 
728
729
 
730
    if (!Filename)
731
    {
732
        /* Create the output AML filename */
733
734
 
735
        if (!Filename)
736
        {
737
            AslCommonError (ASL_ERROR, ASL_MSG_OUTPUT_FILENAME,
738
                0, 0, 0, 0, NULL, NULL);
739
            return (AE_ERROR);
740
        }
741
    }
742
743
 
744
745
 
746
    return (AE_OK);
747
}
748
749
 
750
 
751
 *
752
 * FUNCTION:    FlOpenMiscOutputFiles
753
 *
754
 * PARAMETERS:  FilenamePrefix       - The user-specified ASL source file
755
 *
756
 * RETURN:      Status
757
 *
758
 * DESCRIPTION: Create and open the various output files needed, depending on
759
 *              the command line options
760
 *
761
 ******************************************************************************/
762
763
 
764
FlOpenMiscOutputFiles (
765
    char                    *FilenamePrefix)
766
{
767
    char                    *Filename;
768
769
 
770
 
2216 Serge 771
1498 serge 772
 
2216 Serge 773
    {
1498 serge 774
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_HEX_DUMP);
2216 Serge 775
        if (!Filename)
776
        {
777
            AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
778
                0, 0, 0, 0, NULL, NULL);
779
            return (AE_ERROR);
780
        }
781
782
 
783
784
 
785
786
 
787
        AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT);
788
    }
1498 serge 789
790
 
2216 Serge 791
1498 serge 792
 
2216 Serge 793
    {
794
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_DEBUG);
795
        if (!Filename)
796
        {
797
            AslCommonError (ASL_ERROR, ASL_MSG_DEBUG_FILENAME,
798
                0, 0, 0, 0, NULL, NULL);
799
            return (AE_ERROR);
800
        }
801
802
 
803
804
 
805
806
 
807
        Gbl_Files[ASL_FILE_DEBUG_OUTPUT].Handle =
808
            freopen (Filename, "w+t", stderr);
809
810
 
811
        AslCompilerFileHeader (ASL_FILE_DEBUG_OUTPUT);
812
    }
813
814
 
1498 serge 815
816
 
817
    {
818
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_LISTING);
819
        if (!Filename)
820
        {
821
            AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
822
                0, 0, 0, 0, NULL, NULL);
823
            return (AE_ERROR);
824
        }
825
826
 
827
828
 
829
830
 
831
        AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT);
832
    }
833
834
 
2216 Serge 835
    {
836
        return (AE_OK);
837
    }
838
839
 
840
841
 
842
    if (!Filename)
843
    {
844
        AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
845
            0, 0, 0, 0, NULL, NULL);
846
        return (AE_ERROR);
847
    }
848
849
 
850
     * Open the source output file, binary mode (so that LF does not get
851
     * expanded to CR/LF on some systems, messing up our seek
852
     * calculations.)
853
     */
854
    FlOpenFile (ASL_FILE_SOURCE_OUTPUT, Filename, "w+b");
855
856
 
1498 serge 857
858
 
859
    {
860
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_SOURCE);
861
        if (!Filename)
862
        {
863
            AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
864
                0, 0, 0, 0, NULL, NULL);
865
            return (AE_ERROR);
866
        }
867
868
 
869
870
 
871
872
 
873
        AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT);
874
    }
875
876
 
877
878
 
879
    {
880
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_SOURCE);
881
        if (!Filename)
882
        {
883
            AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
884
                0, 0, 0, 0, NULL, NULL);
885
            return (AE_ERROR);
886
        }
887
888
 
889
890
 
891
892
 
893
        AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT);
894
        AslCompilerFileHeader (ASL_FILE_C_SOURCE_OUTPUT);
895
    }
896
897
 
898
899
 
900
    {
901
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_ASM_INCLUDE);
902
        if (!Filename)
903
        {
904
            AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
905
                0, 0, 0, 0, NULL, NULL);
906
            return (AE_ERROR);
907
        }
908
909
 
910
911
 
912
913
 
914
        AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT);
915
    }
916
917
 
918
919
 
920
    {
921
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_C_INCLUDE);
922
        if (!Filename)
923
        {
924
            AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
925
                0, 0, 0, 0, NULL, NULL);
926
            return (AE_ERROR);
927
        }
928
929
 
930
931
 
932
933
 
934
        AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT);
935
        AslCompilerFileHeader (ASL_FILE_C_INCLUDE_OUTPUT);
936
    }
937
938
 
939
940
 
941
    {
942
        Filename = FlGenerateFilename (FilenamePrefix, FILE_SUFFIX_NAMESPACE);
943
        if (!Filename)
944
        {
945
            AslCommonError (ASL_ERROR, ASL_MSG_LISTING_FILENAME,
946
                0, 0, 0, 0, NULL, NULL);
947
            return (AE_ERROR);
948
        }
949
950
 
951
952
 
953
954
 
955
        AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT);
956
    }
957
958
 
959
}
960
961
 
962
 
963
/*******************************************************************************
964
 *
965
 * FUNCTION:    FlParseInputPathname
966
 *
967
 * PARAMETERS:  InputFilename       - The user-specified ASL source file to be
968
 *                                    compiled
969
 *
970
 * RETURN:      Status
971
 *
972
 * DESCRIPTION: Split the input path into a directory and filename part
973
 *              1) Directory part used to open include files
974
 *              2) Filename part used to generate output filenames
975
 *
976
 ******************************************************************************/
977
978
 
979
FlParseInputPathname (
980
    char                    *InputFilename)
981
{
982
    char                    *Substring;
983
984
 
985
 
986
    {
987
        return (AE_OK);
988
    }
989
990
 
991
992
 
993
    if (!Gbl_DirectoryPath)
994
    {
995
        return (AE_NO_MEMORY);
996
    }
997
998
 
999
    if (!Substring)
1000
    {
1001
        Substring = strrchr (Gbl_DirectoryPath, '/');
1002
        if (!Substring)
1003
        {
1004
            Substring = strrchr (Gbl_DirectoryPath, ':');
1005
        }
1006
    }
1007
1008
 
1009
    {
1010
        Gbl_DirectoryPath[0] = 0;
1011
        if (Gbl_UseDefaultAmlFilename)
1012
        {
1013
            Gbl_OutputFilenamePrefix = strdup (InputFilename);
1014
        }
1015
    }
1016
    else
1017
    {
1018
        if (Gbl_UseDefaultAmlFilename)
1019
        {
1020
            Gbl_OutputFilenamePrefix = strdup (Substring + 1);
1021
        }
1022
        *(Substring+1) = 0;
1023
    }
1024
1025
 
1026
}
1027
#endif
1028