DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦e4f1f2c54⟧ TextFile

    Length: 14080 (0x3700)
    Types: TextFile
    Names: »LNKP1-1.PIS«

Derivation

└─⟦91467e717⟧ Bits:30009789/_.ft.Ibm2.50007348.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »LNKP1-1.PIS« 

TextFile


      PROCEDURE GetInputFiles(VAR Status:StatusType
                            );

         VAR
            InputFile: FileType;
            FileNo: FileNameTableIndexType;
            StatusSet: SET OF StatusType;

         PROCEDURE ValidateFileFormat(VAR Status: StatusType
                                     ;VAR F: FileType
                                     ;    Format: OF_FormatType
                                     );

            VAR
               OFF_Format: OF_FormatType;

           BEGIN (*VALIDATEFILEFORMAT*)
            FGi32(Status, F, OFF_Format);
            IF (Status = Success) and (OFF_Format <> Format) THEN
               Status := BadFileFormat;
            IF test((.0,16,19.)) THEN
              BEGIN
               write(TestOut, 'GetFFvalid   '); TSTstat(Status); TSTindt;
               writeln(TestOut, 'OFF_Format=', OFF_Format);
              END;
           END;  (*VALIDATEFILEFORMAT*)

         PROCEDURE GetModules(VAR Status: StatusType
                             ;    FileNumber: FileNameTableIndexType
                             ;VAR Fl: FileType
                             ;    StartAddressOfNextModule: FileAddressType
                             );

            VAR
               StatusSet: SET OF StatusType;

            PROCEDURE ValidateModuleFormat(VAR Status: StatusType
                                          ;VAR F: FileType
                                          ;    Format: OM_FormatType
                                          );

               VAR
                  OMF_Format: OM_FormatType;

              BEGIN (*VALIDATEMODULEFORMAT*)
               FGi32(Status, F, OMF_Format);
               IF (Status = Success) and (OMF_Format <> Format) THEN
                  Status := BadModuleFormat;
               IF test((.0,16,19.)) THEN
                 BEGIN
                  write(TestOut, 'GetMFvalid   '); TSTstat(Status); TSTindt;
                  writeln(TestOut, 'OMF_Format=',OMF_Format);
                 END;
              END;  (*VALIDATEMODULEFORMAT*)


            PROCEDURE GetModuleHeader(VAR Status: StatusType
                                     ;    FileNo:
                                             FileNameTableIndexType
                                     ;VAR Fl: FileType
                                     ;VAR StartAddressOfNextModule:
                                             FileAddressType
                                     );

               VAR
                  StatusSet: SET OF StatusType;
                  SegmentNo: SegmentNoType;
                  SymbolNo: SymbolTableIndexType;
                  ModuleNo: ModuleTableIndexType;
                  MdtRec: ModuleTableRecordType;
                  NooExportSymbols: i32;

               PROCEDURE GetINX(VAR Status: StatusType
                               ;VAR MdtRec: ModuleTableRecordType
                               ;VAR Fl: FileType
                               ;VAR StartAddressOfNextModule:
                                          FileAddressType
                               ;VAR NooExportSymbols: i32
                               );

                  VAR
                     OMH_ModuleSize: i32;
                     OMH_ModuleName: ModuleNameType;
                     Dummy32: i32;

                 BEGIN (*GETINX*)
                  WITH MdtRec DO
                    BEGIN
                     FGi32(Status, Fl, OMH_ModuleSize);
                     StartAddressOfNextModule :=
                           StartAddressOfNextModule + OMH_moduleSize;
                     CurrentFileAddress := StartAddressOfNextModule;
                     Referenced := false;
                     FGi32(Status, Fl, Dummy32);
                     NooSegments := Dummy32;
                     FGi32(Status, Fl, NooExportSymbols);
                     FGi32(Status, Fl, Dummy32);
                     NooExternalImportSymbols := Dummy32;
                     FGsym(Status, Fl, OMH_ModuleName);
                     IF Status = Success THEN
                        SBTEX(Status, ModuleNameReference, OMH_ModuleName,0,0);
                    END
                 END;  (*GETINX*)


               PROCEDURE GetSGDs(VAR Status: StatusType
                                ;    NooSegments: SegmentNoType
                                ;    ModuleNo: ModuleTableIndexType
                                ;VAR Fl: FileType
                                );

                  VAR
                     SegmentNo: SegmentNoType;
                     SGD_Record: ObjectRecordType;

                 BEGIN (*GETSEGMENTDESCRIPTORS*)
                  SegmentNo := 0;
                  WITH SGD_Record DO
                     WHILE (SegmentNo < NooSegments) and (Status = Success) DO
                       BEGIN
                        SegmentNo := SegmentNo + 1;
                        FGi32(Status, Fl, SGD_Image);
                        FGi32(Status, Fl, SGD_Rld);
                        FGi32(Status, Fl, SGD_IntImport);
                        FGi32(Status, Fl, SGD_NooIntImportSymbols);
                        IF Status = Success THEN
                           SCTP(Status, ModuleNo, SegmentNo, SGD_Record);
                        IF test((.0,16,19.)) THEN
                          BEGIN
                           write(TestOut, 'GetSGDs  '); TSTstat(Status); TSTln
                          END;
                       END
                 END;  (*GETSEGMENTDESCRIPTORS*)

               PROCEDURE GetEXP(VAR Status: StatusType
                               ;VAR Fl: FileType
                               ;VAR LinkHead: SymbolTableIndexType
                               ;    NooExportSymbols: i32
                               );

                  VAR
                     StatusSet: SET OF StatusType;
                     SymbolCountMax: i32;
                     EXP_Record: ObjectRecordType;
                     SymbolTableEntryNo: SymbolTableIndexType; (*DUMMY*)
                     Dummy8: i8;
                     Dummy32: i32;

                 BEGIN (*GETEXPORTLIST*)
                  StatusSet := (..);
                  LatestInsert := 0;
                  SymbolCountMax := CurrentSymbolCount + NooExportSymbols;
                  IF CurrentSymbolCount < SymbolCountMax THEN
                     WITH EXP_Record DO
                       BEGIN
                        FGi8( Status, Fl, Dummy8);
                        EXP_Record.EXP_RelocationIndicator := Dummy8;
                        FGi32(Status, Fl, EXP_Record.EXP_Item);
                        FGsym(Status, Fl, EXP_Record.EXP_SymbolName);
                        IF Status = Success THEN
                          BEGIN
                           SBTEX(Status
                                ,LinkHead
                                ,EXP_SymbolName
                                ,EXP_RelocationIndicator
                                ,EXP_Item
                                );
                           IF Status = DuplicateExportSymbol THEN
                              BEGIN
                               (*LOG*)
                              END;
                          END;
                     StatusSet := StatusSet + (.Status.);
                    END;
                  WHILE (Status in (.Success, DuplicateExportSymbol.)) and
                        (CurrentSymbolCount < SymbolCountMax) DO
                    BEGIN
                     FGi8( Status, Fl, Dummy8);
                     EXP_Record.EXP_RelocationIndicator := Dummy8;
                     FGi32(Status, Fl, EXP_Record.EXP_Item);
                     FGsym(Status, Fl, EXP_Record.EXP_SymbolName);
                     IF Status = Success THEN
                        WITH EXP_Record DO
                          BEGIN
                           SBTEX(Status
                                ,SymbolTableEntryNo
                                ,EXP_SymbolName
                                ,EXP_RelocationIndicator
                                ,EXP_Item
                                );
                           IF Status = DuplicateExportSymbol THEN
                              BEGIN
                               (*LOG*)
                              END;
                          END;
                     StatusSet := StatusSet + (.Status.)
                    END; (*WHILE ... DO*)
                  IF (Status = Success) and
                     (DuplicateExportSymbol in StatusSet) THEN
                     Status := DuplicateExportSymbol
                 END;  (*GETEXPORTLIST*)

               PROCEDURE GetEXI(VAR Status: StatusType
                               ;VAR Fl: FileType
                               ;    ModuleNo: ModuleTableIndexType
                               ;    NooExternalImportSymbols:
                                       ExternalImportTableIndexType
                               );

                  VAR
                     SymbolTableEntryNo: SymbolTableIndexType;
                     SymbolCountMax: i32;
                     EXI_SymbolName: SymbolNameType;

                 BEGIN (*GETEXTERNALIMPORTLIST*)
                  SymbolCountMax := CurExternalImportSymbolNo +
                                       NooExternalImportSymbols;
                  WHILE (Status in (.Success.)) and
                        (CurExternalImportSymbolNo < SymbolCountMax) DO
                    BEGIN
                     FGsym(Status, Fl, EXI_SymbolName);
                     IF Status = Success THEN
                        SBTIM(Status
                             ,SymbolTableEntryNo
                             ,EXI_SymbolName
                             );
                    END; (*WHILE ... DO*)
                 END;  (*GETEXTERNALIMPORTLIST*)



              BEGIN (*GETMODULEHEADER*)
               StatusSet := (..);
               MDTA(Status, ModuleNo, 1);
               IF Status = Success THEN
                 BEGIN
                  GetINX(Status, ModuleTable(.ModuleNo.), Fl
                        , StartAddressOfNextModule
                        , NooExportSymbols);
                  IF Status = Success THEN
                     WITH ModuleTable(.ModuleNo.) DO
                       BEGIN
                        FileNameReference := FileNo;
                        GetSGDs(Status
                               ,NooSegments
                               ,ModuleNo
                               ,Fl
                               );
                        IF Status = Success THEN
                          BEGIN
                           GetEXP(Status
                                 ,Fl
                                 ,SBTLinkHead
                                 ,NooExportSymbols
                                 );
                           IF Status in (.Success, DuplicateExportSymbol.) THEN
                             BEGIN
                              StatusSet := StatusSet + (.Status.);
                              EITOffset := CurExternalImportSymbolNo;
                              GetEXI(Status
                                    ,Fl
                                    ,ModuleNo
                                    ,NooExternalImportSymbols
                                    );
                             END
                          END
                       END;
                    END;
               IF (Status = Success) and
                  (DuplicateExportSymbol in StatusSet) THEN
                  Status := DuplicateExportSymbol;
               IF test((.0,6,16,19.)) THEN
                 BEGIN
                  write(TestOut, 'GetOMH   '); TSTstat(Status); TSTln;
                  TSTindt; TSTmdt(ModuleNo);
                 END;
              END;  (*GETMODULEHEADER*)

           BEGIN (*GETMODULES*)
            StatusSet := (..);
            WHILE (Status in (.Success
                             , DuplicateExportSymbol
                             , BadSymbolName
                             .)
                  ) DO
              BEGIN
               ValidateModuleFormat(Status, InputFile, OM_Format1);
               CASE Status OF
               Success:
                  GetModuleHeader(Status
                                 ,FileNumber
                                 ,InputFile
                                 ,StartAddressOfNextModule
                                 );
               BadModuleFormat:
                 BEGIN
                  (*Log error*)
                 END;
               OTHERWISE  (*UnexpectedEof*)
                 BEGIN END;
               END; (*CASE*)
               StatusSet := StatusSet + (.Status.)
              END; (*WHILE ... DO*)
            IF (Status = Success) and
               (DuplicateExportSymbol in StatusSet) THEN
               Status := DuplicateExportSymbol
           END;  (*GETMODULES*)

        BEGIN (*GETINPUTFILE*)
         StatusSet := (..);
         FOR FileNo := 1 TO CurFileNo DO
           BEGIN
            FilAsg(InputFile, FileNameTable(.FileNo.));
            FilRst(Status, InputFile);
            IF Status = Success THEN
              BEGIN
               ValidateFileFormat (Status, InputFile, OF_Format1);
               IF Status = Success THEN
                  GetModules(Status, FileNo, InputFile, 4)
               ELSE
                 BEGIN (*Log error*)
                 END;
              END
            ELSE
              BEGIN (*log error*)
              END;
            FilCLS(InputFile);
            StatusSet := StatusSet + (.Status.);
           END;
         IF StatusSet - (.Success.) <> (..) THEN
            Status := error;
        END;  (*GETINPUTFILE*)
«eof»