§1  IWF Metadata Harvester II  INTRODUCTION 1

1. Introduction. [LDF 2006.09.20.]

2. Copyright and licenses. [LDF 2006.10.23.]

The IWF Metadata Harvester is a package for metadata harvesting.

Copyright \begin{matrix}c \\ ◯ \end{matrix} 2006, 2007 IWF Wissen und Medien gGmbH

The author is Laurence D. Finston.

The IWF Metadata Harvester is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

The IWF Metadata Harvester is distributed in the hope that it will be useful, but WITHOUT ANY WAR-RANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the section ⟨ GNU General Public License 1715 ⟩ for more details.

You should have received a copy of the GNU General Public License along with the IWF Metadata Harvester; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

See the section ⟨ GNU Free Documentation License 1716 ⟩ for the copying conditions that apply to this document.

You should have received a copy of the GNU Free Documentation License along with the IWF Metadata Harvester Manual; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

The IWF Metadata Harvester is available for downloading from the following FTP server:

ftp://ftp.gwdg.de/pub/gnu2/iwfmdh/

Please send bug reports to lfinsto1@gwdg.de

The author can be contacted at:

Laurence D. Finston Kreuzbergring 41 D-37075 Goettingen Germany

Email: lfinsto1@gwdg.de
      s246794@stud.uni-goettingen.de

3. Formatting commands. [LDF 2006.09.20.] This section contains formatting commands. They don’t appear in the TEX output of CWEAVE.

4. File Lists. [LDF 2006.09.18.]

5. Source Files. [LDF 2006.09.18.]

2  SOURCE FILES  IWF Metadata Harvester II §5

To Do

[LDF 2006.09.21.] Combine the files containing the code for the header file and the file for each class, where I haven’t done this already.

6. Logical and Hierarchical Order. [LDF 2006.09.18.]

⟨ resource.web 22 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preprocessor macro definitions for resources
⟨ stdafx.web 9 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Main header file for ZTest
⟨ mainfrm.web 25 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CMainFrame
⟨ ztestdoc.web 47 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CZTestDoc
⟨ ztstview.web 68 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CZTestView
⟨ ztest.web 97 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CZTestApp and class CAboutDlg
⟨ dialogz1.web 134 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Dialog Z 1
⟨ scanner.web 177 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . The function yylex
⟨ zclient.web 188 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . class ZClient
⟨ ztstzoom.web 364 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . ZOOM functions
⟨ opstrmtp.web 384 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . struct Output Stream Type
⟨ picarcrd.web 395 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Pica Record
⟨ ctgcntnr.web 418 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Category Container
⟨ sbctgcnt.web 565 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Subcategory Container
⟨ dbcmmnd.web 764 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . struct Database Command
⟨ dbdspl.web 778 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . class DB Display

§7  IWF Metadata Harvester II  ODBC CLASSES 3

7. ODBC Classes. [LDF 2006.09.27.]

⟨ picacats.web 998 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class PICA Categories
⟨ picaflds.web 1019 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class PICA Fields
⟨ pccatfld.web 1040 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class PICA Categories PICA Fields
⟨ sources.web 1061 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Sources
⟨ records.web 1082 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Records
⟨ accnums.web 1103 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Access Numbers
⟨ callnums.web 1124 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Call Numbers
⟨ rccllnms.web 1145 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Call Numbers
⟨ exprnums.web 1166 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Exemplar Production Numbers
⟨ bibtyps.web 1208 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Bibliographic Types
⟨ bbtpcds.web 1187 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Bibliographic Type Codes
⟨ rcbbtyps.web 1229 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Bibliographic Types
⟨ physdesc.web 1250 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Physical Descriptions
⟨ rcphsdsc.web 1271 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Physical Descriptions
⟨ authors.web 1292 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Authors
⟨ recathrs.web 1313 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Authors
⟨ cntrbtrs.web 1334 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Contributors
⟨ rccntrbt.web 1355 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Contributors
⟨ mnttls.web 1376 ⟩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . class Main Titles
⟨ rcmnttls.web 1397 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Main Titles
⟨ contsums.web 1418 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Content Summaries
⟨ language.web 1439 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Languages
⟨ reclang.web 1460 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Languages
⟨ subjtyps.web 1481 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Subject Types
⟨ subjects.web 1502 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Subjects
⟨ recsubjs.web 1523 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Subjects
⟨ prmpttrn.web 1544 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Permutation Patterns
⟨ rmaccess.web 1565 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Remote Access
⟨ rcrmaccs.web 1586 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Remote Access
⟨ publshrs.web 1607 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Publishers
⟨ recpubs.web 1628 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Publishers
⟨ dbprovs.web 1649 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Database Providers
⟨ rcdbprov.web 1670 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Database Providers
⟨ tempids.web 1691 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Temp IDs

8. Alphabetical Order. [LDF 2006.09.18.]

⟨ accnums.web 1103 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Access Numbers
⟨ authors.web 1292 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Authors
⟨ bbtpcds.web 1187 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Bibliographic Type Codes
⟨ bibtyps.web 1208 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Bibliographic Types
⟨ callnums.web 1124 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Call Numbers

4  ALPHABETICAL ORDER  IWF Metadata Harvester II §8
⟨ contsums.web 1418 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Content Summaries
⟨ ctgcntnr.web 418 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Category Container
⟨ cntrbtrs.web 1334 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Contributors
⟨ dbcmmnd.web 764 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . struct Database Command
⟨ dbdspl.web 778 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . class DB Display
⟨ dbprovs.web 1649 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Database Providers
⟨ dialogz1.web 134 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Dialog Z 1
⟨ exprnums.web 1166 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Exemplar Production Numbers
⟨ language.web 1439 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Languages
⟨ mainfrm.web 25 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CMainFrame
⟨ mnttls.web 1376 ⟩. . . . . . . . . . . . . . . . . . . . . . . . . . . . . class Main Titles
⟨ opstrmtp.web 384 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . struct Output Stream Type
⟨ pccatfld.web 1040 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class PICA Categories PICA Fields
⟨ physdesc.web 1250 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Physical Descriptions
⟨ picacats.web 998 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class PICA Categories
⟨ picaflds.web 1019 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class PICA Fields
⟨ picarcrd.web 395 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Pica Record
⟨ prmpttrn.web 1544 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Permutation Patterns
⟨ publshrs.web 1607 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Publishers
⟨ rcbbtyps.web 1229 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Bibliographic Types
⟨ rccllnms.web 1145 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Call Numbers
⟨ rccntrbt.web 1355 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Contributors
⟨ rcdbprov.web 1670 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Database Providers
⟨ rcmnttls.web 1397 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Main Titles
⟨ rcphsdsc.web 1271 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Physical Descriptions
⟨ rcrmaccs.web 1586 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Remote Access
⟨ recathrs.web 1313 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Authors
⟨ reclang.web 1460 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Languages
⟨ records.web 1082 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Records
⟨ recpubs.web 1628 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Publishers
⟨ recsubjs.web 1523 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Records Subjects
⟨ resource.web 22 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . Preprocessor macro definitions for resources
⟨ rmaccess.web 1565 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Remote Access
⟨ sbctgcnt.web 565 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Subcategory Container
⟨ scanner.web 177 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . The function yylex
⟨ sources.web 1061 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Sources
⟨ stdafx.web 9 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Main header file for ZTest
⟨ subjects.web 1502 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Subjects
⟨ subjtyps.web 1481 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . class Subject Types
⟨ tempids.web 1691 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . class Temp IDs
⟨ zclient.web 188 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . class ZClient
⟨ ztest.web 97 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CZTestApp and class CAboutDlg

§8  IWF Metadata Harvester II  ALPHABETICAL ORDER 5
⟨ ztestdoc.web 47 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CZTestDoc
⟨ ztstview.web 68 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . . class CZTestView
⟨ ztstzoom.web 364 ⟩ . . . . . . . . . . . . . . . . . . . . . . . . . . . ZOOM functions

9. stdafx (stdafx.web). [LDF 2006.10.05.]

Log

[LDF 2006.10.05.] Created this file. It contains code formerly in stdafx.h and stdafx.cpp.

⟨ stdafx.web 9 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 20.

10. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ ≡ #pragma once

See also sections 27, 49, 70, 179, 190, 385, 396, 419, 566, 765, 779, 999, 1020, 1041, 1062, 1083, 1104, 1125, 1146, 1167, 1188, 1209, 1230, 1251, 1272, 1293, 1314, 1335, 1356, 1377, 1398, 1419, 1440, 1461, 1482, 1503, 1524, 1545, 1566, 1587, 1608, 1629, 1650, 1671, and 1692.

This code is used in sections 21, 46, 67, 96, 187, 363, 393, 416, 563, 762, 776, 995, 1017, 1038, 1059, 1080, 1101, 1122, 1143, 1164, 1185, 1206, 1227, 1248, 1269, 1290, 1311, 1332, 1353, 1374, 1395, 1416, 1437, 1458, 1479, 1500, 1521, 1542, 1563, 1584, 1605, 1626, 1647, 1668, 1689, and 1710.

11. Preprocessor macro definitions. ⟨ Preprocessor macro definitions 11 ⟩ ≡ #ifndef #define #endif #ifndef #define ^{#}0400 #endif #ifndef #define ^{#}0400 #endif #ifndef #define ^{#}0410 #endif #ifndef #define ^{#}0400 #endif #define #define

See also sections 28, 50, 71, and 99. This code is used in sections 21, 45, 66, 95, and 132.

12. Include files in stdafx.h.

6  INCLUDE FILES IN STDAFX.H  IWF Metadata Harvester II §13

13. Windows and Visual Studio headers. [LDF Undated.] ⟨ Include files 13 ⟩ ≡ #include #include #include #include #ifndef #include #endif #include #include

See also sections 14, 15, 16, 17, 26, 48, 69, 98, 135, 178, 189, 365, 386, 397, 421, 568, 767, 781, 1001, 1022, 1043, 1064, 1085, 1106, 1127, 1148, 1169, 1190, 1211, 1232, 1253, 1274, 1295, 1316, 1337, 1358, 1379, 1400, 1421, 1442, 1463, 1484, 1505, 1526, 1547, 1568, 1589, 1610, 1631, 1652, 1673, and 1694.

This code is used in sections 21, 45, 66, 95, 132, 175, 186, 362, 382, 394, 417, 564, 763, 777, 996, 1018, 1039, 1060, 1081, 1102, 1123, 1144, 1165, 1186, 1207, 1228, 1249, 1270, 1291, 1312, 1333, 1354, 1375, 1396, 1417, 1438, 1459, 1480, 1501, 1522, 1543, 1564, 1585, 1606, 1627, 1648, 1669, 1690, and 1711.

14. C^{++} standard library headers. [LDF Undated.] ⟨ Include files 13 ⟩ +≡ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

15. Headers for types, variables, and constants defined in ZTest. [LDF 2006.09.06.]

Log

[LDF 2006.09.06.] Added this section with the # include command for opstrmtp.h, which contains the declaration of struct Output Stream Type.

[LDF 2006.10.23.] Now including private.h.

⟨ Include files 13 ⟩ +≡ #include #include

§16  IWF Metadata Harvester II  INCLUDE FILES IN STDAFX.H 7

16. Headers for classes derived from CRecordset. [LDF 2006.07.24.]

Log

[LDF 2006.08.24.] Now including mnttls.h and rcmnttls.h. They contain the class declarations for Main Titles and Records Main Titles, respectively. [LDF 2006.08.24.] Now including subjects.h and recsubjs.h. They contain the class declarations for Subjects and Records Subjects, respectively. [LDF 2006.08.24.] Now including subjtyps.h. It contains the class declaration for Subject Types. [LDF 2006.08.24.] Now including accnums.h. It contains the class declaration for Access Numbers. [LDF 2006.08.24.] Now including bibtyps.h and rcbbtyps.h. They contain the class declarations for Bibliographic Types and Records Bibliographic Types, respectively. [LDF 2006.08.24.] Now including callnums.h and rccllnms.h. They contain the class declarations for Call Numbers and Records Call Numbers, respectively. [LDF 2006.08.24.] Now including exprnums.h. It contains the class declaration for Exemplar Production Numbers. [LDF 2006.08.24.] Now including prmpttrn.h. It contains the class declaration for Permutation Patterns. [LDF 2006.08.25.] Now including rmaccess.h. It contains the class declaration for Remote Access. [LDF 2006.08.25.] Now including rcrmaccs.h. It contains the class declaration for Records Remote Access. [LDF 2006.08.25.] Now including picacats.h. It contains the class declaration for PICA Categories. [LDF 2006.08.25.] Now including picaflds.h. It contains the class declaration for PICA Fields. [LDF 2006.08.25.] Now including pccatfld.h. It contains the class declaration for PICA Categories PICA Fields. [LDF 2006.08.25.] Now including physdesc.h. It contains the class declaration for Physical Descriptions. [LDF 2006.08.25.] Now including rcphsdsc.h. It contains the class declaration for Records Physical Descriptions. [LDF 2006.08.25.] Now including language.h. It contains the class declaration for Languages. [LDF 2006.08.25.] Now including reclang.h. It contains the class declaration for Records Languages. [LDF 2006.08.28.] Now including publshrs.h. It contains the class declaration for Publishers. [LDF 2006.08.28.] Now including recpubs.h. It contains the class declaration for Records Publishers. [LDF 2006.08.28.] Now including dbprovs.h. It contains the class declaration for Database Providers. [LDF 2006.08.28.] Now including rcdbprov.h. It contains the class declaration for Records Database Providers. [LDF 2006.09.06.] Now including bbtpcds.h. It contains the class declaration for Bibliographic Type Codes. [LDF 2006.09.07.] Now including contsums.h. It contains the class declaration for Content Summaries.

⟨ Include files 13 ⟩ +≡ #include /∗ Sources ∗/ #include /∗ Records ∗/ #include /∗ Temp IDs ∗/ #include /∗ Authors ∗/ #include /∗ Records Authors ∗/ #include /∗ Contributors ∗/ #include /∗ Records Contributors ∗/ #include /∗ Main Titles ∗/ #include /∗ Records Main Titles ∗/ #include /∗ Subjects ∗/ #include /∗ Records Subjects ∗/ #include /∗ Subject Types ∗/ #include /∗ Access Numbers ∗/ #include /∗ Exemplar Production Numbers ∗/ #include /∗ Bibliographic Type Codes ∗/ #include /∗ Bibliographic Types ∗/ #include /∗ Records Bibliographic Types ∗/ #include /∗ Call Numbers ∗/ #include /∗ Records Call Numbers ∗/ #include /∗ Permutation Patterns ∗/ #include /∗ Remote Access ∗/ #include /∗ Records Remote Access ∗/ #include /∗ PICA Categories ∗/ #include /∗ PICA Fields ∗/ #include /∗ PICA Categories PICA Fields ∗/ #include /∗ Physical Descriptions ∗/ #include /∗ Records Physical Descriptions ∗/ #include /∗ Languages ∗/ #include /∗ Records Languages ∗/ #include /∗ Publishers ∗/ #include /∗ Records Publishers ∗/ #include /∗ Database Providers ∗/ #include /∗ Records Database Providers ∗/ #include /∗ Content Summaries ∗/

§17  IWF Metadata Harvester II  INCLUDE FILES IN STDAFX.H 9

17. Header files for types declared in ZTest. [LDF Undated.]

Log

[LDF 2006.07.20.] Now including Subcategory_Container.h.

[LDF 2006.08.23.] Now including dbdspl.h.

[LDF 2006.10.05.] Replaced ldf_zoomtst with ztstzoom.h.

⟨ Include files 13 ⟩ +≡ #include #include #include /∗ Database Command ∗/ #include /∗ Subcategory Container ∗/ #include /∗ Category Container ∗/ #include /∗ Pica Record ∗/ #include /∗ ZClient ∗/ #include /∗ DB Display ∗/

18. Global variables. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this section with the extern declaration of CMutex time mutex .

[LDF 2006.12.11.] Added the extern declaration of string copyright html str .

⟨ Global variables 18 ⟩ ≡ extern CMutex time mutex ; extern string copyright html str ;

See also section 127. This code is used in sections 21 and 132.

19. Putting stdafx.web together.

20. This is what’s compiled. [LDF Undated.] #include

  ⟨ stdafx.web 9 ⟩

10  PUTTING STDAFX.WEB TOGETHER  IWF Metadata Harvester II §21

21. This is what’s written to stdafx.h. ⟨ 21 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ Preprocessor macro definitions 11 ⟩ ⟨ Include files 13 ⟩ ⟨ Global variables 18 ⟩

22. Preprocessor macro definitions for resources (resource.web). [LDF 2006.10.12.]

Log

[LDF 2006.10.12.] Created this file. It contains code formerly in resource.h.

⟨ resource.web 22 ⟩ ≡ /∗ Empty section for use in cross-references. ∗/

This code is cited in sections 6, 8, and 1717. This code is used in section 1717.

23. Putting resource.web together.

§24  IWF Metadata Harvester II  PUTTING RESOURCE.WEB TOGETHER 11

24. This is what’s written to resource.h. ⟨ 24 ⟩ ≡

\underline{\overline{}}/∗ Microsoft Visual C++ generated include file. ∗/ /∗ Used by ZTest.rc ∗/ /∗ ∗/

#define 100 #define 100 #define 128 #define IDR ZTestTYPE 129 #define 131 #define 1000 #define 1002 #define 1003 #define 1004 #define 1005 #define 1006 #define 1007 #define 1008 #define 1012 #define 1014 #define 1014 /∗ Next default values for new objects ∗/ #ifdef #ifndef #define 132 #define 32771 #define 1015 #define 101 #endif #endif

25. CMainFrame (mainfrm.web). [LDF 2006.10.12.]

Log

[LDF 2006.10.12.] Created this file. It contains code formerly in MainFrm.h and MainFrm.cpp.

⟨ mainfrm.web 25 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 45.

26. Include files. [LDF Undated.] ⟨ Include files 13 ⟩ +≡ #include #include

27. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

28. Preprocessor macro definitions. [LDF Undated.] ⟨ Preprocessor macro definitions 11 ⟩ +≡

12  PREPROCESSOR MACRO DEFINITIONS  IWF Metadata Harvester II §28

#ifdef #define new #endif

29. Declare class CMainFrame. [LDF Undated.] ⟨ Declare class CMainFrame 29 ⟩ ≡

class CMainFrame : public CFrameWnd {

public: ⟨ Declare public CMainFrame functions 34 ⟩

protected: CStatusBar m wndStatusBar ; CToolBar m wndToolBar ; ⟨ Declare protected CMainFrame functions 32 ⟩ ( )

};

This code is used in section 46.

30. Declare static indicators array. [LDF Undated.] ⟨ Declare static indicators array. 30 ⟩ ≡

static UINT indicators [ ] = { , , ,

, };

This code is used in section 45.

31. Functions. [LDF 2006.10.12.]

32. Constructor. [LDF Undated.] ⟨ Declare protected CMainFrame functions 32 ⟩ ≡

CMainFrame(void);

(CMainFrame)

See also section 38. This code is used in section 29.

33. ⟨ Define CMainFrame functions 33 ⟩ ≡

CMainFrame ::CMainFrame(void)

{

return; }

See also sections 35, 37, 39, 41, and 43. This code is used in section 45.

34. Destructor. [LDF Undated.] ⟨ Declare public CMainFrame functions 34 ⟩ ≡

virtual ∼CMainFrame(void);

See also sections 36, 40, and 42. This code is used in section 29.

§35  IWF Metadata Harvester II  DESTRUCTOR 13

35. ⟨ Define CMainFrame functions 33 ⟩ +≡

CMainFrame ::∼CMainFrame(void)

{

return; }

36. Pre-Create Window. [LDF Undated.] ⟨ Declare public CMainFrame functions 34 ⟩ +≡

virtual BOOL PreCreateWindow (CREATESTRUCT &cs );

37. ⟨ Define CMainFrame functions 33 ⟩ +≡

BOOL CMainFrame ::PreCreateWindow (CREATESTRUCT &cs )

{ if (¬CFrameWnd ::PreCreateWindow (cs )) return ; return ;

}

38. On Create. . [LDF Undated.] ⟨ Declare protected CMainFrame functions 32 ⟩ +≡

afx msg int OnCreate(LPCREATESTRUCT lpCreateStruct );

39. ⟨ Define CMainFrame functions 33 ⟩ +≡

int CMainFrame ::OnCreate(LPCREATESTRUCT lpCreateStruct )

{ if (CFrameWnd ::OnCreate(lpCreateStruct ) ≡ −1) return −1; if (¬m wndToolBar .CreateEx (this ,

,  |  |  |  |  |
|  ) ∨ ¬m wndToolBar .LoadToolBar (  )) {

      (  ␣       ␣     ␣        ␣  );

return −1; /∗ Fehler bei Erstellung ∗/ } if (¬m wndStatusBar .Create(this ) ∨ ¬m wndStatusBar .SetIndicators (indicators , sizeof

(indicators )/sizeof (UINT))) {

      (  ␣       ␣     ␣        ␣  );

return −1; /∗ Fehler bei Erstellung ∗/ } m wndToolBar .EnableDocking ( ); EnableDocking ( ); DockControlBar (&m wndToolBar ); return 0;

} /∗ End of CMainFrame ::OnCreate definition. ∗/

40. Assert Valid. [LDF Undated.] ⟨ Declare public CMainFrame functions 34 ⟩ +≡ #ifdef

14  ASSERT VALID  IWF Metadata Harvester II §41

virtual void AssertValid (void) const; #endif 41. ⟨ Define CMainFrame functions 33 ⟩ +≡ #ifdef

void CMainFrame ::AssertValid (void) const {

CFrameWnd ::AssertValid ( ); }

#endif

42. Dump. [LDF Undated.] ⟨ Declare public CMainFrame functions 34 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

43. ⟨ Define CMainFrame functions 33 ⟩ +≡ #ifdef

void CMainFrame ::Dump(CDumpContext &dc) const {

CFrameWnd ::Dump(dc); }

#endif

44. Putting CMainFrame together.

45. This is what’s compiled.

⟨ Include files 13 ⟩

⟨ mainfrm.web 25 ⟩

⟨ Preprocessor macro definitions 11 ⟩ (CMainFrame, CFrameWnd) (CMainFrame, CFrameWnd) ( ) ( ) ⟨ Declare static indicators array. 30 ⟩ ⟨ Define CMainFrame functions 33 ⟩

§46  IWF Metadata Harvester II  PUTTING CMAINFRAME TOGETHER 15

46. This is what’s written to mainfrm.h. ⟨ 46 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ Declare class CMainFrame 29 ⟩

47. CZTestDoc (ztestdoc.web). [LDF 2006.10.11.]

Log

[LDF 2006.10.11.] Created this file. It contains code formerly in ZTestDoc.h and ZTestDoc.cpp.

⟨ ztestdoc.web 47 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 66.

48. Include files. ⟨ Include files 13 ⟩ +≡ #include #include

49. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

50. Preprocessor macro definitions. ⟨ Preprocessor macro definitions 11 ⟩ +≡ #ifdef #define new #endif

51. Declare class CZTestDoc. [LDF Undated.] ⟨ Declare class CZTestDoc 51 ⟩ ≡

class CZTestDoc : public CDocument {

protected: ⟨ Declare protected CZTestDoc functions 53 ⟩

public: ⟨ Declare public CZTestDoc functions 55 ⟩

protected: ( )

};

This code is used in section 67.

52. Functions. [LDF 2006.10.11.]

53. Constructor. ⟨ Declare protected CZTestDoc functions 53 ⟩ ≡

CZTestDoc(void); (CZTestDoc)

This code is used in section 51.

16  CONSTRUCTOR  IWF Metadata Harvester II §54

54. ⟨ Define CZTestDoc functions 54 ⟩ ≡

CZTestDoc ::CZTestDoc( )

{

return; }

See also sections 56, 58, 60, 62, and 64. This code is used in section 66.

55. Destructor. ⟨ Declare public CZTestDoc functions 55 ⟩ ≡

virtual ∼CZTestDoc(void);

See also sections 57, 59, 61, and 63. This code is used in section 51.

56. ⟨ Define CZTestDoc functions 54 ⟩ +≡

CZTestDoc ::∼CZTestDoc( )

{

return; }

57. On New Document. [LDF Undated.] ⟨ Declare public CZTestDoc functions 55 ⟩ +≡

virtual BOOL OnNewDocument ( );

58. ⟨ Define CZTestDoc functions 54 ⟩ +≡

BOOL CZTestDoc ::OnNewDocument ( )

{ if (¬CDocument ::OnNewDocument ( )) return ; return ;

}

59. Serialize. [LDF Undated.] ⟨ Declare public CZTestDoc functions 55 ⟩ +≡

virtual void Serialize(CArchive &ar );

§60  IWF Metadata Harvester II  SERIALIZE 17

60. ⟨ Define CZTestDoc functions 54 ⟩ +≡

void CZTestDoc ::Serialize(CArchive &ar )

{ if (ar .IsStoring ( )) { /∗ TODO: Hier Code zum Speichern einfügen ∗/ } else { /∗ TODO: Hier Code zum Laden einfügen ∗/ }

}

61. Assert Valid. [LDF Undated.] ⟨ Declare public CZTestDoc functions 55 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

62. ⟨ Define CZTestDoc functions 54 ⟩ +≡ #ifdef

void CZTestDoc ::AssertValid ( ) const

{

CDocument ::AssertValid ( ); }

#endif

63. Dump. [LDF Undated.] ⟨ Declare public CZTestDoc functions 55 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

64. ⟨ Define CZTestDoc functions 54 ⟩ +≡ #ifdef

void CZTestDoc ::Dump(CDumpContext &dc) const {

CDocument ::Dump(dc); }

#endif

65. Putting CZTestDoc together.

66. This is what’s compiled.

⟨ Include files 13 ⟩

  ⟨ ztestdoc.web 47 ⟩

(CZTestDoc, CDocument)

(CZTestDoc, CDocument)

( )

⟨ Preprocessor macro definitions 11 ⟩

⟨ Define CZTestDoc functions 54 ⟩

18  PUTTING CZTESTDOC TOGETHER  IWF Metadata Harvester II §67

67. This is what’s written to ztestdoc.h. ⟨ 67 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ Declare class CZTestDoc 51 ⟩

68. CZTestView (ztstview.web). [LDF 2006.10.11.]

Log

[LDF 2006.10.11.] Created this file. It contains code formerly in ZTestView.h and ZTestView.cpp.

⟨ ztstview.web 68 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 95.

69. Include files. ⟨ Include files 13 ⟩ +≡ #include #include #include

70. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

71. Preprocessor macro definitions. ⟨ Preprocessor macro definitions 11 ⟩ +≡ #ifdef #define new #endif

72. Declare class CZTestView. [LDF Undated.] ⟨ Declare class CZTestView 72 ⟩ ≡

class CZTestView : public CView {

protected: ⟨ Declare protected CZTestView functions 74 ⟩

public: ⟨ Declare public CZTestView functions 76 ⟩

protected: ( )

};

This code is used in section 96.

73. Functions. [LDF 2006.10.11.]

74. Constructor. ⟨ Declare protected CZTestView functions 74 ⟩ ≡

CZTestView( ); (CZTestView)

See also sections 84, 86, and 88. This code is used in section 72.

§75  IWF Metadata Harvester II  CONSTRUCTOR 19

75. ⟨ Define CZTestView functions 75 ⟩ ≡

CZTestView ::CZTestView(void)

{

return; }

See also sections 77, 79, 81, 83, 85, 87, 89, 91, and 93. This code is used in section 95.

76. Destructor. [LDF Undated.] ⟨ Declare public CZTestView functions 76 ⟩ ≡

virtual ∼CZTestView(void);

See also sections 78, 80, 82, 90, and 92. This code is used in section 72.

77. ⟨ Define CZTestView functions 75 ⟩ +≡

CZTestView ::∼CZTestView(void)

{

return; }

78. Get Document. [LDF Undated.] ⟨ Declare public CZTestView functions 76 ⟩ +≡

CZTestDoc ∗GetDocument (void) const;

79. ⟨ Define CZTestView functions 75 ⟩ +≡ #ifndef

inline CZTestDoc ∗CZTestView ::GetDocument (void) const

{

return reinterpret cast⟨CZTestDoc ∗⟩(m pDocument ); }

#endif #ifdef

CZTestDoc ∗CZTestView ::GetDocument ( ) const /∗ Nicht-Debugversion ist inline ∗/ {

(m pDocument IsKindOf ( (CZTestDoc))); return (CZTestDoc ∗) m pDocument ;

} #endif

80. On Draw. [LDF Undated.] ⟨ Declare public CZTestView functions 76 ⟩ +≡

virtual void OnDraw (CDC ∗pDC );

20  ON DRAW  IWF Metadata Harvester II §81

81. ⟨ Define CZTestView functions 75 ⟩ +≡

void CZTestView ::OnDraw (CDC ∗pDC )

{ CZTestDoc ∗pDoc = GetDocument ( ); (pDoc); if (¬pDoc) return;

}

82. Pre-Create Window. . [LDF Undated.] ⟨ Declare public CZTestView functions 76 ⟩ +≡

virtual BOOL PreCreateWindow (CREATESTRUCT &cs );

83. ⟨ Define CZTestView functions 75 ⟩ +≡

BOOL CZTestView ::PreCreateWindow (CREATESTRUCT &cs )

{

return CView ::PreCreateWindow (cs ); }

84. On Prepare Printing. [LDF Undated.] ⟨ Declare protected CZTestView functions 74 ⟩ +≡

virtual BOOL OnPreparePrinting (CPrintInfo ∗pInfo);

85. ⟨ Define CZTestView functions 75 ⟩ +≡

BOOL CZTestView ::OnPreparePrinting (CPrintInfo ∗pInfo)

{

return DoPreparePrinting (pInfo); }

86. On Begin Printing. [LDF Undated.] ⟨ Declare protected CZTestView functions 74 ⟩ +≡

virtual void OnBeginPrinting (CDC ∗pDC , CPrintInfo ∗pInfo);

87. ⟨ Define CZTestView functions 75 ⟩ +≡

void CZTestView ::OnBeginPrinting (CDC ∗pDC , CPrintInfo ∗pInfo)

{

return; }

88. On End Printing. [LDF Undated.] ⟨ Declare protected CZTestView functions 74 ⟩ +≡

virtual void OnEndPrinting (CDC ∗pDC , CPrintInfo ∗pInfo);

§89  IWF Metadata Harvester II  ON END PRINTING 21

89. ⟨ Define CZTestView functions 75 ⟩ +≡

void CZTestView ::OnEndPrinting (CDC ∗pDC , CPrintInfo ∗pInfo) {

return; }

90. Assert Valid. [LDF Undated.] ⟨ Declare public CZTestView functions 76 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

91. ⟨ Define CZTestView functions 75 ⟩ +≡ #ifdef

void CZTestView ::AssertValid ( ) const {

CView ::AssertValid ( ); }

#endif

92. Dump. [LDF Undated.] ⟨ Declare public CZTestView functions 76 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

93. ⟨ Define CZTestView functions 75 ⟩ +≡ #ifdef

void CZTestView ::Dump(CDumpContext &dc) const {

CView ::Dump(dc); }

#endif

94. Putting CZTestView together.

95. This is what’s compiled.

⟨ Include files 13 ⟩

⟨ ztstview.web 68 ⟩

⟨ Preprocessor macro definitions 11 ⟩ (CZTestView, CView) (CZTestView, CView) ( , CView ::OnFilePrint ) ( , CView ::OnFilePrint ) ( , CView ::OnFilePrintPreview ) ( ) ⟨ Define CZTestView functions 75 ⟩

22  PUTTING CZTESTVIEW TOGETHER  IWF Metadata Harvester II §96

96. This is what’s written to ztstview.h. ⟨ 96 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ Declare class CZTestView 72 ⟩

97. ZTest (ztest.web). [LDF 2006.09.18.]

⟨ ztest.web 97 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 132.

98. Include files. ⟨ Include files 13 ⟩ +≡ #include #if 0 /∗ 1 ∗/ #include #endif #include #include #include #include

99. Preprocessor macro definitions. ⟨ Preprocessor macro definitions 11 ⟩ +≡ #ifdef #define new #endif

100. CZTestApp declaration. [LDF Undated.] ⟨ CZTestApp declaration 100 ⟩ ≡

class CZTestApp : public CWinApp {

public: CZTestApp( );

public: virtual BOOL InitInstance( ); afx msg void OnAppAbout ( ); ( )

};

This code is used in section 133.

101. Extern variable declarations. [LDF Undated.] ⟨ extern variable declarations 101 ⟩ ≡

extern CZTestApp theApp;

This code is used in section 133.

102. CZTestApp message map. These are macro calls. [LDF 2006.09.14.] ⟨ CZTestApp code 102 ⟩ ≡

(CZTestApp, CWinApp)

( , OnAppAbout ) /∗ Dateibasierte Standarddokumentbefehle ∗/ ( , CWinApp ::OnFileNew ) ( , CWinApp ::OnFileOpen) /∗ Standarddruckbefehl ”Seite einrichten” ∗/ ( , CWinApp ::OnFilePrintSetup)

§102  IWF Metadata Harvester II  CZTESTAPP MESSAGE MAP 23

( )

See also sections 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, and 116. This code is used in section 132.

103. CZTestApp Functions. [LDF Undated.]

104. Constructor. [LDF Undated.] ⟨ CZTestApp code 102 ⟩ +≡

CZTestApp ::CZTestApp( )

{

return; }

105. The only CZTestApp object. [LDF Undated.] ⟨ CZTestApp code 102 ⟩ +≡

CZTestApp theApp;

106. Initialize instance.

107.

Log

[LDF 2006.12.11.] Now calling the global function init copyright strings .

⟨ CZTestApp code 102 ⟩ +≡ BOOL CZTestApp ::InitInstance( ){

108. InitCommonControls ist für Windows XP erforderlich, wenn ein Anwendungsmanifest die Verwendung von ComCtl32.dll Version 6 oder höher zum Aktivieren von visuellen Stilen angibt. Ansonsten treten beim Erstellen von Fenstern Fehler auf. ⟨ CZTestApp code 102 ⟩ +≡

InitCommonControls ( );

CWinApp ::InitInstance( );

109. Initialize OLE libraries. ⟨ CZTestApp code 102 ⟩ +≡

if (¬AfxOleInit ( )) { AfxMessageBox ( ); return ;

}

AfxEnableControlContainer ( );

110. Standardinitialisierung. Wenn Sie diese Features nicht verwenden und die Größe der ausführbaren Datei verringern möchten, entfernen Sie die nicht erforderlichen Initialisierungsroutinen. Ändern Sie den Registrierungsschlüssel unter dem Ihre Einstellungen gespeichert sind. TODO: Ändern Sie diese Zeichenfolge entsprechend, z.B. zum Namen Ihrer Firma oder Organisation. ⟨ CZTestApp code 102 ⟩ +≡

SetRegistryKey ( ( ␣ ␣ ␣ ␣ )); LoadStdProfileSettings (4); /∗ Standard INI-Dateioptionen laden (einschließlich MRU) ∗/

24  INITIALIZE INSTANCE  IWF Metadata Harvester II §111

111. Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten. ⟨ CZTestApp code 102 ⟩ +≡

CSingleDocTemplate ∗pDocTemplate;

pDocTemplate = new CSingleDocTemplate( , (CZTestDoc),

(CMainFrame), /∗ Haupt-SDI-Rahmenfenster ∗/ (CZTestView)); if (¬pDocTemplate) return ; AddDocTemplate(pDocTemplate);

112. Befehlszeile parsen, um zu prüfen auf Standardumgebungsbefehle DDE, Datei offen ⟨ CZTestApp code 102 ⟩ +≡

CCommandLineInfo cmdInfo;

ParseCommandLine(cmdInfo);

113. Verteilung der in der Befehlszeile angegebenen Befehle. Es wird FALSE zurückgegeben, wenn die Anwendung mit /RegServer, /Register, /Unregserver oder /Unregister gestartet wurde. ⟨ CZTestApp code 102 ⟩ +≡

if (¬ProcessShellCommand (cmdInfo)) return ;

114. Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden. ⟨ CZTestApp code 102 ⟩ +≡

m pMainWnd ShowWindow ( );

m pMainWnd UpdateWindow ( );

115. Rufen Sie DragAcceptFiles nur auf, wenn eine Suffix vorhanden ist. In einer SDI-Anwendung ist dies nach ProcessShellCommand erforderlich ⟨ CZTestApp code 102 ⟩ +≡

init copyright strings ( );

Dialog Z 1 dlg 1 ;

dlg 1 .DoModal ( );

116. Now calling zoomtst2 in Dialog Z 1 ::OnOK . [LDF 2006.07.21.] ⟨ CZTestApp code 102 ⟩ +≡ #if 0 /∗ This works. [LDF 2006.07.12] . ∗/

zoomtst0 ( );

exit (0); #endif

return  ; }  /∗ End of CZTestApp ::InitInstance definition. ∗/

117. Class CAboutDlg declaration. CAboutDlg-Dialogfeld für Anwendungsbefehl “Info”. [LDF Undated.] ⟨ Declare class CAboutDlg 117 ⟩ ≡

class CAboutDlg : public CDialog { public: CAboutDlg( );

See also sections 118, 119, and 120. This code is used in section 132.

§118  IWF Metadata Harvester II  CLASS CABOUTDLG DECLARATION 25

118. Dialogfelddaten. ⟨ Declare class CAboutDlg 117 ⟩ +≡

enum {

= };

protected: virtual void DoDataExchange(CDataExchange ∗pDX ); /∗ DDX/DDV-Unterstützung ∗/

119. Implementierung. ⟨ Declare class CAboutDlg 117 ⟩ +≡

120. ⟨ Declare class CAboutDlg 117 ⟩ +≡ protected: ( ) } ;

121. CAboutDlg Functions. [LDF Undated.]

122. Constructor. [LDF Undated.] ⟨ Define CAboutDlg functions 122 ⟩ ≡

CAboutDlg ::CAboutDlg( )

: CDialog(CAboutDlg :: ) { }

See also sections 123 and 124. This code is used in section 132.

123. Do Data Exchange. [LDF Undated.] ⟨ Define CAboutDlg functions 122 ⟩ +≡

void CAboutDlg ::DoDataExchange(CDataExchange ∗pDX )

{

CDialog ::DoDataExchange(pDX ); }

124. CAboutDlg Message map. [LDF Undated.] ⟨ Define CAboutDlg functions 122 ⟩ +≡

(CAboutDlg, CDialog)

( )

125. Anwendungsbefehl zum Ausführen des Dialogfelds [LDF Undated.] ⟨ Define CZTestApp functions 125 ⟩ ≡

void CZTestApp ::OnAppAbout ( )

{ CAboutDlg aboutDlg ; aboutDlg .DoModal ( );

}

This code is used in section 132.

26 CABOUTDLG MESSAGE MAP IWF Metadata Harvester II §126

126. CZTestApp Meldungshandler. [LDF Undated.]

127. Global variables. [LDF Undated.]

Log

[LDF 2006.08.23.] Added this section. [LDF 2006.08.23.] Added the declaration of CMutex time mutex . [LDF 2006.12.11.] Added the declaration of string copyright html str .

⟨ Global variables 18 ⟩ +≡ CMutex time mutex ; string copyright html str ;

128. Global functions. [LDF 2006.12.11.]

Log

[2006.12.11.] Added this section.

129. Initialize copyright string. [LDF 2006.12.11.]

Log

[2006.12.11.] Added this function.

⟨ Declare global functions 129 ⟩ ≡

int init copyright strings (void);

This code is used in section 133.

§130  IWF Metadata Harvester II  INITIALIZE COPYRIGHT STRING 27

130. ⟨ Define global functions 130 ⟩ ≡

int init copyright strings (void) {

#if 0 /∗ 1 ∗/ #define 1 #else #undef #endif

stringstream temp strm; #ifdef

temp strm.str ( ␣ ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

temp strm ≪  ␣                     ␣                   ␣         ␣    ␣  ≪

≪  ␣    ␣   ␣         ␣  ␣   ␣
␣        ␣          ␣ ≪ ␣       ␣   ␣        ␣          ␣␣ ≪
␣         ␣         ␣      ␣       ␣   ␣    ␣     ␣␣ ≪
␣       ␣         ␣  ␣    ␣    ␣   ␣    ␣         ␣  ␣      ␣    ␣     ␣ ≪
␣       ␣  ␣      ␣   ␣          ␣    ␣  ≪
␣   ␣      ␣    ␣   ␣       ␣   ␣      ␣  ≪
␣      ␣  ␣        ␣  ␣  ≪  ≪  ␣   ␣        ␣
␣  ␣    ␣         ␣   ␣   ␣            ␣ ≪ ␣      ␣      ␣ ≪
␣     ␣   ␣     ␣   ␣   ␣   ␣       ␣      ␣       ␣  ␣         ␣  ␣ ≪
␣    ␣        ␣           ␣      ␣        ␣ ␣  ␣   ␣        ␣  ␣ ≪
␣    ␣       ␣    ␣     ␣        ␣ ≪  ≪  ≪
␣   ␣        ␣         ␣  ␣           ␣  ␣   ␣    ␣    ␣   ␣    ␣  ␣       ␣ ≪
␣       ␣   ␣         ␣       ␣    ␣    ␣       ␣        ␣  ␣ ≪
␣  ␣        ␣   ␣ ␣          ␣        ␣␣   ␣    ␣ ≪
␣       ␣      ␣       ␣   ␣    ␣        ␣ ≪  ≪  ≪
␣      ␣    ␣        ␣ ␣    ␣  ␣   ␣    ␣       ␣      ␣       ␣ ≪
␣    ␣   ␣   ␣        ␣          ␣   ␣    ␣     ␣  ␣    ␣    ␣        ␣ ≪
␣     ␣   ␣        ␣   ␣      ␣      ␣       ␣  ␣␣          ␣␣   ␣ ≪
≪  ≪  ␣   ␣        ␣         ␣  ␣         ␣   ␣          ␣
␣   ␣ ≪  ␣   ␣        ␣ ≪  ␣ ≪
≪  ≪  ␣    ␣   ␣       ␣  ␣                ␣ ≪
≪  ≪  ␣      ␣   ␣  ␣         ␣   ␣ ≪  ≪
≪  ␣  ␣  ≪  ␣  ≪

␣  ≪  ≪  ≪  ≪
≪  ≪  ;

copyright html str = temp strm.str ( ); #ifdef

temp strm.str ( ␣ ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return 0; #undef

} /∗ End of init copyright strings definition. ∗/

This code is used in section 132.

28  PUTTING ZTEST TOGETHER  IWF Metadata Harvester II §131

131. Putting ZTest together. [LDF Undated.]

132. This is what’s compiled.

⟨ Include files 13 ⟩

  ⟨ ztest.web 97 ⟩

⟨ Preprocessor macro definitions 11 ⟩

⟨ Global variables 18 ⟩

⟨ CZTestApp code 102 ⟩

⟨ Declare class CAboutDlg 117 ⟩

⟨ Define CAboutDlg functions 122 ⟩

⟨ Define CZTestApp functions 125 ⟩

⟨ Define global functions 130 ⟩

133. This is what gets written to ztest.h. ⟨ 133 ⟩ ≡ #pragma once #ifndef

#

  error \underline{\overline{␣    ␣   ␣      ␣     ␣  ␣   ␣             ␣}}

#endif #include /∗ Hauptsymbole ∗/

⟨ CZTestApp declaration 100 ⟩ ⟨ extern variable declarations 101 ⟩ ⟨ Declare global functions 129 ⟩

134. Dialog Z 1 (dialogz1.web). [LDF Undated.]

⟨ dialogz1.web 134 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 175.

135. Include files. [LDF Undated.] ⟨ Include files 13 ⟩ +≡ #include #if 0 /∗ 1 ∗/

# include #endif #include

136. Dialog Z 1 class declaration. [LDF Undated.] ⟨ Declare class Dialog Z 1 136 ⟩ ≡

class Dialog Z 1 : public CDialog

{

(Dialog Z 1)

See also sections 137 and 138. This code is used in section 176.

§137  IWF Metadata Harvester II  DIALOG Z 1 CLASS DECLARATION 29

137. Dialogfelddaten. [LDF Undated.] ⟨ Declare class Dialog Z 1 136 ⟩ +≡ public: enum {

= };

138. ⟨ Declare class Dialog Z 1 136 ⟩ +≡

protected: ( )

⟨ Declare protected Dialog Z 1 functions 145 ⟩ public: ⟨ Declare public Dialog Z 1 functions 141 ⟩

CString search command ; BOOL perform search; BOOL parse records ; BOOL display records ; BOOL write records file; BOOL clear database; int display to record ; int display from record ; int display all or range; static const int ; static const int ; } ;

139. Local static constants for Dialog Z 1. [LDF Undated.] ⟨ Local static constants for Dialog Z 1 139 ⟩ ≡

const int Dialog Z 1 :: = 1; const int Dialog Z 1 :: = 2;

This code is used in section 175.

140. Dialog Z 1 functions.

141. Constructor. [LDF Undated.] ⟨ Declare public Dialog Z 1 functions 141 ⟩ ≡

Dialog Z 1(CWnd ∗pParent = NULL);

See also sections 143, 149, 160, 162, 164, 166, 168, 170, and 172. This code is used in section 138.

142. ⟨ Define Dialog Z 1 functions 142 ⟩ ≡

(Dialog Z 1, CDialog)

Dialog Z 1 ::Dialog Z 1(CWnd ∗pParent /∗ = NULL ∗/ )

: CDialog(Dialog Z 1 :: , pParent ), perform search(  ), parse records (  ),
display records (  ), write records file(  ), clear database(  ), display to record (0),

display from record (0), display all or range(0) { return;

}

See also sections 144, 146, 150, 151, 153, 154, 155, 156, 157, 159, 161, 163, 165, 167, 169, 171, and 173. This code is used in section 175.

143. Destructor. [LDF Undated.] ⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡

virtual ∼Dialog Z 1( );

144. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

Dialog Z 1 ::∼Dialog Z 1( )

{ }

145. DoDataExchange. [LDF Undated.] ⟨ Declare protected Dialog Z 1 functions 145 ⟩ ≡

virtual void DoDataExchange(CDataExchange ∗pDX );

See also sections 152 and 158. This code is used in section 138.

§146  IWF Metadata Harvester II  DODATAEXCHANGE  31

146. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::DoDataExchange(CDataExchange ∗pDX ) {

CDialog ::DoDataExchange(pDX );

DDX Text (pDX , , search command );

DDX Check (pDX , , perform search);

DDX Check (pDX , , parse records );

DDX Check (pDX , , display records );

DDX Check (pDX , , write records file); DDX Check (pDX , , clear database); DDX LBIndex (pDX , , display to record ); DDX LBIndex (pDX , , display from record );

}

147. Message map. These are macro calls. [LDF Undated.] ⟨ Macro calls for Dialog Z 1 message map 147 ⟩ ≡

(Dialog Z 1, CDialog) ( , OnBnClickedPerformSearch) ( , OnBnClickedParseRecords ) ( , OnBnClickedDisplayRecords ) ( , OnBnClickedWriteRecordsFile) ( , OnBnClickedClearDatabase) ( , OnBnClickedDisplayAll ) ( , OnBnClickedDisplayRange) ( )

This code is used in section 175.

148. Event handlers. [LDF Undated.]

149. OnInitDialog. [LDF Undated.] ⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡

virtual BOOL OnInitDialog ( );

32 ONINITDIALOG  IWF Metadata Harvester II  §150

150. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

BOOL Dialog Z 1 ::OnInitDialog (void){ CListBox ∗pLB = ( CListBox ∗ ) GetDlgItem( ); pLB InsertString (−1, ); pLB InsertString (−1, ); pLB InsertString (−1, ); pLB InsertString (−1, ); pLB SetSel (0, ); pLB = NULL; CButton ∗pBT ; pBT = (CButton ∗) GetDlgItem( );

#if 1 /∗ 0 ∗/ pBT SetCheck ( ); perform search = ;

#else pBT SetCheck ( ); perform search = ;

#endif

pBT = (CButton ∗) GetDlgItem( ); #if 0 /∗ 1 ∗/

pBT SetCheck ( ); write records file = ;

#else pBT SetCheck ( ); write records file = ;

#endif

pBT = (CButton ∗) GetDlgItem( ); #if 0 /∗ 1 ∗/

pBT SetCheck ( ); clear database = ;

#else pBT SetCheck ( ); clear database = ;

#endif

pBT = (CButton ∗) GetDlgItem( ); #if 0 /∗ 1 ∗/

pBT SetCheck ( ); parse records = ;

#else pBT SetCheck ( ); parse records = ;

#endif

pBT = (CButton ∗) GetDlgItem( ); #if 0 /∗ 1 ∗/

pBT SetCheck ( ); display records = ;

#else pBT SetCheck ( ); display records = ;

#endif pBT = (CButton ∗) GetDlgItem( );

§150  IWF Metadata Harvester II  ONINITDIALOG  33

pBT SetCheck ( ); display all or range = ; pBT = NULL; CEdit ∗pEB = (CEdit ∗) GetDlgItem( ); pEB SetFocus ( );

#if 0 search command = ␣ ␣ ␣ ␣ ␣ ␣ ; search command = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ; search command += ␣ ␣ ␣ ; search command = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ; search command += ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ; search command = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

search command +=  ␣           ␣     ␣

␣ ␣ ␣ search command += ␣ ␣ ; search command = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

#endif search command = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ; search command += ␣ ␣ ␣ ␣ ␣ ␣ ; search command += ␣ ␣ ␣ ␣ ; UpdateData( );

#if 0 /∗ 1 ∗/

pEB UpdateWindow ( ); #endif

151. return unless you set the focus to a control. AUSNAHME: OCX-Eigenschaftenseite muss zurückgeben. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡ #if 0 /∗ 1 ∗/

return ; #endif

return CDialog ::OnInitDialog ( ); } /∗ End of Dialog Z 1 ::OnInitDialog ( ) definition. ∗/

152. On OK.

Log

[LDF Undated.] Added this function.

34  ON OK  IWF Metadata Harvester II §153

⟨ Declare protected Dialog Z 1 functions 145 ⟩ +≡ virtual void OnOK ( ); 153. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnOK ( ){ stringstream temp strm;

CEdit ∗pEB = (CEdit ∗) GetDlgItem( ); CListBox ∗ pLB = ( CListBox ∗ )

GetDlgItem( ); int buff [16]; int items ctr ; items ctr = pLB GetSelItems (16, buff ); temp strm ≪ ␣ ␣ ≪ items ctr ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); int select value; unsigned short server selector = 0; if (items ctr ≡ ) {

temp strm ≪ ␣␣ ␣ ≪ endl ≪ ␣ ␣ ␣ ␣ ␣ ≪ items ctr ≪ endl ≪

      ␣        ␣              ␣   ␣       ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return; }

154. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

else

if (items ctr ≡ 0) {

temp strm ≪ ␣␣ ␣ ≪ endl ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ items ctr ≪ endl ≪

    ␣    ␣   ␣  ␣     ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

}

§155  IWF Metadata Harvester II  ON OK 35

155. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

else /∗ ¬(items ctr ≡ ∨ items ctr ≡ 0) ∗/ {

select value = 0;

CString selection str ;

for (int i = 0; i < items ctr ; ^{++}i) { pLB GetText (buff [i], selection str );

#if 1

temp strm ≪ ≪ i ≪ ␣ ␣ ≪ buff [i] ≪ endl ≪ ␣ ␣ ≪

selection str ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

if (selection str ≡ ) { #if 1 /∗ 0 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

server selector |= ZClient :: ; } else if (selection str ≡ ) {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

}
else {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

}

} /∗ for ∗/ } /∗ else (¬(items ctr ≡ ∨ items ctr ≡ 0)) ∗/ while (true) {

pEB GetWindowText (search command ); if (search command ≡ ) {

AfxMessageBox ( ␣ ␣ ␣ ␣ );

return; } else break;

} /∗ while ∗/ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ search command ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #if 1 /∗ 0 ∗/

156.

Log

[LDF 2006.09.25.] No longer casting the arguments to zoomtst2 to bool, since I changed them to BOOL. Using bool caused Microsoft Visual Studio to issue warnings.

[LDF 2006.10.16.] Now passing unsigned short server selector to zoomtst2 .

⟨ Define Dialog Z 1 functions 142 ⟩ +≡

zoomtst2 (server selector , search command , perform search, write records file, clear database,

parse records , display records ); #endif

157. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡ #if 0 /∗ 1 ∗/

search command = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ; search command += ␣ ␣ ;

#endif

UpdateData( ); #if 0 /∗ 1 ∗/

pEB UpdateWindow ( );

pEB SetSel (0, −1);

pEB Clear ( );

pEB SetFocus ( );

UpdateData( );

CDialog ::OnOK ( ); #endif

} /∗ End of Dialog Z 1 ::OnOK definition. ∗/

158. OnCancel. [LDF Undated.] ⟨ Declare protected Dialog Z 1 functions 145 ⟩ +≡

virtual void OnCancel ( );

159. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnCancel ( )

{ #if 0 /∗ 1 ∗/

CDialog ::OnCancel ( ); #endif

exit (0); }

§160  IWF Metadata Harvester II  ONBNCLICKEDPERFORMSEARCH  37

160. OnBnClickedPerformSearch.

Log

[LDF 2006.08.31.] Added this function.

⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡ afx msg void OnBnClickedPerformSearch( );

161. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnBnClickedPerformSearch( )

{ stringstream temp strm; perform search = ¬perform search;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ perform search; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return; } /∗ End of Dialog Z 1 ::OnBnClickedPerformSearch definition. ∗/

162. OnBnClickedParseRecords. [LDF 2006.08.31.]

Log

[LDF 2006.08.31.] Added this function.

⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡ afx msg void OnBnClickedParseRecords ( );

163. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnBnClickedParseRecords (void)

{ stringstream temp strm; parse records = ¬parse records ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ parse records ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return; } /∗ End of Dialog Z 1 ::OnBnClickedParseRecords definition. ∗/

38 ONBNCLICKEDDISPLAYRECORDS  IWF Metadata Harvester II  §164

164. OnBnClickedDisplayRecords. [LDF 2006.08.31.]

Log

[LDF 2006.08.31.] Added this function.

⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡ afx msg void OnBnClickedDisplayRecords ( );

165. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnBnClickedDisplayRecords ( )

{ stringstream temp strm; display records = ¬display records ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ display records ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return; } /∗ End of Dialog Z 1 ::OnBnClickedDisplayRecords definition. ∗/

166. OnBnClickedWriteRecordsFile. [LDF 2006.08.31.]

Log

[LDF 2006.08.31.] Added this function.

⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡ afx msg void OnBnClickedWriteRecordsFile( );

167. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnBnClickedWriteRecordsFile( )

{ stringstream temp strm; write records file = ¬write records file;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ write records file; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return; } /∗ End of Dialog Z 1 ::OnBnClickedWriteRecordsFile definition. ∗/

§168  IWF Metadata Harvester II  ONBNCLICKEDCLEARDATABASE  39

168. OnBnClickedClearDatabase. [LDF 2006.08.31.]

Log

[LDF 2006.08.31.] Added this function.

⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡ afx msg void OnBnClickedClearDatabase( );

169. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnBnClickedClearDatabase( )

{ stringstream temp strm; clear database = ¬clear database;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ clear database; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return; } /∗ End of Dialog Z 1 ::OnBnClickedClearDatabase definition. ∗/

170. OnBnClickedDisplayAll.

Log

[LDF 2006.09.04.] Added this function.

⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡ afx msg void OnBnClickedDisplayAll ( );

171. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnBnClickedDisplayAll (void)

{

display all or range = ; }

172. OnBnClickedDisplayRange. [LDF 2006.09.04.]

Log

[LDF 2006.09.04.] Added this function.

⟨ Declare public Dialog Z 1 functions 141 ⟩ +≡ afx msg void OnBnClickedDisplayRange( );

40 ONBNCLICKEDDISPLAYRANGE  IWF Metadata Harvester II  §173

173. ⟨ Define Dialog Z 1 functions 142 ⟩ +≡

void Dialog Z 1 ::OnBnClickedDisplayRange(void) {

display all or range = ; }

174. Putting Dialog Z 1 together.

175. This is what gets compiled.

⟨ Include files 13 ⟩

⟨ dialogz1.web 134 ⟩

⟨ Local static constants for Dialog Z 1 139 ⟩ ⟨ Define Dialog Z 1 functions 142 ⟩ ⟨ Macro calls for Dialog Z 1 message map 147 ⟩

§176  IWF Metadata Harvester II  PUTTING DIALOG Z 1 TOGETHER 41

176. This is what gets written to dialogz1.h. [LDF Undated.] ⟨ 176 ⟩ ≡ #pragma once #include

⟨ Declare class Dialog Z 1 136 ⟩

177. Scanning. (scanner.web). [LDF 2006.10.17.]

Log

[LDF 2006.10.17.] Created this file.

⟨ scanner.web 177 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 186.

178. Include files. ⟨ Include files 13 ⟩ +≡ #if 0 /∗ 1 ∗/ #include #endif #include #include

179. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #if 0 /∗ 1 ∗/ #pragma once #endif

180. Type declarations for the scanner. [LDF 2006.10.17.]

181. Union declaration for YYSTYPE. [LDF 2006.10.17.] ⟨ Union declaration for YYSTYPE 181 ⟩ ≡

struct MDH YYSTYPE {

union { char string value[64]; signed int int value; void ∗pointer value;

} u; }; typedef struct MDH YYSTYPE YYSTYPE;

This code is used in sections 186 and 187.

182. Location type. [LDF 2006.10.17.] ⟨ Declare location type 182 ⟩ ≡

struct MDH YYLTYPE { unsigned int first line; unsigned int first column; unsigned int last line;

42  LOCATION TYPE  IWF Metadata Harvester II §182

unsigned int last column; unsigned int position;

}; typedef struct MDH YYLTYPE YYLTYPE;

This code is used in sections 186 and 187.

183. yylex. [LDF 2006.10.17.] ⟨ Declare yylex 183 ⟩ ≡

int yylex (YYSTYPE ∗value, YYLTYPE ∗location, void ∗parameter );

This code is used in section 187.

184. ⟨ Define yylex 184 ⟩ ≡

int yylex (YYSTYPE ∗value, YYLTYPE ∗location, void ∗parameter ) {

printf ( ␣ ); return 0;

} /∗ End of yylex definition. ∗/

This code is used in section 186.

185. Putting the scanner together.

186. This is what’s compiled.

⟨ Include files 13 ⟩

⟨ scanner.web 177 ⟩

⟨ Union declaration for YYSTYPE 181 ⟩ ⟨ Declare location type 182 ⟩ ⟨ Define yylex 184 ⟩

§187  IWF Metadata Harvester II  PUTTING THE SCANNER TOGETHER 43

187. This is what’s written to scanner.h. ⟨ 187 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ Union declaration for YYSTYPE 181 ⟩

⟨ Declare location type 182 ⟩

⟨ Declare yylex 183 ⟩

188. ZClient (zclient.web). [LDF 2006.09.18.]

⟨ zclient.web 188 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 362.

189. Include files. ⟨ Include files 13 ⟩ +≡ #include #include #include #include

190. Preprocessor macro calls. [LDF Undated.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

191. using declarations for namespaces. [LDF 2006.09.18.] ⟨ using declarations for namespaces 191 ⟩ ≡

using namespace std;

See also sections 366, 398, 766, 780, 1000, 1021, 1042, 1063, 1084, 1105, 1126, 1147, 1168, 1189, 1210, 1231, 1252, 1273, 1294,

1315, 1336, 1357, 1378, 1399, 1420, 1441, 1462, 1483, 1504, 1525, 1546, 1567, 1588, 1609, 1630, 1651, 1672, and 1693. This code is used in sections 363, 382, 383, 416, 776, 995, 1017, 1038, 1059, 1080, 1101, 1122, 1143, 1164, 1185, 1206, 1227,

1248, 1269, 1290, 1311, 1332, 1353, 1374, 1395, 1416, 1437, 1458, 1479, 1500, 1521, 1542, 1563, 1584, 1605, 1626, 1647, 1668, 1689, and 1710.

192. ZClient class declaration. [LDF Undated.]

Log

[LDF 2006.07.26.] Added the declaration of init category map.

[LDF 2006.09.12.] Removed the declaration of parse record . It wasn’t needed, and there was no definition for it.

[LDF 2006.10.16.] Changed the type of from static const long to static const unsigned short. I don’t know why it was long in the first place.

[LDF 2006.10.16.] Changed the type of source id from long to unsigned short.

⟨ Declare class ZClient 192 ⟩ ≡

class ZClient

{

friend Pica Record; public: ⟨ Declare ZClient functions 197 ⟩

static const unsigned short ;

44 ZCLIENT CLASS DECLARATION IWF Metadata Harvester II §192

static const unsigned short ; static const unsigned short ;

See also section 193. This code is used in section 363.

193.

Log

[LDF 2006.09.06.] Changed name of ofstream log file to log strm.

[LDF 2006.09.06.] Changed the type of ofstream log strm to Output Stream Type.

⟨ Declare class ZClient 192 ⟩ +≡ protected: vector⟨ZOOM connection ∗⟩ connections ;

vector⟨ZOOM resultset ∗⟩ resultsets ; Category Map Type category map; Output Stream Type log strm; Sources source recordset ; CDatabase ∗database; unsigned short source id ; } ;

194. Initialize static constants. [LDF 2006.09.18.] ⟨ Initialize static constants for ZClient 194 ⟩ ≡

const unsigned short ZClient :: = 16; const unsigned short ZClient :: = 16; const unsigned short ZClient :: = 1;

This code is used in section 362.

195. Functions. [LDF Undated.]

196. Constructors. [LDF 2006.09.18.]

197. Default Constructor. [LDF 2006.09.18.] The definition is currently empty. [LDF 2006.07.19.]

⟨ Declare ZClient functions 197 ⟩ ≡

ZClient(void);

See also sections 199, 206, 209, 211, 214, 216, 218, 220, 222, 224, 327, 329, and 358. This code is used in section 192.

198. ⟨ Define ZClient functions 198 ⟩ ≡

ZClient ::ZClient(void) {

return; }

See also sections 200, 201, 202, 203, 204, 205, 207, 210, 212, 215, 217, 219, 221, 223, 328, 330, 331, 332, 333, 334, 335, 336, 337,

338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 359, and 360. This code is used in section 362.

§199  IWF Metadata Harvester II  NON-DEFAULT CONSTRUCTOR 45

199. Non-Default Constructor. [LDF Undated.]

Log

[LDF 2006.09.06.] Changed name of ofstream log file data member to log strm.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

[LDF 2006.10.16.] Changed the type of the argument ssource id from long to unsigned short.

⟨ Declare ZClient functions 197 ⟩ +≡ ZClient(unsigned short ssource id , char ∗server name, int port num = 0);

200. ⟨ Define ZClient functions 198 ⟩ +≡

ZClient ::ZClient(unsigned short ssource id , char ∗server name, int port num){

source id = ssource id ; log strm.lock ( ); log strm.output stream.open( ); log strm.unlock ( ); int error = 0; const char ∗errmsg = ; const char ∗addinfo = ; const char ∗diagset = ;

201. Create connection (don’t connect yet). [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

connections .push back (static cast⟨ZOOM connection ∗⟩(malloc(sizeof (ZOOM connection)))); ZOOM connection ∗curr connection = connections .back ( ); ∗curr connection = ZOOM connection create(0);

202. option: set sru/get operation (only applicable if http: is used). [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡ #if 0 /∗ 1 ∗/

ZOOM connection option set (∗curr connection, , ); #endif

203. option: set async operation. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

ZOOM connection option set (∗curr connection, , );

204. connect to target and initialize. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

ZOOM connection connect (∗curr connection, server name, port num);

46  NON-DEFAULT CONSTRUCTOR  IWF Metadata Harvester II §205

205. ⟨ Define ZClient functions 198 ⟩ +≡ /∗ START HERE: LDF 2006.07.24. Add error handling. ∗/

source recordset .Open( );

database = source recordset .m pDatabase;

database SetLoginTimeout (120);

database SetQueryTimeout (120);

return; } /∗ End of ZClient non-default constructor definition. ∗/

206. Destructor. [LDF Undated.]

Log

[LDF 2006.07.19.] Now closing log strm.

[LDF 2006.09.06.] Changed name of ofstream log file data member to log strm.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

⟨ Declare ZClient functions 197 ⟩ +≡ ∼ZClient(void);

207. ⟨ Define ZClient functions 198 ⟩ +≡

ZClient ::∼ZClient(void)

{ log strm.lock ( ); log strm.output stream.close( ); log strm.unlock ( ); for (Category Map Type ::iterator iter = category map.begin( ); iter ≠ category map.end ( );

++iter ) delete iter second ; category map.clear ( ); source recordset .Close( ); database Close( );

} /∗ End of ∼ZClient definition. ∗/

208. Connections.

Log

[LDF 2006.09.25.] Added this section.

209. Get connection. [LDF Undated.] ⟨ Declare ZClient functions 197 ⟩ +≡

ZOOM connection ∗ZClient ::get connection(vector⟨ZOOM connection ∗⟩::size type connection ctr );

§210  IWF Metadata Harvester II  GET CONNECTION 47

210. ⟨ Define ZClient functions 198 ⟩ +≡

ZOOM connection ∗ZClient ::get connection(vector⟨ZOOM connection ∗⟩::size type

connection ctr )

{ if (connections .size( ) > connection ctr ) return connections [connection ctr ]; else return 0;

}

211. Get last connection. [LDF Undated.] ⟨ Declare ZClient functions 197 ⟩ +≡

ZOOM connection ∗get last connection(void);

212. ⟨ Define ZClient functions 198 ⟩ +≡

ZOOM connection ∗ZClient ::get last connection(void)

{ if (connections .size( ) ≡ 0) return 0; else return connections .back ( );

}

213. Resultsets.

Log

[LDF 2006.09.25.] Added this section.

214. Get resultset. [LDF Undated.] ⟨ Declare ZClient functions 197 ⟩ +≡

ZOOM resultset ∗get resultset (vector⟨ZOOM resultset ∗⟩::size type resultset ctr );

215. ⟨ Define ZClient functions 198 ⟩ +≡

ZOOM resultset ∗ZClient ::get resultset (vector⟨ZOOM resultset ∗⟩::size type resultset ctr )

{ if (resultsets .size( ) < resultset ctr ) return resultsets [resultset ctr ]; else return 0;

}

216. Get last resultset. [LDF Undated.] ⟨ Declare ZClient functions 197 ⟩ +≡

ZOOM resultset ∗get last resultset (void);

217. ⟨ Define ZClient functions 198 ⟩ +≡

ZOOM resultset ∗ZClient ::get last resultset (void)

{ if (resultsets .size( ) ≡ 0) return 0; else return resultsets .back ( );

}

48  GET RESULTSET SIZE  IWF Metadata Harvester II §218

218. Get resultset size. [LDF Undated.]

To Do

Add exception handling for the case that resultset is invalid, or a note that I should add it. [LDF Undated.]

⟨ Declare ZClient functions 197 ⟩ +≡ size t get resultset size(vector⟨ZOOM resultset ∗⟩::size type resultset ctr );

219. ⟨ Define ZClient functions 198 ⟩ +≡

size t ZClient ::get resultset size(vector⟨ZOOM resultset ∗⟩::size type resultset ctr )

{ if (resultsets .size( ) < resultset ctr ) return ZOOM resultset size(∗(resultsets [resultset ctr ])); else return 0;

}

220. Get last resultset size. [LDF Undated.]

To Do

Add exception handling for the case that resultset is invalid, or a note that I should add it. [LDF Undated.]

⟨ Declare ZClient functions 197 ⟩ +≡ size t get last resultset size(void);

221. ⟨ Define ZClient functions 198 ⟩ +≡

size t ZClient ::get last resultset size(void)

{ if (resultsets .size( ) ≡ 0) return 0; else return ZOOM resultset size(∗get last resultset ( ));

}

222. Clear database. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

⟨ Declare ZClient functions 197 ⟩ +≡ int clear database(void);

§223  IWF Metadata Harvester II  CLEAR DATABASE 49

223. ⟨ Define ZClient functions 198 ⟩ +≡

int ZClient ::clear database(void)

{ stringstream sql strm; stringstream temp strm;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

if (database ∧ database IsOpen( )) {

sql strm ≪ ␣ ␣ ␣ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ sql strm.str ( );

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

database ExecuteSQL(sql strm.str ( ).c str ( ));

sql strm.str ( );

return 0; } /∗ if (database ∧ database IsOpen( )) ∗/

#if 0 /∗ 1 ∗/

else {

temp strm ≪ ␣ ␣␣ ≪

          ␣     ␣      ␣␣     ␣     ␣    ␣␣         ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ else ∗/

#endif

return 0; } /∗ End of ZClient ::clear database definition. ∗/

224. Initialize category map. [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function. It contains code that used to be in the non-default ZClient constructor.

⟨ Declare ZClient functions 197 ⟩ +≡ int init category map(void);

50  INITIALIZE CATEGORY MAP  IWF Metadata Harvester II §225

225. ⟨ Define ZClient ::init category map 225 ⟩ ≡

int ZClient ::init category map(void){ Category Container ∗curr category container = 0; Subcategory Container ∗curr subcategory container = 0; Database Command ∗curr database command = 0;

See also sections 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, and 326.

This code is used in section 362.

226. 001@ — Unknown Category. Unbekannte Kategorie. Not in “Overview” (“Übersicht”).

[LDF 2006.07.20. ]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣  ;
curr category container content description english =  ␣  ;

227. ‘0’ — Unknown Field. (Unbekanntes Feld). ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; category map[ ] = curr category container ;

228. 001A — Identifier and Date of the Original Catalogue Entry. Kennung und Datum der Ersterfassung.

[LDF 2006.07.20.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ␣ ␣ ␣ ␣ ; curr category container content description english = ␣ ␣ ␣ ␣ ␣ ␣

    ␣  ;

§229 IWF Metadata Harvester II ‘0’ — IDENTIFIER AND DATE OF THE ORIGINAL CATALOGUE ENTRY 51

229. ‘0’ — Identifier and Date of the Original Catalogue Entry. Kennung und Datum der Ersterfassung.

[LDF 2006.07.20.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ␣ ␣ ␣ ␣ ; curr subcategory container content description english = ␣ ␣ ␣ ␣ ␣ ␣

    ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 001A 0 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ; category map[ ] = curr category container ;

230. 001B — Identifier and Date of the Most Recent Change. Kennung und Datum der letzten Änderung.

[LDF 2006.07.20.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ␣ ␣ ␣ ␣ ␣ ; curr category container content description english = ␣ ␣ ␣ ␣ ␣ ␣ ␣

;

231. ‘0’ — Identifier and Date of the Most Recent Change. Kennung und Datum der letzten Änderung. Identifier and Date of the Change. Kennung und Datum der Änderung.

[LDF 2006.07.20.]

Log

[LDF 2006.08.03.] Added code for adding a Database Command that references Subcategory Container ::f 001B 0 to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german =

    ␣   ␣     ␣    ␣       ␣  ;

curr subcategory container content description english = ␣ ␣ ␣ ␣ ␣ ␣ ␣

; curr database command = new Database Command; curr database command function = Subcategory Container ::f 001B 0 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

52  ‘T’ — TIME  IWF Metadata Harvester II §232

232. ‘t’ — Time. Uhrzeit.

[LDF 2006.07.20.]

Log

[LDF 2006.08.03.] Added code for adding a Database Command that references Subcategory Container ::f 001B t to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 001B t ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ; curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

233. 001D — Identifier and Date of the Status Change. Kennung und Datum der Statusänderung.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣   ␣     ␣    ␣  ;
curr category container content description english =  ␣   ␣     ␣  ␣   ␣      ␣  ;

§234  IWF Metadata Harvester II  ‘0’ — IDENTIFIER AND DATE OF THE CHANGE 53

234. ‘0’ — Identifier and Date of the Change. Kennung und Datum der Änderung.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

[LDF 2006.08.03.] Added code for adding a Database Command that references Subcategory Container ::f 001D 0 to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣   ␣     ␣    ␣  ;
curr subcategory container content description english =  ␣   ␣     ␣  ␣   ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 001D 0 ; curr subcategory container database commands .push back (curr database command ); category map[ ] = curr category container ;

235. 001X — Unknown Category. Unbekannte Kategorie. Not in “Overview” (“Übersicht”).

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣  ;
curr category container content description english =  ␣  ;

236. ‘0’ — Unknown Field. Unbekanntes Feld.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; category map[ ] = curr category container ;

54  002@ — BIBLIOGRAPHICAL TYPE AND STATUS  IWF Metadata Harvester II §237

237. 002@ — Bibliographical Type and Status. Bibliographische Gattung und Status. Pica3 0500.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣        ␣   ␣  ;
curr category container content description english =  ␣    ␣    ␣  ;

238. ‘0’ — Bibliographical Type and Status. Bibliographische Gattung und Status. 002@ (Pica+), 0500 (Pica3).

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

[LDF 2006.08.03.] Added code for adding a Database Command that references Subcategory Container ::f 002 AT 0 to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣        ␣   ␣  ;
curr subcategory container content description english =  ␣    ␣    ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 002 AT 0 ; curr subcategory container database commands .push back (curr database command ); category map[ ] = curr category container ;

§239  IWF Metadata Harvester II  @ — IDENTIFICATION NUMBER (PPN) 55

239. @ — Identification Number (PPN). Identifikationsnummer (PPN). Pica+ 003@ / Pica3 0100.

[LDF 2006.07.24.]

!! No information sheet for this category in the “Categorization Guidelines” (“Katagorisierungsrichtlinien”)! [LDF 2006.07.24.] “PPN” = “Pica Production Number”. [LDF 2006.08.23.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣  ;
curr category container content description english =  ␣       ␣  ;

240. ‘0’ — Identification Number (PPN). Identifikationsnummer (PPN)

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣       ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 003 AT 0 ; curr subcategory container database commands .push back (curr database command ); category map[ ] = curr category container ;

56  009P — REMOTE ACCESS TO ELECTRONIC RESOURCES  IWF Metadata Harvester II §241

241. 009P — Remote access to electronic resources. Information regarding remote access to electronic resources. Angaben zum Zugriff auf elektronische Ressourcen im Fernzugriff. Pica+ 009P, Pica3 4083.

[LDF 2006.09.07.]

This is the first place where I place Database Command objects on the curr category container object and the curr subcategory container objects, where the function members point to functions belonging to another categories, namely:

Pica+ 209R, Pica3 7133

Lokale Angaben zum Zugriff auf elektronische Ressourcen im Fernzugriff Local information regarding remote access to electronic resources

I call this “reusing” Category Container and Subcategory Container functions. The fields are the same, and the data is written to the same tables, i.e., Remote Access and

Records Remote Access. [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ␣ ␣ ␣ ␣ ␣

    ␣  ␣  ;

curr category container content description english = ␣ ␣ ␣ ␣ ␣

    ␣  ;

242. ‘0’ — Format. [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R 0 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

§243  IWF Metadata Harvester II  ‘A’ — URL (UNIVERSAL RESOURCE LOCATOR) 57

243. ‘a’ — URL (Universal Resource Locator). [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣          ␣        ␣  ;
curr subcategory container content description english =  ␣          ␣        ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

244. ‘g’ — URN (Universal Resource Name). [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣          ␣        ␣  ;
curr subcategory container content description english =  ␣          ␣        ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R g ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

245. ‘S’ — License indicator. Lizenzindikator.

[LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R S ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

58  ‘X’ — INTERNAL REMARKS  IWF Metadata Harvester II §246

246. ‘x’ — Internal Remarks. Interne Bemerkungen.

[LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R x ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

247. ‘y’ — Text for the Web Display. Text für die Web-Anzeige.

[LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣    ␣   ␣  ;
curr subcategory container content description english =  ␣   ␣   ␣   ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R y ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

248. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

§249  IWF Metadata Harvester II  010@ — CODE(S) FOR LANGUAGES 59

249. 010@ — Code(s) for Languages. Code(s) für Sprachen. Pica+ 010@, Pica3 1500.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣    ␣  ;
curr category container content description english =  ␣   ␣  ;

250. ‘a’ — First Language Code for the Current Text.

1. Sprachencode fr den vorliegenden Text.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

[LDF 2006.08.03.] Added code for adding a Database Command that references Subcategory Container ::f 010 AT a to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german =

    ␣           ␣   ␣   ␣           ␣  ;

curr subcategory container content description english = ␣ ␣ ␣ ␣ ␣ ␣

; curr database command = new Database Command; curr database command function = Subcategory Container ::f 010 AT a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ; category map[ ] = curr category container ;

251. 011@ — Year of Appearance. Erscheinungsjahr.

[LDF 2006.07.24.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ;

curr category container content description english =  ␣  ␣  ;

60  ‘A’ — YEAR OF APPEARANCE (BEGINNING), FORM FOR SORTING  IWF Metadata Harvester II §252

252. ‘a’ — Year of Appearance (Beginning), Form for Sorting. ‘a’ Erscheinugsjahr (Beginn), Sortierform.

[LDF 2006.07.24.]

Log

[LDF 2006.08.04.] Added code for adding a Database Command that references Subcategory Container ::f 011 AT a to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ␣ ␣ ; curr subcategory container content description english = ␣ ␣ ␣ ␣ ␣

    ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 011 AT a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

253. ‘b’ — Year of Appearance (End), Form for Sorting. ‘b’ Erscheinugsjahr (Ende), Sortierform.

[LDF 2006.07.24.]

Log

[LDF 2006.08.04.] Added code for adding a Database Command that references Subcategory Container ::f 011 AT b to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ␣ ␣ ; curr subcategory container content description english = ␣ ␣ ␣ ␣ ␣ ␣

; curr database command = new Database Command; curr database command function = Subcategory Container ::f 011 AT b; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

§254  IWF Metadata Harvester II  ‘E’ — ORIGINAL YEAR OF APPEARANCE 61

254. ‘e’ — Original Year of Appearance. Ursprüngliches Erscheinugsjahr.

[LDF 2006.07.24.]

Log

[LDF 2006.08.04.] Added code for adding a Database Command that references Subcategory Container ::f 011 AT e to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣    ␣  ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 011 AT e; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

255. ‘n’ — Year of Appearance (according to RAK-WB). Erscheinugsjahr (nach RAK-WB).

[LDF 2006.07.24.]

Log

[LDF 2006.08.04.] Added code for adding a Database Command that references Subcategory Container ::f 011 AT n to curr subcategory container .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ␣ ␣ ; curr subcategory container content description english = ␣ ␣ ␣ ␣ ␣

; curr database command = new Database Command; curr database command function = Subcategory Container ::f 011 AT n; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ; category map[ ] = curr category container ;

62  016H — GENERAL MATERIAL NAME  IWF Metadata Harvester II §256

256. 016H — General Material Name. Allgemeine Materialbenennung. Pica+ 016H, Pica3 1108 [LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣  ;
curr category container content description english =  ␣        ␣  ;

257. ‘0’ — General Material Name. Allgemeine Materialbenennung.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

[LDF 2006.09.01.] Added code that references the function Subcategory Container ::f 016H 0 .

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣        ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 016H 0 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

258. ⟨ Define ZClient ::init category map 225 ⟩ +≡

category map[ ] = curr category container ;

§259  IWF Metadata Harvester II  019@ — CODE FOR COUNTRY OF PUBLICATION 63

259. 019@ — Code for Country of Publication. Code für Erscheinungsland.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣    ␣  ;
curr category container content description english =  ␣   ␣       ␣   ␣  ;

260. ‘a’ — Code for First Country of Publication. Code für 1. Erscheinungsland.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣    ␣  ␣  ;
curr subcategory container content description english =  ␣   ␣     ␣       ␣  ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; category map[ ] = curr category container ;

261. 021A — Main Canonical Title, Additional Information, Authorship. 021A — Main Canonical Title, Additional Information, Authorship. Hauptsachtitel, Zusätze, Verfasserangabe. Pica+ 021A / Pica3 4000. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ␣ ␣

; curr category container content description english = ␣ ␣ ␣ ␣

    ␣  ;

64  ‘1’ — STANDARD TEXT  IWF Metadata Harvester II §262

262. ‘1’ — Standard Text. Standardtext.

[LDF 2006.07.27.]

This field isn’t present in Pica+ 021A / Pica3 4000, but it is present in other categories for titles. It’s used for “j-sets” (“j-Sätze”). I have therefore added it to this category, in order to be able to use a single function to handle multiple categories. [LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 021A 1 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

263. ‘a’ — Main Canonical Title. Hauptsachtitel.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 021A a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

264. ‘d’ — Additions to the Main Canonical Title. Zusätze zum Hauptsachtitel.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣   ␣  ;
curr subcategory container content description english =  ␣  ␣   ␣     ␣         ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 021A d ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

§265  IWF Metadata Harvester II  ‘E’ — ADDITIONAL CREATOR 65

265. ‘e’ — Additional Creator. Zu ergänzender Urheber.

[LDF 2006.07.27.]

To Do

[LDF 2006.07.27.] Find a better English translation.

Log

[LDF 2006.07.27.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ␣ ␣ ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 021A e; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

266. ‘f’ — Parallel Canonical Title. Parallelsachtitel.

[LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ␣ ; curr category container subcategory map[ ] = curr subcategory container ;

267. ‘h’ Authorship. Verfasserangabe.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 021A h; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

66  ‘H’ AUTHORSHIP  IWF Metadata Harvester II §268

268. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

269. 028A — First author. 028A First author.

(1. Verfasser). Pica+ 028A / Pica3 3000. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ␣ ;

curr category container content description english =  ␣  ;

270. ‘9’ — Identification Number (PPN). Identifikationsnummer (PPN).

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣       ␣  ;

curr category container subcategory map[ ] = curr subcategory container ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028A 9 ; curr subcategory container database commands .push back (curr database command );

271. ‘a’ — Surname. Familienname.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028A a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

§272  IWF Metadata Harvester II  ‘C’ — PREFIX 67

272. ‘c’ — Prefix. Präfix.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr category container subcategory map[ ] = curr subcategory container ;

273. ‘d’ — Given Name. ‘d’ — Vorname.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028A d ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

274. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

68  028B — PERSONAL NAME / AUTHOR  IWF Metadata Harvester II §275

275. 028B — Personal Name / Author. Pica+ 028B / Pica3 120, 3000–3009.

Pica3 120:  Personal Name (Cataloguing form according to RSWK)

(RSWK = Regeln für den Schlagwortkatalog = Rules for the Subject Catalogue)

Pica3 3000–3009:  Author
Pica3 120:  Personenname (Ansetzungsform nach RSWK)

(RSWK = Regeln für den Schlagwortkatalog)

Pica3 3000–3009:  Verfasser

[LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ␣ ; curr category container content description german = ␣ ␣ ␣

; curr category container content description german += ; curr category container content description english = ␣ ␣ ␣ ␣

    ␣  ␣  ;

curr category container content description english += ;

276. ‘9’ — Identification Number (PPN). ‘9’ — Identifikationsnummer (PPN).

[LDF 2006.09.07.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣       ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 028B 9 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

277. ‘a’ — Surname. ‘a’ — Familienname.

[LDF 2006.09.07.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028B a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

§278  IWF Metadata Harvester II  ‘D’ — GIVEN NAME 69

278. ‘d’ — Given Name. ‘d’ — Vorname.

[LDF 2006.09.07.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028B d ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

279.

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

280. 028C — Other Contributing Persons. Sonstige beteiligte Personen. Pica+ 028C / Pica3 301x/302x.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣          ␣  ;
curr category container content description english =  ␣           ␣  ;

281. ‘9’ — Identification Number (PPN). ‘9’ — Identifikationsnummer (PPN).

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣       ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 028C 9 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

70  ‘A’ — SURNAME  IWF Metadata Harvester II §282

282. ‘a’ — Surname. ‘a’ — Familienname.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028C a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

283. ‘c’ — Prefix. ‘c’ — Präfix.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028C c; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

284. ‘d’ — Given Name. ‘d’ — Vorname.

[LDF Undated.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 028C d ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

285. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

§286  IWF Metadata Harvester II  033A — PLACE OF PUBLICATION, PUBLISHER 71

286. 033A — Place of Publication, Publisher. Ort, Verlag.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣  ;
curr category container content description english =  ␣  ␣            ␣  ;

287. ‘n’ — Publisher. ‘n’ — Verlag.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 033A n; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

288. ‘p’ — Place of Publication. ‘p’ — Ort.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 033A p; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

72  ‘P’ — PLACE OF PUBLICATION  IWF Metadata Harvester II §289

289. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

290. 034D — Size or Range, Specification of Material, Technical System. 034D — Umfangsangabe, spezifische Materialbenennung, technisches System.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ␣ ␣

    ␣          ␣  ;

curr category container content description english = ␣ ␣ ␣ ␣ ␣

    ␣         ␣  ;

291. ‘a’ — Text.

[LDF 2006.07.24.]

Log

[LDF 2006.07.24.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 034D a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

292. ⟨ Define ZClient ::init category map 225 ⟩ +≡

category map[ ] = curr category container ;

§293  IWF Metadata Harvester II  LINK TO SUPERORDINATE ENTITY 73

293. Link To Superordinate Entity. Pica+ 039B / Pica3 4241. [LDF 2006.11.23.]

Log

[2006.11.23.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣   ␣          ␣  ;
curr category container content description english =  ␣  ␣             ␣  ;

294. ‘a’ — Title of the Superordinate Entity. ‘a’ — Titel der größeren Einheit.

[LDF 2006.11.23.]

Log

[2006.11.23.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣   ␣          ␣  ;
curr subcategory container content description english =  ␣  ␣   ␣             ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 039B a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

295. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

74  041A — SUBJECTS  IWF Metadata Harvester II §296

296. 041A — Subjects. 041A — Schlagwörter. Pica+ 041A / Pica3 800, 5100–5199.

[LDF 2006.08.18.]

800:  Main Subject and Subsidiary Subjects (Subject Assignment)
5100–5199:  RSWK Chains

(RSWK: Regeln für den Schlagwortkatalog = Rules for the Subject Catalogue)

800:  Hauptschlagwort und Unterschlagwörter (Schlagwortansetzung)
5100–5199:  RSWK-Ketten

(RSWK: Regeln für den Schlagwortkatalog)

[LDF 2006.08.18.]

Log

[LDF 2006.08.18.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ␣ ; curr category container content description german = ␣ ␣ ␣

; curr category container content description german += ; curr category container content description english = ␣ ␣ ␣ ␣ ␣

    ␣  ;

curr category container content description english +=  ␣  ;

297. ‘9’ — Identification Number (PPN). ‘9’ — Identifikationsnummer (PPN).

[LDF 2006.08.21.]

This field is only present in Pica3 5100–5199, not Pica3 800. [LDF 2006.08.21.] ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣       ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 041A 9 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

§298  IWF Metadata Harvester II  ‘A’ — SUBJECT 75

298. ‘a’ — Subject. ‘a’ — Main or Subsidiary Subject/Subject; Second and additional permutation pattern; Subject Chain Information. ‘a’ — Hauptschlagwort/Schlagwort; Zweites und weiteres Permutationsmuster; Angaben zur Schlagwortkette.

[LDF 2006.08.18.]

This field is called “Haupt- bzw. Unterschlagwort” (“Main or Subsidiary Subject”) in Pica3 800, and “Schlagwort” (“Subject”) in Pica3 5100–5199. In Pica3 5100–5199, it is used for two other purposes:

1. “Second and additional permutation pattern” (“zweites und weiteres Permutationsmuster”), when preceded by the field ‘f’ (Permutationsmuster/Permutation Pattern).

2. “Subject Chain Information” (“Angaben zur Schlagwortkette”).

This unfortunate ambiguity makes it much more complicated to process entries where Category 041A, Field ‘a’, and possibly Field ‘f’ are present. [LDF 2006.08.21.]

Log

[LDF 2006.08.18.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german =

    ␣␣       ␣    ␣        ␣                   ␣␣ ;

curr subcategory container content description german +=  ␣   ␣  ;

curr subcategory container content description english = ␣ ␣␣ ␣ ␣

    ␣          ␣        ␣␣ ;

curr subcategory container content description english +=  ␣     ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 041A a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

299. ‘f’ — Permutation Pattern. ‘f’ — Permutationsmuster.

[LDF 2006.08.21.]

Log

[LDF 2006.08.21.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 041A f ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

76  ‘S’ — INDICATOR/SUBJECT INDICATOR  IWF Metadata Harvester II §300

300. ‘S’ — Indicator/Subject Indicator. ‘S’ — Indikator/Schlagwortindikator.

[LDF 2006.08.21.]

This field is called “Indikator” (“Indicator”) in Pica3 800 and “Schlagwortindikator” (“Subject Indicator”) in Pica3 5100–5199. [LDF 2006.08.21.]

Log

[LDF 2006.08.18.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 041A S ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

301. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

302. 047I — Content Summary (short). 047I — Inhaltliche Zusammenfassung (kurz). Pica+ 047I / Pica3 4207.

[LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ;

curr category container content description german =  ␣               ␣  ;
curr category container content description english =  ␣       ␣  ;

§303  IWF Metadata Harvester II  ‘A’ — TEXT 77

303. ‘a’ — Text.

[LDF 2006.09.07.]

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 047I a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

304.

Log

[LDF 2006.09.07.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ #if 0 /∗ 1 ∗/

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command );

#endif category map[ ] = curr category container ;

305. 203@ — Exemplar Production Number. 203@ — Exemplar-Produktionsnummer. Pica+ 203@ / Pica3 7800.

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ;

curr category container content description english =  ␣          ␣  ;

78  ‘0’ — EXEMPLAR PRODUCTION NUMBER  IWF Metadata Harvester II §306

306. ‘0’ — Exemplar Production Number. ‘0’ — Exemplar-Produktionsnummer.

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 203 AT 0 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

307. Category Container :: not needed at present. [LDF 2006.08.17.] ⟨ Define ZClient ::init category map 225 ⟩ +≡ #if 0

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command );

#endif category map[ ] = curr category container ;

308. 209A — Call Number. 209A — Signatur. Pica+ 209A / Pica3 7100–7109.

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ;

curr category container content description english =  ␣  ;

§309  IWF Metadata Harvester II  ‘A’ — CALL NUMBER 79

309. ‘a’ — Call Number. ‘a’ — Signatur.

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209A a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

310. ‘b’ — Library Number. ‘b’ — Bibliotheksnummer.

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209A b; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

80  ‘F’ — SPECIAL LOCATION  IWF Metadata Harvester II §311

311. ‘f’ — Special Location. ‘f’ — Sonderstandort.

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209A f ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

312. ‘j’ — Library Department. ‘j’ — Abteilung der Bibliothek.

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣   ␣  ;
curr subcategory container content description english =  ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209A j ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

313. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

§314  IWF Metadata Harvester II  209C — ACCESS NUMBER 81

314. 209C — Access Number. 209C — Zugangsnummer. Pica+ 209C / Pica3 8100

[LDF 2006.08.18.]

Log

[LDF 2006.08.18.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ;

curr category container content description english =  ␣  ;

315. ‘a’ — Access Number. ‘a’ — Zugangsnummer.

[LDF 2006.08.18.]

Log

[LDF 2006.08.18.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209C a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

316. ⟨ Define ZClient ::init category map 225 ⟩ +≡ #if 0

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command );

#endif category map[ ] = curr category container ;

82  209R — REMOTE ACCESS  IWF Metadata Harvester II §317

317. 209R — Remote Access. Local information regarding remote access to electronic resources. Lokale Angaben zum Zugriff auf elektronische Ressourcen im Fernzugriff. Pica+ 209R / Pica3 7133.

[LDF 2006.08.15.]

Log

[LDF 2006.08.15.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr category container = new Category Container; curr category container pica plus category id = ; curr category container pica 3 category id = ; curr category container content description german = ␣ ␣ ␣ ␣ ␣

    ␣          ␣  ␣  ;

curr category container content description english = ␣ ␣ ␣ ␣

    ␣  ␣          ␣  ;

318. ‘0’ — Format.

[LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R 0 ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

319. ‘a’ — URL (Universal Resource Locator).

[LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣          ␣        ␣  ;
curr subcategory container content description english =  ␣          ␣        ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R a; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

§320  IWF Metadata Harvester II  ‘G’ — URN (UNIVERSAL RESOURCE NAME) 83

320. ‘g’ — URN (Universal Resource Name). ‘g’ — URN (Universal Resource Name).

[LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣          ␣        ␣  ;
curr subcategory container content description english =  ␣          ␣        ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R g ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

321. ‘S’ — License indicator. ‘S’ — Lizenzindikator.

[LDF 2006.08.15.]

Log

[LDF 2006.08.15.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ; curr subcategory container content description german = ; curr subcategory container content description english = ␣ ; curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R S ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

322. ‘x’ — Internal Remarks. ‘x’ — Interne Bemerkungen.

[LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣  ;
curr subcategory container content description english =  ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R x ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

84  ‘Y’ — TEXT FOR THE WEB DISPLAY  IWF Metadata Harvester II §323

323. ‘y’ — Text for the Web Display. ‘y’ — Text für die Web-Anzeige.

[LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this section.

⟨ Define ZClient ::init category map 225 ⟩ +≡ curr subcategory container = new Subcategory Container; curr subcategory container pica plus field id = ;

curr subcategory container content description german =  ␣    ␣   ␣  ;
curr subcategory container content description english =  ␣   ␣   ␣   ␣  ;

curr database command = new Database Command; curr database command function = Subcategory Container ::f 209R y ; curr subcategory container database commands .push back (curr database command ); curr category container subcategory map[ ] = curr subcategory container ;

324. ⟨ Define ZClient ::init category map 225 ⟩ +≡

curr database command = new Database Command; curr database command function = Category Container :: ; curr category container database commands .push back (curr database command ); category map[ ] = curr category container ;

325. Show category map. [LDF Undated.] ⟨ Define ZClient ::init category map 225 ⟩ +≡ #if 0

for (Category Map Type ::iterator iter = category map.begin( ); iter ≠ category map.end ( );

++iter ) { temp strm ≪ ≪ iter first ≪ ; iter second show (temp strm); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

} #endif

326. End of ZClient ::init category map definition. [LDF Undated.] ⟨ Define ZClient ::init category map 225 ⟩ +≡

return 0; } /∗ End of ZClient ::init category map definition. ∗/

327. Search using PQF syntax. [LDF Undated.] “PQF” stands for “Prefix Query Syntax”. See the

YAZ User’s Guide and Reference (http://www.indexdata.com/yaz/doc/tools.tkl#PQF) for more infor-

mation. [LDF 2006.10.11.] ⟨ Declare ZClient functions 197 ⟩ +≡

int search pqf (char ∗curr query str , ZOOM connection ∗curr connection = 0);

§328  IWF Metadata Harvester II  SEARCH USING PQF SYNTAX 85

328. ⟨ Define ZClient functions 198 ⟩ +≡

int ZClient ::search pqf (char ∗curr query str , ZOOM connection ∗curr connection)

{ stringstream temp strm; resultsets .push back (static cast⟨ZOOM resultset ∗⟩(malloc(sizeof (ZOOM resultset)))); ZOOM resultset ∗curr resultset = resultsets .back ( ); if (curr connection ≡ 0 ∧ connections .back ( ) ≠ 0) curr connection = connections .back ( ); else if (curr connection ≡ 0) {

temp strm ≪ ␣␣ ␣ ≪ endl ≪ ␣ ␣ ␣ ␣ ␣ ≪

          ␣                  ␣ ≪ ␣  ≪
          endl ≪  ␣        ␣              ␣    ␣       ␣     ␣ ;

return 1; } /∗ else if (curr connection ≡ 0) ∗/ ∗curr resultset = ZOOM connection search pqf (∗curr connection, curr query str ); return 0;

} /∗ End of ZClient ::search pqf definition. ∗/

329. Parse Records. [LDF Undated.]

Log

[LDF 2006.09.06.] Changed name of ofstream log file data member to log strm.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

⟨ Declare ZClient functions 197 ⟩ +≡ int parse records (const char ∗in filename);

330. ⟨ Define ZClient functions 198 ⟩ +≡

int ZClient ::parse records (const char ∗in filename){ stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif int result = 0;

331. Open the file containing the records for input and a log file for output. The name of the input file is passed to this function as an argument. In this example, it’s record.txt. The log file is log.txt.

[LDF 2006.07.18.]

86  PARSE RECORDS  IWF Metadata Harvester II §332

⟨ Define ZClient functions 198 ⟩ +≡ ifstream in file; in file.open(in filename); 332. We’ll be reading characters one-by-one from the input file. Sometimes we’ll need one character of “lookahead”, hence next char . The characters must be unsigned, because the input file contains special characters, which would otherwise be interpreted as negative numbers, causing a run-time error.

[LDF 2006.07.18.]

⟨ Define ZClient functions 198 ⟩ +≡ unsigned char curr char = ; unsigned char next char = ;

333. The fields in PICA are marked by the character ^{∘}237 followed by another character. curr field id and prev field id are used to store this second character. They are initialized to , which is just a name for 0 that makes it clear that it’s a character rather than some other kind of number. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

unsigned char curr field id = ;

unsigned char prev field id = ;

334. The number of characters read. Not currently used for anything. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

unsigned long char ctr = 0;

335. The number of metadata records processed. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

unsigned long record ctr = 0;

336. PICA+ records have “categories”, with codes such as “001@”, “027A”, “028/03”, etc., and “fields” with codes as described above. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

string curr category id ;

string curr field value;

string curr repeat code;

337. The variable state is used to store information about what the program is doing at a given moment. The state of the program determines how characters are interpreted. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

const unsigned short = 0;

const unsigned short = 1;

const unsigned short = 2;

const unsigned short = 3;

unsigned short state = ; #if 0

temp strm ≪ ␣ ␣ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

Pica Record ∗curr pica record = 0; while (true) { curr char = in file.get ( );

§338  IWF Metadata Harvester II  PARSE RECORDS 87

/∗ Read a character from the input file. LDF 2006.07.18. ∗/ ++char ctr ; 338. This is EOF (end-of-file). It would normally be -1, but curr char is unsigned. When we read this, we’re done. Some error handling should be added here. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

if (curr char ≡ 255) {

if (curr pica record ≠ 0) { result = curr pica record write to database(this , database, log strm); temp strm ≪ ␣ ␣ ␣ ≪ result ≪ endl ; curr pica record show (temp strm, ); log strm.lock ( ); log strm.output stream ≪ temp strm.str ( ) ≪ endl ≪ endl ; log strm.unlock ( );

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( ); delete curr pica record ; curr pica record = 0;

}

break; } /∗ if (curr char ≡ 255) (EOF) ∗/ else if (curr char ≡ ) /∗ Newline. ∗/ {

339. Not reading a record, so just keep going. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

if (state ≡ ) {

continue; }

340. A line in a record starts with category id, contains a variable number of field ids with associated text, and ends in a newline. So a newline marks the end of the information associated with a particular category id. Some categories can appear more than once within a record, but then the category id must be repeated at the beginning of another line. [LDF 2006.07.18.]

Log

[LDF 2006.07.20.] !! BUG FIX: Now resetting prev field id to .

⟨ Define ZClient functions 198 ⟩ +≡

else if (state ≡  ) { prev field id =  ;  /∗ Reset prev field id ∗/
temp strm ≪  ␣          ␣  ≪ endl ≪

␣ ␣ ≪ curr field value ≪ endl ≪ ␣ ␣ ≪ curr field id ≪ endl ≪ ␣ ␣ ≪ prev field id ≪ endl ≪

      ␣       ␣  ␣  ;

log strm.lock ( );

log strm.output stream ≪ ␣ ␣ ≪ temp strm.str ( ) ≪ ≪ curr field value ≪ ␣ ; log strm.unlock ( );

#if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( ); 341. This is one of two places where we must process the information we’ve gathered. It’s put into Pica Record curr pica record . [LDF 2006.07.20.] ⟨ Define ZClient functions 198 ⟩ +≡

result = write field data(curr category id , curr repeat code, curr field id , curr field value, curr pica record );

342. Peek at the next character without removing it from the input stream. Actually, “peeking” does remove it, but puts it back right away. If we have two newlines in a row, that’s the end of the record. In this case, when the second newline is read again, state will be , so it will be ignored. If next char isn’t a newline, there should be more lines with information, or it might be EOF. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

next char = in file.peek ( );

if (next char ≡ ) {

temp strm ≪ ␣ ␣ ␣ ≪ record ctr ≪ endl ≪

        ␣       ␣  ␣  ;

log strm.lock ( );

log strm.output stream ≪ ␣ ␣ ≪ temp strm.str ( ) ≪ ; log strm.unlock ( );

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

if (curr pica record ≠ 0) { curr pica record write to database(this , database, log strm); curr pica record show (temp strm, ); log strm.lock ( ); log strm.output stream ≪ temp strm.str ( ) ≪ endl ≪ endl ; log strm.unlock ( );

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( ); delete curr pica record ; curr pica record = 0;

}

state = ; } /∗ if (next char ≡ ) ∗/ else {

state = ; } 343. Reset the strings and chars we’re using to gather information to the empty string and the null character, respectively. [LDF 2006.07.18.]

Log

[LDF 2006.07.20.] Now setting curr repeat code to .

⟨ Define ZClient functions 198 ⟩ +≡ curr category id = ; curr repeat code = ; curr field value = ; prev field id = curr field id ;

curr field id =  ; }  /∗ else if (state ≡  ) ∗/

344. This was just for testing purposes. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

else { log strm.lock ( ); log strm.output stream ≪ ≪ curr char ; log strm.unlock ( );

}

}  /∗ else if (curr char ≡  ) ∗/

345. ^{∘}237 : Control sequence for a field. ⟨ Define ZClient functions 198 ⟩ +≡

else if (curr char ≡ ^{∘}237 ) { curr char = in file.get ( );

++char ctr ; prev field id = curr field id ; curr field id = curr char ;

346. Handle current field, if it’s not empty. We’ve got a new field id, so if there was an old one, we need to handle it, and its associated text, before we start collecting the text for the new one. This is the second place where information will be written to a database (probably). [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

if (prev field id ≠ ) {

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ≪ endl ≪ ␣ ␣ ≪ prev field id ≪ endl ≪ ␣ ␣ ≪ curr field value ≪ endl ≪ ␣ ␣ ≪ curr char ≪ endl ≪ ␣ ␣ ≪ curr category id ;

log strm.lock ( );

log strm.output stream ≪ ␣ ≪ temp strm.str ( ) ≪ ;

log strm.unlock ( ); #if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

result = write field data(curr category id , curr repeat code, prev field id , curr field value,

curr pica record ); curr field value = ; /∗ Reset curr field value ∗/

}  /∗ if (prev field id ≠  ) ∗/

347. The first field id for a line. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

else /∗ prev field id ≡ ∗/ {

temp strm ≪  ␣ ␣       ␣        ␣   ␣ ␣      ␣    ␣              ␣ ≪ ␣  ≪
endl ≪  ␣     ␣  ≪ endl ≪  ␣   ␣ ≪ curr category id ≪
endl ≪  ␣  ␣ ≪ curr field id ≪ endl ≪  ␣   ␣ ≪

curr field value; log strm.lock ( ); log strm.output stream ≪ ␣ ≪ temp strm.str ( ) ≪ ; log strm.unlock ( );

#if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

curr field value = ; } /∗ else (prev field id ≡ ) ∗/ } /∗ else if (curr char ≡ ^{∘}237 ) ∗/ else if (isspace(curr char )) {

348. Skip over spaces before the first record, or between records. There shouldn’t be any, though.

[LDF 2006.07.18.]

⟨ Define ZClient functions 198 ⟩ +≡

if (state ≡ ) {

continue; }

349. A category id is terminated by a space. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

else if (state ≡ ) { temp strm ≪

␣          ␣  ≪ endl ≪  ␣   ␣ ≪
curr category id ≪ endl ≪  ␣       ␣  ␣  ≪

␣ ␣ ≪ static cast⟨unsigned int⟩(curr category id .length( )); string ::size type pos ; if (curr category id .length( ) > 4) {

pos = curr category id .find ( );

curr repeat code = curr category id .substr (pos + 1);

curr category id .erase(pos ); }

350. Now we start collecting the information for a field. The next thing we should read should be a “field id”, followed by a “field value”. [LDF 2006.07.18.] ⟨ Define ZClient functions 198 ⟩ +≡

state = ; curr field value = ; } 351. Append curr char to curr field value. The case that curr char is a field id is caught above. It’s always the single character that follows ^{∘}237 , and it can’t be a space. [LDF 2006.07.19.] ⟨ Define ZClient functions 198 ⟩ +≡

else

if (state ≡ ) { curr field value += curr char ;

}

352. Just for testing. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

else { log strm.lock ( ); log strm.output stream ≪ ≪ curr char ; log strm.unlock ( );

}

} /∗ else if (isspace(curr char )) ∗/

353. Other characters. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

else {

354. We’ve found a character, so start collecting a category id. Please note: The following conditional is if , not else if , so after this code executes, it will be true, and the code it controls will be executed.

[LDF 2006.07.19.]

⟨ Define ZClient functions 198 ⟩ +≡

if (state ≡ ) { state = ; ++record ctr ; curr pica record = new Pica Record;

}

355. We’re collecting a category id, so add this character to it. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

if (state ≡ ) {

curr category id += curr char ; }

356. We’re collecting the text for a field, so add this character to it. The case that curr char is a field id is caught above. It’s always the single character that follows ^{∘}237 , and it can’t be a space. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

else

if (state ≡ ) { curr field value += curr char ;

} log strm.lock ( ); log strm.output stream ≪ curr char ; log strm.unlock ( ); } /∗ else (Other characters.) ∗/ } /∗ while ∗/ 357. We’ve read EOF, so we’re done. [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif in file.close( ); return 0; } /∗ End of ZClient ::parse records definition. ∗/

358. Write Field Data. [LDF Undated.]

Log

[LDF 2006.09.06.] Changed name of ofstream log file data member to log strm.

[LDF 2006.09.06.] Made stringstream temp strm a local variable within ZClient ::write field data. Formerly, it was static and local to this file. I’ve made this change in the interests of thread-safety.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

§359  IWF Metadata Harvester II  WRITE FIELD DATA 93

⟨ Declare ZClient functions 197 ⟩ +≡ int write field data( string &category id , string &repeat code, char field id , string &field value, Pica Record ∗pica record ); 359. ⟨ Define ZClient functions 198 ⟩ +≡

int ZClient ::write field data( string &category id , string &repeat code, char field id , string &field value, Pica Record ∗pica record ){ stringstream temp strm;

Category Container ∗curr category container = 0; Category Container ∗curr pica record category container = 0; Subcategory Container ∗curr subcategory container = 0; Subcategory Container ∗curr pica record subcategory container = 0; curr category container = category map[category id ]; if (curr category container ≡ 0) {

temp strm ≪ ␣ ␣␣ ␣ ≪ category id ≪

      ␣       ␣     ␣     ␣␣        ␣   ␣         ␣ ;

log strm.lock ( );

log strm.output stream ≪ ␣ ≪ temp strm.str ( ) ≪ endl ≪ endl ;

log strm.unlock ( );

#if 0

AfxMessageBox (temp strm.str ( ).c str ( ));

#endif temp strm.str ( ); return 1;

} else /∗ curr category container ≠ 0 ∗/ { temp strm ≪ ␣ ≪ category id ≪ ␣ ␣ ≪

curr category container content description german ≪ endl ; curr subcategory container = curr category container subcategory map[field id ]; if (curr subcategory container ≡ 0) {

temp strm ≪ ␣ ␣␣ ␣ ≪ field id ≪

      ␣       ␣     ␣     ␣␣         ␣ ;

log strm.lock ( );

log strm.output stream ≪ ␣ ≪ temp strm.str ( ) ≪ endl ≪ endl ;

log strm.unlock ( );

#if 0

AfxMessageBox (temp strm.str ( ).c str ( ));

#endif temp strm.str ( ); return 1;

} else /∗ curr subcategory container ≠ 0 ∗/ { temp strm ≪ ␣ ␣␣ ␣ ≪ field id ≪ ␣ ␣␣ ≪

curr subcategory container content description german ≪ endl ≪ ␣ ␣ ≪ field value;

log strm.lock ( ); log strm.output stream ≪ ␣ ≪ temp strm.str ( ) ≪ endl ≪ endl ; log strm.unlock ( );

#if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

94  WRITE FIELD DATA  IWF Metadata Harvester II §359

curr pica record category container = 0; pair⟨Category Multimap Type ::iterator, Category Multimap Type ::iterator⟩

iter pair = pica record categories .equal range(category id ); if (iter pair .first ≠ pica record categories .end ( ) ∧ iter pair .first first ≡ category id ) {

for (Category Multimap Type ::iterator iter = iter pair .first ; iter ≠ iter pair .second ;

++iter ) { if (iter second repeat code ≡ repeat code) curr pica record category container = iter second ;

} } if (curr pica record category container ≡ 0) {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ≪ ␣ ␣ ≪ endl ≪

    ␣ ␣   ␣                    ␣    ␣       ␣  ␣ ≪
    ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif curr pica record category container = new Category Container; ∗curr pica record category container = ∗curr category container ; curr pica record category container repeat code = repeat code; pica record categories .insert (make pair (category id , curr pica record category container ));

#if 0 /∗ 1 ∗/ pica record categories [category id ] show (temp strm); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ if (curr pica record category container ≡ 0) ∗/ else /∗ curr pica record category container ≠ 0 ∗/ {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ≪ ␣ ␣ ≪ endl ≪

    ␣                    ␣       ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (curr pica record category container ≠ 0) ∗/ 360. Add Subcategory Container and push it onto curr pica record category container . [LDF Undated.] ⟨ Define ZClient functions 198 ⟩ +≡

curr pica record subcategory container = new Subcategory Container; ∗curr pica record subcategory container = ∗curr subcategory container ; curr pica record subcategory container field value = field value; curr pica record category container subcategory vector .push back (make pair (field id ,

curr pica record subcategory container )); #if 0

temp strm ≪ ␣ ␣␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif return 0; } /∗ else (curr subcategory container ≠ 0) ∗/ } /∗ else (curr category container ≠ 0) ∗/ } /∗ End of ZClient ::write field data definition. ∗/

361. Putting ZClient together. [LDF 2006.09.18.]

362. This is what’s compiled.

⟨ Include files 13 ⟩

⟨ zclient.web 188 ⟩

⟨ Initialize static constants for ZClient 194 ⟩ ⟨ Define ZClient functions 198 ⟩ ⟨ Define ZClient ::init category map 225 ⟩

96  PUTTING ZCLIENT TOGETHER  IWF Metadata Harvester II §363

363. This is what gets written to zclient.h. [LDF Undated.] ⟨ 363 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩ #include

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class ZClient 192 ⟩

364. ZOOM functions (ztstzoom.web). [LDF 2006.10.05.] The functions in this file contain code and comments from files from the YAZ distribution. [LDF 2006.10.05.]

Log

Created this file. It contains code formerly in ldf zoomtst.h, zoomtst0.cpp, zoomtst2.cpp, and zoomtst3.cpp.
zoomtst1.cpp was empty.
Server: z3950.gbv.de

Character Set Port
ISO 5426  210
ISO 8859-1  20010
ANSEL  20011

Guest Login ID: 999 Passwort: abc

⟨ ztstzoom.web 364 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 382.

365. Include files. ⟨ Include files 13 ⟩ +≡ #include

366. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

367. zoomtst0. [LDF Undated.] ⟨ Declare ZOOM functions 367 ⟩ ≡

int zoomtst0 (void);

See also sections 369 and 379. This code is used in section 383.

§368  IWF Metadata Harvester II  ZOOMTST0  97

368. ⟨ Define ZOOM functions 368 ⟩ ≡

int zoomtst0 (void){ const char ∗errmsg , ∗addinfo; int error ;

stringstream temp strm; /∗ GBV ∗/ #if 0 /∗ 1 ∗/

ZOOM connection z = ZOOM connection new ( , 20010); #endif #define 1 /∗ 0 ∗/ #if

ZOOM connection z = ZOOM connection new ( , 0); #else

ZOOM connection z = ZOOM connection new ( , 0); #endif

if ( ( error = ZOOM connection error (z, &errmsg ,

&addinfo) ) ) { temp strm ≪ ␣ ≪ errmsg ≪ ␣ ≪ error ≪ ␣ ≪ addinfo; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); exit (2); } ZOOM resultset r; const char ∗rec;

#if

ZOOM connection option set (z,  ,  );
ZOOM connection option set (z,  ,  );
r = ZOOM connection search pqf (z,  ␣   ␣  );

#else

ZOOM connection option set (z,  ,  );
r = ZOOM connection search pqf (z,  ␣   ␣  );

#endif rec = ZOOM record get (ZOOM resultset record (r, 0), , 0); if (rec) {

temp strm ≪ ␣ ≪ rec;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

}

else AfxMessageBox ( ␣ ␣ );

return 0; } /∗ End of zoomtst0 definition. ∗/

See also sections 370, 371, 372, 373, 374, 375, 376, 377, 378, and 380. This code is used in section 382.

369. zoomtst2. [LDF Undated.]

Log

[LDF Undated.] Added this function.

[LDF 2006.08.31.] Added the optional bool arguments perform search, write records file, clear database , parse records , and bool display records , all with the default true. Now using these variables rather than preprocessor macros to control whether zoomtst2 performs a search, writes the file records.txt, clears the database, parses the records, and/or displays records.

[LDF 2006.09.25.] Changed the type of the bool arguments to BOOL and their defaults to . Using bool and true caused Microsoft Visual Studio to issue warnings.

[LDF 2006.10.16.] Added the argument unsigned short server selector .

98 ZOOMTST2  IWF Metadata Harvester II  §369

⟨ Declare ZOOM functions 367 ⟩ +≡ int zoomtst2 ( unsigned short server selector , CString search command , BOOL perform search = , BOOL write records file = , BOOL clear database = , BOOL parse records = , BOOL display records = );

370. ⟨ Define ZOOM functions 368 ⟩ +≡

int zoomtst2 ( unsigned short server selector , CString search command , BOOL perform search, BOOL write records file, BOOL clear database, BOOL parse records , BOOL display records ){ stringstream temp strm;

stringstream sql strm; stringstream message strm; ZClient z(ZClient :: , ); z.init category map( ); temp strm ≪ ␣ ␣ ≪ server selector ≪

endl ≪ ␣ ␣ ␣ ␣ ≪ (server selector & ZClient :: );

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); /∗ START HERE: LDF 2006.10.16. ∗/

#if 0 /∗ 1 ∗/

return 0; /∗ End of testing. LDF 2006.10.16. ∗/ #endif

if (perform search) { #if 1 /∗ 0 ∗/

temp strm ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

string search str = search command ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ search str ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif z.search pqf (const cast⟨char ∗⟩(search str .c str ( ))); 371. 1108 Elektronische Ressource UND 5550 Vorlesung UND 5550 Video [LDF 2006.07.13.] ⟨ Define ZOOM functions 368 ⟩ +≡

long rec ctr = 0; const char ∗errmsg ; const char ∗addinfo; const char ∗diagset ; int error ;

372. Block here: only one connection. ⟨ Define ZOOM functions 368 ⟩ +≡

while (ZOOM event (1, z.get last connection( ))) ;

373. See if any error occurred. ⟨ Define ZOOM functions 368 ⟩ +≡

if ( ( error = ZOOM connection error x (∗(z.get last connection( )), &errmsg , &addinfo, &diagset ) ) ) {

temp strm ≪ ␣ ≪ diagset ≪ ␣ ≪ errmsg ≪ ≪ error ≪ ␣ ≪ addinfo; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); } /∗ if ∗/

374. OK. Print hit count. ⟨ Define ZOOM functions 368 ⟩ +≡

else {

rec ctr = static cast⟨long⟩(z.get last resultset size( )); #if 1 /∗ 0 ∗/

temp strm ≪ ␣ ␣ ≪ rec ctr ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

} /∗ else ∗/ if (write records file) {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif int pos ; int len; int extended chars ; const char ∗rec; ofstream out file; out file.open( );

375. Go through all records at target. ⟨ Define ZOOM functions 368 ⟩ +≡

for (pos = 0; pos < rec ctr ; pos^{++}) { rec =

ZOOM record get (ZOOM resultset record (∗(z.get last resultset ( )), pos ), , &len); /∗ “raw” or “render” syntax ∗/ 376. If rec is non-null, we got a record for display. ⟨ Define ZOOM functions 368 ⟩ +≡

if (rec) { temp strm ≪ pos + 1 ≪ endl ; if (rec) {

extended chars = GetExtendedChars (rec, len); #if 0 /∗ 1 ∗/

temp strm ≪ rec ≪ ␣ ␣ ≪ len ≪ endl ≪ ␣ ␣ ␣ ≪ extended chars ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

out file ≪ rec ≪ ; } /∗ if (rec) ∗/ else {

#if 0 temp strm ≪ rec ≪ ␣ ␣ ≪ len ≪ endl ≪ ␣ ␣ ␣ ≪ extended chars ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else ∗/ temp strm.str ( );

} /∗ if (rec) ∗/ } /∗ for ∗/ /∗ ***** (5) ∗/ out file.close( ); } /∗ if (write records file) ∗/ else /∗ ¬write records file ∗/ {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (¬write records file) ∗/ } /∗ if (perform search) ∗/ else /∗ (¬perform search) ∗/ {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (¬perform search) ∗/ if (parse records ) {

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

if (clear database) { #if 1 /∗ 0 ∗/

temp strm ≪ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

z.clear database( ); } /∗ if (clear database) ∗/ else /∗ ¬clear database ∗/ {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (¬clear database) ∗/ z.parse records ( );

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ if (parse records ) ∗/ else /∗ ¬parse records ∗/ {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ␣␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (¬parse records ) ∗/ 377.

Log

[LDF 2006.09.06.] Now passing CString curr search command str to DB Display ::display records .

⟨ Define ZOOM functions 368 ⟩ +≡ if (display records ) { DB Display db display ; db display .open html file( ); CString curr search command str ; if (¬perform search) curr search command str = ␣ ␣ ; else if (¬write records file) {

temp strm ≪  ␣   ␣          ␣   ␣       ␣    ␣      ␣  ≪
␣        ␣␣  ≪ search command ≪  ;

curr search command str = temp strm.str ( ).c str ( );

temp strm.str ( ); } else if (¬parse records ) {

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

      ␣   ␣       ␣       ␣       ␣  ␣   ␣  ≪

␣        ␣␣  ≪ search command ≪  ;

curr search command str = temp strm.str ( ).c str ( );

temp strm.str ( ); } else if (¬clear database) {

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

      ␣   ␣       ␣     ␣       ␣  ␣   ␣         ␣   ␣   ␣ ≪

      ␣      ␣        ␣      ␣       ␣    ␣  ≪

␣        ␣␣  ≪ search command ≪  ;

curr search command str = temp strm.str ( ).c str ( );

temp strm.str ( ); } else {

temp strm ≪ ␣ ␣␣ ≪ search command ≪ ;

curr search command str = temp strm.str ( ).c str ( );

temp strm.str ( ); }

#if 0 /∗ 1 ∗/

( ∧ parse records ∧ write records file ∧ clear database ) ? search command : ; #endif #if 1 /∗ 0 ∗/

db display .display records (curr search command str ); #else

db display .display records (curr search command str , 26, 27); #endif

db display .close html file( ); #if 1 /∗ 0 ∗/

temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ if (display records ) ∗/ else /∗ ¬display records ∗/ {

#if 1 /∗ 0 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (¬display records ) ∗/

378. Only do this if I’ve actually searched for records. [LDF Undated.] ⟨ Define ZOOM functions 368 ⟩ +≡

if (perform search) { /∗ !! TODO: Put code for this in ∼ZClient. LDF Undated. ∗/ ZOOM resultset destroy (∗(z.get last resultset ( ))); ZOOM connection destroy (∗(z.get last connection( )));

} /∗ if (perform search) ∗/ return 0;

#if 0 /∗ 1 ∗/

exit (0); #endif

} /∗ End of zoomtst2 definition. ∗/

379. zoomtst3. [LDF Undated.] ⟨ Declare ZOOM functions 367 ⟩ +≡

int zoomtst3 (void);

380. ⟨ Define ZOOM functions 368 ⟩ +≡

int zoomtst3 (void) {

return 0; } /∗ End of zoomtst3 definition. ∗/

381. Putting ZOOM functions together. [LDF 2006.10.05.]

382. This is what’s compiled.

⟨ Include files 13 ⟩

⟨ ztstzoom.web 364 ⟩

⟨ using declarations for namespaces 191 ⟩ ⟨ Define ZOOM functions 368 ⟩

104  PUTTING ZOOM FUNCTIONS TOGETHER  IWF Metadata Harvester II §383

383. This is what’s written to ztstzoom.h ⟨ 383 ⟩ ≡

⟨ using declarations for namespaces 191 ⟩

⟨ Declare ZOOM functions 367 ⟩

384. Output Stream Type (opstrmtp.web). [LDF 2006.09.18.]

⟨ opstrmtp.web 384 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 394.

385. Preprocessor macro calls. [LDF Undated.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once #include #include #include

386. Include files for Output Stream Type. [LDF 2006.09.18.] ⟨ Include files 13 ⟩ +≡ #include

387. “Using” declarations for namespaces. [LDF 2006.09.18.] ⟨ “Using” declarations for namespaces 387 ⟩ ≡

using namespace std;

See also sections 420 and 567. This code is used in sections 393, 563, and 762.

388. Output Stream Type struct declaration. [LDF 2006.09.06.]

Log

[LDF 2006.09.06.] Added this struct declaration. It contains the data members ofstream output stream and CMutex mutex , and the functions lock and unlock .

⟨ Declare struct Output Stream Type 388 ⟩ ≡

struct Output Stream Type { ofstream output stream; CMutex mutex ; int lock (void); int unlock (void);

};

This code is used in section 393.

389. Functions. [LDF 2006.09.06.]

390. Locking. [LDF 2006.09.06.]

§390  IWF Metadata Harvester II  LOCKING 105

Log

[LDF 2006.09.06.] Added this function.

⟨ Define Output Stream Type functions 390 ⟩ ≡ int Output Stream Type ::lock (void) {

mutex .Lock ( ); return 0;

}

See also section 391. This code is used in section 394.

391. Unlocking. [LDF 2006.09.06.]

Log

[LDF 2006.09.06.] Added this function.

⟨ Define Output Stream Type functions 390 ⟩ +≡ int Output Stream Type ::unlock (void) {

mutex .Unlock ( ); return 0;

}

392. Putting Output Stream Type together. [LDF 2006.09.18.]

393. This is what’s written to opstrmtp.h. [LDF 2006.09.18.] ⟨ 393 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩ ⟨ “Using” declarations for namespaces 387 ⟩ ⟨ Declare struct Output Stream Type 388 ⟩

106  PUTTING OUTPUT STREAM TYPE TOGETHER  IWF Metadata Harvester II §394

394. This is what’s compiled.

⟨ Include files 13 ⟩

  ⟨ opstrmtp.web 384 ⟩

⟨ Define Output Stream Type functions 390 ⟩

395. Pica Record (picarcrd.web). [LDF 2006.09.18.]

⟨ picarcrd.web 395 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 417.

396. Preprocessor macro calls. [LDF Undated.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

397. Include files for Pica Record. [LDF 2006.09.18.] ⟨ Include files 13 ⟩ +≡ #include

398. using declarations for namespaces. [LDF 2006.09.18.] ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

399. Forward declarations. [LDF 2006.07.19.] The declaration of ZClient is needed for the friend declaration in class Pica Record declaration.

[LDF 2006.07.19.]

⟨ Forward declarations 399 ⟩ ≡

class ZClient;

See also section 768. This code is used in sections 416 and 776.

400. Pica Record class declaration. [LDF 2006.09.06.]

Log

[LDF 2006.07.19.] Added this class declaration.

[LDF 2006.07.25.] In the declaration of write to database: Added ZClient ∗zclient argument.

⟨ Declare class Pica Record 400 ⟩ ≡

class Pica Record

{

friend ZClient; protected: Category Multimap Type categories ;

See also section 401. This code is used in section 416.

§401  IWF Metadata Harvester II  PICA RECORD CLASS DECLARATION 107

401.

Log

[LDF 2006.09.06.] In the declaration of write to database: Changed name of ofstream &log file argument to log strm.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

⟨ Declare class Pica Record 400 ⟩ +≡ public: ⟨ Declare Pica Record functions 403 ⟩

} ;

402. Functions. [LDF 2006.09.06.]

403. Constructor. [LDF Undated.] ⟨ Declare Pica Record functions 403 ⟩ ≡

Pica Record(void);

See also sections 405, 407, and 413. This code is used in section 401.

404. ⟨ Define Pica Record functions 404 ⟩ ≡

Pica Record ::Pica Record(void)

{

return; }

See also sections 406, 408, 409, 410, 411, 412, and 414. This code is used in section 417.

405. Destructor. [LDF Undated.] ⟨ Declare Pica Record functions 403 ⟩ +≡

∼Pica Record(void);

108  DESTRUCTOR  IWF Metadata Harvester II §406

406. ⟨ Define Pica Record functions 404 ⟩ +≡

Pica Record ::∼Pica Record(void)

{

return; }

407. Write to database. [LDF 2006.07.19.]

Log

[LDF 2006.07.19.] Added this function.

[LDF 2006.07.25.] Added ZClient ∗zclient argument.

[LDF 2006.09.06.] Changed name of ofstream &log file argument to log strm.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

⟨ Declare Pica Record functions 403 ⟩ +≡ int write to database(ZClient ∗zclient , CDatabase ∗database, Output Stream Type &log strm);

408. ⟨ Define Pica Record functions 404 ⟩ +≡

int Pica Record ::write to database(ZClient ∗zclient , CDatabase ∗database, Output Stream Type

&log strm){ stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif Category Container ∗curr reference category = 0; Subcategory Container ∗curr reference subcategory = 0; if (categories .size( ) < 1) {

temp strm ≪ ␣␣ ␣ ␣␣ ≪

           ␣ ␣ ≪ endl ≪  ␣        ␣              ␣    ␣
           ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

§409  IWF Metadata Harvester II  WRITE TO DATABASE 109

return 1; } /∗ if (categories .size( ) < 1) ∗/ 409. Get number for the new record. [LDF Undated.]

Log

[LDF 2006.09.06.] !! BUG FIX: Now using top1 in the select command contained in the SQL code. Formerly, this could fail, because sorting tables with large

numbers of lines doesn’t always work. The problem seems to involve the commmunication of the Visual C++ library functions for ODBC and Microsoft SQL Server 2000.

⟨ Define Pica Record functions 404 ⟩ +≡ long curr record ctr ;

sql strm ≪  ␣        ␣ ≪  ␣        ␣ ≪

    ␣   ␣ ␣         ␣    ␣       ␣ ≪  ␣  ␣         ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif database ExecuteSQL(sql strm.str ( ).c str ( )); sql strm.str ( ); Temp IDs curr temp id ; curr temp id .Open( ); curr record ctr = curr temp id .m temp id + 1;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

curr record ctr ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

110  WRITE TO DATABASE  IWF Metadata Harvester II §410

410. Add new record. [LDF Undated.] ⟨ Define Pica Record functions 404 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ␣ ≪ ␣ ≪ curr record ctr ≪ ␣ ≪ zclient source id ≪ ␣ ≪

␣               ␣       ␣  ;

database ExecuteSQL(sql strm.str ( ).c str ( )); sql strm.str ( ); for (Category Multimap Type ::iterator iter = categories .begin( );

iter ≠ categories .end ( ); ^{++}iter ) { if (iter second subcategory vector .size( ) < 1) {

temp strm ≪ ␣␣ ␣ ␣␣ ≪ endl ≪ ␣ ␣ ≪ iter second pica plus category id ≪ ␣ ≪ iter second content description german ≪ ≪ endl ≪ ␣ ␣ ≪ endl ≪ ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); continue;

} /∗ if (categories .size( ) < 1) ∗/ for (Subcategory Vector Type ::iterator sub iter = iter second subcategory vector .begin( );

sub iter ≠ iter second subcategory vector .end ( ); ^{++}sub iter ) { temp strm ≪ ␣ ␣ ≪ iter second pica plus category id ≪ ␣ ≪ iter second content description german ≪ endl ≪ ␣␣␣␣␣␣ ␣ ␣ ≪ sub iter second pica plus field id ≪ ␣␣␣␣␣␣ ␣ ␣ ≪ sub iter second field value ≪ endl ;

#if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( ); curr reference category = 0; curr reference subcategory = 0; curr reference category = zclient category map[iter second pica plus category id ];

if (curr reference category ≠ 0) { curr reference subcategory = curr reference category subcategory map[sub iter second pica plus field id ]; if (curr reference subcategory ≠ 0) { temp strm ≪ ␣ ␣ ≪ curr reference category pica plus category id ≪ ␣ ≪ curr reference category content description german ≪ endl ≪ ␣ ␣ ≪ curr reference subcategory pica plus field id ≪ ␣ ≪ curr reference subcategory content description german ≪ endl ≪ ␣ ␣ ≪ static cast⟨unsigned int⟩(curr reference subcategory database commands .size( ));

#if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( ); 411.

Log

[LDF 2006.09.06.] Now passing ofstream &log strm to the Subcategory Container member function referenced by function.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

⟨ Define Pica Record functions 404 ⟩ +≡

for (vector⟨Database Command ∗⟩::iterator dbc iter = curr reference subcategory database commands .begin( ); dbc iter ≠ curr reference subcategory database commands .end ( ); ^{++}dbc iter ) {

(∗∗dbc iter ).function(database, curr record ctr , iter second , sub iter second , log strm); } /∗ for (Database Commands ) ∗/ } /∗ if (curr reference subcategory ≠ 0) ∗/ } /∗ if (curr reference category ≠ 0) ∗/ } /∗ Inner for (Sub-Categories) ∗/

412.

Log

[LDF 2006.09.06.] Now passing ofstream &log strm to the Category Container member function referenced by function.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

⟨ Define Pica Record functions 404 ⟩ +≡

for (vector⟨Database Command ∗⟩::iterator dbc iter = curr reference category database commands .begin( ); dbc iter ≠ curr reference category database commands .end ( ); ^{++}dbc iter ) { (∗∗dbc iter ).function(database, curr record ctr , iter second , 0, log strm);

} /∗ for (Database Commands ) ∗/

} /∗ Outer for (Categories) ∗/ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif return 0; } /∗ End of Pica Record ::write to database definition. ∗/

413. Show. [LDF Undated.] ⟨ Declare Pica Record functions 403 ⟩ +≡

int show (stringstream &, string = );

112  SHOW  IWF Metadata Harvester II §414

414. ⟨ Define Pica Record functions 404 ⟩ +≡

int Pica Record ::show (stringstream &local strm, string s) {

if (s ≡ ) s = ;

local strm ≪ s ≪ endl ;

for (Category Multimap Type ::iterator iter = categories .begin( ); iter ≠ categories .end ( );

++iter ) { iter second show (local strm); local strm ≪ endl ;

}

return 0; } /∗ End of Pica Record ::show definition. ∗/

415. Putting Pica Record together. [LDF 2006.09.18.]

416. This is what’s written to picarcrd.h. [LDF 2006.09.18.] ⟨ 416 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩ ⟨ using declarations for namespaces 191 ⟩ ⟨ Forward declarations 399 ⟩ ⟨ Declare class Pica Record 400 ⟩

§417  IWF Metadata Harvester II  PUTTING PICA RECORD TOGETHER 113

417. This is what’s compiled.

⟨ Include files 13 ⟩

  ⟨ picarcrd.web 395 ⟩

⟨ Define Pica Record functions 404 ⟩

418. Category Container (ctgcntnr.web). [LDF 2006.09.19.]

Log

[LDF 2006.07.19.] Created the file Category_Container.h.

[LDF 2006.07.20.] Removed the code for Subcategory Container from the file Category_Container.h)

and put it into Subcategory_Container.h.

[LDF 2006.09.19.] Created this file (ctgcntnr.web). It contains the code from Category_Container.h and

Category_Container.cpp, and replaces these files.
⟨ ctgcntnr.web 418 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 564.

419. Preprocessor macro calls. [LDF Undated.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

420. “Using” declarations for namespaces. [LDF 2006.09.19.] ⟨ “Using” declarations for namespaces 387 ⟩ +≡

using namespace std;

421. Include files. [LDF Undated.] ⟨ Include files 13 ⟩ +≡ #include

422. Static variable declarations. [LDF 2006.09.19.]

To Do

Try to eliminate the remaining static variables in the interests of thread-safety. [LDF 2006.09.19.]

Log

[LDF 2006.08.16.] Added the static Temp IDs temp ids declaration and removed the declarations of Temp IDs temp ids in the function definitions below.

[LDF 2006.08.22.] Added the declaration of subject id . It’s used in and sub F 041A. It can’t be declared in , because it needs to be 0 the first time that function is called. In subsequent calls, it shouldn’t be 0. It doesn’t work to initialize it to 0 in .

[LDF 2006.08.22.] Added the declaration of subject id start . It’s used in and sub F 041A.

[LDF 2006.08.22.] Added the declaration of previous repeat code. It’s used in and sub F 041A.

114  STATIC VARIABLE DECLARATIONS  IWF Metadata Harvester II §422

[LDF 2006.09.19.] Removed the declarations of stringstream temp strm, and stringstream sql strm, and Temp IDs temp ids as static variables. Now declaring them as non-static automatic variables in each function where they’re used. I’ve done this in the interests of thread-safety.

⟨ Declare static variables 422 ⟩ ≡ static long ∗subject id = 0; static long ∗subject id start = 0; static unsigned short previous repeat code ctr = 0;

This code is used in section 564.

423. Category Container class declaration. [LDF Undated.]

Log

[LDF 2006.07.19.] Added this class declaration. [LDF 2006.07.19.] Added declaration of assignment operator (operator=(const Category Container &c)). [LDF 2006.07.20.] Changed Subcategory Map Type subcategories to Subcategory Multimap Type subcategories . [LDF 2006.07.26.] Added declaration of the function . [LDF 2006.07.27.] Added declarations of the functions titles category func and sub titles category func. [LDF 2006.07.27.] Changed the names of personal names and sub personal names to personal names category func and sub personal names category func, respectively. [LDF 2006.07.31.] Made the data members protected rather than public. This made it necessary to add the friend declarations for the classes Pica Record, ZClient, and Subcategory Container. [LDF 2006.08.03.] Added the declaration of . [LDF 2006.08.15.] Added the declaration of . [LDF 2006.08.16.] Added the declaration of sub F 209R. [LDF 2006.08.17.] Added the declaration of . [LDF 2006.08.18.] Added the declaration of sub F 209A. [LDF 2006.08.21.] Added the declaration of . [LDF 2006.08.22.] Added the declaration of sub F 041A. [LDF 2006.08.22.] Added the declaration of subject id . It’s used in and sub F 041A. It can’t be declared in , because it needs to be 0 the first time that function is called. In subsequent calls, it shouldn’t be 0. It doesn’t work to initialize it to 0 in . [LDF 2006.08.22.] Added the declaration of subject id start . It’s used in and sub F 041A. [LDF 2006.08.22.] Added the declaration of previous repeat code. It’s used in and sub F 041A. [LDF 2006.09.06.] Added the ofstream &log strm argument to all of the static functions that handle Category Container objects. [LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &. [LDF 2006.09.07.] Added the declaration of .

⟨ Declare class Category Container 423 ⟩ ≡ class Category Container {

§423  IWF Metadata Harvester II  CATEGORY CONTAINER CLASS DECLARATION 115

friend class Pica Record; friend class ZClient; friend class Subcategory Container;

protected: string pica plus category id ; string pica 3 category id ; string content description english; string content description german; string repeat code; Subcategory Map Type subcategory map; Subcategory Vector Type subcategory vector ; vector⟨Database Command ∗⟩ database commands ; vector⟨pair⟨char, string⟩⟩ database command arguments ;

public: ⟨ Declare Category Container functions 426 ⟩ };

This code is used in section 563.

424. Type definitions (typedefs). [2006.07.19.]

Log

[LDF 2006.07.19.] Added this section with the typedef for Category Map Type.

[LDF 2006.07.20.] Added the typedef for Category Multimap Type.

format Category Map Type Category Container
format Category Multimap Type Category Map Type

⟨ Type definitions 424 ⟩ ≡ typedef map⟨string, Category Container ∗⟩ Category Map Type; typedef multimap⟨string, Category Container ∗⟩ Category Multimap Type;

See also section 570. This code is used in sections 563 and 762.

425. Functions. [LDF 2006.09.19.]

426. Assignment operator. [LDF 2006.09.19.]

Log

[LDF 2006.07.19.] Added this function.

⟨ Declare Category Container functions 426 ⟩ ≡

void operator=(const Category Container &c);

This code is used in section 423.

See also sections 429, 431, 433, 435, 437, 439, 453, 461, 489, 499, 506, 518, 527, 534, 541, 545, 555, and 560.

116  ASSIGNMENT OPERATOR  IWF Metadata Harvester II §427

427. ⟨ Define Category Container functions 427 ⟩ ≡

void Category Container ::operator=(const Category Container &c) {

pica plus category id = c.pica plus category id ;

pica 3 category id = c.pica 3 category id ;

content description english = c.content description english;

content description german = c.content description german; }

See also sections 430, 432, 434, 436, 438, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 454, 455, 456, 457, 458, 459, 460, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 490, 491, 492, 493, 494, 495, 496, 497, 498, 500, 501, 502, 503, 504, 505, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 519, 520, 521, 522, 523, 524, 525, 528, 529, 530, 531, 532, 533, 535, 536, 537, 538, 539, 540, 542, 543, 544, 546, 547, 548, 549, 550, 551, 552, 553, 554, 556, 557, 558, 559, and 561.

This code is used in section 564.

428. PICA Category Functions. [LDF 2006.09.19.]

Log

[LDF 2006.09.06.] Added the ofstream &log strm argument to all of the static functions that handle Category Container objects.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

429. Identifier and Date of the Most Recent Change (F 001B). [LDF 2006.08.03.] 001B Category Container :: Pica+ 001B, Pica3 0210 Kennung und Datum der letzten Änderung Identifier and Date of the Most Recent Change.

[LDF 2006.08.03.]

There should be exactly two fields in a line with this category, and they should contain three pieces of information: The External Library Number and the date of the most recent change in the field, and the time of the most recent change in the field. This function performs no error checking, so the information must be present and in the proper format, or it will fail. [LDF 2006.08.03.]

ELN stands for “External Library Number”. [LDF 2006.08.17.]

Log

[LDF 2006.08.03.] Added this function.

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§430 IWF Metadata Harvester II IDENTIFIER AND DATE OF THE MOST RECENT CHANGE (F 001B) 117

430. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp strm ≪ ␣ ≪ endl ≪ ; string eln; string date; string time; string ::size type pos ; for (vector⟨pair⟨char, string⟩⟩::iterator iter = category database command arguments .begin( );

iter ≠ category database command arguments .end ( ); ^{++}iter ) { temp strm ≪ iter first ≪ ␣ ≪ iter second ≪ endl ; if (iter first ≡ ) {

eln = iter second .substr (0, 4); date = iter second .substr (5, 8);

}

else if (iter first ≡ ) { time = iter second ; pos = time.find last of ( ); if (pos ≠ string ::npos ) time.replace(pos , 1, 1, );

}

else {

temp strm ≪  ␣␣  ␣  ≪

        ␣      ␣␣     ␣   ␣  ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); }

} /∗ for ∗/ temp strm ≪ ␣ ␣ ≪ eln ≪ endl ≪ ␣ ␣ ≪ date ≪ endl ≪ ␣ ␣ ≪ time;

#if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( ); sql strm ≪ ␣ ␣ ≪ ␣ ␣ ␣ ≪

␣ ≪ date ≪ ␣ ␣ ≪ ␣ ␣ ≪ time ≪ ␣ ␣ ≪ ␣ ␣ ≪ eln ≪ ␣ ␣ ␣ ␣ ≪ record id ;

temp strm ≪ ␣ ␣ ≪ sql strm.str ( ); #if 0

AfxMessageBox (temp strm.str ( ).c str ( ));

118 IDENTIFIER AND DATE OF THE MOST RECENT CHANGE (F 001B) IWF Metadata Harvester II §430

#endif temp strm.str ( ); try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/

sql strm.str ( ); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return 0;

}  /∗ End of Category Container ::  definition. ∗/

431. Main Canonical Title, Additional Information, Authorship (F 021A). [LDF 2006.09.19.] 021A Category Container :: Pica+ 021A, Pica3 4000 Hauptsachtitel, Zusätze, Verfasserangabe Main Canonical Title, Additional Information, Authorship Pica3 4000

Log

[LDF 2006.07.27.] Added this function.

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§432 IWF Metadata Harvester IIMAIN CANONICAL TITLE, ADDITIONAL INFORMATION, AUTHORSHIP (F 021A) 119

432. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ; #if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

titles category func( , , , database, record id ,

category , log strm); return 0;

}

433. First Author (F 028A). [LDF 2006.09.19.] Category Container :: Pica+ 028A, Pica3 3000

1. Verfasser First Author

Log

[LDF 2006.07.27.] Removed code from this function. Now calling Category Container ::personal names category func instead. Also removed the definition of the function sub F 028A, which is no longer needed.

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

120  FIRST AUTHOR (F 028A)  IWF Metadata Harvester II §434

434. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ; #if 0

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

personal names category func( , , , database, record id ,

category , log strm); return 0;

}

435. Personal Name, Author (F 028B). [LDF 2006.09.19.]

Pica+ 028B, Pica3 120, 3000–3009

Pica3 120:  Personal Name (Cataloguing form according to RSWK)

(RSWK = Regeln für den Schlagwortkatalog = Rules for the Subject Catalogue)

Pica3 3000–3009: Author
Pica3 120:  Personenname (Ansetzungsform nach RSWK)

(RSWK = Regeln für den Schlagwortkatalog)

Pica3 3000–3009: Verfasser

Log

[LDF 2006.09.07.] Added this function.

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§436  IWF Metadata Harvester II  PERSONAL NAME, AUTHOR (F 028B) 121

436. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

personal names category func( , , , database, record id ,

category , log strm); return 0;

}

437. Other Contributing Persons (F 028C). [LDF 2006.09.19.] Category Container :: Pica+ 028C, Pica3 301x/302x Sonstige Beteiligte Personen Other Contributing Persons

[LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

122  OTHER CONTRIBUTING PERSONS (F 028C)  IWF Metadata Harvester II §438

438. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0

temp strm ≪ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

personal names category func( , , ,

database, record id , category , log strm); return 0;

}

439. Place, Publisher (F 033A). [LDF 2006.09.19.] Category Container :: Pica+ 033A, Pica3 4030 Ort, Verlag Place, Publisher

[LDF 2006.08.14.]

Log

[LDF 2006.08.14.] Added this function.

§440  IWF Metadata Harvester II  PLACE, PUBLISHER (F 033A) 123

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 440. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: (

CDatabase ∗database,

long record id ,

Category Container ∗category ,

Subcategory Container ∗subcategory ,

Output Stream Type &log strm){ stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif bool publisher switch = false; bool place switch = false; bool primary switch = true; string publisher str = ; string place str = ; int r;

441. ⟨ Define Category Container functions 427 ⟩ +≡

for (vector⟨pair⟨char, string⟩⟩::iterator iter = category database command arguments .begin( );

iter ≠ category database command arguments .end ( ); ^{++}iter ) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ iter first ≪ ␣ ≪ iter second ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

442. Repeated argument. Write the information we already have to the database. [LDF 2006.08.14.] ⟨ Define Category Container functions 427 ⟩ +≡

if ((iter first ≡ ∧ publisher switch) ∨ (iter first ≡ ∧ place switch)) {

r = publishers database providers func(database, record id , publisher str , place str , primary switch,

true, log strm);

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif publisher str = ; place str = ; place switch = false; publisher switch = false; primary switch = true;

}  /∗ if ((iter first ≡  ∧ publisher switch) ∨ (iter first ≡  ∧ place switch)) ∗/

124  PLACE, PUBLISHER (F 033A)  IWF Metadata Harvester II §443

443. Handle current argument. [LDF 2006.08.14.] ⟨ Define Category Container functions 427 ⟩ +≡

if (iter first ≡ ) { publisher str = iter second ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ≪ ␣ ␣ ≪ publisher str ≪

endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

444. ⟨ Define Category Container functions 427 ⟩ +≡

if (publisher str [0] ≡ ∧ ∗(publisher str .end ( ) − 1) ≡ ) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif publisher str .erase(0, 1); publisher str .erase(publisher str .end ( ) − 1);

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ publisher str ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

primary switch = false; } /∗ if (publisher str is surrounded by brackets.) ∗/

445. ⟨ Define Category Container functions 427 ⟩ +≡

publisher switch = true; } /∗ if (iter first ≡ ) ∗/

446. ⟨ Define Category Container functions 427 ⟩ +≡

else if (iter first ≡ ) { place str = iter second ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ≪ ␣ ␣ ≪ place str ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif 447. ⟨ Define Category Container functions 427 ⟩ +≡

if (place str [0] ≡ ∧ ∗(place str .end ( ) − 1) ≡ ) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif place str .erase(0, 1); place str .erase(place str .end ( ) − 1);

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ place str ≪ endl ; #endif

primary switch = false; } /∗ if (place str is surrounded by brackets.) ∗/

448. ⟨ Define Category Container functions 427 ⟩ +≡

place switch = true; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

place switch = true; } /∗ else if (iter first ≡ ) ∗/

449. Warning: Invalid database command argument. [LDF 2006.08.14.] ⟨ Define Category Container functions 427 ⟩ +≡

else {

temp strm ≪ ␣␣ ␣ ≪ ␣ ␣ ␣ ␣␣ ≪ iter first ≪ ␣ ≪ iter second ≪ endl ≪ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

continue; } /∗ else ∗/

450. ⟨ Define Category Container functions 427 ⟩ +≡

} /∗ for ∗/

451.

Log

[LDF 2006.08.28.] !! BUG FIX: Added this call to Category Container ::publishers database providers func.

⟨ Define Category Container functions 427 ⟩ +≡

r = publishers database providers func(database, record id , publisher str , place str , primary switch, true, log strm); 452. ⟨ Define Category Container functions 427 ⟩ +≡

return 0; }  /∗ End of Category Container ::  definition. ∗/

453. Main Subject and Subsidiary Subjects (F 041A). (Subject Assignment) [LDF 2006.09.19.]

Pica+ 041A, Pica3 800, 5100–5199

Pica3 800:  Main Subject and Subsidiary Subjects (Subject Assignment)
Pica3 5100–5199 RSWK Chains

(RSWK: Regeln für den Schlagwortkatalog = Rules for the Subject Catalogue)

Pica3 800:  Hauptschlagwort und Unterschlagwörter (Schlagwortansetzung)
Pica3 5100–5199 RSWK-Ketten (RSWK: Regeln für den Schlagwortkatalog)

[LDF 2006.09.19.]

“PPN” stands for “PICA Production Number”. [LDF 2006.09.19.]

Log

[LDF 2006.08.21.] Added this function.

§454  IWF Metadata Harvester II  MAIN SUBJECT AND SUBSIDIARY SUBJECTS (F 041A) 127

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 454. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: (CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){ stringstream temp strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪

␣ ␣ ≪ category repeat code; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif char subject type char = ; string subject = ; long id number ppn = 0; short chain number ; short chain link number ; string chain info = ; string permutation pattern = ; bool permutation switch = false; vector⟨char⟩ subcategory repeat vector ; unsigned short repeat code ctr = (category repeat code ≠ ) ? atoi (category repeat code.c str ( )) :

0;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ repeat code ctr ≪ endl ≪

␣ ␣ ≪ previous repeat code ctr ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

if (previous repeat code ctr % 10 ≡ 8 ∧ repeat code ctr % 10 ≠ 8) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ≪

      ␣       ␣    ␣   ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

#endif delete subject id ; delete subject id start ; subject id = 0; subject id start = 0;

} /∗ if ∗/ #if 0 /∗ 1 ∗/

else {

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪

      ␣   ␣       ␣     ␣  ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ else ∗/

#endif chain number = repeat code ctr /10 + 1;

128  MAIN SUBJECT AND SUBSIDIARY SUBJECTS (F 041A)  IWF Metadata Harvester II §454

chain link number = (repeat code ctr % 10 < 6) ? repeat code ctr % 10 + 1 : 0; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ repeat code ctr ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

for (vector⟨pair⟨char, string⟩⟩::iterator iter = category database command arguments .begin( );

iter ≠ category database command arguments .end ( ); ^{++}iter ) {

#if 0 /∗ 1 ∗/ temp strm ≪ iter first ≪ ␣ ≪ iter second ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

if (find (subcategory repeat vector .begin( ), subcategory repeat vector .end ( ),

iter first ) ≠ subcategory repeat vector .end ( )) {

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ iter first ≪ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sub F 041A(database, record id , category , repeat code ctr , subject type char , subject , id number ppn, chain number , chain link number , chain info, permutation pattern, permutation switch, log strm);

subject type char = ; subject = ; id number ppn = 0; chain info = ; permutation pattern = ; permutation switch = false; subcategory repeat vector .clear ( );

} /∗ if ∗/ else {

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ iter first ≪ ␣ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else ∗/ subcategory repeat vector .push back (iter first );

455. Identifikationsnummer (PPN) Identification Number (PPN)

[LDF 2006.08.22.]

⟨ Define Category Container functions 427 ⟩ +≡

if (iter first ≡ ) {

id number ppn = atol (iter second .c str ( )); } 456. Zweites und weiteres Permutationsmuster Second and additional permutation pattern

[LDF 2006.08.22.]

⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ∧ ((repeat code ctr − 8) % 10 ≡ 0)) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ repeat code ctr ≪ ␣␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

if (permutation switch) {

sub F 041A(database, record id , category , repeat code ctr , subject type char , subject , id number ppn, chain number , chain link number , chain info, permutation pattern, permutation switch, log strm);

subject type char = ;

subject = ;

id number ppn = 0;

chain info = ;

permutation pattern = ;

subcategory repeat vector .clear ( ); } /∗ if (permutation switch) ∗/ permutation switch = true; permutation pattern = iter second ;

}

457. Angaben zur Schlagwortkette Subject Chain Information

[LDF 2006.08.22.]

⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ∧ ((repeat code ctr − 9) % 10 ≡ 0)) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ repeat code ctr ≪ ␣␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

chain info = iter second ; } 458. Hauptschlagwort/Schlagwort Main or Subsidiary Subject/Subject LDF 2006.08.22. ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ repeat code ctr ≪

          ␣␣  ␣       ␣   ␣   ␣ ␣  ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

subject = iter second ; }

459. Permutationsmuster Permutation Pattern

[LDF 2006.08.22.]

⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) { permutation switch = true; permutation pattern = iter second ;

}

460. Indikator/Schlagwortindikator Indicator/Subject Indicator

[LDF 2006.08.22.]

⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

subject type char = iter second [0]; }

} /∗ for ∗/

sub F 041A(database, record id , category , repeat code ctr , subject type char , subject , id number ppn,

chain number , chain link number , chain info, permutation pattern, permutation switch, log strm); previous repeat code ctr = repeat code ctr ;

return 0; }  /∗ End of Category Container ::  definition. ∗/

§461  IWF Metadata Harvester II  SUB F 041A  131

461. sub F 041A. [LDF 2006.09.19.] This function is called in . [LDF Undated.]

Log

[LDF 2006.08.22.] Added this function.

132 SUB F 041A  IWF Metadata Harvester II  §462

⟨ Declare Category Container functions 426 ⟩ +≡ static int sub F 041A( CDatabase ∗database, long record id , Category Container ∗category , unsigned short repeat code ctr , char subject type char , string subject , long id number ppn, short chain number , short chain link number , string chain info, string permutation pattern, bool permutation switch, Output Stream Type &log strm); 462. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::sub F 041A( CDatabase ∗database, long record id , Category Container ∗category , unsigned short repeat code ctr , char subject type char , string subject , long id number ppn, short chain number , short chain link number , string chain info, string permutation pattern, bool permutation switch, Output Stream Type &log strm){ stringstream temp strm;

stringstream sql strm; Temp IDs temp ids ;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

repeat code ctr ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ; if (subject id ) temp strm ≪ ␣ ␣ ≪ ∗subject id ≪ endl ; else temp strm ≪ ␣ ␣ ≪ endl ; temp strm ≪ ␣ ␣ ≪ subject type char ≪ endl ≪ ␣ ␣ ≪ subject ≪ endl ≪ ␣ ␣ ≪ id number ppn ≪ endl ≪ ␣ ␣ ≪ chain number ≪ endl ≪ ␣ ␣ ≪ chain link number ≪ endl ≪ ␣ ␣ ≪ chain info ≪ endl ≪ ␣ ␣ ≪ permutation pattern ≪ endl ≪ ␣ ␣ ≪ permutation switch;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

463. Error handling: Not enough information to do anything. [LDF 2006.08.22.] ⟨ Define Category Container functions 427 ⟩ +≡

if (id number ppn ≡ 0 ∧ subject ≡ ∧ subject type char ≡ ∧ permutation switch ≡

false ∧ chain info ≡ ) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

      ␣  ␣   ␣         ␣  ␣        ␣ ≪
      ␣  ␣     ␣   ␣                   ␣  ␣  ≪

endl ≪  ␣      ␣           ␣  ␣  ␣  ≪ endl ≪

      ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ if ∗/ 464. ⟨ Define Category Container functions 427 ⟩ +≡

long subject type id = 0; if (subject type char ≠ ) { sql strm ≪

    ␣        ␣       ␣        ␣ ≪  ␣               ␣    ␣             ␣ ≪

␣ ␣ ␣ ≪ subject type char ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

465. ⟨ Define Category Container functions 427 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); }

466. ⟨ Define Category Container functions 427 ⟩ +≡

catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( );

467. ⟨ Define Category Container functions 427 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

      ␣  ␣    ␣ ␣                 ␣  ␣               ␣ ≪

␣ ␣ ␣ ␣ ␣ ≪ subject type char ≪ ≪ endl ≪ ␣ ␣ ␣ ␣ ␣ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

temp ids .Close( );

return 1; } /∗ if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) ∗/ 468. ⟨ Define Category Container functions 427 ⟩ +≡

else { subject type id = temp ids .m temp id ; temp ids .Close( );

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ subject type id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else ∗/

469. ⟨ Define Category Container functions 427 ⟩ +≡

}  /∗ if (subject type char ≠  ) ∗/

470. Create a new entry in Subjects, if we have enough information. We do this even if it means duplicating entries. The reason is that we store the starting subject id and the ending subject id for a chain of subjects in the subject id start and subject id end columns of the Permutation Patterns table, so the subject ids need to be consecutive. [LDF 2006.08.22.] ⟨ Define Category Container functions 427 ⟩ +≡

if (¬(subject type char ≡ ∧ subject ≡ ∧ id number ppn ≡ 0 ∧ chain info ≡ )) { sql strm ≪ ␣ ␣ ␣ ␣ ≪

      ␣             ␣                  ␣ ≪  ␣      ␣ ≪

subject type id ≪ ␣ ≪ subject ≪ ␣ ≪ id number ppn ≪ ␣ ≪ chain number ≪ ␣ ≪ chain link number ≪ ␣ ≪ chain info ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

471. ⟨ Define Category Container functions 427 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); }

472. ⟨ Define Category Container functions 427 ⟩ +≡

catch(CDBException ∗e)

{

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/

sql strm.str ( ); 473. Now get the subject id from the entry we’ve just created. [LDF 2006.08.22.]

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Category Container functions 427 ⟩ +≡

  sql strm ≪  ␣        ␣       ␣        ␣      ␣    ␣ ␣          ␣     ␣ ≪
      ␣     ␣  ␣          ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

474. ⟨ Define Category Container functions 427 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); }

475. ⟨ Define Category Container functions 427 ⟩ +≡

catch(CDBException ∗e)

{

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/

sql strm.str ( );

476. ⟨ Define Category Container functions 427 ⟩ +≡

temp ids .Open( );

477. Error handling: Failed to retrieve subject id from the Subjects table. [LDF 2006.08.22.] ⟨ Define Category Container functions 427 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

temp strm ≪ ␣␣ ␣ ≪ endl ≪ ␣ ␣ ␣ ␣ ␣ ≪ endl ≪

        ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); temp ids .Close( ); return 1;

} /∗ if ∗/ 478. Set ∗subject id . [LDF 2006.08.22.] ⟨ Define Category Container functions 427 ⟩ +≡

if (subject id ≡ 0) { subject id = new long; subject id start = new long; ∗subject id start = temp ids .m temp id ;

} ∗subject id = temp ids .m temp id ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ ∗subject id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp ids .Close( );

479. Add entry to Records Subjects. [LDF 2006.08.22.] ⟨ Define Category Container functions 427 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪ record id ≪ ␣ ␣ ␣ ␣ ≪ ∗subject id ≪ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪ record id ≪ ␣ ≪ ∗subject id ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

480. ⟨ Define Category Container functions 427 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); }

481. ⟨ Define Category Container functions 427 ⟩ +≡

catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

482. ⟨ Define Category Container functions 427 ⟩ +≡

} /∗ if ∗/ 483. Error handling: subject id ≡ 0 ∧ permutation switch ≡ true. Can’t handle this case. A permutation must refer to a subject. [LDF 2006.08.22.]

This case should never arise, because this point shouldn’t have been reached unless subject id is non-null.

[LDF 2006.08.22.]

⟨ Define Category Container functions 427 ⟩ +≡

if ((subject id start ≡ 0 ∨ subject id ≡ 0) ∧ permutation switch) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪  ␣

      ␣           ␣   ␣    ␣ ≪  ␣                    ␣  ␣  ≪ endl ≪

      ␣      ␣    ␣      ␣␣ ␣          ␣     ␣ ≪  ␣  ␣ ␣     ␣   ␣  ≪

      endl ≪  ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ if ((subject id start ≡ 0 ∨ subject id ≡ 0) ∧ permutation switch) ∗/

484. ⟨ Define Category Container functions 427 ⟩ +≡

if (permutation switch) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ ∗subject id start ≪ endl ≪ ␣ ␣ ≪

∗subject id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣   ␣      ␣       ␣ ␣    ␣                    ␣ ≪  ␣         ␣ ␣ ≪

record id ≪ ␣ ␣ ␣ ␣ ≪ ∗subject id start ≪ ␣ ␣ ␣ ␣ ≪ ∗subject id ≪ ␣ ␣ ␣ ␣ ≪ chain number ≪ ␣ ␣ ␣ ␣ ≪ permutation pattern ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ␣ ≪ record id ≪ ␣ ≪ ∗subject id start ≪ ␣ ≪ ∗subject id ≪ ␣ ≪ chain number ≪ ␣ ≪ permutation pattern ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

485. ⟨ Define Category Container functions 427 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } 486. ⟨ Define Category Container functions 427 ⟩ +≡

catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

487. ⟨ Define Category Container functions 427 ⟩ +≡

} /∗ if (permutation switch) ∗/

488. ⟨ Define Category Container functions 427 ⟩ +≡

if (temp ids .IsOpen( )) temp ids .Close( ); return 0; } /∗ End of Category Container ::sub F 041A definition. ∗/

489. Call Number (F 209A). [LDF 2006.09.19.] Category Container :: Pica+ 209A, Pica3 7100–7109 Signatur Call Number

[LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this function.

[LDF 2006.08.18.] Added code to this function. Now calling Category Container ::sub F 209A.

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§490  IWF Metadata Harvester II  CALL NUMBER (F 209A) 139

490. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){ stringstream temp strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪

␣ ␣ ≪ category repeat code; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif vector⟨char⟩ subcategory repeat vector ; string call number str ; string library number str ; string library department str ; string special location str ; long ∗call number id = 0; library number str = ; library department str = call number str = special location str = ; int r; for (vector⟨pair⟨char,

string⟩⟩::iterator iter = category database command arguments .begin( ); iter ≠ category database command arguments .end ( ); ^{++}iter ) {

#if 0 /∗ 1 ∗/ temp strm ≪ iter first ≪ ␣ ≪ iter second ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

491. Already had this argument. Process the ones we’ve collected so far. [LDF 2006.08.18.] ⟨ Define Category Container functions 427 ⟩ +≡

if (find (subcategory repeat vector .begin( ), subcategory repeat vector .end ( ),

iter first ) ≠ subcategory repeat vector .end ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ iter first ≪ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

r = sub F 209A(database, record id , category , call number str , library number str , library department str , special location str , call number id , log strm);

492. Clear strings and subcategory repeat vector . [LDF 2006.08.18.] ⟨ Define Category Container functions 427 ⟩ +≡

library number str = ; library department str = call number str = special location str = ; subcategory repeat vector .clear ( ); } /∗ if ∗/

140  CALL NUMBER (F 209A)  IWF Metadata Harvester II §493

493. Now process current argument. [LDF 2006.08.18.] ⟨ Define Category Container functions 427 ⟩ +≡

494. Call Number. ⟨ Define Category Container functions 427 ⟩ +≡

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , call number str ); }

495. Library Number. ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , library number str ); }

496. Special Location. ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , special location str ); }

497. Library Department. ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , library department str ); }

498. Warning: Invalid argument. ⟨ Define Category Container functions 427 ⟩ +≡

else {

temp strm ≪ ␣␣ ␣ ≪ endl ≪

␣ ␣␣ ≪ iter first ≪ ␣ ≪ iter second ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); continue;

} /∗ else (Invalid argument) ∗/ subcategory repeat vector .push back (iter first ); } /∗ for ∗/ r = sub F 209A(database, record id , category , call number str , library number str , library department str ,

special location str , call number id , log strm); delete call number id ; call number id = 0;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return 0; }  /∗ End of Category Container ::  definition. ∗/

499. sub F 209A. [LDF 2006.08.18.]

Log

[LDF 2006.08.18.] Added this function.

⟨ Declare Category Container functions 426 ⟩ +≡ static int sub F 209A( CDatabase ∗database, long record id , Category Container ∗category , string call number str , string library number str , string library department str , string special location str , long ∗call number id , Output Stream Type &log strm);

500. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::sub F 209A( CDatabase ∗database, long record id , Category Container ∗category , string call number str , string library number str , string library department str , string special location str , long ∗call number id , Output Stream Type &log strm){ stringstream temp strm;

stringstream sql strm; Temp IDs temp ids ; Call Numbers call numbers ; bool b; b = (call number id ≡ 0) ? true : false;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif 501.

Log

[LDF 2006.08.31.] !! BUG FIX: Now using Call Numbers call numbers instead of writing the call number ids to Temp IDs and reading temp id .m temp id . This worked until the number of call numbers got too large. After that, they weren’t sorted properly in the Temp IDs table.

⟨ Define Category Container functions 427 ⟩ +≡ long temp call number id ; sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ␣ ␣ ␣ ≪ call number str ≪

␣ ␣ ␣ ␣ ≪ library number str ≪ ␣ ␣ ␣ ␣ ≪ library department str ≪ ␣ ␣ ␣ ␣ ≪ special location str ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); if (temp ids .IsBOF ( )) {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣            ␣      ␣  ␣   ␣              ␣      ␣␣    ␣      ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

502. call number id is non-null. This means we already know what the highest value of call number id is in the Call Numbers table. [LDF 2006.08.18.] ⟨ Define Category Container functions 427 ⟩ +≡

if (call number id ) {

++(∗call number id ); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣␣ ≪ ␣ ␣ ≪

∗call number id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ if (call number id ) ∗/ 503. call number id is null. This means we must find the highest value of call number id in the Call Numbers table. [LDF 2006.08.18.]

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Category Container functions 427 ⟩ +≡ else /∗ call number id ≡ 0 ∗/ {

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪  ␣   ␣ ␣ ␣     ␣           ␣     ␣   ␣             ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif call numbers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); call number id = new long; if (call numbers .IsBOF ( ) ∨ call numbers .m call number id ≡ 0) {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣␣ ≪

      ␣              ␣  ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

∗call number id = 1; } else {

∗call number id = call numbers .m call number id + 1;

if (∗call number id ≡ 1) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ call numbers .m call number id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

} /∗ if ∗/ } /∗ else ∗/ call numbers .Close( );

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ ∗call number id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (call number id ≡ 0) ∗/ #if 0 /∗ 1 ∗/

if (∗call number id ≡ 1) {

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪

␣ ␣ ≪ call number str ≪ endl ;

if (b) temp strm ≪  ␣   ␣  ;
else temp strm ≪  ␣       ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); }

#endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪

    ␣            ␣               ␣ ≪  ␣               ␣

␣ ␣ ≪ ␣ ≪ ∗call number id ≪ ␣ ≪ call number str ≪ ␣ ≪ library number str ≪ ␣ ≪ library department str ≪ ␣ ≪ special location str ≪

    ␣ ≪  ␣               ␣           ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ) ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ ∗call number id ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

e Delete( ); } /∗ catch ∗/ sql strm.str ( ); temp call number id = ∗call number id ; } /∗ if (temp ids .IsBOF ( )) ∗/

504. ⟨ Define Category Container functions 427 ⟩ +≡

else { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

endl ≪ ␣ ␣ ≪ temp ids .m temp id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

temp call number id = temp ids .m temp id ; } /∗ else ∗/ 505. Add an entry to Records Call Numbers, unless one already exists. [LDF 2006.08.18.] ⟨ Define Category Container functions 427 ⟩ +≡

sql strm ≪ ␣   ␣      ␣       ␣ ␣    ␣                    ␣     ␣         ␣ ␣ ≪

record id ≪ ␣ ␣ ␣ ␣ ≪ temp call number id ≪

    ␣      ␣                    ␣           ␣              ␣ ≪  ␣ ≪

record id ≪ ␣ ≪ temp call number id ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); if (temp ids .IsOpen( )) temp ids .Close( );

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif return 0; } /∗ End of Category Container ::sub F 209A definition. ∗/

506. Local information regarding remote access to electronic resources (F 209R). [LDF 2006.08.15.] Category Container :: Pica+ 209R, Pica3 7133 Lokale Angaben zum Zugriff auf elektronische Ressourcen im Fernzugriff Local information regarding remote access to electronic resources

[LDF 2006.08.15.]

Log

[LDF 2006.08.15.] Added this function.

146 LOCAL INFORMATION REGARDING REMOTE ACCESS TO ELECTRONIC RESOURCES (F 209R)IWF Metadata Harvester II §507

⟨ Declare Category Container functions 426 ⟩ +≡ static int ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 507. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container :: (CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){ stringstream temp strm;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif vector⟨char⟩ subcategory repeat vector ; string format str ; string URL str ; string URN str ; string license str ; string internal str ; string web str ; long ∗remote access id = 0; license str = ; format str = URL str = URN str = internal str = web str = ; int r; for (vector⟨pair⟨char,

string⟩⟩::iterator iter = category database command arguments .begin( );

iter ≠ category database command arguments .end ( ); ^{++}iter ) {

#if 0 /∗ 1 ∗/ temp strm ≪ iter first ≪ ␣ ≪ iter second ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

508. Already had this argument. Process the ones we’ve collected so far. [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡

if (find (subcategory repeat vector .begin( ), subcategory repeat vector .end ( ),

iter first ) ≠ subcategory repeat vector .end ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ iter first ≪ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

r = sub F 209R(database, record id , category , format str , URL str , URN str , license str , internal str , web str , remote access id , log strm);

509. Clear strings and subcategory repeat vector . [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡

license str = ; format str = URL str = URN str = internal str = web str = ; subcategory repeat vector .clear ( ); } /∗ if ∗/

510. Now process current argument. [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡

§511 IWF Metadata Harvester IILOCAL INFORMATION REGARDING REMOTE ACCESS TO ELECTRONIC RESOURCES (F 209R) 147

511. Format ⟨ Define Category Container functions 427 ⟩ +≡

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , format str ); }

512. URL ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , URL str ); }

513. URN ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , URN str ); }

514. License indicator ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , license str ); }

515. Internal Remarks ⟨ Define Category Container functions 427 ⟩ +≡

else if (iter first ≡ ) /∗ Internal Remarks ∗/ {

Subcategory Container ::fix string (iter second , internal str ); }

516. Text for the Web Display ⟨ Define Category Container functions 427 ⟩ +≡

else

if (iter first ≡ ) {

Subcategory Container ::fix string (iter second , web str ); } 517. Warning: Invalid argument. ⟨ Define Category Container functions 427 ⟩ +≡

else {

temp strm ≪ ␣␣ ␣ ≪ endl ≪

␣ ␣␣ ≪ iter first ≪ ␣ ≪ iter second ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); continue;

} /∗ else (Invalid argument) ∗/ subcategory repeat vector .push back (iter first ); } /∗ for ∗/ r = sub F 209R(database, record id , category , format str , URL str , URN str , license str , internal str ,

web str , remote access id , log strm); delete remote access id ;

return 0; }  /∗ End of Category Container ::  definition. ∗/

518. sub F 209R. [LDF 2006.09.19.]

Log

[LDF 2006.08.15.] Added this function.

§519  IWF Metadata Harvester II  SUB F 209R  149

⟨ Declare Category Container functions 426 ⟩ +≡ static int sub F 209R( CDatabase ∗database, long record id , Category Container ∗category , string format str , string URL str , string URN str , string license str , string internal str , string web str , long ∗remote access id , Output Stream Type &log strm); 519. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::sub F 209R( CDatabase ∗database, long record id , Category Container ∗category , string format str , string URL str , string URN str , string license str , string internal str , string web str , long ∗remote access id , Output Stream Type &log strm){ stringstream temp strm;

stringstream sql strm; Temp IDs temp ids ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #if 0 /∗ 1 ∗/

temp strm ≪  ␣ ␣ ≪ record id ≪ endl ≪  ␣ ␣ ≪ format str ≪
endl ≪  ␣  ␣ ≪ URL str ≪ endl ≪  ␣  ␣ ≪ URN str ≪ endl ≪

␣ ␣ ≪ license str ≪ endl ≪ ␣ ␣ ≪ internal str ≪ endl ≪ ␣ ␣ ≪ web str ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

520. Error handling: license str ≡ . [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡ #if 0 /∗ 1 ∗/

if (license str ≡ ) {

temp strm ≪  ␣␣  ␣             ␣␣             ␣  ␣  ≪ endl ≪

      ␣     ␣        ␣␣        ␣    ␣     ␣    ␣ ␣        ␣       ␣  ≪ endl ≪
      ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ if (license str ≡ ) ∗/

150 SUB F 209R  IWF Metadata Harvester II  §521

#endif /∗ START HERE: LDF 2006.09.04. Fix this. ∗/ if (license str ≡ ) license str = ; 521. Find out whether a corresponding entry in the Remote Access table already exists. [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡

long temp remote access id ; sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ␣ ␣ ≪ license str ≪ ␣ ␣ ␣ ␣ ≪ format str ≪ ␣ ␣ ␣ ␣ ≪ web str ≪ ␣ ␣ ␣ ␣ ≪ URL str ≪ ␣ ␣ ␣ ␣ ≪ URN str ≪ ␣ ␣ ␣ ␣ ≪ internal str ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); if (temp ids .IsBOF ( )) {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣            ␣      ␣  ␣   ␣               ␣      ␣␣    ␣      ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

522. remote access id is non-null. This means we already know what the highest value of remote access id is in the Remote Access table. [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡

if (remote access id ) {

++(∗remote access id ); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣␣ ≪ ␣ ␣ ≪

∗remote access id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ if (remote access id ) ∗/

523. remote access id is null. This means we must find the highest value of remote access id in the Remote Access table. [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡

else /∗ remote access id ≡ 0 ∗/ { 524.

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Category Container functions 427 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp ids .Close( );

sql strm ≪  ␣        ␣       ␣        ␣ ≪  ␣   ␣ ␣                ␣    ␣
    ␣ ≪  ␣  ␣                ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); remote access id = new long; if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) ∗remote access id = 1; else ∗remote access id = temp ids .m temp id + 1;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ ∗remote access id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (remote access id ≡ 0) ∗/ sql strm ≪ ␣ ␣ ␣ ␣ ≪

    ␣             ␣                  ␣ ≪
    ␣            ␣                 ␣    ␣     ␣ ≪

␣ ␣ ≪ ∗remote access id ≪ ␣ ≪ license str ≪ ␣ ≪ format str ≪ ␣ ≪ web str ≪ ␣ ≪ URL str ≪ ␣ ≪ URN str ≪ ␣ ≪ internal str ≪ ␣ ≪ ␣ ␣ ␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp remote access id = ∗remote access id ; } /∗ if (temp ids .IsBOF ( )) ∗/ else {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

endl ≪ ␣ ␣ ≪ temp ids .m temp id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

temp remote access id = temp ids .m temp id ; } /∗ else ∗/ 525. Add an entry to Records Remote Access, unless one already exists. [LDF 2006.08.16.] ⟨ Define Category Container functions 427 ⟩ +≡

sql strm ≪ ␣   ␣      ␣       ␣ ␣    ␣                     ␣     ␣         ␣ ␣ ≪

record id ≪ ␣ ␣ ␣ ␣ ≪ temp remote access id ≪

    ␣      ␣                     ␣           ␣                 ␣ ≪

␣ ≪ record id ≪ ␣ ≪ temp remote access id ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); if (temp ids .IsOpen( )) temp ids .Close( ); return 0; } /∗ End of Category Container ::sub F 209R definition. ∗/

526. Functions for groups of categories. [LDF 2006.09.19.]

527. personal names category func. [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

[LDF 2006.07.27.] Changed the name of this function from personal names to personal names category func.

154 PERSONAL NAMES CATEGORY FUNC  IWF Metadata Harvester II  §528

⟨ Declare Category Container functions 426 ⟩ +≡ static int personal names category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , Output Stream Type &log strm); 528. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::personal names category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , Output Stream Type &log strm){

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ≪ ␣ ␣ ≪

main table name; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif string curr surname; string curr given name = ; string curr prefix = ; unsigned long curr id number ppn = 0; long table ctr = 0; vector⟨char⟩ used fields ; vector⟨char⟩::iterator used fields iter ;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪

␣ ␣ ≪ record id ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

529. No arguments. This shouldn’t happen. If it does, issue a warning and return 1. [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this section.

⟨ Define Category Container functions 427 ⟩ +≡

if (category database command arguments .size( ) ≤ 0) {

temp strm ≪  ␣␣  ␣  ≪
endl ≪  ␣          ␣␣     ␣         ␣  ≪

  ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); return 1;

} /∗ if (No arguments) ∗/

§530  IWF Metadata Harvester II  PERSONAL NAMES CATEGORY FUNC  155

530. Extract the arguments from database command arguments . [LDF 2006.07.25.] ⟨ Define Category Container functions 427 ⟩ +≡

for (vector⟨pair⟨char, string⟩⟩::iterator iter = category database command arguments .begin( );

iter ≠ category database command arguments .end ( ); ^{++}iter ) { #if 0 /∗ 1 ∗/

temp strm ≪ iter first ≪ ␣ ≪ iter second ≪ endl ; #endif

531. Check whether we’ve already had this argument before. If we have, we need to write database entries using the old arguments before we process the next set, starting with the current argument. [LDF 2006.07.26.] ⟨ Define Category Container functions 427 ⟩ +≡

if ((used fields iter = find (used fields .begin( ), used fields .end ( ), iter first )) ≡ used fields .end ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ≪ iter first ≪ ␣ ␣ ␣ ␣ ≪ endl ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

used fields .push back (iter first ); } /∗ if ∗/

532. ⟨ Define Category Container functions 427 ⟩ +≡

else /∗ Found duplicate field ∗/

{ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ iter first ≪ ␣ ␣ ␣ ␣ ≪ endl ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

table ctr = sub personal names category func(main table name, assoc table name, column name, database, record id , category , curr surname, curr given name, curr prefix , curr id number ppn, table ctr , log strm);

used fields .clear ( );

used fields .push back (iter first );

curr surname = ;

curr given name = ;

curr prefix = ; curr id number ppn = 0;

} /∗ else (Found duplicate field) ∗/ 533. ⟨ Define Category Container functions 427 ⟩ +≡

if (iter first ≡ ) {

curr id number ppn = strtol (iter second .c str ( ), 0, 10); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ curr id number ppn ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } else if (iter first ≡ ) curr surname = iter second ; else if (iter first ≡ ) curr given name = iter second ; else if (iter first ≡ ) curr prefix = iter second ; } /∗ for ∗/ table ctr = sub personal names category func(main table name, assoc table name, column name,

database, record id , category , curr surname, curr given name, curr prefix , curr id number ppn, table ctr , log strm);

return 0; } /∗ End of Category Container ::personal names category func definition. ∗/

534. sub personal names category func. [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

[LDF 2006.07.27.] Changed the name of this function from sub personal names to sub personal names category func.

§535  IWF Metadata Harvester II  SUB PERSONAL NAMES CATEGORY FUNC  157

⟨ Declare Category Container functions 426 ⟩ +≡ static int sub personal names category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , string surname, string given name, string prefix , unsigned long id number ppn, long table ctr , Output Stream Type &log strm); 535. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::sub personal names category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , string surname, string given name, string prefix , unsigned long id number ppn, long table ctr , Output Stream Type &log strm)

{

stringstream temp strm; stringstream sql strm; Temp IDs temp ids ;

536. Check whether there’s already an entry for this person in the main table. [LDF 2006.07.25.] ⟨ Define Category Container functions 427 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ column name ≪ ␣ ␣ ≪ main table name ≪ ␣ ␣ ␣ ␣ ≪ given name ≪ ␣ ␣ ≪ ␣ ␣ ≪ surname ≪ ≪ ␣ ␣ ␣ ␣ ≪ id number ppn;

if (prefix ≠ ) sql strm ≪ ␣ ␣ ␣ ␣ ≪ prefix ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

158 SUB PERSONAL NAMES CATEGORY FUNC IWF Metadata Harvester II §537

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); 537. No entry for this author in the main table, so we create one. [LDF 2006.07.25.]

Get table id . [LDF 2006.07.26.]

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Category Container functions 427 ⟩ +≡ long table id ; if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) { if (table ctr ≡ 0) {

temp ids .Close( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ column name ≪ ␣ ␣ ≪

main table name ≪ ␣ ␣ ␣ ≪ column name ≪ ␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); if (temp ids .IsBOF ( )) table id = 1; else table id = temp ids .m temp id + 1;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ temp ids .m temp id ≪ endl ≪

␣ ␣ ≪ table id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } else table id = table ctr ; 538. Enter data into main table. [LDF 2006.07.25.] ⟨ Define Category Container functions 427 ⟩ +≡

sql strm ≪ ␣ ␣ ≪ main table name ≪ ␣ ␣ ≪ ␣ ≪ main table name ≪ ␣ ≪ column name ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ≪ table id ≪ ␣ ≪ given name ≪ ␣ ≪ surname ≪ ␣ ≪ prefix ≪ ␣ ≪ id number ppn ≪ ␣ ≪ ␣ ␣ ≪ main table name ≪ ␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); } /∗ if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) ∗/ else table id = temp ids .m temp id ; 539. Check whether an entry for this combination of record and person exists in the association table. If it doesn’t, add one. [LDF 2006.07.26.] ⟨ Define Category Container functions 427 ⟩ +≡

temp ids .Close( ); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ␣ ≪ ␣ ␣ ␣ ␣ ␣ ≪ assoc table name ≪ ␣ ␣ ␣ ␣ ≪ record id ≪ ␣ ␣ ≪ column name ≪ ␣ ␣ ≪ table id ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); 540. No corresponding entry exists in the association table, so we create one. [LDF 2006.07.26.] ⟨ Define Category Container functions 427 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

sql strm ≪ ␣ ≪ assoc table name ≪ ␣ ␣ ≪ column name ≪ ␣ ≪

␣ ≪ record id ≪ ␣ ≪ table id ≪ ;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ≪ assoc table name ≪ ≪ endl ≪ ␣ ␣ ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/

sql strm.str ( ); } temp ids .Close( ); return table id + 1; }

/∗ End of Category Container ::sub personal names category func definition. ∗/

541. titles category func. [LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this function.

162 TITLES CATEGORY FUNC  IWF Metadata Harvester II  §542

⟨ Declare Category Container functions 426 ⟩ +≡ static int titles category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , Output Stream Type &log strm); 542. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::titles category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , Output Stream Type &log strm)

{ stringstream temp strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ≪ ␣ ␣ ≪

main table name; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif vector⟨char⟩ used fields ; vector⟨char⟩::iterator used fields iter ; const static unsigned short = 1; const static unsigned short = 2; unsigned short state = ;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ state ≪ endl ≪ static cast⟨unsigned int⟩(category database command arguments .size( )) ≪ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

§543  IWF Metadata Harvester II  TITLES CATEGORY FUNC  163

#endif 543. No arguments. This shouldn’t happen. If it does, issue a warning and return 1. [LDF 2006.07.27.] ⟨ Define Category Container functions 427 ⟩ +≡

if (category database command arguments .size( ) ≤ 0) {

temp strm ≪  ␣␣  ␣  ≪
endl ≪  ␣          ␣␣     ␣         ␣  ≪

      ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ if (No arguments) ∗/ long table ctr = 0; string ∗main canonical title = 0; string ∗continuation main canonical title = 0; string ∗additions main = 0; string ∗continuation additions main = 0; string ∗authorship = 0; string ∗standard text = 0; string ∗additional creator main = 0; string ∗parallel canonical title = 0; string ∗additions parallel = 0; string ∗additional creator parallel = 0; for (vector⟨pair⟨char,

string⟩⟩::iterator iter = category database command arguments .begin( ); iter ≠ category database command arguments .end ( ); ^{++}iter ) {

#if 0 /∗ 1 ∗/ temp strm ≪ iter first ≪ ␣ ≪ iter second ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif 544. Check whether we’ve already had this argument before. If we have, we need to write database entries using the old arguments before we process the next set, starting with the current argument. [LDF 2006.07.27.] ⟨ Define Category Container functions 427 ⟩ +≡

if ((used fields iter = find (used fields .begin( ), used fields .end ( ), iter first )) ≡ used fields .end ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ≪ iter first ≪ ␣ ␣ ␣ ␣ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

used fields .push back (iter first ); } /∗ if ∗/ else /∗ Found duplicate field ∗/ {

#if 0 /∗ 1 ∗/ temp strm ≪ ≪ iter first ≪ ␣ ␣ ␣ ␣ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

table ctr = sub titles category func(main table name, assoc table name, column name, database, record id , category , table ctr , log strm, main canonical title, continuation main canonical title, additions main, continuation additions main, authorship, standard text , additional creator main, parallel canonical title, additions parallel , additional creator parallel );

used fields .clear ( ); used fields .push back (iter first ); delete main canonical title; delete continuation main canonical title; delete additions main; delete continuation additions main; delete authorship; delete standard text ; delete additional creator main; delete parallel canonical title; delete additions parallel ; delete additional creator parallel ; main canonical title = 0; continuation main canonical title = 0; additions main = 0; continuation additions main = 0; authorship = 0; standard text = 0; additional creator main = 0; parallel canonical title = 0; additions parallel = 0; additional creator parallel = 0;

} /∗ else (Found duplicate field) ∗/ if (iter first ≡ ) {

standard text = new string; ∗standard text = iter second ;

} else if (iter first ≡ ) {

continuation main canonical title = new string; ∗continuation main canonical title = iter second ; } else if (iter first ≡ ) {

continuation additions main = new string; ∗continuation additions main = iter second ;

} else if (iter first ≡ ) {

state = ;

main canonical title = new string;

∗main canonical title = iter second ; } else if (iter first ≡ ) {

state = ;

parallel canonical title = new string; ∗parallel canonical title = iter second ;

} else if (iter first ≡ ) {

authorship = new string;

∗authorship = iter second ; } else if (iter first ≡ ∧ state ≡ ) {

additions main = new string;

∗additions main = iter second ; } else if (iter first ≡ ∧ state ≡ ) {

additional creator main = new string; ∗additional creator main = iter second ;

} else if (iter first ≡ ∧ state ≡ ) {

additions parallel = new string;

∗additions parallel = iter second ; } else if (iter first ≡ ∧ state ≡ ) {

additional creator parallel = new string; ∗additional creator parallel = iter second ;

} } /∗ for ∗/ table ctr = sub titles category func(main table name, assoc table name, column name, database,

record id , category , table ctr , log strm, main canonical title, continuation main canonical title, additions main, continuation additions main, authorship, standard text , additional creator main, parallel canonical title, additions parallel , additional creator parallel );

166 SUB TITLES CATEGORY FUNC  IWF Metadata Harvester II  §545

return 0; } /∗ End of Category Container ::titles category func definition. ∗/ 545. sub titles category func. [LDF Undated.]

Log

[LDF 2006.07.27.] Added this function.

[LDF 2006.09.04.] Added the optional string ∗continuation argument with the default 0.

[LDF 2006.09.05.] Changed string ∗continuation to continuation main canonical title. Added the optional string ∗continuation additions main argument with the default 0.

§546  IWF Metadata Harvester II  SUB TITLES CATEGORY FUNC  167

⟨ Declare Category Container functions 426 ⟩ +≡ static int sub titles category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , long table ctr , Output Stream Type &log strm, string ∗main canonical title = 0, string ∗continuation main canonical title = 0, string ∗additions main = 0, string ∗continuation additions main = 0, string ∗authorship = 0, string ∗standard text = 0, string ∗additional creator main = 0, string ∗parallel canonical title = 0, string ∗additions parallel = 0, string ∗additional creator parallel = 0); 546. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::sub titles category func( string main table name, string assoc table name, string column name, CDatabase ∗database, long record id , Category Container ∗category , long table ctr , Output Stream Type &log strm, string ∗main canonical title, string ∗continuation main canonical title, string ∗additions main, string ∗continuation additions main, string ∗authorship, string ∗standard text , string ∗additional creator main, string ∗parallel canonical title, string ∗additions parallel , string ∗additional creator parallel )

{

stringstream temp strm; stringstream sql strm; Temp IDs temp ids ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif stringstream column strm; stringstream value strm; long table id ; 547. Construct SQL queries. [LDF 2006.07.27.] ⟨ Define Category Container functions 427 ⟩ +≡

string and str = ; sql strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ column name ≪ ␣ ␣ ≪

main table name ≪ ␣ ␣ ; if (main canonical title) {

sql strm ≪ ␣ ␣ ≪ ∗main canonical title ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗main canonical title ≪ ;

} if (continuation main canonical title) {

sql strm ≪ and str ≪ ␣ ␣ ≪

∗continuation main canonical title ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗continuation main canonical title ≪ ;

} if (additions main) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗additions main ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗additions main ≪ ;

} if (continuation additions main) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗continuation additions main ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗continuation additions main ≪ ;

} if (authorship) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗authorship ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗authorship ≪ ;

} if (standard text ) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗standard text ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗standard text ≪ ;

} if (additional creator main) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗additional creator main ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗additional creator main ≪ ;

} if (parallel canonical title) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗parallel canonical title ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ;

value strm ≪ ␣ ≪ ∗parallel canonical title ≪ ; } if (additions parallel ) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗additions parallel ≪ ;

and str = ␣ ␣ ;

column strm ≪ ␣ ;

value strm ≪ ␣ ≪ ∗additions parallel ≪ ; } if (additional creator parallel ) {

sql strm ≪ and str ≪ ␣ ␣ ≪ ∗additional creator parallel ≪ ; and str = ␣ ␣ ; column strm ≪ ␣ ; value strm ≪ ␣ ≪ ∗additional creator parallel ≪ ;

} #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ sql strm.str ( ) ≪ endl ≪ ␣ ␣ ≪

column strm.str ( ) ≪ endl ≪ ␣ ␣ ≪ value strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

548. Find out whether there’s already an identical entry in Main Titles. [LDF 2006.07.27.] ⟨ Define Category Container functions 427 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( );

549. Create an entry in Main Titles. [LDF 2006.07.27.] ⟨ Define Category Container functions 427 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif 550.

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Category Container functions 427 ⟩ +≡

if (table ctr ≡ 0) { temp ids .Close( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ column name ≪ ␣ ␣ ≪

main table name ≪ ␣ ␣ ␣ ≪ column name ≪ ␣␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ␣ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); if (temp ids .IsBOF ( )) {

table id = 1; } else {

table id = temp ids .m temp id + 1;

table ctr = table id + 1; }

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ table ctr ≪ endl ≪ ␣ ␣ ≪ table id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ if (table ctr ≡ 0) ∗/ 551.

Log

[LDF 2006.09.04.] !! BUG FIX: Added this section. The way it was before failed when there was more than one entry for “main canonical title” in a line, or more than one lines for Pica+ 021A.

⟨ Define Category Container functions 427 ⟩ +≡

else {

table id = table ctr^{++}; }

552. Write data to Main Titles table. [LDF 2006.07.27.] ⟨ Define Category Container functions 427 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪ ≪ column name ≪ column strm.str ( ) ≪ ␣ ␣ ≪ table id ≪ value strm.str ( ) ≪ ␣ ≪ ␣ ␣ ≪ main table name ≪ ␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); } /∗ if (Creating a new entry in Main Titles) ∗/

553. An identical entry already exists in Main Titles. [LDF 2006.07.27.] ⟨ Define Category Container functions 427 ⟩ +≡

else {

table id = temp ids .m temp id ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ endl ≪

␣ ␣ ≪ table id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } 554. Check whether there’s already an entry for this record and main title in Records Main Titles.

[LDF 2006.07.27.]

⟨ Define Category Container functions 427 ⟩ +≡ temp ids .Close( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ≪

assoc table name ≪ ␣ ␣ ␣ ␣ ≪ record id ≪ ␣ ␣ ≪ column name ≪ ␣ ␣ ≪ table id ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ).c str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ record id ≪ ␣ ≪ column name ≪ ␣ ␣ ≪ table id ≪ endl ≪

␣ ␣ ␣ ␣ ≪ assoc table name ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ≪ assoc table name ≪ ␣ ␣ ≪ column name ≪ ␣ ␣ ≪

record id ≪ ␣ ≪ table id ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( ); } /∗ catch ∗/ sql strm.str ( );

} /∗ if (Create an entry in association table) ∗/ else /∗ Entry already exists in association table ∗/ {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ record id ≪ ␣ ≪ column name ≪ ␣ ␣ ≪ table id ≪ endl ≪

␣ ␣ ␣ ≪ assoc table name ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else (Entry already exists in association table) ∗/ temp ids .Close( ); return table ctr ; } /∗ End of Category Container ::sub titles category func definition. ∗/

555. publishers database providers func. [LDF 2006.08.14.]

Log

[LDF 2006.08.14.] Added this function. It’s called in Category Container :: .

174 PUBLISHERS DATABASE PROVIDERS FUNC IWF Metadata Harvester II §556

⟨ Declare Category Container functions 426 ⟩ +≡ static int publishers database providers func( CDatabase ∗database, long record id , string column str , string place str , bool primary switch, bool table switch, Output Stream Type &log strm); 556. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::publishers database providers func( CDatabase ∗database, long record id , string column str , string place str , bool primary switch, bool table switch, Output Stream Type &log strm)

{ stringstream temp strm; stringstream sql strm; Temp IDs temp ids ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif string table; string assoc table; string id column; string name column; if (table switch) {

table = ;

assoc table = ;

id column = ;

name column = ; } else {

table = ;

assoc table = ; id column = ; name column = ;

} sql strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ id column ≪ ␣ ␣ ≪ table ≪

␣ ␣ ≪ name column ≪ ␣ ␣ ≪ column str ≪ ␣ ≪ ␣ ␣ ␣ ≪ place str ≪ ␣ ≪ ␣ ␣ ␣ ;

if (primary switch) sql strm ≪ ; else sql strm ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ) ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

§556  IWF Metadata Harvester II  PUBLISHERS DATABASE PROVIDERS FUNC  175
temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( ); } /∗ catch ∗/ sql strm.str ( ); temp ids .Open( );

557. No corresponding entry in the Publishers or Database Providers table. Create a new one.

[LDF 2006.08.14.]

⟨ Define Category Container functions 427 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ≪ table ≪ ␣␣ ␣ ␣ ␣ ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ≪ table ≪ ␣ ≪ name column ≪ ␣ ␣ ␣ ≪ ␣ ≪ column str ≪ ␣ ≪ place str ≪ ␣ ≪ static cast⟨int⟩(primary switch) ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ) ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); 558. Get the publisher id or database provider id value for the entry we’ve just created. [LDF 2006.08.14.]

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Category Container functions 427 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ id column ≪ ␣ ␣ ≪

table ≪ ␣ ␣ ␣ ≪ id column ≪ ␣ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ id column ≪ ␣ ␣ ␣ ␣ ≪ ␣ ≪

sql strm.str ( ) ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp ids .Close( ); try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( );

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ temp ids .m temp id ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ≪ assoc table ≪ ␣ ␣ ≪ id column ≪ ␣ ≪ ␣ ≪

record id ≪ ␣ ≪ temp ids .m temp id ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ sql strm.str ( ) ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Close( ); } /∗ if ∗/

559. A corresponding entry in the Publishers or Database Providers table already exists. [LDF 2006.08.14.] ⟨ Define Category Container functions 427 ⟩ +≡

else /∗ Entry in Publishers or Database Providers already exists. ∗/ {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣␣ ␣ ␣ ≪

temp ids .m temp id ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ assoc table ≪ ␣ ␣ ␣ ␣ ≪ record id ≪ ␣ ␣ ≪ id column ≪ ␣ ␣ ≪ temp ids .m temp id ≪ ␣ ≪ ␣ ≪ assoc table ≪ ␣ ␣ ≪ id column ≪ ␣ ≪ ␣ ≪ record id ≪ ␣ ≪ temp ids .m temp id ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ) ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

} /∗ else (Entry in Publishers or Database Providers already exists.) ∗/ if (temp ids .IsOpen( )) temp ids .Close( ); return 0; } /∗ End of Category Container ::publishers database providers func definition. ∗/

560. Showing. [LDF Undated.] ⟨ Declare Category Container functions 426 ⟩ +≡

int show (stringstream &local strm, string prefix = );

178  SHOWING  IWF Metadata Harvester II §561

561. ⟨ Define Category Container functions 427 ⟩ +≡

int Category Container ::show (stringstream &local strm, string prefix ) {

local strm ≪ prefix ≪ ␣ ␣ ≪ pica plus category id ≪ endl ≪ ␣ ␣ ≪ repeat code ≪ endl ≪ ␣ ␣ ≪ pica 3 category id ≪ endl ≪ ␣ ␣ ≪ content description german ≪ endl ≪ ␣ ␣ ≪ content description english ≪ endl ;

size t s = subcategory vector .size( ); if (s ≤ 0) {

local strm ≪ ␣ ␣ ␣ ; } else {

local strm ≪ static cast⟨unsigned int⟩(s);

if (s ≡ 1) local strm ≪ ␣ ;

else local strm ≪ ␣ ;

for (Subcategory Vector Type ::iterator iter = subcategory vector .begin( );

iter ≠ subcategory vector .end ( ); ^{++}iter ) { iter second show (local strm); local strm ≪ endl ;

} /∗ for ∗/ } /∗ else ∗/ local strm ≪ endl ≪ ≪ endl ≪ endl ; return 0;

} /∗ End of Category Container ::show definition. ∗/

562. Putting Category Container together. [LDF Undated.]

563. This is what gets written to ctgcntnr.h. [LDF Undated.] ⟨ 563 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩ ⟨ “Using” declarations for namespaces 387 ⟩ ⟨ Declare class Category Container 423 ⟩ ⟨ Type definitions 424 ⟩

§564  IWF Metadata Harvester II  PUTTING CATEGORY CONTAINER TOGETHER 179

564. This is what gets compiled. [LDF Undated.] ⟨ Include files 13 ⟩

  ⟨ ctgcntnr.web 418 ⟩

⟨ Declare static variables 422 ⟩

⟨ Define Category Container functions 427 ⟩

565. Subcategory Container (sbctgcnt.web). [LDF 2006.09.19.]

Log

[LDF 2006.07.20.] Created the file Subcategory Container.h. Removed the declaration of Subcategory Container

from the file Category Container.h and put it in the file Subcategory_Container.h.

[LDF 2006.09.19.] Created this file (sbctgcnt.web). It contains the code from Subcategory_Container.h

and Subcategory_Container.cpp, and replaces these files.
⟨ sbctgcnt.web 565 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 763.

566. Preprocessor macro calls. [LDF Undated.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

567. “Using” declarations for namespaces. [LDF 2006.09.19.] ⟨ “Using” declarations for namespaces 387 ⟩ +≡

using namespace std;

568. Include files. [LDF Undated.] ⟨ Include files 13 ⟩ +≡ #include

569. Subcategory Container class declaration. [LDF Undated.]

Log

[LDF 2006.07.31.] Made the data members protected rather than public. This made it necessary to add the friend declarations for the classes Pica Record and ZClient.

[LDF 2006.09.06.] Added the ofstream &log strm argument to all of the static functions that handle Subcategory Container objects.

⟨ Declare class Subcategory Container 569 ⟩ ≡

class Subcategory Container

{ friend class Pica Record; friend class ZClient;

protected: char pica plus field id ; string content description german; string content description english; string field value;

180 SUBCATEGORY CONTAINER CLASS DECLARATION IWF Metadata Harvester II §569

vector⟨Database Command ∗⟩ database commands ; public: ⟨ Declare Subcategory Container functions 572 ⟩ };

This code is used in section 762.

570. Type definitions (typedefs). [LDF Undated.]

format Subcategory Map Type Subcategory Container
format Subcategory Vector Type Subcategory Map Type

⟨ Type definitions 424 ⟩ +≡ typedef map⟨char, Subcategory Container ∗⟩ Subcategory Map Type; typedef vector⟨pair⟨char, Subcategory Container ∗⟩⟩ Subcategory Vector Type;

571. Functions. [LDF 2006.09.19.]

572. Assignment operator. [LDF 2006.09.19.]

Log

LDF 2006.07.20. Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ ≡

void operator=(const Subcategory Container &);

739, 742, 745, 747, 749, 751, 753, 755, 757, and 759. This code is used in section 569.

See also sections 576, 581, 583, 586, 591, 612, 615, 626, 628, 630, 632, 634, 641, 644, 646, 651, 656, 658, 660, 663, 665, 667, 669,

672, 674, 676, 679, 681, 683, 685, 687, 690, 692, 695, 697, 700, 705, 708, 710, 712, 714, 717, 719, 723, 728, 733, 735, 737,

§573  IWF Metadata Harvester II  ASSIGNMENT OPERATOR 181

573. ⟨ Define Subcategory Container functions 573 ⟩ ≡

void Subcategory Container ::operator=(const Subcategory Container &s)

{ pica plus field id = s.pica plus field id ; content description english = s.content description english; content description german = s.content description german;

}

See also sections 577, 578, 579, 582, 584, 587, 588, 589, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 613, 616, 617, 618, 619, 620, 621, 622, 623, 624, 627, 629, 631, 633, 635, 636, 637, 638, 639, 642, 645, 647, 648, 649, 650, 652, 653, 654, 655, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 702, 703, 706, 709, 711, 713, 715, 718, 720, 724, 725, 726, 729, 730, 731, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 758, and 760.

This code is used in section 763.

574. Functions for Subcategories (PICA Fields). These functions either write information to PICA database, or store it in the vector⟨Database Command ∗⟩ category database command arguments for processing by the Category Container function for the current PICA category. Each of these functions has a Category Container ∗category argument. [LDF 2006.07.25.] [LDF 2006.09.21.]

Log

[LDF 2006.07.25.] Added this section.

[LDF 2006.09.06.] Added the ofstream &log strm argument to all of the static functions that handle Subcategory Container objects.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

575. Identifier and Date of the Original Catalogue Entry (Pica+ 001A / Pica3 0200). Kennung und Datum der Ersterfassung. [LDF Undated.]

576. Identifier and Date of the Original Catalogue Entry (‘0’). Kennung und Datum der Ersterfassung (‘0’). [LDF Undated.] ⟨ Declare Subcategory Container functions 572 ⟩ +≡

static int f 001A 0 (

CDatabase ∗database,

long record id ,

Category Container ∗category ,

Subcategory Container ∗subcategory ,

Output Stream Type &log strm);

182 IDENTIFIER AND DATE OF THE ORIGINAL CATALOGUE ENTRY (‘0’) IWF Metadata Harvester II §577

577. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 001A 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ≪ subcategory field value.substr (5) ≪ ␣ ␣ ≪ ␣ ␣ ≪ subcategory field value.substr (0, 4) ≪ ␣ ␣ ␣ ␣ ≪ record id ;

#if 0 /∗ 1 ∗/

AfxMessageBox (sql strm.str ( ).c str ( )); #endif

578. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

579. ⟨ Define Subcategory Container functions 573 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif return 0; } /∗ End of Subcategory Container ::f 001A 0 definition. ∗/

§581  IWF Metadata Harvester II  IDENTIFIER AND DATE OF THE CHANGE (‘0’) 183

580. Identifier and Date of the Most Recent Change (Pica+ 001B / Pica3 0210). Kennung und Datum der letzten Änderung. [LDF 2006.08.03.] 581. Identifier and Date of the Change (‘0’). Kennung und Datum der Änderung (‘0’). [LDF 2006.08.03.]

Log

[LDF 2006.08.03.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 001B 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

582. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 001B 0 (CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 001B 0 definition. ∗/

583. Time (‘t’). Uhrzeit (‘t’). [LDF 2006.08.03.]

Log

LDF 2006.08.03. Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 001B t (CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

184  TIME (‘T’)  IWF Metadata Harvester II §584

584. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 001B t ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 001B t definition. ∗/

585. Identifier and Date of the Change in Status (Pica+ 001D / Pica3 0230). Kennung und Datum der Statusänderung

586. Identifier and Date of the Change (‘0’). Kennung und Datum der Änderung.

Log

[LDF 2006.08.03.] Added this function.

[LDF 2006.08.29.] Added error-handling code for the case that the date string is “99-99-99”. Also calling CDatabase ::ExecuteSQL in a try block. However, the code in the catch block doesn’t do anything yet.

To Do

Put real code in the catch block. Add similar error-handling code to the other functions that call the SQL convert function (?? or procedure, or whatever it is).

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 001D 0 (CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 587. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 001D 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ;

if (subcategory field value.substr (5, 8) ≡ ) sql strm ≪ ␣ ;

else sql strm ≪ ␣ ≪ subcategory field value.substr (5) ≪ ␣ ␣ ; sql strm ≪ ␣ ␣ ≪ subcategory field value.substr (0,

4) ≪ ␣ ␣ ␣ ␣ ≪ record id ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

588. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

186  IDENTIFIER AND DATE OF THE CHANGE (‘0’)  IWF Metadata Harvester II §589

589. ⟨ Define Subcategory Container functions 573 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

return 0; } /∗ End of Subcategory Container ::f 001D 0 definition. ∗/

590. Bibliographical Type and Status (Pica+ 002@ / Pica3 0500). Bibliographische Gattung und Status. [LDF 2006.08.03.]

591. Bibliographical Type and Status (‘0’). Bibliographische Gattung und Status (‘0’). [LDF 2006.08.03.]

Log

[LDF 2006.08.03.] Added this function.

[LDF 2006.09.01.] Made stringstream sql 1 strm local to this function. Formerly, it was static and local to this file.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 002 AT 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

592. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 002 AT 0 (

CDatabase ∗database,

long record id ,

Category Container ∗category ,

Subcategory Container ∗subcategory ,

Output Stream Type &log strm){ stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

§593  IWF Metadata Harvester II  BIBLIOGRAPHICAL TYPE AND STATUS (‘0’) 187

stringstream sql 1 strm; Temp IDs temp ids ; 593. Error handling: subcategory field value.size( ) < 3. [LDF 2006.08.03.]

To Do

[LDF 2006.08.03.] Add error log and write messages to it.

⟨ Define Subcategory Container functions 573 ⟩ +≡

if (subcategory field value.size( ) < 3) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

  ␣      ␣  ␣  ␣      ␣ ␣          ␣   ␣                           ␣ ≪

endl ≪ ␣ ␣ ␣ ≪ static cast⟨unsigned

int⟩(subcategory field value.size( )) ≪  ≪ endl ≪  ␣        ␣   ␣

  ␣    ␣                             ␣ ≪  ␣  ≪
  endl ≪  ␣        ␣              ␣    ␣       ␣     ␣  ␣   ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); return 1;

} /∗ if (subcategory field value.size( ) < 3) ∗/

594. ⟨ Define Subcategory Container functions 573 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ≪ ␣ ␣ ≪ subcategory field value[0] ≪ ␣ ␣ ␣ ␣ ≪ subcategory field value[1] ≪ ␣ ␣ ␣ ␣ ≪ subcategory field value[2] ≪ ;

sql 1 strm ≪ ␣ ␣ ␣ ≪ subcategory field value[0] ≪ ␣ ≪ subcategory field value[1] ≪ ␣ ≪ subcategory field value[2] ≪ ␣ ;

595. ⟨ Define Subcategory Container functions 573 ⟩ +≡

if (subcategory field value.size( ) > 3) { sql strm ≪ ␣ ␣ ␣ ␣ ≪ subcategory field value[3] ≪ ; sql 1 strm ≪ ≪ subcategory field value[3] ≪ ␣ ; if (subcategory field value.size( ) > 4) {

sql strm ≪ ␣ ␣ ␣ ␣ ≪

subcategory field value[4] ≪ ; sql 1 strm ≪ ≪ subcategory field value[4] ≪ ␣ ; if (subcategory field value.size( ) > 5) {

sql strm ≪ ␣ ␣ ␣ ␣ ≪ subcategory field value[5] ≪ ; sql 1 strm ≪ ≪ subcategory field value[5] ≪ ;

} else {

sql strm ≪ ␣ ␣ ␣ ␣ ;

sql 1 strm ≪ ; }

} /∗ ¿ 4 ∗/ else {

sql strm ≪ ␣ ␣ ␣ ␣ ; sql 1 strm ≪ ␣ ;

188  BIBLIOGRAPHICAL TYPE AND STATUS (‘0’)  IWF Metadata Harvester II §596

} } /∗ ¿ 3 ∗/ 596. ⟨ Define Subcategory Container functions 573 ⟩ +≡

else { sql strm ≪ ␣ ␣ ␣ ␣ ; sql 1 strm ≪ ␣ ␣ ;

} sql 1 strm ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ) ≪ endl ≪ ␣ ␣ ≪ sql 1 strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

597. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

598. ⟨ Define Subcategory Container functions 573 ⟩ +≡

temp ids .Open( );

599. No corresponding entry in the Bibliographic Types table. We create one. [LDF 2006.08.03.] ⟨ Define Subcategory Container functions 573 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif 600. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql 1 strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql 1 strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql 1 strm.str ( );

601. Create entry in Records Bibliographic Types. [LDF Undated.]

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Subcategory Container functions 573 ⟩ +≡ temp ids .Close( );

sql strm ≪  ␣        ␣       ␣        ␣ ≪  ␣   ␣ ␣                     ␣

    ␣␣                   ␣ ≪  ␣  ␣                     ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

602. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); 603. ⟨ Define Subcategory Container functions 573 ⟩ +≡

temp ids .Open( ); if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

      ␣  ␣        ␣    ␣    ␣      ␣                       ␣     ␣ ≪

␣ ␣ ≪ endl ≪

      ␣        ␣             ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp ids .Close( );

return 1; } /∗ if ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ temp ids .m temp id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪

␣ ≪ record id ≪ ␣ ≪ temp ids .m temp id ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

604. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

605. ⟨ Define Subcategory Container functions 573 ⟩ +≡

temp ids .Close( ); } /∗ if (No corresponding entry in the Bibliographic Types table.) ∗/ 606. ⟨ Define Subcategory Container functions 573 ⟩ +≡

else { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ endl ≪

␣ ␣ ≪ temp ids .m temp id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif sql 1 strm.str ( ); long bib id = temp ids .m temp id ; temp ids .Close( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ≪ ␣ ␣ ␣ ≪ record id ≪ ␣ ␣ ␣ ␣ ≪ bib id ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

607. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

608. ⟨ Define Subcategory Container functions 573 ⟩ +≡

temp ids .Open( ); if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) { temp strm ≪

    ␣            ␣      ␣  ␣                             ␣␣        ␣  ;

sql strm ≪ ␣ ␣ ␣ ␣ ≪

␣ ≪ record id ≪ ␣ ≪ bib id ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif 609. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); } /∗ if (Create new entry in Records Bibliographic Types table.) ∗/

610. A corresponding entry already exists in the Records Bibliographic Types table. This normally shouldn’t occur. [LDF 2006.08.03.] ⟨ Define Subcategory Container functions 573 ⟩ +≡

else { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪

      ␣␣   ␣        ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

} temp ids .Close( ); } /∗ else ∗/ if (temp ids .IsOpen( )) temp ids .Close( ); return 0; } /∗ End of Subcategory Container ::f 002 AT 0 definition. ∗/

611. Identification Number (PPN) (Pica+ 003@ / Pica3 0100). Identifikationsnummer (PPN) (Pica+ 003@ / Pica3 0100). [LDF 2006.07.24.]

No information sheet for this category in the “Categorization Guidelines” (“Katagorisierungsrichtlinien”)!

[LDF 2006.07.24.]

“PPN” = “PICA Production Number”. [LDF 2006.08.23.]

612. Identification Number (PPN) (‘0’). Identifikationsnummer (PPN) (‘0’). [LDF 2006.07.24.]

No information sheet for this category in the “Categorization Guidelines” (“Katagorisierungsrichtlinien”)!

[LDF 2006.07.24.]

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 003 AT 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§613  IWF Metadata Harvester II  IDENTIFICATION NUMBER (PPN) (‘0’) 193

613. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 003 AT 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; stringstream sql strm; temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ≪ subcategory field value ≪

␣ ≪ ␣ ␣ ␣ ≪ record id ;

#if 0 /∗ 1 ∗/

AfxMessageBox (sql strm.str ( ).c str ( )); #endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); return 0;

} /∗ End of Subcategory Container ::f 003 AT 0 definition. ∗/

194  FIRST LANGUAGE CODE FOR THE CURRENT TEXT (‘A’)  IWF Metadata Harvester II §615

614. Code(s) for Languages (Pica+ 010@ / Pica3 1500). Code(s) für Sprachen (Pica+ 010@ / Pica3 1500). [LDF 2006.07.24.] 615. First Language Code for the Current Text (‘a’). Erster Sprachencode für den vorliegenden Text (‘a’). [LDF 2006.08.03.]

Log

[LDF 2006.08.03.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 010 AT a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

616. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 010 AT a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

617. ⟨ Define Subcategory Container functions 573 ⟩ +≡

Temp IDs temp ids ; sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ␣ ≪ subcategory field value ≪ ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

§618  IWF Metadata Harvester II  FIRST LANGUAGE CODE FOR THE CURRENT TEXT (‘A’) 195

#endif 618. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( );

619. Error handling: No corresponding entry in the Languages table. All valid languages should have predefined entries. [LDF 2006.08.03.]

To Do

[LDF 2006.08.03.] Write error to error log. Perhaps make error log file a member of ZClient, and pass a ZClient ∗ through the chain of functions.

⟨ Define Subcategory Container functions 573 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

temp strm ≪ ␣␣ ␣ ≪ endl ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪ subcategory field value ≪ endl ≪

      ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

temp ids .Close( );

return 1; } /∗ if ∗/ 620. A corresponding entry in the Languages table exists. [LDF 2006.08.03.] ⟨ Define Subcategory Container functions 573 ⟩ +≡

else { long lang id = temp ids .m temp id ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ lang id ≪ ␣ ␣␣ ␣ ␣ ≪

subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp ids .Close( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ␣ ␣ ␣ ≪ record id ≪ ␣ ␣ ␣ ␣ ≪ lang id ≪ ␣ ␣ ␣ ␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

621. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); 622. ⟨ Define Subcategory Container functions 573 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ␣ ≪ ␣ ␣ ␣ ␣ ≪ ␣ ≪ record id ≪ ␣ ≪ lang id ≪

    ␣    ␣        ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

623. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); } /∗ if ∗/

624. ⟨ Define Subcategory Container functions 573 ⟩ +≡

else { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ≪ temp ids .m temp id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ else ∗/ temp ids .Close( ); } /∗ else ∗/ if (temp ids .IsOpen( )) temp ids .Close( ); return 0; } /∗ End of Subcategory Container ::f 010 AT a definition. ∗/

625. Year of Appearance (Pica+ 011@ / Pica3 1100). Erscheinungsjahr (Pica+ 011@ / Pica3 1100). [LDF 2006.08.04.]

198  YEAR OF APPEARANCE (BEGINNING), FORM FOR SORTING (‘A’)  IWF Metadata Harvester II §626

626. Year of Appearance (Beginning), Form for Sorting (‘a’). Erscheinungsjahr (Beginn), Sortierform (‘a’). [LDF 2006.08.04.]

This function removes non-digits from subcategory field value and checks that the remaining string contains exactly four characters. If it does, it writes it to the year appearance begin column for the current record in the Records table. If the string doesn’t contain four characters, this function issues an error message and exits with return value 1. [LDF 2006.08.04.]

Log

[LDF 2006.08.04.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 011 AT a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

627. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 011 AT a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return year appearance func( , database, record id , subcategory , log strm); } /∗ End of Subcategory Container ::f 011 AT a definition. ∗/

628. Year of Appearance (End), Form for Sorting (‘b’). Erscheinungsjahr (Ende), Sortierform (‘b’). [LDF 2006.08.04.]

Log

[LDF 2006.08.04.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 011 AT b( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§629  IWF Metadata Harvester II  YEAR OF APPEARANCE (END), FORM FOR SORTING (‘B’) 199

629. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 011 AT b( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return year appearance func( , database, record id , subcategory , log strm); } /∗ End of Subcategory Container ::f 011 AT b definition. ∗/

630. Original Year of Appearance (‘e’). Ursprüngliches Erscheinungsjahr (‘e’). [LDF 2006.08.04.]

Log

[LDF 2006.08.04.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 011 AT e( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

200  ORIGINAL YEAR OF APPEARANCE (‘E’)  IWF Metadata Harvester II §631

631. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 011 AT e( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return year appearance func( , database, record id , subcategory , log strm); } /∗ End of Subcategory Container ::f 011 AT e definition. ∗/

632. Year of Appearance (according to RAK-WB) (‘n’). Erscheinungsjahr (nach RAK-WB) (‘n’). [LDF 2006.08.04.]

Log

[LDF 2006.08.04.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 011 AT n( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§633  IWF Metadata Harvester II  YEAR OF APPEARANCE (ACCORDING TO RAK-WB) (‘N’) 201

633. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 011 AT n( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return year appearance func( , database, record id , subcategory , log strm); } /∗ End of Subcategory Container ::f 011 AT n definition. ∗/

634. year appearance func. [LDF 2006.08.04.]

Log

[LDF 2006.08.04.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int year appearance func( string column, CDatabase ∗database, long record id , Subcategory Container ∗subcategory , Output Stream Type &log strm);

202 YEAR APPEARANCE FUNC  IWF Metadata Harvester II  §635

635. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::year appearance func(string column, CDatabase ∗database, long

record id , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

string curr str ;

for (unsigned int i = 0; i < subcategory field value.length( ); ^{++}i) {

if (isdigit (subcategory field value[i])) curr str += subcategory field value[i]; }

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ curr str ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

636. Error handling: curr str .length( ) ≠ 4. [LDF Undated.] ⟨ Define Subcategory Container functions 573 ⟩ +≡

if (curr str .length( ) ≠ 4) {

temp strm ≪  ␣␣  ␣  ≪
endl ≪  ␣  ␣ ≪ record id ≪ endl ≪  ␣  ␣ ≪
curr str ≪ endl ≪  ␣  ␣   ␣  ≪ endl ≪

        ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ if (curr str .length( ) ≠ 4) ∗/

637. ⟨ Define Subcategory Container functions 573 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ≪ column ≪ ␣ ␣ ≪ curr str ≪ ␣ ␣ ␣ ␣ ≪

record id ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ sql strm.str ( );

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

§638  IWF Metadata Harvester II  YEAR APPEARANCE FUNC  203

638. ⟨ Define Subcategory Container functions 573 ⟩ +≡

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

639. ⟨ Define Subcategory Container functions 573 ⟩ +≡

return 0; } /∗ End of Subcategory Container ::year appearance func definition. ∗/

640. General Material Name (Pica+ 016H / Pica3 1108). Allgemeine Materialbenennung (Pica+ 016H / Pica3 1108). [LDF 2006.09.01.]

641. General Material Name (‘0’). Allgemeine Materialbenennung (‘0’). [LDF 2006.09.01.]

Log

[LDF 2006.09.01.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 016H 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

204  GENERAL MATERIAL NAME (‘0’)  IWF Metadata Harvester II §642

642. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 016H 0 (

CDatabase ∗database,

long record id ,

Category Container ∗category ,

Subcategory Container ∗subcategory ,

Output Stream Type &log strm)

{ #if 0 /∗ 1 ∗/ #define #else #undef #endif

stringstream temp strm; #ifdef

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #ifdef

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #undef

return 0; } /∗ End of Subcategory Container ::f 016H 0 definition. ∗/

643. Main Canonical Title, Additional Information, Authorship (Pica+ 021A / Pica3 4000).

Hauptsachtitel, Zusätze, Verfasserangabe (Pica+ 021A / Pica3 4000). [LDF 2006.07.27.]

644. Standard Text (‘1’). Standardtext (‘1’). [LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 021A 1 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§645  IWF Metadata Harvester II  STANDARD TEXT (‘1’) 205

645. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 021A 1 (

CDatabase ∗database,

long record id ,

Category Container ∗category ,

Subcategory Container ∗subcategory ,

Output Stream Type &log strm)

{

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif string curr str ; fix string (subcategory field value, curr str ); category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); return 0;

} /∗ End of Subcategory Container ::f 021A 1 definition. ∗/

646. Main Canonical Title (‘a’). Hauptsachtitel (‘a’). [LDF Undated.]

Log

[LDF Undated.] Added this function.

[LDF 2006.09.04.] !! BUG FIX: Added code for splitting long titles. These didn’t cause errors when writing to the database, but they weren’t entered completely. Errors then occurred when trying to read them from the database.

[LDF 2006.09.21.] !! BUG FIX: Actually, it turned out that the problem was the default limit for the length of the string stored in the CStringA data members of the classes derived from CRecordset. In this case, it was class Main Titles. I’ve now fixed this for all of these classes.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 021A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

206  MAIN CANONICAL TITLE (‘A’)  IWF Metadata Harvester II §647

647. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 021A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

string curr str ;

fix string (subcategory field value, curr str ); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

curr str ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

648.

Log

[LDF 2006.09.11.] Increased the limit for the length of curr str to 512.

⟨ Define Subcategory Container functions 573 ⟩ +≡

if (curr str .length( ) ≤ 512)

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); else { string temp str ; int char ctr ; int save char ctr ; int continuation ctr = 1; stringstream continuation strm;

§649  IWF Metadata Harvester II  MAIN CANONICAL TITLE (‘A’) 207

649.

Log

[LDF 2006.09.11.] Increased the limit for the length of curr str to 512.

⟨ Define Subcategory Container functions 573 ⟩ +≡

while (curr str .length( ) > 512) { save char ctr = char ctr = static cast⟨int⟩(min(curr str .length( )−1,

199)); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ char ctr ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

650.

Log

[LDF 2006.09.05.] !! BUG FIX: No longer using isspace. Now testing for a space or tab character explicitly. isspace failed because of the numerical value of a character in a record. However, I wasn’t able to determine the exact reason why this occurred. Also added the condition char ctr > 0.

⟨ Define Subcategory Container functions 573 ⟩ +≡ while (¬(curr str [char ctr ] ≡ ␣ ∨ curr str [char ctr ] ≡ ) ∧ char ctr > 0) ^{−}char ctr ; if (char ctr ≡ 0) /∗ If no spaces, just break at save char ctr . ∗/

char ctr = save char ctr ; temp str = curr str .substr (0, char ctr );

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ curr str ≪ ≪ endl ≪ ␣ ␣ ≪ temp str ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif category database command arguments .push back (make pair (subcategory pica plus field id , temp str )); continuation strm ≪ continuation ctr^{++}; category database command arguments .push back (make pair ( , continuation strm.str ( ))); continuation strm.str ( ); curr str .erase(0, char ctr );

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ curr str ≪ ≪ endl ≪

␣ ␣ ≪ curr str .length( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ while ∗/ if (curr str .length( ) > 0) {

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); continuation strm ≪ continuation ctr^{++}; category database command arguments .push back (make pair ( , continuation strm.str ( )));

208  ADDITIONS TO THE MAIN CANONICAL TITLE (‘D’)  IWF Metadata Harvester II §651

} } /∗ else ∗/ return 0; } /∗ End of Subcategory Container ::f 021A a definition. ∗/ 651. Additions to the Main Canonical Title (‘d’). Zusätze zum Hauptsachtitel. [LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 021A d ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

652.

Log

[LDF 2006.09.05.] !! BUG FIX: Added code for splitting long strings. These didn’t cause errors when writing to the database, but they weren’t entered completely. Errors then occurred when trying to read them from the database.

[LDF 2006.09.21.] !! BUG FIX: Actually, it turned out that the problem was the default limit for the length of the string stored in the CStringA data members of the classes derived from CRecordset. In this case, it was class Main Titles. I’ve now fixed this for all of these classes.

⟨ Define Subcategory Container functions 573 ⟩ +≡ int Subcategory Container ::f 021A d ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

string curr str ;

fix string (subcategory field value, curr str ); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

curr str ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

§653  IWF Metadata Harvester II  ADDITIONS TO THE MAIN CANONICAL TITLE (‘D’) 209

653.

Log

[LDF 2006.09.11.] Increased the limit for the length of curr str to 512.

⟨ Define Subcategory Container functions 573 ⟩ +≡

if (curr str .length( ) ≤ 512)

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); else { string temp str ; int char ctr ; int save char ctr ; int continuation ctr = 1; stringstream continuation strm;

654.

Log

[LDF 2006.09.11.] Increased the limit for the length of curr str to 512.

⟨ Define Subcategory Container functions 573 ⟩ +≡

while (curr str .length( ) > 512) { save char ctr = char ctr = static cast⟨int⟩(min(curr str .length( )−1,

199)); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ char ctr ≪ ≪ char ctr ≪ ␣ ␣ ≪

curr str [char ctr ]; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif 655.

Log

[LDF 2006.09.05.] !! BUG FIX: No longer using isspace. Now testing for a space or tab character explicitly. isspace failed because of the numerical value of a character in a record. However, I wasn’t able to determine the exact reason why this occurred. Also added the condition char ctr > 0.

⟨ Define Subcategory Container functions 573 ⟩ +≡ while (¬(curr str [char ctr ] ≡ ␣ ∨ curr str [char ctr ] ≡ )) ^{−}char ctr ; if (char ctr ≡ 0) /∗ If no spaces, just break at save char ctr . ∗/

char ctr = save char ctr ; temp str = curr str .substr (0, char ctr );

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ curr str ≪ ≪ endl ≪ ␣ ␣ ≪ temp str ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif category database command arguments .push back (make pair (subcategory pica plus field id , temp str )); continuation strm ≪ continuation ctr^{++}; category database command arguments .push back (make pair ( , continuation strm.str ( ))); continuation strm.str ( ); curr str .erase(0, char ctr );

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ curr str ≪ ≪ endl ≪

␣ ␣ ≪ curr str .length( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ while ∗/ if (curr str .length( ) > 0) {

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); continuation strm ≪ continuation ctr^{++}; category database command arguments .push back (make pair ( , continuation strm.str ( )));

} } /∗ else ∗/ return 0; } /∗ End of Subcategory Container ::f 021A d definition. ∗/

656. Additional Creator (‘e’). Zu ergänzender Urheber (‘e’). [LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 021A e( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§657  IWF Metadata Harvester II  ADDITIONAL CREATOR (‘E’) 211

657. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 021A e( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

string curr str ;

fix string (subcategory field value, curr str );

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); return 0;

} /∗ End of Subcategory Container ::f 021A e definition. ∗/

658. Parallel Canonical Title (‘f’). Parallelsachtitel (‘f’). [LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 021A f ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

212  PARALLEL CANONICAL TITLE (‘F’)  IWF Metadata Harvester II §659

659. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 021A f ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

string curr str ;

fix string (subcategory field value, curr str );

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); return 0;

} /∗ End of Subcategory Container ::f 021A f definition. ∗/

660. Authorship (‘h’). Verfasserangabe (‘h’). [LDF 2006.07.27.]

Log

[LDF 2006.07.27.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 021A h( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§661  IWF Metadata Harvester II  AUTHORSHIP (‘H’) 213

661. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 021A h( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

string curr str ;

fix string (subcategory field value, curr str );

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); return 0;

} /∗ End of Subcategory Container ::f 021A h definition. ∗/

662. 028A.

663. (‘9’). [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

214  (‘9’)  IWF Metadata Harvester II §664

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028A 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 664. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028A 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 028A 9 definition. ∗/

665. (‘a’). [LDF Undated.] ⟨ Declare Subcategory Container functions 572 ⟩ +≡

§666  IWF Metadata Harvester II  (‘A’) 215

static int f 028A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 666. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

string curr surname;

fix string (subcategory field value, curr surname);

category database command arguments .push back (make pair (subcategory pica plus field id ,

curr surname)); return 0;

} /∗ Subcategory Container ::f 028A a ∗/

667. (‘c’). [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

216  (‘C’)  IWF Metadata Harvester II §668

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028A c( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 668. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028A c( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm;

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

#if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

return 0; } /∗ End of Subcategory Container ::f 028A c definition. ∗/

669. (‘d’). [LDF Undated.] ⟨ Declare Subcategory Container functions 572 ⟩ +≡

§670  IWF Metadata Harvester II  (‘D’) 217

static int f 028A d ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 670. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028A d (

CDatabase ∗database,

long record id ,

Category Container ∗category ,

Subcategory Container ∗subcategory ,

Output Stream Type &log strm)

{ stringstream temp strm; temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value ≪ endl ;

string curr given name;

fix string (subcategory field value, curr given name);

temp strm ≪ ␣ ␣ ≪ curr given name; #if 0 /∗ 1 ∗/

AfxMessageBox (temp strm.str ( ).c str ( )); #endif

temp strm.str ( );

category database command arguments .push back (make pair (subcategory pica plus field id ,

curr given name)); return 0;

} /∗ End of Subcategory Container ::f 028A d definition. ∗/

671. Personal Name; Author (Pica+ 028B / Pica3 120, 3000–3009). Personenname; Verfasser (Pica+ 028B / Pica3 120, 3000–3009). [LDF 2006.09.07.]

Pica+ 028B, Pica3 120, 3000–3009

Pica3 120:  Personal Name (Cataloguing form according to RSWK)

(RSWK = Regeln für den Schlagwortkatalog = Rules for the Subject Catalogue)

Pica3 3000–3009: Author
Pica3 120:  Personenname (Ansetzungsform nach RSWK)

(RSWK = Regeln für den Schlagwortkatalog)

Pica3 3000–3009: Verfasser

218  IDENTIFICATION NUMBER (PPN) (‘9’)  IWF Metadata Harvester II §672

672. Identification Number (PPN) (‘9’). Identifikationsnummer (PPN) (‘9’). [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028B 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

673. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028B 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 028B 9 definition. ∗/

674. Surname (‘a’). Familienname (‘a’). [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028B a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§675  IWF Metadata Harvester II  SURNAME (‘A’) 219

675. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028B a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 028B a definition. ∗/

676. Given Name (‘d’). Vorname (‘d’). [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028B d ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

220  GIVEN NAME (‘D’)  IWF Metadata Harvester II §677

677. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028B d ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 028B d definition. ∗/

678. 028C. [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this section.

679. Expansion of the Cataloguing Form. Expansion der Ansetzungsform. [LDF 2006.11.27.]

Database table: Contributors:expansion. [LDF 2006.11.27.]

Log

[LDF 2006.11.27.] Added this function. It currently has a dummy definition.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028C 8 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§680  IWF Metadata Harvester II  EXPANSION OF THE CATALOGUING FORM 221

680. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028C 8 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #if 0 /∗ 1 ∗/

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value));

#endif

return 0; } /∗ End of Subcategory Container ::f 028C 8 definition. ∗/

681. (‘9’). [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028C 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 682. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028C 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 028C 9 definition. ∗/

683. (‘a’). [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028C a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 684. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028C a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif string curr surname; fix string (subcategory field value, curr surname); category database command arguments .push back (make pair (subcategory pica plus field id ,

curr surname)); return 0;

} /∗ End of Subcategory Container ::f 028C a definition. ∗/

685. (‘c’). [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028C c( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 686. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028C c( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return 0; } /∗ End of Subcategory Container ::f 028C c definition. ∗/

687. (‘d’). [LDF 2006.07.26.]

Log

[LDF 2006.07.26.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 028C d ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 688. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 028C d ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif string curr given name; fix string (subcategory field value, curr given name);

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ curr given name; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

curr given name)); return 0;

} /∗ End of Subcategory Container ::f 028C d definition. ∗/

689. 029A. Primary corporate entity. Pica+ 029A / Pica3 3100; Primrkrperschaft. [LDF 2006.11.27.] The functions in this section are intended to write to the primary corporate entity and primary corporate entity expansion

columns of the Publishers database table, which otherwise contains data from Pica+ 033A / Pica3 4030: “Ort, Verlag”.

Log

[2006.11.27.] Added this section.

690. ’8’ Expansion of the cataloguing form. Expansion der Ansetzungsform. [LDF 2006.11.27.]

Log

[2006.11.27.] Added this function. It currently has a dummy definition.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 029A 8 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

226  ’8’ EXPANSION OF THE CATALOGUING FORM  IWF Metadata Harvester II §691

691. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 029A 8 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #if 0 /∗ 1 ∗/

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value));

#endif

return 0; } /∗ End of Subcategory Container ::f 029A 8 definition. ∗/

692. ’a’ Corporate entity. [LDF 2006.11.27.]

Log

[2006.11.27.] Added this function. It currently has a dummy definition.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 029A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§693  IWF Metadata Harvester II  ’A’ CORPORATE ENTITY 227

693. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 029A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #if 0 /∗ 1 ∗/

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value));

#endif

return 0; } /∗ End of Subcategory Container ::f 029A a definition. ∗/

694. 033A. [LDF Undated.]

695. (‘n’). [LDF 2006.08.14.]

Log

[LDF 2006.08.14.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 033A n( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

228  (‘N’)  IWF Metadata Harvester II §696

696. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 033A n( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory pica plus field id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

string curr str ;

fix string (subcategory field value, curr str );

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); return 0;

} /∗ End of Subcategory Container ::f 033A n definition. ∗/

697. (‘p’). [LDF 2006.08.14.]

Log

[LDF 2006.08.14.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 033A p( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§698  IWF Metadata Harvester II  (‘P’) 229

698. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 033A p( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory pica plus field id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

string curr str ;

fix string (subcategory field value, curr str );

category database command arguments .push back (make pair (subcategory pica plus field id , curr str )); return 0;

} /∗ End of Subcategory Container ::f 033A p definition. ∗/

699. Size or Range, Specification of Material, Technical System (Pica+ 034D / Pica3 4060). Umfangsangabe, spezifische Materialbenennung, technisches System (Pica+ 034D / Pica3 4060) [LDF 2006.08.14.]

700. Text (‘a’). [LDF 2006.08.14.]

Log

[LDF 2006.08.14.] Added this function.

230  TEXT (‘A’)  IWF Metadata Harvester II §701

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 034D a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 701. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 034D a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif Temp IDs temp ids ; sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

    ␣      ␣                    ␣ ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); /∗ ***** (5) Error handling: No entry in the PICA Categories table for

PICA3 4060, PICA+ 034D. LDF 2006.08.15. ∗/ if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

      ␣     ␣  ␣   ␣                 ␣      ␣   ␣ ≪  ␣  ≪ endl ≪
      ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

temp ids .Close( );

return 1; } /∗ if ∗/ unsigned int pica category id = temp ids .m temp id ;

§701  IWF Metadata Harvester II  TEXT (‘A’) 231

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ pica category id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp ids .Close( ); /∗ ***** (5) Get pica field id . [LDF 2006.08.15.] ∗/ sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

    ␣     ␣                    ␣  ␣   ␣ ≪
    ␣                   ␣ ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); /∗ ***** (5) Error handling: No entry in the PICA Fields table for ’a’

(Text). LDF 2006.08.15. ∗/ if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

      ␣     ␣  ␣   ␣             ␣     ␣    ␣ ≪  ␣  ≪ endl ≪
      ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

temp ids .Close( );

return 1; } /∗ if ∗/ int pica field id = temp ids .m temp id ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ pica field id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp ids .Close( ); string curr text ; fix string (subcategory field value, curr text ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ␣ ␣ ␣ ≪ curr text ≪ ␣ ≪

␣ ␣ ␣ ≪ pica category id ≪ ␣ ␣ ␣ ␣ ≪ pica field id ;

#if 0 /∗ 1 ∗/

temp strm ≪  ␣  ≪ sql strm.str ( );

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); unsigned int physical description id ; 702. There’s no corresponding entry in Physical Descriptions yet. [LDF 2006.08.15.]

Log

[LDF 2006.09.01.] !! BUG FIX: Now using top1 in the select command contained in the SQL code.

⟨ Define Subcategory Container functions 573 ⟩ +≡

if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif temp ids .Close( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

    ␣                     ␣     ␣  ␣                        ␣ ≪  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); 703. Error handling: Failed to get highest physical description id from Physical Descriptions table.

[LDF 2006.08.15.]

⟨ Define Subcategory Container functions 573 ⟩ +≡

if (temp ids .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪

      endl ≪  ␣  ␣   ␣   ␣       ␣                         ␣ ≪

␣ ␣ ␣ ≪ endl ≪

      ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

temp ids .Close( );

return 1; } /∗ if (temp ids .IsBOF ( )) ∗/ physical description id = temp ids .m temp id + 1; temp ids .Close( );

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ␣ ␣ ≪ physical description id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif /∗ ****** (6) Insert a new line into Physical Descriptions. LDF 2006.08.15. ∗/

sql strm ≪ ␣ ␣ ␣ ␣ ≪

    ␣                     ␣                         ␣ ≪

␣ ␣ ␣ ≪ ␣ ≪ physical description id ≪ ␣ ≪ curr text ≪ ␣ ≪ pica category id ≪ ␣ ≪ pica field id ≪

    ␣   ␣               ␣                     ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

/∗ ****** (6) Insert a new line into Records Physical Descriptions. LDF 2006.08.15. ∗/ sql strm ≪ ␣ ␣ ≪

␣ ␣ ≪ ␣ ≪ record id ≪ ␣ ≪ physical description id ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); #endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); } /∗ if (No corresponding entry in Physical Descriptions yet.) ∗/

/∗ ***** (5) An entry in Physical Descriptions already exists. LDF 2006.08.15. ∗/ else /∗ A corresponding entry in Physical Descriptions already exists. ∗/ {

physical description id = temp ids .m temp id ; #if 0 /∗ 1 ∗/ /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ endl ≪

␣ ␣ ≪ physical description id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

} /∗ else (A corresponding entry in Physical Descriptions already exists.) ∗/

/∗ ***** (5) Insert an entry into Records Physical Descriptions, unless one already exists.

LDF 2006.08.15. ∗/ sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ␣ ≪ record id ≪ ␣ ␣ ␣ ≪ ␣ ≪ physical description id ≪ ␣ ≪ ␣ ␣ ≪ ␣ ␣ ␣ ≪ ≪ record id ≪ ␣ ≪ physical description id ≪ ;

#if 0  /∗ 1 ∗/  /∗ 1 ∗/
temp strm ≪  ␣  ≪ sql strm.str ( );

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); if (temp ids .IsOpen( )) temp ids .Close( );

return 0; } /∗ End of Subcategory Container ::f 034D a definition. ∗/

704. Link To Superordinate Entity. Pica+ 039B / Pica3 4241. Verknüpfung zur größeren Einheit.

[LDF 2006.11.23.]

Log

[2006.11.23.] Added this section.

705. Title of the Superordinate Entity (‘a’). Pica+ 039B / Pica3 4241. Titel der größeren Einheit.

[LDF 2006.11.23.]

Log

[2006.11.23.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 039B a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

706. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 039B a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return 0; } /∗ End of Subcategory Container ::f 039B a definition. ∗/

§707 IWF Metadata Harvester IIMAIN SUBJECT AND SUBSIDIARY SUBJECTS (SUBJECT ASSIGNMENT) 237

707. Main Subject and Subsidiary Subjects (Subject Assignment). [LDF 2006.08.21.]

Pica+ 041A, Pica3 800, 5100–5199

Pica3 800:  Main Subject and Subsidiary Subjects (Subject Assignment)
Pica3 5100–5199 RSWK Chains

(RSWK: Regeln für den Schlagwortkatalog = Rules for the Subject Catalogue)

Pica3 800:  Hauptschlagwort und Unterschlagwörter (Schlagwortansetzung)
Pica3 5100–5199 RSWK-Ketten (RSWK: Regeln für den Schlagwortkatalog)

Log

[LDF 2006.08.21.] Added this section.

708. Identification Number (PPN) (‘9’). Identifikationsnummer (PPN) (‘9’). [LDF 2006.08.21.]

This field is only present in Pica3 5100–5199, not Pica3 800. [LDF 2006.08.21.]

Log

[LDF 2006.08.21.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 041A 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 709. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 041A 9 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/ /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 041A 9 definition. ∗/

710. Main Subject/Subject (‘a’). Second and Additional Permutation Pattern Subject Chain Information

Hauptschlagwort/Schlagwort (‘a’) Zweites und weiteres Permutationsmuster Angaben zur Schlagwortkette [LDF 2006.08.21.]

This field is called “Hauptschlagwort” (“Main Subject”) in Pica3 800 and “Schlagwort” (“Subject”) in Pica3 5100–5199. [LDF 2006.08.21.]

In Pica3 5100–5199 it is ambiguous. It can have the additional meanings “Zweites und weiteres Permutationsmuster” (“Second and Additional Permutation Pattern”) and “Angaben zur Schlagwortkette” (“Subject Chain Information”). [LDF 2006.08.21.]

Log

[LDF 2006.08.21.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 041A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§711  IWF Metadata Harvester II  MAIN SUBJECT/SUBJECT (‘A’) 239

711. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 041A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/ /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 041A a definition. ∗/

712. Permutation Pattern (‘f’). Permutationsmuster (‘f’). [LDF 2006.08.21.]

This field is only present in Pica3 5100–5199, not Pica3 800. [LDF 2006.08.21.]

Log

[LDF 2006.08.21.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 041A f ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

240  PERMUTATION PATTERN (‘F’)  IWF Metadata Harvester II §713

713. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 041A f ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/ /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 041A f definition. ∗/

714. Indicator/Subject Indicator (‘S’). Indikator/Schlagwortindikator (‘S’). [LDF 2006.08.21.]

This field is called “Indikator” (“Indicator”) in Pica3 800 and “Schlagwortindikator” (“Subject Indicator”) in Pica3 5100–5199. [LDF 2006.08.21.]

Log

[LDF 2006.08.21.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 041A S ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§715  IWF Metadata Harvester II  INDICATOR/SUBJECT INDICATOR (‘S’) 241

715. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 041A S ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 041A S definition. ∗/

716. 045F. DDC. Dewey Decimal Classification. Pica+ 045F / Pica3 5010. [LDF 2006.11.27.]

Log

[2006.11.27.] Added this section.

717. ’a’ Notation. [LDF 2006.11.27.]

Log

[2006.11.27.] Added this function. It currently has a dummy definition.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 045F a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

242  ’A’ NOTATION  IWF Metadata Harvester II §718

718. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 045F a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif #if 0 /∗ 1 ∗/

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value));

#endif

return 0; } /∗ End of Subcategory Container ::f 045F a definition. ∗/

719. ’b’ Additional identifier. Zusatzkennung. [LDF 2006.11.27.]

Log

[2006.11.27.] Added this function. It currently has a dummy definition.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 045F b( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§720  IWF Metadata Harvester II  ’B’ ADDITIONAL IDENTIFIER 243

720. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 045F b(

CDatabase ∗database,

long record id ,

Category Container ∗category ,

Subcategory Container ∗subcategory ,

Output Stream Type &log strm)

{

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif #if 0 /∗ 1 ∗/

category database command brguments .push back (make pair (subcategory pica plus field id ,

subcategory field value));

#endif

return 0; } /∗ End of Subcategory Container ::f 045F b definition. ∗/

721. 045H. Pica+ 045H / Pica3 5400. Synthetic DDC Notation. Synthetische DDC-Notation. (Field or fields unknown.)

To Do

[LDF 2006.11.27.] Find information about this category. There’s no PDF file for it in the GBV’s loose-leaf collection.

722. Content Summary (short) (Pica+ 047I / Pica3 4207). Inhaltliche Zusammenfassung (kurz) (Pica+ 047I / Pica3 4207). [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this section.

723. Text (‘a’). [LDF 2006.09.07.]

Log

[LDF 2006.09.07.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 047I a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); 724. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 047I a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

725.

Log

[LDF 2006.09.11.] Now setting string length limit to 1024 rather than 256.

⟨ Define Subcategory Container functions 573 ⟩ +≡ unsigned short string length limit = 1024; 726. Find the value to use for Content Summaries ::content summary id . [LDF 2006.09.07.] ⟨ Define Subcategory Container functions 573 ⟩ +≡

Temp IDs temp ids ; sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

    ␣                 ␣     ␣  ␣                  ␣  ;

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); long content summary id ; temp ids .Open( ); if (temp ids .IsBOF ( ) ∨ temp ids .m temp id ≡ 0) content summary id = 1; else content summary id = temp ids .m temp id + 1; temp ids .Close( ); string curr str ; fix string (subcategory field value, curr str ); if (curr str .length( ) ≤ string length limit ) {

sql strm ≪ ␣ ␣ ␣ ␣ ≪

      ␣                 ␣                    ␣ ≪
      ␣             ␣                ␣ ≪  ␣ ≪

content summary id ≪ ␣ ≪ record id ≪ ␣ ≪ 0 ≪ ␣ ≪ curr str ≪

      ␣ ≪  ␣               ␣                ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/

sql strm.str ( ); } /∗ if (curr str .length( ) ≤ string length limit ) ∗/ else /∗ curr str .length( ) > string length limit ∗/ {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ static cast⟨unsigned

int⟩(curr str .length( )) ≪ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif string temp str ; int char ctr ; int save char ctr ; int continuation ctr = 1; stringstream continuation strm; while (curr str .length( ) > string length limit ) {

save char ctr = char ctr = static cast⟨int⟩(min(static cast⟨int⟩(curr str .length( )) − 1,

(static cast⟨int⟩(string length limit ) − 1))); while (¬(curr str [char ctr ] ≡ ␣ ∨ curr str [char ctr ] ≡ ) ∧ char ctr > 0) ^{−}char ctr ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ char ctr ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

if (char ctr ≡ 0) /∗ If no spaces, just break at save char ctr . ∗/

char ctr = save char ctr ; temp str = curr str .substr (0, char ctr ); continuation strm ≪ continuation ctr^{++}; sql strm ≪ ␣ ␣ ␣ ␣ ≪

    ␣                 ␣                    ␣ ≪
    ␣             ␣                ␣ ≪  ␣ ≪

content summary id^{++} ≪ ␣ ≪ record id ≪ ␣ ≪ continuation strm.str ( ) ≪ ␣ ≪ temp str ≪ ␣ ≪ ␣ ␣ ␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); continuation strm.str ( ); curr str .erase(0, char ctr ); #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣␣ ␣ ␣ ≪ curr str ≪ ≪ endl ≪

␣ ␣ ≪ static cast⟨unsigned int⟩(curr str .length( )); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif } /∗ while ∗/ if (curr str .length( ) > 0) {

continuation strm ≪ continuation ctr^{++}; sql strm ≪ ␣ ␣ ␣ ␣ ≪

    ␣                 ␣                    ␣ ≪

␣ ␣ ␣ ≪ ␣ ≪ content summary id ≪ ␣ ≪ record id ≪ ␣ ≪ continuation strm.str ( ) ≪ ␣ ≪ curr str ≪ ␣ ≪

    ␣               ␣                ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); continuation strm.str ( );

} /∗ if (curr str .length( ) > 0) ∗/ } /∗ else (curr str .length( ) > string length limit ) ∗/ return 0; } /∗ End of Subcategory Container ::f 047I a definition. ∗/

248  EXEMPLAR PRODUCTION NUMBER (‘0’)  IWF Metadata Harvester II §728

727. Exemplar Production Number (Pica+ 203@ / Pica3 7800). Exemplar-Produktionsnummer [LDF 2006.08.17.] 728. Exemplar Production Number (‘0’). Exemplar-Produktionsnummer (‘0’). [LDF 2006.08.17.]

Log

[LDF 2006.08.17.] Added this function.

[LDF 2006.08.29.] Changed this function to correspond to changes made in the Exemplar Production Numbers database table: Replaced the column exemplar production number with the columns exemplar production number numeric and exemplar production number text . Unlike exemplar production number , exemplar production number numeric can contain NULL.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 203 AT 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

729. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 203 AT 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm){

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪ record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

§730  IWF Metadata Harvester II  EXEMPLAR PRODUCTION NUMBER (‘0’) 249

Temp IDs temp ids ; /∗ ***** (5) Error handling: subcategory field value contains non-numerals. LDF 2006.08.17. ∗/ 730.

Log

[LDF 2006.08.29.] Changed this code. Exemplar production numbers can contain non-digits. I’ve therefore changed the Exemplar Production Numbers database table accordingly. I ’ve replaced the column exemplar production number with the columns exemplar production number numeric and exemplar production number text . Unlike exemplar production number , exemplar production number numeric can contain NULL.

⟨ Define Subcategory Container functions 573 ⟩ +≡ bool non digit switch = false; for (unsigned int i = 0; i < subcategory field value.size( ); ^{++}i) {

if (¬isdigit (subcategory field value[i])) {

non digit switch = true; } /∗ if ∗/

} /∗ for ∗/ 731. ⟨ Define Subcategory Container functions 573 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ≪

  ␣                           ␣ ;

if (non digit switch)

sql strm ≪ ␣ ␣ ␣ ≪ subcategory field value ≪

    ␣   ␣                                  ␣ ␣  ;

else sql strm ≪ ␣ ␣ ␣ ≪ subcategory field value ≪

    ␣   ␣                              ␣ ␣  ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪ endl ≪

sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); temp ids .Open( ); if (temp ids .IsBOF ( )) {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ≪ endl ≪

    ␣      ␣   ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif sql strm ≪ ␣ ␣ ≪ ; if (non digit switch) sql strm ≪ ; else sql strm ≪ ; sql strm ≪ ␣ ␣ ≪ ␣ ; if (non digit switch) sql strm ≪ ≪ subcategory field value ≪ ; else sql strm ≪ subcategory field value; sql strm ≪ ␣ ≪ record id ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e)

{

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

} /∗ if (temp ids .IsBOF ( )) ∗/ else {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪

␣ ≪ endl ≪ ␣ ␣ ≪ temp ids .m temp id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

␣ ␣ ␣ ≪ record id ≪ ␣ ␣ ; if (non digit switch) sql strm ≪ ; else sql strm ≪ ; sql strm ≪ ␣ ␣ ≪ subcategory field value ≪ ␣ ␣ ;

if (non digit switch) sql strm ≪  ␣ ␣  ;
else sql strm ≪  ␣ ␣  ;

sql strm ≪ ␣ ␣ ␣ ≪

    ␣                                ␣ ≪

␣ ␣ ≪ record id ≪ ␣ ; if (non digit switch) sql strm ≪ ≪ subcategory field value ≪ ␣ ; else sql strm ≪ ␣ ≪ subcategory field value; sql strm ≪ subcategory field value ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( );

} /∗ else ∗/ if (temp ids .IsOpen( )) temp ids .Close( );

#if 0 /∗ 1 ∗/

temp strm ≪  ␣                                    ␣ ≪ endl ≪  ␣  ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif return 0; } /∗ End of Subcategory Container ::f 203 AT 0 definition. ∗/

732. Call Number (Pica+ 209A / Pica3 7100–7109). Signatur (Pica+ 209A / Pica3 7100–7109). [LDF 2006.08.17.]

Log

[LDF 2006.08.15.] Added this section.

733. Call Number (‘a’). Signatur (‘a’). [LDF 2006.08.17.]

Log

[LDF 2006.08.15.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§734  IWF Metadata Harvester II  CALL NUMBER (‘A’) 253

734. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209A a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value));

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return 0; } /∗ End of Subcategory Container ::f 209A a definition. ∗/

735. Library Number (‘b’). Bibliotheksnummer (‘b’). [LDF 2006.08.15.]

Log

[LDF 2006.08.15.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209A b( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

254  LIBRARY NUMBER (‘B’)  IWF Metadata Harvester II §736

736. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209A b( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209A b definition. ∗/

737. Special Location (‘f’). Sonderstandort (‘f’). [LDF 2006.08.15.]

Log

[LDF 2006.08.15.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209A f ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§738  IWF Metadata Harvester II  SPECIAL LOCATION (‘F’) 255

738. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209A f ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209A f definition. ∗/

739. Library Department (‘j’). Abteilung der Bibliothek (‘j’). [LDF 2006.08.15.]

Log

[LDF 2006.08.15.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209A j ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

256  LIBRARY DEPARTMENT (‘J’)  IWF Metadata Harvester II §740

740. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209A j ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209A j definition. ∗/

741. Access Number (Pica+ 209C / Pica3 8100). Zugangsnummer (Pica+ 209C / Pica3 8100). [LDF 2006.08.18.]

Log

[LDF 2006.08.18.] Added this section.

742. Access Number (‘a’). Zugangsnummer (‘a’). [LDF 2006.08.18.]

Log

[LDF 2006.08.18.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209C a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§743  IWF Metadata Harvester II  ACCESS NUMBER (‘A’) 257

743. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209C a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; stringstream sql strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

sql strm ≪ ␣   ␣      ␣       ␣ ␣    ␣              ␣ ≪  ␣             ␣ ␣ ≪

subcategory field value ≪ ␣ ␣ ␣ ␣ ≪ record id ≪ ␣ ≪

    ␣              ␣              ␣          ␣ ≪  ␣  ≪

subcategory field value ≪ ␣ ≪ record id ≪ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

try {

database ExecuteSQL(sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪  ␣    ␣        ␣  ≪ endl ≪  ␣    ␣ ␣ ≪
e m nRetCode ≪ endl ≪  ␣  ␣ ≪ e m strError ≪ endl ≪  ␣  ≪

endl ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); e Delete( );

} /∗ catch ∗/ sql strm.str ( ); return 0;

} /∗ End of Subcategory Container ::f 209C a definition. ∗/

744. Remote Access (Pica+ 209R / Pica3 7133). Local information regarding remote access to electronic resources (Pica+ 209R / Pica3 7133). Lokale Angaben zum Zugriff auf elektronische Ressourcen im Fernzugriff (Pica+ 209R / Pica3 7133).

[LDF 2006.08.16.]

258  FORMAT (‘0’)  IWF Metadata Harvester II §745

745. Format (‘0’). [LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209R 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

746. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209R 0 ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209R 0 definition. ∗/

747. URL (Universal Resource Locator) (‘a’). [LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209R a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§748  IWF Metadata Harvester II  URL (UNIVERSAL RESOURCE LOCATOR) (‘A’) 259

748. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209R a( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209R a definition. ∗/

749. URN (Universal Resource Name) (‘g’). [LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209R g ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

260  URN (UNIVERSAL RESOURCE NAME) (‘G’)  IWF Metadata Harvester II §750

750. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209R g ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209R g definition. ∗/

751. License indicator (‘S’). Lizenzindikator (‘S’). [LDF 2006.08.15.]

Log

[LDF 2006.08.15.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209R S ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§752  IWF Metadata Harvester II  LICENSE INDICATOR (‘S’) 261

752. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209R S ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209R S definition. ∗/

753. Internal Remarks (‘x’). Interne Bemerkungen (‘x’). [LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209R x ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

262  INTERNAL REMARKS (‘X’)  IWF Metadata Harvester II §754

754. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209R x ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209R x definition. ∗/

755. Text for the Web Display (‘y’). Text fuer die Web-Anzeige (‘y’). [LDF 2006.08.16.]

Log

[LDF 2006.08.16.] Added this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int f 209R y ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm);

§756  IWF Metadata Harvester II  TEXT FOR THE WEB DISPLAY (‘Y’) 263

756. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::f 209R y ( CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm) {

stringstream temp strm; #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

record id ≪ endl ≪ ␣ ␣ ≪ subcategory field value; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

category database command arguments .push back (make pair (subcategory pica plus field id ,

subcategory field value)); return 0;

} /∗ End of Subcategory Container ::f 209R y definition. ∗/

757. Showing. [LDF 2006.09.19.] ⟨ Declare Subcategory Container functions 572 ⟩ +≡

int show (stringstream &, string = );

758. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::show (stringstream &local strm, string prefix ) {

if (prefix ≠ ) local strm ≪ prefix ≪ endl ;

local strm ≪ ␣ ␣ ≪ pica plus field id ≪ endl ≪ ␣ ␣ ≪ content description german ≪ endl ≪ ␣ ␣ ≪ content description english ≪ endl ≪ ␣ ␣ ≪ field value ≪ endl ;

return 0; }

759. Fix string. [LDF Undated.]

Log

[LDF Undated.] Added this function.

[LDF 2006.08.16.] !! BUG FIX: Now setting out string to the empty string at the beginning of this function.

⟨ Declare Subcategory Container functions 572 ⟩ +≡ static int fix string (const string &in string , string &out string );

264  FIX STRING  IWF Metadata Harvester II §760

760. ⟨ Define Subcategory Container functions 573 ⟩ +≡

int Subcategory Container ::fix string (const string &in string , string &out string ) {

char curr char ;

out string = ;

for (string ::size type i = 0; i < in string .length( ); ^{++}i) { curr char = in string [i]; if (curr char ≡ ) out string += ; else out string += curr char ;

}

return 0; } /∗ End of Subcategory Container ::fix string definition. ∗/

761. Putting Subcategory Container together. [LDF Undated.]

762. This is what gets written to sbctgcnt.h. [LDF Undated.] ⟨ 762 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩ ⟨ “Using” declarations for namespaces 387 ⟩ ⟨ Declare class Subcategory Container 569 ⟩ ⟨ Type definitions 424 ⟩

§763  IWF Metadata Harvester II  PUTTING SUBCATEGORY CONTAINER TOGETHER 265

763. This is what gets compiled. [LDF Undated.] ⟨ Include files 13 ⟩

  ⟨ sbctgcnt.web 565 ⟩

⟨ Define Subcategory Container functions 573 ⟩

764. Database Command (dbcmmnd.web). [LDF 2006.09.21.]

Log

[LDF 2006.07.19.] Created Database Command.h.

[LDF 2006.09.21.] Created this file (dbcmmnd.web). It contains code formerly in Database Command.h and

Database Command.cpp.
⟨ dbcmmnd.web 764 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 777.

765. Preprocessor macro calls. [LDF 2006.07.19.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

766. using declarations for namespaces. [LDF 2006.07.19.] ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

767. Include files. ⟨ Include files 13 ⟩ +≡ #include

768. Forward declarations. [LDF 2006.07.25.]

Log

[LDF 2006.07.25.] Added this section with the forward declarations of class Category Container and class Subcategory Container.

⟨ Forward declarations 399 ⟩ +≡ class Category Container; class Subcategory Container;

769. Database Command struct declaration.

Log

[LDF 2006.07.19.] Added this struct declaration.

[LDF 2006.09.06.] Added ofstream &log strm argument to the declaration of function.

[LDF 2006.09.06.] Changed the type of ofstream &log strm to Output Stream Type &.

⟨ Declare struct Database Command 769 ⟩ ≡

266 DATABASE COMMAND STRUCT DECLARATION IWF Metadata Harvester II §769

struct Database Command { int(∗function)(CDatabase ∗database, long record id , Category Container ∗category , Subcategory Container ∗subcategory , Output Stream Type &log strm); ⟨ Declare Database Command functions 771 ⟩

};

This code is used in section 776.

770. Functions.

771. Constructor. [LDF 2006.07.19.]

Log

[LDF 2006.07.19.] Added this function.

⟨ Declare Database Command functions 771 ⟩ ≡

Database Command(void);

See also section 773. This code is used in section 769.

772. ⟨ Define Database Command functions 772 ⟩ ≡

Database Command ::Database Command( )

{

return; }

See also section 774. This code is used in section 777.

773. Destructor. [LDF 2006.07.19.]

Log

[LDF 2006.07.19.] Added this function.

⟨ Declare Database Command functions 771 ⟩ +≡ ∼Database Command(void);

774. ⟨ Define Database Command functions 772 ⟩ +≡

Database Command ::∼Database Command( )

{

return; }

775. Putting Database Command together.

§776  IWF Metadata Harvester II  PUTTING DATABASE COMMAND TOGETHER 267

776. This is what gets written to dbcmmnd.h. ⟨ 776 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩ ⟨ using declarations for namespaces 191 ⟩ ⟨ Forward declarations 399 ⟩ ⟨ Declare struct Database Command 769 ⟩

268  PUTTING DATABASE COMMAND TOGETHER  IWF Metadata Harvester II §777

777. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ dbcmmnd.web 764 ⟩

⟨ Define Database Command functions 772 ⟩

778. DB Display (dbdspl.web). [LDF 2006.09.21.]

Log

Created this file. It contains code formerly in dbdspl.h and dbdspl.cpp.

⟨ dbdspl.web 778 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 6 and 8. This code is used in section 996.

779. Preprocessor macro calls. [LDF 2006.07.19.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

780. using declarations for namespaces. [LDF 2006.09.22.] ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

781. Include files. ⟨ Include files 13 ⟩ +≡ #include

782. DB Display class declaration. [LDF 2006.08.23. ]

[LDF 2006.08.23. ]

Log

[LDF 2006.08.23.] Added this class declaration with the declarations of the default constructor, the destructor, and the functions display single record , display records , open html file, close html file, and count records .

[LDF 2006.08.24.] Added const unsigned int record ctr argument to display single record .

[LDF 2006.09.06.] In the declaration of display records : Added the optional CString search command str argument with the default .

⟨ Declare class DB Display 782 ⟩ ≡

class DB Display {

ofstream html strm; public: ⟨ Declare DB Display functions 784 ⟩ };

This code is used in section 995.

783. Functions.

784. Constructor. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

⟨ Declare DB Display functions 784 ⟩ ≡

DB Display(void);

See also sections 786, 788, 790, 792, 796, and 981. This code is used in section 782.

785. ⟨ Define DB Display functions 785 ⟩ ≡

DB Display ::DB Display(void) {

return; }

See also sections 787, 789, 791, 793, 794, 797, 798, 799, 800, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, and 993.

This code is used in section 996.

786. Destructor. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

⟨ Declare DB Display functions 784 ⟩ +≡ ∼DB Display(void);

787. ⟨ Define DB Display functions 785 ⟩ +≡

DB Display ::∼DB Display(void) {

return; }

788. Open HTML file.

Open html strm and write header. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

[LDF 2006.12.11.] Now writing string copyright hmtl str to HTML file.

⟨ Declare DB Display functions 784 ⟩ +≡ int open html file(const char ∗html filename);

270  OPEN HTML FILE  IWF Metadata Harvester II §789

789. ⟨ Define DB Display functions 785 ⟩ +≡

int DB Display ::open html file(const char ∗html filename) {

time t tp; time(&tp); time mutex .Lock ( ); tm ∗local time = localtime(&tp); char ∗datestamp = asctime(local time); time mutex .Unlock ( ); html strm.open(html filename);

html strm ≪  ␣ ≪ html filename ≪ ␣  ≪ endl ≪ endl ≪

    ␣    ␣       ␣ ≪  ␣    ␣     ␣  ≪

endl ≪  ≪ endl ≪ ␣  ≪
html filename ≪  ≪  ␣  ≪
endl ≪  ␣  ≪

    ␣                     ␣             ␣       ␣  ≪

≪ ␣ ␣ ␣ ≪ datestamp ≪ ≪ copyright html str ≪ ␣ ␣ ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ≪ datestamp; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

return 0; }

790. Close HTML file. [LDF 2006.08.23.] Write final code to html strm and close it. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

⟨ Declare DB Display functions 784 ⟩ +≡ int close html file(void);

§791  IWF Metadata Harvester II  CLOSE HTML FILE 271

791. ⟨ Define DB Display functions 785 ⟩ +≡

int DB Display ::close html file(void)

{ html strm ≪ ; html strm.close( ); return 0;

}

792. Counting records. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

⟨ Declare DB Display functions 784 ⟩ +≡ int count records (unsigned int start , unsigned int end , vector⟨long⟩ ∗record id vector = 0);

793. ⟨ Define DB Display functions 785 ⟩ +≡

int DB Display ::count records (unsigned int start , unsigned int end , vector⟨long⟩

∗record id vector ){

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif int record ctr = 0; stringstream sql strm; stringstream temp strm; Records records ;

272  COUNTING RECORDS  IWF Metadata Harvester II §794

794. Warning: end > 0 ∧ end < start . [LDF 2006.08.23.] ⟨ Define DB Display functions 785 ⟩ +≡

if (end > 0 ∧ end < start ) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

    ␣ ␣ ␣  ␣   ␣ ␣       ␣␣    ␣     ␣  ≪ endl ≪
    ␣     ␣   ␣       ␣    ␣  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( ); end = 0;

} /∗ if (end > 0 ∧ end < start ) ∗/ /∗ **** (4) ∗/ sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ start ; if (end ≥ start ) sql strm ≪ ␣ ␣ ␣ ␣ ≪ end ;

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif records .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); /∗ **** (4) ∗/ if (records .IsBOF ( )) {

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ␣␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif records .Close( ); if (record id vector ) record id vector clear ( ); return 0;

} /∗ if (records .IsBOF ( )) ∗/ /∗ ***** (5) ∗/ else /∗ ¬records .IsBOF ( ) ∗/ {

while (¬records .IsEOF ( )) { if (record id vector ) record id vector push back (records .m record id ); records .MoveNext ( ); ++record ctr ;

} /∗ while ∗/ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ record ctr ; if (record ctr ≡ 1) temp strm ≪ ␣ ; else temp strm ≪ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif records .Close( ); return record ctr ;

} /∗ else (¬records .IsBOF ( ) ) ∗/ /∗ **** (4) ∗/ } /∗ End of DB Display ::count records definition. ∗/

795. Displaying records.

§796  IWF Metadata Harvester II  DISPLAY SINGLE RECORD 273

796. Display single record. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

[LDF 2006.08.24.] Added const unsigned int record ctr argument.

⟨ Declare DB Display functions 784 ⟩ +≡ int display single record (const unsigned int record number , const unsigned int record ctr );

797. ⟨ Define DB Display functions 785 ⟩ +≡

int DB Display ::display single record (const unsigned int record number , const unsigned int

record ctr ){

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪

␣ ␣ ≪ record number ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

274  DISPLAY SINGLE RECORD  IWF Metadata Harvester II §798

#endif 798.

Log

[LDF 2006.09.06.] Added the declaration of Bibliographic Type Codes bibliographic type codes .

[LDF 2006.09.07.] Added the declaration of Content Summaries content summaries .

⟨ Define DB Display functions 785 ⟩ +≡ stringstream sql strm; stringstream temp strm; Sources sources ; Records records ; Call Numbers call numbers ; Records Call Numbers records call numbers ; Access Numbers access numbers ; Exemplar Production Numbers exemplar production numbers ; Bibliographic Type Codes bibliographic type codes ; Bibliographic Types bibliographic types ; Records Bibliographic Types records bibliographic types ; Records Authors records authors ; Authors authors ; Records Contributors records contributors ; Contributors contributors ; Records Main Titles records main titles ; Main Titles main titles ; Content Summaries content summaries ; Records Subjects records subjects ; Subjects subjects ; Subject Types subject types ; Permutation Patterns permutation patterns ; Remote Access remote access ; Records Remote Access records remote access ; Physical Descriptions physical descriptions ; Records Physical Descriptions records physical descriptions ; PICA Categories pica categories ; PICA Fields pica fields ; PICA Categories PICA Fields pica categories pica fields ; Languages languages ; Records Languages records languages ; Publishers publishers ; Records Publishers records publishers ; Database Providers database providers ; Records Database Providers records database providers ; vector⟨long⟩ id vector ; vector⟨long⟩::iterator id vector iter ; 799. Error handling: html strm is closed. Can’t display records. [LDF 2006.08.23.] ⟨ Define DB Display functions 785 ⟩ +≡

if (¬html strm.is open( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

        ␣     ␣     ␣␣      ␣       ␣  ≪ endl ≪
        ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ if (¬html strm.is open( )) ∗/

800. ⟨ Define DB Display functions 785 ⟩ +≡

unsigned int entry ctr = 0;

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

801. Try to find entry in Records with record id ≡ record number . [LDF 2006.08.23.]

802. Failed to find corresponding entry. This isn’t an error, since display records may call this function for increasing values of record number until this happens. [LDF 2006.08.23.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ≪ endl ≪

        ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

records .Close( );

return 1; } /∗ if (records .IsBOF ( )) ∗/ 803. Found entry. [LDF 2006.08.23.]

Note that the conversion of the Transact-SQL datetime type to CTime in Records loses the fractional part of the seconds! [LDF 2006.08.23.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬records .IsBOF ( ) ∗/ {

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ endl ≪ ␣ ␣ ≪

records .m record id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ records .m source id ; sources .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); string source name str ; string source abbrev str ; string source address str ; if (sources .IsBOF ( )) {

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ records .m source id ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif source name str = ; source abbrev str = ; source address str = ;

} else {

source name str = sources .m source name;

source abbrev str = sources .m source abbrev ;

source address str = sources .m source address ; } sources .Close( ); 804. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ␣ ≪ records .m record id ≪ ␣ ≪ record ctr ≪ ␣ ␣ ≪ records .m record id ≪ ≪

≪  ␣                       ␣  ≪

␣  ≪ records .m record id ≪  ␣ ≪

␣ ␣ ≪ records .m record id ≪ ≪ ≪ records .m record id ≪ ≪ ≪ records .m eln original entry ≪ ≪ ≪ records .m eln most recent change ≪ ≪ ≪ records .m eln status change ≪ ≪ ≪ records .m source id ≪ ≪ ␣ ≪ ␣ ␣ ≪ source name str ≪ ≪ ␣ ≪ ␣ ␣ ≪ source abbrev str ≪ ≪ ␣ ≪ ␣ ␣ ≪ source address str ≪ ≪ ≪ records .m identification number ≪ ≪ ≪ records .m date original entry .Format ( ␣ ) ≪ ≪ ≪ records .m date most recent change.Format ( ␣ ) ≪ ≪ ≪

records .m date status change.Format (  ␣  ) ≪  ;

805. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ; if (records .IsFieldNull (&records .m year appearance begin)) html strm ≪ ; else html strm ≪ records .m year appearance begin ≪ ; html strm ≪ ; if (records .IsFieldNull (&records .m year appearance end )) html strm ≪ ; else html strm ≪ records .m year appearance end ≪ ; html strm ≪ ; if (records .IsFieldNull (&records .m year appearance rak wb)) html strm ≪ ; else html strm ≪ records .m year appearance rak wb ≪ ; html strm ≪ ; if (records .IsFieldNull (&records .m year appearance original )) html strm ≪ ; else html strm ≪ records .m year appearance original ≪ ; html strm ≪ ;

#if 0 /∗ 1 ∗/ #endif

records .Close( ); } /∗ else (¬records .IsBOF ( )) ∗/

806. Records Call Numbers [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records call numbers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); 807. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records call numbers .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records call numbers .IsBOF ( )) ∗/

808. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Call Numbers. ∗/

{ html strm ≪  ␣                     ␣  ≪
␣  ≪ records .m record id ≪  ␣ ≪

␣ ␣ ≪ records .m record id ≪ ≪ ≪ ≪ ≪ ;

entry ctr = 0;

id vector .clear ( );

809. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records call numbers .IsEOF ( )) { id vector .push back (records call numbers .m call number id ); records call numbers .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 810. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif call numbers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

811. ⟨ Define DB Display functions 785 ⟩ +≡

if (call numbers .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣              ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ if (call numbers .IsBOF ( )) ∗/

812. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬call numbers .IsBOF ( ) ∗/ {

813. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬call numbers .IsEOF ( )) {

html strm ≪  ≪ call numbers .m call number id ≪  ≪
call numbers .m call number ≪  ≪  ≪ call numbers .m library number ≪
≪  ≪ call numbers .m library department ≪  ≪  ≪

call numbers .m special location ≪ ; call numbers .MoveNext ( );

} /∗ while ∗/

814. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬call numbers .IsBOF ( )) ∗/ 815. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ; call numbers .Close( ); } /∗ else Found entries in Records Call Numbers. ∗/ records call numbers .Close( );

816. Access Numbers [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; access numbers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

817. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (access numbers .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ; } /∗ if (access numbers .IsBOF ( )) ∗/

818. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬access numbers .IsBOF ( ) ∗/

{ html strm ≪  ␣                     ␣  ≪
␣  ≪ records .m record id ≪  ␣ ≪

␣ ␣ ≪ records .m record id ≪ ≪ ≪ ;

entry ctr = 0; while (¬access numbers .IsEOF ( )) {

html strm ≪  ≪ access numbers .m access number id ≪  ≪
access numbers .m access number ≪  ≪  ≪ access numbers .m record id ≪

; access numbers .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/

819. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪  ; }  /∗ else (¬access numbers .IsBOF ( )) ∗/

820. ⟨ Define DB Display functions 785 ⟩ +≡

access numbers .Close( ); 821. Records Remote Access Vertical table, separate database table for record id . [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records remote access .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

822. No entries found. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records remote access .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records remote access .IsBOF ( )) ∗/

823. Found entries. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Remote Access. ∗/

{ entry ctr = 0;

id vector .clear ( );

824. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records remote access .IsEOF ( )) { id vector .push back (records remote access .m remote access id ); records remote access .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 825. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif remote access .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

826. ⟨ Define DB Display functions 785 ⟩ +≡

if (remote access .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣               ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ if (remote access .IsBOF ( )) ∗/

827. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬remote access .IsBOF ( ) ∗/ { 828. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬remote access .IsEOF ( )) {

html strm ≪ ␣ ≪ ␣ ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ≪ records .m record id ≪ ≪ ≪ ≪ remote access .m remote access id ≪ ≪

        ␣␣␣  ≪  ≪

remote access .m license indicator ≪ ≪

≪ ≪ remote access .m format type ≪ ≪ ≪ ≪ remote access .m web display text ≪ ≪ ≪ ≪ remote access .m URL ≪

≪  ≪  ≪
remote access .m URN ≪  ≪  ≪

≪ remote access .m internal remarks ≪ ; html strm ≪ ; remote access .MoveNext ( );

} /∗ while ∗/

829. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬remote access .IsBOF ( )) ∗/

830. ⟨ Define DB Display functions 785 ⟩ +≡

remote access .Close( );

831. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Remote Access Records . ∗/

records remote access .Close( );

832. Exemplar Production Numbers [LDF 2006.08.24.]

Log

[LDF 2006.08.29.] Changed this code to correspond to changes made in the Exemplar Production Numbers database table: Replaced the column exemplar production number with the columns exemplar production number numeric and exemplar production number text . Unlike exemplar production number , exemplar production number numeric can contain NULL.

⟨ Define DB Display functions 785 ⟩ +≡ sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; exemplar production numbers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); 833. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (exemplar production numbers .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (exemplar production numbers .IsBOF ( )) ∗/

834. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬exemplar production numbers .IsBOF ( ) ∗/

{ html strm ≪ ␣ ␣ ≪ ␣ ≪ records .m record id ≪

      ␣ ≪  ␣     ␣ ≪

records .m record id ≪ ≪

≪ ≪ ≪ ;

entry ctr = 0;

while (¬exemplar production numbers .IsEOF ( )) {

html strm ≪ ≪ exemplar production numbers .m exemplar production number id ≪

; if (exemplar production numbers .IsFieldNull (&exemplar production numbers .m exemplar production number numeric))

html strm ≪ ; else html strm ≪ exemplar production numbers .m exemplar production number numeric; html strm ≪ ≪ ≪

exemplar production numbers .m exemplar production number text ≪ ≪ ≪ exemplar production numbers .m record id ≪ ;

exemplar production numbers .MoveNext ( );

++entry ctr ; } /∗ while ∗/

835. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪  ; }  /∗ else (¬exemplar production numbers .IsBOF ( )) ∗/

836. ⟨ Define DB Display functions 785 ⟩ +≡

exemplar production numbers .Close( ); 837. Records Bibliographic Types Vertical table, separate database table for record id . [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records bibliographic types .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

838. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records bibliographic types .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records bibliographic types .IsBOF ( )) ∗/

839. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Bibliographic Types. ∗/

{ entry ctr = 0;

id vector .clear ( );

840. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records bibliographic types .IsEOF ( )) { id vector .push back (records bibliographic types .m bibliographic type id ); records bibliographic types .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 841. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( );

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif bibliographic types .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

842. ⟨ Define DB Display functions 785 ⟩ +≡

if (bibliographic types .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

        ␣            ␣        ␣  ␣   ␣                     ␣  ≪ endl ≪

; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

} /∗ if (bibliographic types .IsBOF ( )) ∗/

843. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬bibliographic types .IsBOF ( ) ∗/

{

844. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬bibliographic types .IsEOF ( )) { html strm ≪  ␣  ≪

      ␣  ≪ ␣  ≪

records .m record id ≪  ␣ ≪  ␣      ␣     ␣ ≪ records .m record id ≪

≪ ≪ ≪ bibliographic types .m bibliographic type id ≪

845. physical form. [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

≪ ≪ ≪ bibliographic types .m physical form ≪ ; 846. physical form. Data from Bibliographic Type Codes table. [LDF 2006.09.06.]

Log

[LDF 2006.09.06.] Added this section.

⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ␣ ≪

bibliographic types .m physical form ≪ ; bibliographic type codes .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

847. Material Name English [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪

      ␣                              ␣  ≪  ;

848. ⟨ Define DB Display functions 785 ⟩ +≡

if (bibliographic type codes .IsBOF ( )) {

html strm ≪ ␣ ␣ ; }

849. ⟨ Define DB Display functions 785 ⟩ +≡

else

if (bibliographic type codes .IsFieldNull (

&bibliographic type codes .m physical form material name english)) { html strm ≪ ;

}

850. ⟨ Define DB Display functions 785 ⟩ +≡

else {

html strm ≪ bibliographic type codes .m physical form material name english; }

851. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ; 852. Material Name German. [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪

    ␣                              ␣  ≪  ;

if (bibliographic type codes .IsBOF ( )) {

html strm ≪ ␣ ␣ ; } else if (bibliographic type codes .IsFieldNull (

&bibliographic type codes .m physical form material name german)) { html strm ≪ ;

} else {

html strm ≪ bibliographic type codes .m physical form material name german; } html strm ≪ ; bibliographic type codes .Close( );

853. bibliographic representation. [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ≪ ≪ bibliographic types .m bibliographic representation ≪ ;

854. bibliographic representation. Data from Bibliographic Type Codes table. [LDF 2006.09.06.]

Log

[LDF 2006.09.06.] Added this section.

⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ≪ ␣ ␣ ≪ ␣ ␣ ≪ bibliographic types .m bibliographic representation ≪ ;

bibliographic type codes .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

855. Description English [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ≪

    ␣ ≪  ␣                              ␣  ≪

; if (bibliographic type codes .IsBOF ( )) {

html strm ≪ ␣ ␣ ; } else if (bibliographic type codes .IsFieldNull (

&bibliographic type codes .m bibliographic representation description english)) { html strm ≪ ;

} else {

html strm ≪ bibliographic type codes .m bibliographic representation description english; } html strm ≪ ; 856. Description German. [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪

    ␣                              ␣  ≪  ;

if (bibliographic type codes .IsBOF ( )) {

html strm ≪ ␣ ␣ ; } else if (bibliographic type codes .IsFieldNull (

&bibliographic type codes .m bibliographic representation description german)) { html strm ≪ ;

} else {

html strm ≪ bibliographic type codes .m bibliographic representation description german; } html strm ≪ ; bibliographic type codes .Close( );

857. description status [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ≪ ≪ bibliographic types .m description status ≪ ;

858. description status . Data from Bibliographic Type Codes table. [LDF 2006.09.06.]

Log

[LDF 2006.09.06.] Added this section.

⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ≪ ␣ ␣

␣ ␣ ≪ bibliographic types .m description status ≪ ; bibliographic type codes .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

859. Description English [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪

    ␣                              ␣  ≪  ;

if (bibliographic type codes .IsBOF ( )) {

html strm ≪ ␣ ␣ ; } else if (bibliographic type codes .IsFieldNull (

&bibliographic type codes .m description status description english)) { html strm ≪ ;

} else {

html strm ≪ bibliographic type codes .m description status description english; } html strm ≪ ; 860. Description German. [LDF 2006.09.06.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪

    ␣                              ␣  ≪  ;

if (bibliographic type codes .IsBOF ( )) {

html strm ≪ ␣ ␣ ; } else if (bibliographic type codes .IsFieldNull (

&bibliographic type codes .m description status description german)) { html strm ≪ ;

} else {

html strm ≪ bibliographic type codes .m description status description german; } html strm ≪ ; bibliographic type codes .Close( ); html strm ≪ ≪ ; if (bibliographic types .IsFieldNull (

&bibliographic types .m miscellaneous )) html strm ≪ ; else html strm ≪ bibliographic types .m miscellaneous ≪ ; html strm ≪ ≪

; if (bibliographic types .IsFieldNull (

&bibliographic types .m bibliographic representation refinement )) html strm ≪ ; else html strm ≪ bibliographic types .m bibliographic representation refinement ≪ ; html strm ≪ ≪ ; if (bibliographic types .IsFieldNull (

&bibliographic types .m transliteration code)) html strm ≪ ; else html strm ≪ bibliographic types .m transliteration code ≪ ; html strm ≪ ; bibliographic types .MoveNext ( ); } /∗ while ∗/

861. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬bibliographic types .IsBOF ( )) ∗/

862. ⟨ Define DB Display functions 785 ⟩ +≡

bibliographic types .Close( ); } /∗ else Found entries in Bibliographic Types Records . ∗/ records bibliographic types .Close( );

863. Records Authors [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records authors .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); 864. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records authors .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records authors .IsBOF ( )) ∗/

865. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Authors. ∗/

{ html strm ≪  ␣                     ␣  ≪ ␣
≪ records .m record id ≪  ␣ ≪  ␣     ␣ ≪ records .m record id ≪
≪ ≪
≪ ≪
≪ ;

entry ctr = 0;

id vector .clear ( );

866. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records authors .IsEOF ( )) { id vector .push back (records authors .m author id ); records authors .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 867. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif authors .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

868. ⟨ Define DB Display functions 785 ⟩ +≡

if (authors .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣         ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ if (authors .IsBOF ( )) ∗/

869. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬authors .IsBOF ( ) ∗/ {

870. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬authors .IsEOF ( )) {

html strm ≪  ≪ authors .m author id ≪  ≪  ≪
authors .m surname ≪  ≪  ≪ authors .m given name ≪  ≪
≪ authors .m prefix ≪  ≪  ≪ authors .m id number ppn ≪

; authors .MoveNext ( );

} /∗ while ∗/

871. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬authors .IsBOF ( )) ∗/ 872. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ; authors .Close( );

873. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Records Authors. ∗/ records authors .Close( );

874. Records Contributors Horizontal table, separate database table for record id . [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records contributors .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

875. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records contributors .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ␣ ␣ ␣ ≪ records .m record id ≪ ; } /∗ if (records contributors .IsBOF ( )) ∗/

876. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Contributors. ∗/

{ html strm ≪  ␣                     ␣  ≪
␣  ≪ records .m record id ≪  ␣ ≪

␣ ␣ ≪ records .m record id ≪ ≪ ≪ ≪ ≪ ;

entry ctr = 0; id vector .clear ( );

877. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records contributors .IsEOF ( )) { id vector .push back (records contributors .m contributor id ); records contributors .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 878. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif contributors .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

879. ⟨ Define DB Display functions 785 ⟩ +≡

if (contributors .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣              ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ if (contributors .IsBOF ( )) ∗/

880. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬contributors .IsBOF ( ) ∗/ {

881. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬contributors .IsEOF ( )) {

html strm ≪  ≪ contributors .m contributor id ≪  ≪  ≪
contributors .m surname ≪  ≪  ≪ contributors .m given name ≪
≪  ≪ contributors .m prefix ≪  ≪  ≪

contributors .m id number ppn ≪ ; contributors .MoveNext ( );

} /∗ while ∗/

882. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬contributors .IsBOF ( )) ∗/ 883. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ;

contributors .Close( );

884. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Records Contributors. ∗/

records contributors .Close( );

885. Records Main Titles [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records main titles .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

886. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records main titles .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records main titles .IsBOF ( )) ∗/

887. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Main Titles. ∗/

{ entry ctr = 0;

id vector .clear ( );

888. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records main titles .IsEOF ( )) { id vector .push back (records main titles .m main title id ); records main titles .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 889. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif main titles .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

890. ⟨ Define DB Display functions 785 ⟩ +≡

if (main titles .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣             ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ if (main titles .IsBOF ( )) ∗/

891. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬main titles .IsBOF ( ) ∗/ { 892.

Log

[LDF 2006.09.05.] Changed Main Titles ::long m continuation to m continuation main canonical title. I need another column for continuations to additions main.

[LDF 2006.09.05.] Added code for Main Titles ::m continuation additions main.

⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ␣ ≪ records .m record id ≪ ; while (¬main titles .IsEOF ( )) {

html strm ≪ ␣ ≪ ≪ ≪ main titles .m main title id ≪ ≪ ≪ ≪ main titles .m standard text ≪ ≪ ≪ ≪ main titles .m main canonical title ≪ ≪ ≪ ≪ main titles .m continuation main canonical title ≪ ≪ ≪ ≪ main titles .m additions main ≪ ≪ ≪ ≪ main titles .m continuation additions main ≪ ≪ ≪ ≪ main titles .m additional creator main ≪ ≪ ≪ ≪ main titles .m parallel canonical title ≪ ≪ ≪ ≪ main titles .m additions parallel ≪ ≪ ≪ ≪ main titles .m additional creator parallel ≪ ≪ ≪ ≪ main titles .m authorship ≪ ;

main titles .MoveNext ( ); } /∗ while ∗/

893. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬main titles .IsBOF ( )) ∗/

894. ⟨ Define DB Display functions 785 ⟩ +≡

main titles .Close( );

895. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Main Titles Records . ∗/ records main titles .Close( ); 896. Content Summaries [LDF 2006.09.07.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; try {

content summaries .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); } catch(CDBException ∗e) {

temp strm ≪ ␣ ␣ ␣ ≪ endl ≪ ␣ ␣ ␣ ≪ e m nRetCode ≪ endl ≪ ␣ ␣ ≪ e m strError ≪ endl ≪ ␣ ≪ endl ≪ sql strm.str ( );

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

e Delete( ); } /∗ catch ∗/ sql strm.str ( );

897. No entries found. [LDF 2006.09.07.] ⟨ Define DB Display functions 785 ⟩ +≡

if (content summaries .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ␣ ␣ ␣ ≪ records .m record id ≪ ; } /∗ if (content summaries .IsBOF ( )) ∗/

898. Found entries. [LDF 2006.09.07.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Content Summaries. ∗/ { entry ctr = 0;

899. ⟨ Define DB Display functions 785 ⟩ +≡

long continuation ctr ; long content summary id start ; long content summary id end ; stringstream content summary strm; html strm ≪ ␣ ␣ ≪

␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ≪ records .m record id ≪ ≪ ≪ ≪ ≪ ; 900. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬content summaries .IsEOF ( )) {

901. ⟨ Define DB Display functions 785 ⟩ +≡

if (content summaries .m continuation ≡ 0) {

html strm ≪ ≪ content summaries .m content summary id ≪

≪  ≪ content summaries .m record id ≪  ≪
≪ content summaries .m continuation ≪  ≪  ≪

content summaries .m content summary ≪ ; content summaries .MoveNext ( );

} /∗ if (content summaries .m continuation ≡ 0) ∗/

902. ⟨ Define DB Display functions 785 ⟩ +≡

else if (content summaries .m continuation ≡ 1) { content summary id start =

content summaries .m content summary id ; content summary strm ≪ content summaries .m content summary ;

903. ⟨ Define DB Display functions 785 ⟩ +≡

for ( ; ; ) { content summaries .MoveNext ( );

904. ⟨ Define DB Display functions 785 ⟩ +≡

if (content summaries .IsEOF ( ) ∨ content summaries .m continuation ≡

0 ∨ content summaries .m continuation ≡ 1) {

html strm ≪  ≪ content summary id start ≪  ≪
content summary id end ≪  ≪  ≪ content summaries .m record id ≪
≪  ≪ continuation ctr ≪  ≪  ≪

content summary strm.str ( ) ≪ ; content summary id start = 0; content summary id end = 0; content summary strm.str ( ); break;

}

905. ⟨ Define DB Display functions 785 ⟩ +≡

else { continuation ctr = content summaries .m continuation; content summary id end = content summaries .m content summary id ; content summary strm ≪ content summaries .m content summary ; continue;

}

906. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ for ∗/ 907. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else if (content summaries .m continuation ≡ 1) ∗/

908. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ while ∗/

909. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪  ; }  /∗ else (¬content summaries .IsBOF ( )) ∗/

910. ⟨ Define DB Display functions 785 ⟩ +≡

content summaries .Close( );

911. Records Languages Vertical table, separate database table for record id . [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records languages .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

912. No entries found. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records languages .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records languages .IsBOF ( )) ∗/

913. Found entries. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Languages. ∗/

{ entry ctr = 0;

id vector .clear ( );

914. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records languages .IsEOF ( )) { id vector .push back (records languages .m language id ); records languages .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 915. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif languages .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

916. ⟨ Define DB Display functions 785 ⟩ +≡

if (languages .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣           ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ if (languages .IsBOF ( )) ∗/

917. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬languages .IsBOF ( ) ∗/ { 918.

Log

[LDF 2006.08.30.] !! BUG FIX: Removed caption from table. It was redundant. Replaced it with an anchor in a paragraph preceding the table or tables.

⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ≪ records .m record id ≪ ; while (¬languages .IsEOF ( )) {

html strm ≪ ␣ ≪ ≪ ≪ languages .m language id ≪ ≪ ≪ ≪ records languages .m association type ≪ ≪ ≪ ≪ records languages .m association type name ≪ ≪ ≪ ≪ languages .m language name english ≪ ≪ ≪ ≪ languages .m language name german ≪ ≪ ≪ ≪ languages .m language abbrev ≪ ;

html strm ≪ ;

languages .MoveNext ( ); } /∗ while ∗/

919. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬languages .IsBOF ( )) ∗/

920. ⟨ Define DB Display functions 785 ⟩ +≡

languages .Close( );

921. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else. Found entries in Languages Records. ∗/

records languages .Close( );

922. Records Subjects [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records subjects .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); 923. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records subjects .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ␣ ␣ ␣ ≪ records .m record id ≪ ; } /∗ if (records subjects .IsBOF ( )) ∗/

924. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Subjects. ∗/ { entry ctr = 0; id vector .clear ( );

925. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records subjects .IsEOF ( )) { id vector .push back (records subjects .m subject id ); records subjects .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/

926. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif subjects .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); 927. ⟨ Define DB Display functions 785 ⟩ +≡

if (subjects .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣          ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

} /∗ if (subjects .IsBOF ( )) ∗/

928. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬subjects .IsBOF ( ) ∗/ {

929. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ␣ ≪ records .m record id ≪ ; while (¬subjects .IsEOF ( )) {

html strm ≪ ␣ ≪ ≪ ≪ subjects .m subject id ≪ ≪ ≪ ≪ subjects .m subject type id ≪ ;

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

subjects .m subject type id ; subject types .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); html strm ≪ ␣ ␣ ␣ ≪

␣ ␣ ≪ ≪ ; if (subject types .IsBOF ( )) html strm ≪ ; else html strm ≪ subject types .m description english; html strm ≪ ; html strm ≪ ␣ ␣ ␣ ≪

␣ ␣ ≪ ≪ ; if (subject types .IsBOF ( )) html strm ≪ ; else html strm ≪ subject types .m description german; html strm ≪ ; subject types .Close( );

html strm ≪  ≪  ≪ subjects .m subject ≪
≪  ≪  ≪
subjects .m id number ppn ≪  ≪  ≪

≪ subjects .m chain number ≪ ≪

≪ ≪

subjects .m chain link number ≪  ≪  ≪
≪ subjects .m chain info ≪  ≪  ;

subjects .MoveNext ( ); } /∗ while ∗/

930. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬subjects .IsBOF ( )) ∗/ 931. ⟨ Define DB Display functions 785 ⟩ +≡

subjects .Close( );

932. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Subjects Records . ∗/

records subjects .Close( );

933. Permutation Patterns [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; permutation patterns .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

934. No entries found. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

if (permutation patterns .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (permutation patterns .IsBOF ( )) ∗/

935. Found entries. [LDF 2006.08.24.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Permutation Patterns. ∗/

{ entry ctr = 0;

936. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ␣ ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ≪ records .m record id ≪ ≪ ≪ ≪ ≪ ≪ ≪ ;

while (¬permutation patterns .IsEOF ( )) {

html strm ≪ ≪ permutation patterns .m permutation pattern id ≪ ≪ ≪ permutation patterns .m record id ≪ ≪ ≪ permutation patterns .m subject id start ≪ ≪ ≪ permutation patterns .m subject id end ≪ ≪ ≪ permutation patterns .m chain number ≪ ≪ ≪ permutation patterns .m permutation pattern ≪ ;

permutation patterns .MoveNext ( ); } /∗ while ∗/ 937. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪  ; }  /∗ else (¬permutation patterns .IsBOF ( )) ∗/

938. ⟨ Define DB Display functions 785 ⟩ +≡

permutation patterns .Close( );

939. Records Physical Descriptions Vertical table, separate database table for record id . [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ≪

record number ; records physical descriptions .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

940. No entries found. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records physical descriptions .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records physical descriptions .IsBOF ( )) ∗/

941. Found entries. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Physical Descriptions. ∗/

{ entry ctr = 0;

id vector .clear ( );

942. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records physical descriptions .IsEOF ( )) { id vector .push back (records physical descriptions .m physical description id ); records physical descriptions .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 943. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif physical descriptions .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

944. ⟨ Define DB Display functions 785 ⟩ +≡

if (physical descriptions .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

      ␣            ␣        ␣  ␣   ␣                       ␣  ≪ endl ≪

; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

} /∗ if (physical descriptions .IsBOF ( )) ∗/

945. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬physical descriptions .IsBOF ( ) ∗/ {

946. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬physical descriptions .IsEOF ( )) { html strm ≪  ␣  ≪

    ␣  ≪ ␣  ≪

records .m record id ≪  ␣ ≪  ␣            ␣     ␣ ≪ records .m record id ≪

≪ ≪ ≪ physical descriptions .m physical description id ≪ ≪ ≪ ≪ physical descriptions .m text ≪ ≪ ≪ ≪ physical descriptions .m pica category id ≪ ; 947. PICA Categories. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ≪

physical descriptions .m pica category id ; pica categories .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

948. ⟨ Define DB Display functions 785 ⟩ +≡

if (pica categories .IsBOF ( )) {

html strm ≪  ␣␣  ≪  ␣  ≪

      ␣     ␣  ;

}

949. ⟨ Define DB Display functions 785 ⟩ +≡

else {

html strm ≪  ␣        ␣  ≪

      ␣                      ␣  ≪

≪ pica categories .m pica plus category code ≪ ≪

      ␣        ␣  ≪
      ␣                      ␣  ≪

≪ pica categories .m pica 3 category code ≪ ≪

      ␣         ␣        ␣  ≪
      ≪  ␣                      ␣  ≪

≪ pica categories .m description english ≪ ≪

      ␣         ␣      ␣  ≪  ≪
      ␣                      ␣  ≪  ≪

pica categories .m description german ≪ ; }

950. End of PICA Categories. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

pica categories .Close( ); html strm ≪ ≪ ≪

physical descriptions .m pica field id ≪ ;

951. PICA Fields. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

physical descriptions .m pica field id ; pica fields .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

952. ⟨ Define DB Display functions 785 ⟩ +≡

if (pica fields .IsBOF ( )) {

html strm ≪  ␣␣  ≪  ␣  ≪

      ␣     ␣  ;

} 953. ⟨ Define DB Display functions 785 ⟩ +≡

else {

html strm ≪  ␣     ␣  ≪

        ␣                  ␣  ≪  ≪

pica fields .m pica plus field code ≪ ≪

        ␣     ␣  ≪  ␣                  ␣  ≪

≪ pica fields .m pica 3 field code ≪ ≪

        ␣      ␣       ␣  ≪
        ␣                  ␣  ≪

≪ pica fields .m description english ≪ ≪

        ␣      ␣      ␣  ≪
        ␣                  ␣  ≪  ≪

pica fields .m description german ≪ ; }

954. End of PICA Fields. [LDF 2006.08.25.] ⟨ Define DB Display functions 785 ⟩ +≡

pica fields .Close( );

955. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ;

physical descriptions .MoveNext ( ); } /∗ while ∗/

956. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬physical descriptions .IsBOF ( )) ∗/

957. ⟨ Define DB Display functions 785 ⟩ +≡

physical descriptions .Close( );

958. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Physical Descriptions Records . ∗/

records physical descriptions .Close( );

959. Records Publishers Horizontal table, separate database table for record id . [LDF 2006.08.28.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ record number ; records publishers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( ); 960. No entries found. [LDF 2006.08.28.] k ⟨ Define DB Display functions 785 ⟩ +≡

if (records publishers .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ;

} /∗ if (records publishers .IsBOF ( )) ∗/

961. Found entries. [LDF 2006.08.28.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Publishers. ∗/

{ html strm ≪  ␣                     ␣  ≪
␣  ≪ records .m record id ≪  ␣ ≪

␣ ␣ ≪ records .m record id ≪ ≪ ≪ ≪ ;

entry ctr = 0;

id vector .clear ( );

962. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records publishers .IsEOF ( )) { id vector .push back (records publishers .m publisher id ); records publishers .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 963. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪ ∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif publishers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

964. ⟨ Define DB Display functions 785 ⟩ +≡

if (publishers .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪
␣            ␣        ␣  ␣   ␣            ␣  ≪ endl ≪  ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); } /∗ if (publishers .IsBOF ( )) ∗/ else /∗ ¬publishers .IsBOF ( ) ∗/ {

965. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬publishers .IsEOF ( )) {

html strm ≪  ≪ publishers .m publisher id ≪  ≪ publishers .m publisher name ≪
≪  ≪ publishers .m place ≪  ≪  ≪

publishers .m primary info source ≪ ; publishers .MoveNext ( );

} /∗ while ∗/

966. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬publishers .IsBOF ( )) ∗/

967. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ; publishers .Close( ); 968. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Records Publishers. ∗/ records publishers .Close( );

969. Records Database Providers Horizontal table, separate database table for record id . [LDF 2006.08.28.] ⟨ Define DB Display functions 785 ⟩ +≡

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ␣ ≪

record number ; records database providers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

970. No entries found. [LDF 2006.08.28.] ⟨ Define DB Display functions 785 ⟩ +≡

if (records database providers .IsBOF ( )) { #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ␣ ≪ ␣ ␣ ≪

record number ≪ ≪ endl ≪ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

html strm ≪ ␣ ≪ records .m record id ≪ ␣ ≪

␣ ␣ ␣ ␣ ␣ ≪ records .m record id ≪ ; } /∗ if (records database providers .IsBOF ( )) ∗/

971. Found entries. [LDF 2006.08.28.] ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ Found entries in Records Database Providers. ∗/

{ html strm ≪  ␣                     ␣  ≪
␣  ≪ records .m record id ≪  ␣ ≪

␣ ␣ ␣ ≪ records .m record id ≪ ≪ ≪ ;

entry ctr = 0; id vector .clear ( );

972. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬records database providers .IsEOF ( )) { id vector .push back (records database providers .m database provider id ); records database providers .MoveNext ( ); ++entry ctr ;

} /∗ while ∗/ 973. ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ≪ endl ; #endif

id vector iter = id vector .begin( ); sql strm ≪ ␣ ␣ ␣ ␣ ␣ ␣ ␣ ≪

∗id vector iter^{++}; for ( ; id vector iter ≠ id vector .end ( ); ^{++}id vector iter ) {

#if 0 /∗ 1 ∗/

temp strm ≪ ∗id vector iter ≪ endl ; #endif

sql strm ≪ ␣ ␣ ␣ ␣ ≪ ∗id vector iter ; } /∗ for ∗/

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ≪ sql strm.str ( ); AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif database providers .Open(CRecordset ::dynaset , sql strm.str ( ).c str ( )); sql strm.str ( );

974. ⟨ Define DB Display functions 785 ⟩ +≡

if (database providers .IsBOF ( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

      ␣            ␣        ␣  ␣   ␣                    ␣  ≪ endl ≪

; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

} /∗ if (database providers .IsBOF ( )) ∗/

975. ⟨ Define DB Display functions 785 ⟩ +≡

else /∗ ¬database providers .IsBOF ( ) ∗/ {

976. ⟨ Define DB Display functions 785 ⟩ +≡

while (¬database providers .IsEOF ( )) {

html strm ≪  ≪ database providers .m database provider id ≪  ≪
database providers .m database provider name ≪  ≪  ≪

database providers .m place ≪ ; database providers .MoveNext ( );

} /∗ while ∗/

977. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else (¬database providers .IsBOF ( )) ∗/ 978. ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ;

database providers .Close( );

979. ⟨ Define DB Display functions 785 ⟩ +≡

} /∗ else Found entries in Records Database Providers. ∗/

records database providers .Close( );

980. ⟨ Define DB Display functions 785 ⟩ +≡

return 0; } /∗ End of DB Display ::display single record definition. ∗/

981. Display records. [LDF 2006.08.23.] display records displays a range of records from record number start to record number end . Both

arguments have default values. The default for start is 1 and the default for end is 0.

If end ≡ 0, either because it was passed by the caller explicitly, or because the default is being used, then display records starts with record start and continues until display single record returns unsuccessfully (return value 1).

Otherwise, if 0 < end < start , then a warning is issued, end is set to 0, and display records proceeds as above.

Otherwise, display records starts displaying records from record number start , and continues up to and including record number end . It will continue to call display single record , even if the latter returns unsuccessfully for some record number. This is because there may be gaps in the sequence of record numbers because of deletions, or for some other reason. This isn’t likely, but it is possible.

These rules imply that a call to display records with no arguments will display all of the records in the PICA DB database. [LDF 2006.08.23.]

Log

[LDF 2006.08.23.] Added this function.

[[LDF 2006.09.06.] ] Added the optional CString search command argument with the default .

⟨ Declare DB Display functions 784 ⟩ +≡ int display records (CString search command str = , unsigned int start = 1, unsigned int end = 0);

982. ⟨ Define DB Display functions 785 ⟩ +≡

int DB Display ::display records (CString search command str , unsigned int start , unsigned int

end ){ stringstream temp strm;

#if 0 /∗ 1 ∗/

temp strm ≪ ␣ ≪ endl ≪ ␣ ␣ ≪

search command str ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

§983  IWF Metadata Harvester II  DISPLAY RECORDS 315

#endif 983. Error handling: html strm is closed. Can’t display records. [LDF 2006.08.23.] ⟨ Define DB Display functions 785 ⟩ +≡

if (¬html strm.is open( )) {

temp strm ≪  ␣␣  ␣  ≪ endl ≪

        ␣     ␣     ␣␣      ␣       ␣  ≪ endl ≪
        ␣        ␣              ␣    ␣       ␣     ␣ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

return 1; } /∗ if (¬html strm.is open( )) ∗/

984. ⟨ Define DB Display functions 785 ⟩ +≡

int r = 0;

985. Warning: end > 0 ∧ end < start . [LDF 2006.08.23.] ⟨ Define DB Display functions 785 ⟩ +≡

if (end > 0 ∧ end < start ) {

temp strm ≪  ␣␣  ␣  ≪
endl ≪  ␣ ␣ ␣  ␣   ␣ ␣  ≪ endl ≪

        ␣     ␣        ␣␣    ␣       ␣   ␣       ␣    ␣ ≪  ␣  ␣ ≪ start ≪ ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( );

end = 0; } /∗ if (end > 0 ∧ end < start ) ∗/

986. ⟨ Define DB Display functions 785 ⟩ +≡

int record ctr ;

vector⟨long⟩ record id vector ;

316  DISPLAY RECORDS  IWF Metadata Harvester II §987

record ctr = count records (start , end , &record id vector ); 987.

Log

[LDF 2006.09.06.] Added code for displaying search command str , if present.

⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ≪ record ctr ≪ endl ≪ ␣ ≪ endl ; for (vector⟨long⟩::iterator iter = record id vector .begin( ); iter ≠ record id vector .end ( ); ^{++}iter )

temp strm ≪ ∗iter ≪ endl ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif html strm ≪ ≪ record ctr ≪ ␣ ; if (record ctr ≠ 1) html strm ≪ ; html strm ≪ ␣ ; if (search command str ≡ ) {

html strm ≪ ␣ ␣ ; } else {

html strm ≪ search command str ; }

html strm ≪  ≪  ␣          ␣  ;

988. Table of Contents.

Log

[LDF 2006.09.06.] Added this section.

⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ␣ ␣ ≪

    ␣  ␣        ␣  ≪  ≪
    ␣                                ␣ ≪  ␣  ≪
    ␣                                  ␣ ≪  ␣    ␣    ␣  ≪
    ␣                           ␣ ≪  ␣  ≪
    ≪  ␣          ␣  ≪
    ␣              ␣    ␣  ␣  ≪
    ␣          ␣  ;

989. Write a list of links to the individual records, without listing their tables. [LDF 2006.09.06.]

Log

[LDF 2006.09.06.] Added this section.

⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪  ␣                   ␣  ≪  ␣ ≪

    ␣    ␣  ≪  ;

int i = 1; for (vector⟨long⟩::iterator iter = record id vector .begin( ); iter ≠ record id vector .end ( ); ^{++}iter ) {

if (i > 1) html strm ≪ ;

html strm ≪ ␣ ≪ ∗iter ≪ ␣ ≪ i ≪ ␣␣ ␣ ≪ ∗iter ≪

; ++i;

} /∗ for ∗/

html strm ≪  ␣          ␣  ≪

    ␣                            ␣ ≪  ␣  ␣     ␣  ␣  ≪
    ␣             ␣     ␣  ␣  ≪
    ␣          ␣  ;

990. Write a list of links to the individual records, and their tables. They are of the form “⟨number⟩ Record ⟨record id⟩”, e.g.,

1. Record 37 Records Table Access Numbers Table etc.

2. Record 38 Records Table Access Numbers Table etc.

3. Record 39 Records Table Access Numbers Table etc.

(etc.)

[LDF 2006.08.23.] [LDF 2006.08.24.]

⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ␣ ␣ ≪

␣    ␣    ␣  ≪  ;

for (int j = 1; j < i; ^{++}j) { if (j > 1) html strm ≪ ;

html strm ≪  ␣  ≪ j ≪  ␣ ≪ j ≪ ␣␣      ␣ ≪ j ≪
≪  ␣  ≪ j ≪  ␣ ≪  ␣
≪  ␣  ≪ j ≪  ␣ ≪

␣       ␣

≪  ␣  ≪ j ≪  ␣ ≪

␣       ␣

≪  ␣  ≪ j ≪  ␣ ≪

␣      ␣

≪  ␣  ≪  ␣ ≪

␣          ␣       ␣

≪  ␣  ≪ j ≪  ␣ ≪

␣      ␣

≪  ␣  ≪ j ≪  ␣ ≪  ␣
≪  ␣  ≪ j ≪  ␣ ≪

␣

≪  ␣  ≪ j ≪  ␣ ≪  ␣      ␣
≪  ␣  ≪ j ≪  ␣ ≪

␣         ␣

≪  ␣  ≪ j ≪  ␣ ≪  ␣
≪  ␣  ≪ j ≪  ␣ ≪  ␣
≪  ␣  ≪ j ≪  ␣ ≪

␣         ␣

≪  ␣  ≪ j ≪  ␣ ≪

␣            ␣

≪  ␣  ≪ j ≪  ␣ ≪  ␣
≪  ␣  ≪ j ≪  ␣ ≪

␣         ␣  ;

} /∗ for ∗/

html strm ≪  ␣          ␣  ≪  ≪

␣                               ␣     ␣  ␣      ␣  ≪
␣                            ␣    ␣   ␣     ␣  ␣  ≪
␣             ␣     ␣  ␣  ≪
␣          ␣  ;

991. Display records until display single record returns a non-zero value. PLEASE NOTE: This will fail to display all the records, if there’s a gap in the sequence of record ids . [LDF 2006.08.23.] ⟨ Define DB Display functions 785 ⟩ +≡

html strm ≪ ␣ ␣ ␣ ≪

; record ctr = 0; if (end ≡ 0) {

#if 0 /∗ 1 ∗/ temp strm ≪ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif r = 0; while (r ≡ 0) {

++record ctr ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣␣ ␣ ≪ record ctr ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif r = display single record (start^{++}, record ctr );

html strm ≪  ≪  ␣                                 ␣ ≪

    ␣  ␣      ␣     ␣    ␣  ≪
    ␣                               ␣ ≪  ␣  ␣      ␣  ≪
    ␣                            ␣ ≪  ␣  ␣     ␣  ␣  ≪
    ␣             ␣     ␣  ␣  ≪
    ␣          ␣  ;

} /∗ while ∗/ return 0;

} /∗ if (end ≡ 0) ∗/ 992. Display records from start to end . The loop continues until end is reached, even if there’s no record with record id ≡ end . ⟨ Define DB Display functions 785 ⟩ +≡ #if 0 /∗ 1 ∗/

temp strm ≪ ␣ ␣ ␣ ␣ ; AfxMessageBox (temp strm.str ( ).c str ( )); temp strm.str ( );

#endif

for ( ; start ≤ end ; ^{++}start ) {

++record ctr ; #if 0 /∗ 1 ∗/

temp strm ≪ ␣␣ ␣ ≪ record ctr ;

AfxMessageBox (temp strm.str ( ).c str ( ));

temp strm.str ( ); #endif

r = display single record (start , record ctr );

if (r ≡ 0) html strm ≪  ␣              ␣    ␣  ␣  ≪

          ␣          ␣  ;

} /∗ for ∗/

993. End of DB Display ::display records definition. [LDF Undated.] ⟨ Define DB Display functions 785 ⟩ +≡

return 0; }

994. Putting DB Display together.

995. This is what gets written to dbdspl.h. ⟨ 995 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class DB Display 782 ⟩

§996  IWF Metadata Harvester II  PUTTING DB DISPLAY TOGETHER 321

996. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ dbdspl.web 778 ⟩

⟨ Define DB Display functions 785 ⟩

997. ODBC Classes. [LDF 2006.09.22.]

998. PICA Categories (picacats.web). [LDF 2006.09.22.]

Log

[LDF 2006.09.22.] Created this file. It contains code formerly in picacats.h and picacats.cpp.

⟨ picacats.web 998 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1018.

999. Preprocessor macro calls. [LDF 2006.09.22.] ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1000. using declarations for namespaces. [LDF 2006.09.22.] ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1001. Include files. ⟨ Include files 13 ⟩ +≡ #include

1002. PICA Categories class declaration. [LDF 2006.08.25.]

Feld-/Parameterdaten. Die Zeichenfolgentypen reflektieren den eigentlichen Datentyp des Datenbankfelds (CStringA für ANSI-Datentypen und CStringW für Unicode-Datentypen), um zu verhindern, daß der ODBC-Treiber nicht erforderliche Konvertierungen ausführt. Sie können diese Member zu CString-Typen ändern damit der ODBC-Treiber alle erforderlichen Konvertierungen ausführt. Hinweis: Sie müssen mindestens die ODBC-Treiberversion 3.5 verwenden, um Unicode und die Konvertierungen zu unterstützen.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class PICA Categories 1002 ⟩ ≡ class PICA Categories : public CRecordset { public: long m pica category id ;

CStringA m pica plus category code;

int m pica 3 category code;

CStringA m description german; CStringA m description english; ⟨ Declare PICA Categories functions 1004 ⟩

};

This code is used in section 1017.

322  FUNCTIONS  IWF Metadata Harvester II §1003

1003. Functions.

1004. Constructor. [LDF 2006.08.25.] ⟨ Declare PICA Categories functions 1004 ⟩ ≡

PICA Categories(CDatabase ∗pDatabase = NULL);

(PICA Categories)

See also sections 1006, 1008, 1010, 1012, and 1014. This code is used in section 1002.

1005. ⟨ Define PICA Categories functions 1005 ⟩ ≡

PICA Categories ::PICA Categories(CDatabase ∗pdb)

: CRecordset(pdb) { m pica category id = 0; m pica plus category code = ; m pica 3 category code = 0; m description german = ; m description english = ; m nFields = 5; m nDefaultType = dynaset ;

}

See also sections 1007, 1009, 1011, 1013, and 1015. This code is used in section 1018.

1006. Get default connect. [LDF 2006.08.25.] ⟨ Declare PICA Categories functions 1004 ⟩ +≡

virtual CString GetDefaultConnect ( ); /∗ Standard-Verbindungszeichenfolge ∗/

1007. Commented-out: # error Sicherheitsproblem: Die Verbindungszeichenfolge enthält möglicherweise ein Kennwort Die Verbindungszeichenfolge enthlt möglicherweise einfache Textkennwörter und/oder andere vertrauliche Informationen. Entfernen Sie # error, nachdem Sie die Verbindungszeichenfolge berprüft haben. Sie können das Kennwort in einem anderen Format speichern oder eine andere

Benutzerauthentifizierung verwenden.

Log

[LDF 2006.09.22.] Modified this function. Added stringstream temp strm. I had to do this because the literal string passed to would have been too long for CWEAVE to cope with.

⟨ Define PICA Categories functions 1005 ⟩ +≡ CString PICA Categories ::GetDefaultConnect ( ) {

return ( ); }

1008. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare PICA Categories functions 1004 ⟩ +≡

virtual CString GetDefaultSQL( );

§1009  IWF Metadata Harvester II  STANDARD-SQL FOR RECORDSET 323

1009. ⟨ Define PICA Categories functions 1005 ⟩ +≡

CString PICA Categories ::GetDefaultSQL( )

{

return ( ); }

1010. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare PICA Categories functions 1004 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX );

1011. Makros, z.B. RFX Text ( ) und RFX Int ( ), sind vom Typ der Membervariablen abhängig, nicht vom Typ des Felds in der Datenbank. ODBC konvertiert den Spaltenwert automatisch in den angeforderten Typ. ⟨ Define PICA Categories functions 1005 ⟩ +≡

void PICA Categories ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m pica category id ); RFX Text (pFX , ( ), m pica plus category code); RFX Int (pFX , ( ), m pica 3 category code); RFX Text (pFX , ( ), m description german); RFX Text (pFX , ( ), m description english);

}

1012. Assert Valid. [LDF 2006.08.25.] ⟨ Declare PICA Categories functions 1004 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1013. ⟨ Define PICA Categories functions 1005 ⟩ +≡ #ifdef

void PICA Categories ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif  /∗  ∗/

1014. Dump. [LDF 2006.08.25.] ⟨ Declare PICA Categories functions 1004 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

324  DUMP  IWF Metadata Harvester II §1015

1015. ⟨ Define PICA Categories functions 1005 ⟩ +≡ #ifdef

void PICA Categories ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif  /∗  ∗/

1016. Putting PICA Categories together. [LDF 2006.09.22.]

1017. This is what gets written to picacats.h. [LDF 2006.09.22.]

⟨ 1017 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class PICA Categories 1002 ⟩

§1018  IWF Metadata Harvester II  PUTTING PICA CATEGORIES TOGETHER 325

1018. This is what gets compiled. [LDF 2006.09.22.] ⟨ Include files 13 ⟩

  ⟨ picacats.web 998 ⟩

(PICA Categories, CRecordset)

⟨ Define PICA Categories functions 1005 ⟩

1019. PICA Fields (picaflds.web).

Log

[LDF 2006.09.25.] Created this file. It contains code formerly in picaflds.h and picaflds.cpp.

⟨ picaflds.web 1019 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1039.

1020. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1021. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1022. Include files. ⟨ Include files 13 ⟩ +≡ #include

1023. PICA Fields class declaration.

Log

[LDF 2006.09.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class PICA Fields 1023 ⟩ ≡ class PICA Fields : public CRecordset { public: long m pica field id ;

CStringA m pica plus field code; CStringA m pica 3 field code; CStringA m description german; CStringA m description english; ⟨ Declare PICA Fields functions 1025 ⟩

};

This code is used in section 1038.

1024. Functions.

1025. Constructor. ⟨ Declare PICA Fields functions 1025 ⟩ ≡

PICA Fields(CDatabase ∗pDatabase = NULL);

(PICA Fields)

See also sections 1027, 1029, 1031, 1033, and 1035. This code is used in section 1023.

1026. ⟨ Define PICA Fields functions 1026 ⟩ ≡

(PICA Fields, CRecordset)PICA Fields ::PICA Fields(CDatabase ∗pdb) : CRecordset(pdb) {

m pica field id = 0;

m pica plus field code = ;

m pica 3 field code = ;

m description german = ;

m description english = ;

m nFields = 5;

m nDefaultType = dynaset ; }

See also sections 1028, 1030, 1032, 1034, and 1036. This code is used in section 1039.

1027. Get default connect. [LDF 2006.09.25.] ⟨ Declare PICA Fields functions 1025 ⟩ +≡

virtual CString GetDefaultConnect ( );

1028. ⟨ Define PICA Fields functions 1026 ⟩ +≡

CString PICA Fields ::GetDefaultConnect ( ) {

return ( ); }

1029. Standard-SQL for Recordset. [LDF 2006.09.25.] ⟨ Declare PICA Fields functions 1025 ⟩ +≡

virtual CString GetDefaultSQL( );

1030. ⟨ Define PICA Fields functions 1026 ⟩ +≡

CString PICA Fields ::GetDefaultSQL( ) {

return ( ); }

1031. Do Field Exchange. RFX-Unterstützung. [LDF 2006.09.25.] ⟨ Declare PICA Fields functions 1025 ⟩ +≡

§1032  IWF Metadata Harvester II  DO FIELD EXCHANGE 327

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1032. ⟨ Define PICA Fields functions 1026 ⟩ +≡

void PICA Fields ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m pica field id ); RFX Text (pFX , ( ), m pica plus field code); RFX Text (pFX , ( ), m pica 3 field code); RFX Text (pFX , ( ), m description german); RFX Text (pFX , ( ), m description english);

}

1033. Assert Valid. [LDF 2006.09.25.] ⟨ Declare PICA Fields functions 1025 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1034. ⟨ Define PICA Fields functions 1026 ⟩ +≡ #ifdef

void PICA Fields ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1035. Dump. [LDF 2006.09.25.] ⟨ Declare PICA Fields functions 1025 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1036. ⟨ Define PICA Fields functions 1026 ⟩ +≡ #ifdef

void PICA Fields ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1037. Putting PICA Fields together.

1038. This is what gets written to picaflds.h.

⟨ 1038 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class PICA Fields 1023 ⟩

328  PUTTING PICA FIELDS TOGETHER  IWF Metadata Harvester II §1039

1039. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ picaflds.web 1019 ⟩

⟨ Define PICA Fields functions 1026 ⟩

1040. PICA Categories PICA Fields (pccatfld.web).

Log

[LDF 2006.08.25.] Created this file. It contains code formerly in pccatfld.h and pccatfld.cpp.

⟨ pccatfld.web 1040 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1060.

1041. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1042. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1043. Include files. ⟨ Include files 13 ⟩ +≡ #include

1044. PICA Categories PICA Fields class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class PICA Categories PICA Fields 1044 ⟩ ≡ class PICA Categories PICA Fields : public CRecordset { public: long m pica category id ;

long m pica field id ;

⟨ Declare PICA Categories PICA Fields functions 1046 ⟩ };

This code is used in section 1059.

1045. Functions.

1046. Constructor. ⟨ Declare PICA Categories PICA Fields functions 1046 ⟩ ≡

PICA Categories PICA Fields(CDatabase ∗pDatabase = NULL);

(PICA Categories PICA Fields)

See also sections 1048, 1050, 1052, 1054, and 1056. This code is used in section 1044.

1047. ⟨ Define PICA Categories PICA Fields functions 1047 ⟩ ≡

(PICA Categories PICA Fields, CRecordset) PICA Categories PICA Fields ::PICA Categories PICA Fields(CDatabase ∗pdb) : CRecordset(pdb) {

m pica category id = 0;

m pica field id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1049, 1051, 1053, 1055, and 1057. This code is used in section 1060.

1048. Get default connect. [LDF 2006.08.25.] ⟨ Declare PICA Categories PICA Fields functions 1046 ⟩ +≡

virtual CString GetDefaultConnect ( );

1049. ⟨ Define PICA Categories PICA Fields functions 1047 ⟩ +≡

CString PICA Categories PICA Fields ::GetDefaultConnect ( ) {

return ( ); }

1050. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare PICA Categories PICA Fields functions 1046 ⟩ +≡

virtual CString GetDefaultSQL( );

1051. ⟨ Define PICA Categories PICA Fields functions 1047 ⟩ +≡

CString PICA Categories PICA Fields ::GetDefaultSQL( ) {

return ( ); }

1052. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare PICA Categories PICA Fields functions 1046 ⟩ +≡

330  DO FIELD EXCHANGE  IWF Metadata Harvester II §1053

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1053. ⟨ Define PICA Categories PICA Fields functions 1047 ⟩ +≡

void PICA Categories PICA Fields ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m pica category id ); RFX Long (pFX , ( ), m pica field id );

}

1054. Assert Valid. [LDF 2006.08.25.] ⟨ Declare PICA Categories PICA Fields functions 1046 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1055. ⟨ Define PICA Categories PICA Fields functions 1047 ⟩ +≡ #ifdef

void PICA Categories PICA Fields ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1056. Dump. [LDF 2006.08.25.] ⟨ Declare PICA Categories PICA Fields functions 1046 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1057. ⟨ Define PICA Categories PICA Fields functions 1047 ⟩ +≡ #ifdef

void PICA Categories PICA Fields ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1058. Putting PICA Categories PICA Fields together.

1059. This is what gets written to pccatfld.h.

⟨ 1059 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class PICA Categories PICA Fields 1044 ⟩

§1060 IWF Metadata Harvester II PUTTING PICA CATEGORIES PICA FIELDS TOGETHER 331

1060. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ pccatfld.web 1040 ⟩

⟨ Define PICA Categories PICA Fields functions 1047 ⟩

1061. Sources (sources.web).

Log

[LDF 2006.07.24.] Created this file. It contains code formerly in sources.h and sources.cpp.

⟨ sources.web 1061 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1081.

1062. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1063. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1064. Include files. ⟨ Include files 13 ⟩ +≡ #include

1065. Sources class declaration.

Log

[LDF 2006.07.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Sources 1065 ⟩ ≡ class Sources : public CRecordset { public: long m source id ;

CStringA m source name; CStringA m source abbrev ; CStringA m source address ; ⟨ Declare Sources functions 1067 ⟩

};

This code is used in section 1080.

1066. Functions.

1067. Constructor. ⟨ Declare Sources functions 1067 ⟩ ≡

Sources(CDatabase ∗pDatabase = NULL); (Sources)

See also sections 1069, 1071, 1073, 1075, and 1077. This code is used in section 1065.

1068. ⟨ Define Sources functions 1068 ⟩ ≡

(Sources, CRecordset)

Sources ::Sources(CDatabase ∗pdb)

: CRecordset(pdb) { m source id = 0; m source name = ; m source abbrev = ; m source address = ; m nFields = 4; m nDefaultType = dynaset ;

}

See also sections 1070, 1072, 1074, 1076, and 1078. This code is used in section 1081.

1069. Get default connect. [LDF 2006.07.24.] ⟨ Declare Sources functions 1067 ⟩ +≡

virtual CString GetDefaultConnect ( );

1070. ⟨ Define Sources functions 1068 ⟩ +≡

CString Sources ::GetDefaultConnect ( )

{

return ( ); }

1071. Standard-SQL for Recordset. [LDF 2006.07.24.] ⟨ Declare Sources functions 1067 ⟩ +≡

virtual CString GetDefaultSQL( );

1072. ⟨ Define Sources functions 1068 ⟩ +≡

CString Sources ::GetDefaultSQL( )

{

return ( ); }

1073. Do Field Exchange. RFX-Unterstützung. [LDF 2006.07.24.]

Log

[LDF 2006.09.11.] In the call to RFX Text for m source address : Added a nMaxLength argument with value 1024.

⟨ Declare Sources functions 1067 ⟩ +≡ virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1074. ⟨ Define Sources functions 1068 ⟩ +≡

void Sources ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m source id ); RFX Text (pFX , ( ), m source name); RFX Text (pFX , ( ), m source abbrev ); RFX Text (pFX , ( ), m source address , 1024);

}

1075. Assert Valid. [LDF 2006.07.24.] ⟨ Declare Sources functions 1067 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1076. ⟨ Define Sources functions 1068 ⟩ +≡ #ifdef

void Sources ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1077. Dump. [LDF 2006.07.24.] ⟨ Declare Sources functions 1067 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1078. ⟨ Define Sources functions 1068 ⟩ +≡ #ifdef

void Sources ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1079. Putting Sources together.

1080. This is what gets written to sources.h.

⟨ 1080 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Sources 1065 ⟩

334  PUTTING SOURCES TOGETHER  IWF Metadata Harvester II §1081

1081. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ sources.web 1061 ⟩

⟨ Define Sources functions 1068 ⟩

1082. Records (records.web).

Log

[LDF 2006.08.23.] Created this file. It contains code formerly in records.h and records.cpp.

⟨ records.web 1082 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1102.

1083. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1084. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1085. Include files. ⟨ Include files 13 ⟩ +≡ #include

1086. Records class declaration.

Log

[LDF 2006.08.23.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records 1086 ⟩ ≡ class Records : public CRecordset { public: long m record id ;

int m eln original entry ; int m eln most recent change; int m eln status change; CStringA m identification number ; CTimem date original entry ; CTimem date most recent change; CTimem date status change; long m source id ; int m year appearance begin; int m year appearance end ; int m year appearance rak wb; int m year appearance original ; ⟨ Declare Records functions 1088 ⟩

};

§1086  IWF Metadata Harvester II  RECORDS CLASS DECLARATION 335

This code is used in section 1101.

1087. Functions.

1088. Constructor. ⟨ Declare Records functions 1088 ⟩ ≡

Records(CDatabase ∗pDatabase = NULL); (Records)

See also sections 1090, 1092, 1094, 1096, and 1098. This code is used in section 1086.

1089. ⟨ Define Records functions 1089 ⟩ ≡

(Records, CRecordset) Records ::Records(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0; m eln original entry = 0; m eln most recent change = 0; m eln status change = 0; m identification number = ; m date original entry ; m date most recent change; m date status change; m source id = 0; m year appearance begin = 0; m year appearance end = 0; m year appearance rak wb = 0; m year appearance original = 0; m nFields = 13; m nDefaultType = dynaset ;

}

See also sections 1091, 1093, 1095, 1097, and 1099. This code is used in section 1102.

1090. Get default connect. [LDF 2006.08.23.] ⟨ Declare Records functions 1088 ⟩ +≡

virtual CString GetDefaultConnect ( );

1091. ⟨ Define Records functions 1089 ⟩ +≡

CString Records ::GetDefaultConnect ( ) {

return ( ); }

1092. Standard-SQL for Recordset. [LDF 2006.08.23.] ⟨ Declare Records functions 1088 ⟩ +≡

336  STANDARD-SQL FOR RECORDSET  IWF Metadata Harvester II §1093

virtual CString GetDefaultSQL( ); 1093. ⟨ Define Records functions 1089 ⟩ +≡

CString Records ::GetDefaultSQL( ) {

return ( ); }

1094. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.23.]

Log

[LDF 2006.09.11.] In the call to RFX Text for m identification number : Added an nMaxLength argument with value 512.

⟨ Declare Records functions 1088 ⟩ +≡ virtual void DoFieldExchange(CFieldExchange ∗pFX );

1095. ⟨ Define Records functions 1089 ⟩ +≡

void Records ::DoFieldExchange(CFieldExchange ∗pFX ) {

pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Int (pFX , ( ), m eln original entry ); RFX Int (pFX , ( ), m eln most recent change); RFX Int (pFX , ( ), m eln status change); RFX Text (pFX , ( ), m identification number , 512); RFX Date(pFX , ( ), m date original entry ); RFX Date(pFX , ( ), m date most recent change); RFX Date(pFX , ( ), m date status change); RFX Long (pFX , ( ), m source id ); RFX Int (pFX , ( ), m year appearance begin); RFX Int (pFX , ( ), m year appearance end ); RFX Int (pFX , ( ), m year appearance rak wb); RFX Int (pFX , ( ), m year appearance original );

}

1096. Assert Valid. [LDF 2006.08.23.] ⟨ Declare Records functions 1088 ⟩ +≡ #ifdef

§1097  IWF Metadata Harvester II  ASSERT VALID 337

virtual void AssertValid ( ) const; #endif 1097. ⟨ Define Records functions 1089 ⟩ +≡ #ifdef

void Records ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1098. Dump. [LDF 2006.08.23.] ⟨ Declare Records functions 1088 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1099. ⟨ Define Records functions 1089 ⟩ +≡ #ifdef

void Records ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1100. Putting Records together.

1101. This is what gets written to records.h.

⟨ 1101 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records 1086 ⟩

338  PUTTING RECORDS TOGETHER  IWF Metadata Harvester II §1102

1102. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ records.web 1082 ⟩

⟨ Define Records functions 1089 ⟩

1103. Access Numbers (accnums.web).

Log

[LDF 2006.08.24.] Created this file. It contains code formerly in accnums.h and accnums.cpp.

⟨ accnums.web 1103 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1123.

1104. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1105. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1106. Include files. ⟨ Include files 13 ⟩ +≡ #include

1107. Access Numbers class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Access Numbers 1107 ⟩ ≡ class Access Numbers : public CRecordset { public: long m access number id ;

CStringA m access number ;

long m record id ;

⟨ Declare Access Numbers functions 1109 ⟩ };

This code is used in section 1122.

1108. Functions.

1109. Constructor. ⟨ Declare Access Numbers functions 1109 ⟩ ≡

Access Numbers(CDatabase ∗pDatabase = NULL);

(Access Numbers)

See also sections 1111, 1113, 1115, 1117, and 1119. This code is used in section 1107.

1110. ⟨ Define Access Numbers functions 1110 ⟩ ≡

(Access Numbers, CRecordset) Access Numbers ::Access Numbers(CDatabase ∗pdb) : CRecordset(pdb) {

m access number id = 0;

m access number = ;

m record id = 0;

m nFields = 3;

m nDefaultType = dynaset ; }

See also sections 1112, 1114, 1116, 1118, and 1120. This code is used in section 1123.

1111. Get default connect. [LDF 2006.08.24.] ⟨ Declare Access Numbers functions 1109 ⟩ +≡

virtual CString GetDefaultConnect ( );

1112. ⟨ Define Access Numbers functions 1110 ⟩ +≡

CString Access Numbers ::GetDefaultConnect ( ) {

return ( ); }

1113. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Access Numbers functions 1109 ⟩ +≡

virtual CString GetDefaultSQL( );

1114. ⟨ Define Access Numbers functions 1110 ⟩ +≡

CString Access Numbers ::GetDefaultSQL( ) {

return ( ); }

1115. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Access Numbers functions 1109 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1116. ⟨ Define Access Numbers functions 1110 ⟩ +≡

void Access Numbers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m access number id ); RFX Text (pFX , ( ), m access number ); RFX Long (pFX , ( ), m record id );

}

1117. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Access Numbers functions 1109 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1118. ⟨ Define Access Numbers functions 1110 ⟩ +≡ #ifdef

void Access Numbers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1119. Dump. [LDF 2006.08.24.] ⟨ Declare Access Numbers functions 1109 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1120. ⟨ Define Access Numbers functions 1110 ⟩ +≡ #ifdef

void Access Numbers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1121. Putting Access Numbers together.

1122. This is what gets written to accnums.h.

⟨ 1122 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Access Numbers 1107 ⟩

§1123  IWF Metadata Harvester II  PUTTING ACCESS NUMBERS TOGETHER 341

1123. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ accnums.web 1103 ⟩

⟨ Define Access Numbers functions 1110 ⟩

1124. Call Numbers (callnums.web).

Log

[LDF 2006.08.24.] Created this file. It contains code formerly in callnums.h and callnums.cpp.

⟨ callnums.web 1124 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1144.

1125. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1126. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1127. Include files. ⟨ Include files 13 ⟩ +≡ #include

1128. Call Numbers class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Call Numbers 1128 ⟩ ≡ class Call Numbers : public CRecordset { public: long m call number id ;

CStringA m call number ; int m library number ; CStringA m library department ; CStringA m special location; ⟨ Declare Call Numbers functions 1130 ⟩

};

This code is used in section 1143.

1129. Functions.

1130. Constructor. ⟨ Declare Call Numbers functions 1130 ⟩ ≡

Call Numbers(CDatabase ∗pDatabase = NULL);

(Call Numbers)

See also sections 1132, 1134, 1136, 1138, and 1140. This code is used in section 1128.

1131. ⟨ Define Call Numbers functions 1131 ⟩ ≡

(Call Numbers, CRecordset)Call Numbers ::Call Numbers(CDatabase

∗pdb)

: CRecordset(pdb) { m call number id = 0; m call number = ; m library number = 0; m library department = ; m special location = ; m nFields = 5; m nDefaultType = dynaset ;

}

See also sections 1133, 1135, 1137, 1139, and 1141. This code is used in section 1144.

1132. Get default connect. [LDF 2006.08.24.] ⟨ Declare Call Numbers functions 1130 ⟩ +≡

virtual CString GetDefaultConnect ( );

1133. ⟨ Define Call Numbers functions 1131 ⟩ +≡

CString Call Numbers ::GetDefaultConnect ( )

{

return ( ); }

1134. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Call Numbers functions 1130 ⟩ +≡

virtual CString GetDefaultSQL( );

1135. ⟨ Define Call Numbers functions 1131 ⟩ +≡

CString Call Numbers ::GetDefaultSQL( )

{

return ( ); }

1136. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Call Numbers functions 1130 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1137. ⟨ Define Call Numbers functions 1131 ⟩ +≡

void Call Numbers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m call number id ); RFX Text (pFX , ( ), m call number ); RFX Int (pFX , ( ), m library number ); RFX Text (pFX , ( ), m library department ); RFX Text (pFX , ( ), m special location);

}

1138. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Call Numbers functions 1130 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1139. ⟨ Define Call Numbers functions 1131 ⟩ +≡ #ifdef

void Call Numbers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1140. Dump. [LDF 2006.08.24.] ⟨ Declare Call Numbers functions 1130 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1141. ⟨ Define Call Numbers functions 1131 ⟩ +≡ #ifdef

void Call Numbers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1142. Putting Call Numbers together.

1143. This is what gets written to callnums.h.

⟨ 1143 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Call Numbers 1128 ⟩

344  PUTTING CALL NUMBERS TOGETHER  IWF Metadata Harvester II §1144

1144. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ callnums.web 1124 ⟩

⟨ Define Call Numbers functions 1131 ⟩

1145. Records Call Numbers (rccllnms.web).

Log

[LDF 2006.08.24.] Created this file. It contains code formerly in rccllnms.h and rccllnms.cpp.

⟨ rccllnms.web 1145 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1165.

1146. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1147. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1148. Include files. ⟨ Include files 13 ⟩ +≡ #include

1149. Records Call Numbers class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Call Numbers 1149 ⟩ ≡ class Records Call Numbers : public CRecordset { public: long m record id ;

long m call number id ;

⟨ Declare Records Call Numbers functions 1151 ⟩ };

This code is used in section 1164.

1150. Functions.

1151. Constructor. ⟨ Declare Records Call Numbers functions 1151 ⟩ ≡

Records Call Numbers(CDatabase ∗pDatabase = NULL);

(Records Call Numbers)

See also sections 1153, 1155, 1157, 1159, and 1161. This code is used in section 1149.

1152. ⟨ Define Records Call Numbers functions 1152 ⟩ ≡

(Records Call Numbers,

CRecordset)Records Call Numbers ::Records Call Numbers(CDatabase ∗pdb)

: CRecordset(pdb) { m record id = 0; m call number id = 0; m nFields = 2; m nDefaultType = dynaset ;

}

See also sections 1154, 1156, 1158, 1160, and 1162. This code is used in section 1165.

1153. Get default connect. [LDF 2006.08.24.] ⟨ Declare Records Call Numbers functions 1151 ⟩ +≡

virtual CString GetDefaultConnect ( );

1154. ⟨ Define Records Call Numbers functions 1152 ⟩ +≡

CString Records Call Numbers ::GetDefaultConnect ( )

{

return ( ); }

1155. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Records Call Numbers functions 1151 ⟩ +≡

virtual CString GetDefaultSQL( );

1156. ⟨ Define Records Call Numbers functions 1152 ⟩ +≡

CString Records Call Numbers ::GetDefaultSQL( )

{

return ( ); }

1157. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Records Call Numbers functions 1151 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1158. ⟨ Define Records Call Numbers functions 1152 ⟩ +≡

void Records Call Numbers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m call number id );

}

1159. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Records Call Numbers functions 1151 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1160. ⟨ Define Records Call Numbers functions 1152 ⟩ +≡ #ifdef

void Records Call Numbers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1161. Dump. [LDF 2006.08.24.] ⟨ Declare Records Call Numbers functions 1151 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1162. ⟨ Define Records Call Numbers functions 1152 ⟩ +≡ #ifdef

void Records Call Numbers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1163. Putting Records Call Numbers together.

1164. This is what gets written to rccllnms.h.

⟨ 1164 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Call Numbers 1149 ⟩

§1165  IWF Metadata Harvester II  PUTTING RECORDS CALL NUMBERS TOGETHER 347

1165. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rccllnms.web 1145 ⟩

⟨ Define Records Call Numbers functions 1152 ⟩

1166. Exemplar Production Numbers (exprnums.web).

Log

[LDF 2006.08.24.] Created this file. It contains code formerly in exprnums.h and exprnums.cpp.

⟨ exprnums.web 1166 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1186.

1167. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1168. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1169. Include files. ⟨ Include files 13 ⟩ +≡ #include

1170. Exemplar Production Numbers class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

[LDF 2006.08.29.] Changed the declaration of class Exemplar Production Numbers to correspond to changes made in the Exemplar Production Numbers database table. Replaced the variable m exemplar production number with m exemplar production number numeric and m exemplar production number text . Changed other code accordingly.

⟨ Declare class Exemplar Production Numbers 1170 ⟩ ≡ class Exemplar Production Numbers : public CRecordset { public: long m exemplar production number id ;

m exemplar production number numeric; CStringA m exemplar production number text ; long m record id ; ⟨ Declare Exemplar Production Numbers functions 1172 ⟩

};

This code is used in section 1185.

1171. Functions.

1172. Constructor. ⟨ Declare Exemplar Production Numbers functions 1172 ⟩ ≡

Exemplar Production Numbers(CDatabase ∗pDatabase = NULL); (Exemplar Production Numbers)

See also sections 1174, 1176, 1178, 1180, and 1182. This code is used in section 1170.

1173. ⟨ Define Exemplar Production Numbers functions 1173 ⟩ ≡

(Exemplar Production Numbers, CRecordset) Exemplar Production Numbers ::Exemplar Production Numbers(CDatabase ∗pdb) : CRecordset(pdb) {

m exemplar production number id = 0;

m exemplar production number numeric = 0;

m exemplar production number text = ;

m record id = 0;

m nFields = 4;

m nDefaultType = dynaset ; }

See also sections 1175, 1177, 1179, 1181, and 1183. This code is used in section 1186.

1174. Get default connect. [LDF 2006.08.24.] ⟨ Declare Exemplar Production Numbers functions 1172 ⟩ +≡

virtual CString GetDefaultConnect ( );

1175. ⟨ Define Exemplar Production Numbers functions 1173 ⟩ +≡

CString Exemplar Production Numbers ::GetDefaultConnect ( ) {

return ( ); }

1176. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Exemplar Production Numbers functions 1172 ⟩ +≡

virtual CString GetDefaultSQL( );

1177. ⟨ Define Exemplar Production Numbers functions 1173 ⟩ +≡

CString Exemplar Production Numbers ::GetDefaultSQL( ) {

return ( ); }

1178. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Exemplar Production Numbers functions 1172 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1179. ⟨ Define Exemplar Production Numbers functions 1173 ⟩ +≡

void Exemplar Production Numbers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m exemplar production number id ); RFX BigInt (pFX , ( ),

m exemplar production number numeric); RFX Text (pFX , ( ), m exemplar production number text ); RFX Long (pFX , ( ), m record id );

}

1180. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Exemplar Production Numbers functions 1172 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1181. ⟨ Define Exemplar Production Numbers functions 1173 ⟩ +≡ #ifdef

void Exemplar Production Numbers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1182. Dump. [LDF 2006.08.24.] ⟨ Declare Exemplar Production Numbers functions 1172 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1183. ⟨ Define Exemplar Production Numbers functions 1173 ⟩ +≡ #ifdef

void Exemplar Production Numbers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1184. Putting Exemplar Production Numbers together.

1185. This is what gets written to exprnums.h.

⟨ 1185 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Exemplar Production Numbers 1170 ⟩

350 PUTTING EXEMPLAR PRODUCTION NUMBERS TOGETHERIWF Metadata Harvester II §1186

1186. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ exprnums.web 1166 ⟩

⟨ Define Exemplar Production Numbers functions 1173 ⟩

1187. Bibliographic Type Codes (bbtpcds.web).

Log

[LDF 2006.09.06.] Created this file. It contains code formerly in bbtpcds.h and bbtpcds.cpp.

⟨ bbtpcds.web 1187 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1207.

1188. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1189. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1190. Include files. ⟨ Include files 13 ⟩ +≡ #include

1191. Bibliographic Type Codes class declaration.

Log

[LDF 2006.09.06.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Bibliographic Type Codes 1191 ⟩ ≡ class Bibliographic Type Codes : public CRecordset { public: long m bibliographic type code id ;

CStringA m physical form code;

CStringA m physical form material name english; CStringA m physical form material name german; CStringA m bibliographic representation code; CStringA m bibliographic representation description english; CStringA m bibliographic representation description german; CStringA m description status code; CStringA m description status description english; CStringA m description status description german; ⟨ Declare Bibliographic Type Codes functions 1193 ⟩

};

This code is used in section 1206.

1192. Functions.

1193. Constructor. ⟨ Declare Bibliographic Type Codes functions 1193 ⟩ ≡

Bibliographic Type Codes(CDatabase ∗pDatabase = NULL); (Bibliographic Type Codes)

See also sections 1195, 1197, 1199, 1201, and 1203. This code is used in section 1191.

1194. ⟨ Define Bibliographic Type Codes functions 1194 ⟩ ≡

(Bibliographic Type Codes, CRecordset) Bibliographic Type Codes ::Bibliographic Type Codes(CDatabase ∗pdb) : CRecordset(pdb) {

m bibliographic type code id = 0; m physical form code = ; m physical form material name english = ; m physical form material name german = ; m bibliographic representation code = ; m bibliographic representation description english = ; m bibliographic representation description german = ; m description status code = ; m description status description english = ; m description status description german = ; m nFields = 10; m nDefaultType = dynaset ;

}

See also sections 1196, 1198, 1200, 1202, and 1204. This code is used in section 1207.

1195. Get default connect. [LDF 2006.09.06.] ⟨ Declare Bibliographic Type Codes functions 1193 ⟩ +≡

virtual CString GetDefaultConnect ( );

1196. ⟨ Define Bibliographic Type Codes functions 1194 ⟩ +≡

CString Bibliographic Type Codes ::GetDefaultConnect ( ) {

return ( ); }

1197. Standard-SQL for Recordset. [LDF 2006.09.06.] ⟨ Declare Bibliographic Type Codes functions 1193 ⟩ +≡

virtual CString GetDefaultSQL( ); 1198. ⟨ Define Bibliographic Type Codes functions 1194 ⟩ +≡

CString Bibliographic Type Codes ::GetDefaultSQL( ) {

return ( ); }

1199. Do Field Exchange. RFX-Unterstützung. [LDF 2006.09.06.] ⟨ Declare Bibliographic Type Codes functions 1193 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX );

1200. ⟨ Define Bibliographic Type Codes functions 1194 ⟩ +≡

void Bibliographic Type Codes ::DoFieldExchange(CFieldExchange ∗pFX ) {

pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m bibliographic type code id ); RFX Text (pFX , ( ), m physical form code); RFX Text (pFX , ( ),

m physical form material name english); RFX Text (pFX , ( ),

m physical form material name german); RFX Text (pFX , ( ), m bibliographic representation code); RFX Text (pFX , ( ),

m bibliographic representation description english); RFX Text (pFX , ( ),

m bibliographic representation description german); RFX Text (pFX , ( ), m description status code); RFX Text (pFX , ( ),

m description status description english); RFX Text (pFX , ( ),

m description status description german); }

1201. Assert Valid. [LDF 2006.09.06.] ⟨ Declare Bibliographic Type Codes functions 1193 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif 1202. ⟨ Define Bibliographic Type Codes functions 1194 ⟩ +≡ #ifdef

void Bibliographic Type Codes ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1203. Dump. [LDF 2006.09.06.] ⟨ Declare Bibliographic Type Codes functions 1193 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1204. ⟨ Define Bibliographic Type Codes functions 1194 ⟩ +≡ #ifdef

void Bibliographic Type Codes ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1205. Putting Bibliographic Type Codes together.

1206. This is what gets written to bbtpcds.h.

⟨ 1206 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Bibliographic Type Codes 1191 ⟩

354  PUTTING BIBLIOGRAPHIC TYPE CODES TOGETHER  IWF Metadata Harvester II §1207

1207. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ bbtpcds.web 1187 ⟩

⟨ Define Bibliographic Type Codes functions 1194 ⟩

1208. Bibliographic Types (bibtyps.web).

Log

[LDF 2006.08.24.] Created this file. It contains code formerly in bibtyps.h and bibtyps.cpp.

⟨ bibtyps.web 1208 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1228.

1209. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1210. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1211. Include files. ⟨ Include files 13 ⟩ +≡ #include

1212. Bibliographic Types class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Bibliographic Types 1212 ⟩ ≡ class Bibliographic Types : public CRecordset { public: ⟨ Declare Bibliographic Types functions 1214 ⟩

long m bibliographic type id ; CStringA m physical form; CStringA m bibliographic representation; CStringA m description status ; CStringA m miscellaneous ; CStringA m bibliographic representation refinement ; CStringA m transliteration code;

};

This code is used in section 1227.

1213. Functions.

1214. Constructor. ⟨ Declare Bibliographic Types functions 1214 ⟩ ≡ Bibliographic Types(CDatabase ∗pDatabase = NULL); (Bibliographic Types)

See also sections 1216, 1218, 1220, 1222, and 1224. This code is used in section 1212.

1215. ⟨ Define Bibliographic Types functions 1215 ⟩ ≡

(Bibliographic Types, CRecordset) Bibliographic Types ::Bibliographic Types(CDatabase ∗pdb) : CRecordset(pdb) {

m bibliographic type id = 0;

m physical form = ;

m bibliographic representation = ;

m description status = ;

m miscellaneous = ;

m bibliographic representation refinement = ; m transliteration code = ; m nFields = 7; m nDefaultType = dynaset ;

}

See also sections 1217, 1219, 1221, 1223, and 1225. This code is used in section 1228.

1216. Get default connect. [LDF 2006.08.24.] ⟨ Declare Bibliographic Types functions 1214 ⟩ +≡

virtual CString GetDefaultConnect ( );

1217. ⟨ Define Bibliographic Types functions 1215 ⟩ +≡

CString Bibliographic Types ::GetDefaultConnect ( ) {

return ( ); }

1218. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Bibliographic Types functions 1214 ⟩ +≡

virtual CString GetDefaultSQL( );

1219. ⟨ Define Bibliographic Types functions 1215 ⟩ +≡

CString Bibliographic Types ::GetDefaultSQL( ) {

return ( ); }

1220. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Bibliographic Types functions 1214 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1221. ⟨ Define Bibliographic Types functions 1215 ⟩ +≡

void Bibliographic Types ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m bibliographic type id ); RFX Text (pFX , ( ), m physical form); RFX Text (pFX , ( ), m bibliographic representation); RFX Text (pFX , ( ), m description status ); RFX Text (pFX , ( ), m miscellaneous ); RFX Text (pFX , ( ),

m bibliographic representation refinement ); RFX Text (pFX , ( ), m transliteration code);

}

1222. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Bibliographic Types functions 1214 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1223. ⟨ Define Bibliographic Types functions 1215 ⟩ +≡ #ifdef

void Bibliographic Types ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1224. Dump. [LDF 2006.08.24.] ⟨ Declare Bibliographic Types functions 1214 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1225. ⟨ Define Bibliographic Types functions 1215 ⟩ +≡ #ifdef

void Bibliographic Types ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1226. Putting Bibliographic Types together.

§1227  IWF Metadata Harvester II  PUTTING BIBLIOGRAPHIC TYPES TOGETHER 357

1227. This is what gets written to bibtyps.h.

⟨ 1227 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩ ⟨ using declarations for namespaces 191 ⟩ ⟨ Declare class Bibliographic Types 1212 ⟩

358  PUTTING BIBLIOGRAPHIC TYPES TOGETHER  IWF Metadata Harvester II §1228

1228. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ bibtyps.web 1208 ⟩

⟨ Define Bibliographic Types functions 1215 ⟩

1229. Records Bibliographic Types (rcbbtyps.web).

Log

[LDF 2006.08.24.] Created this file. It contains code formerly in rcbbtyps.h and rcbbtyps.cpp.

⟨ rcbbtyps.web 1229 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1249.

1230. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1231. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1232. Include files. ⟨ Include files 13 ⟩ +≡ #include

1233. Records Bibliographic Types class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Bibliographic Types 1233 ⟩ ≡ class Records Bibliographic Types : public CRecordset { public: long m record id ;

long m bibliographic type id ;

⟨ Declare Records Bibliographic Types functions 1235 ⟩ };

This code is used in section 1248.

1234. Functions.

1235. Constructor. ⟨ Declare Records Bibliographic Types functions 1235 ⟩ ≡

Records Bibliographic Types(CDatabase ∗pDatabase = NULL);

(Records Bibliographic Types)

See also sections 1237, 1239, 1241, 1243, and 1245. This code is used in section 1233.

1236. ⟨ Define Records Bibliographic Types functions 1236 ⟩ ≡

(Records Bibliographic Types, CRecordset) Records Bibliographic Types ::Records Bibliographic Types(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m bibliographic type id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1238, 1240, 1242, 1244, and 1246. This code is used in section 1249.

1237. Get default connect. [LDF 2006.08.24.] ⟨ Declare Records Bibliographic Types functions 1235 ⟩ +≡

virtual CString GetDefaultConnect ( );

1238. ⟨ Define Records Bibliographic Types functions 1236 ⟩ +≡

CString Records Bibliographic Types ::GetDefaultConnect ( ) {

return ( ); }

1239. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Records Bibliographic Types functions 1235 ⟩ +≡

virtual CString GetDefaultSQL( );

1240. ⟨ Define Records Bibliographic Types functions 1236 ⟩ +≡

CString Records Bibliographic Types ::GetDefaultSQL( ) {

return ( ); }

1241. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Records Bibliographic Types functions 1235 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1242. ⟨ Define Records Bibliographic Types functions 1236 ⟩ +≡

void Records Bibliographic Types ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m bibliographic type id );

}

1243. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Records Bibliographic Types functions 1235 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1244. ⟨ Define Records Bibliographic Types functions 1236 ⟩ +≡ #ifdef

void Records Bibliographic Types ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1245. Dump. [LDF 2006.08.24.] ⟨ Declare Records Bibliographic Types functions 1235 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1246. ⟨ Define Records Bibliographic Types functions 1236 ⟩ +≡ #ifdef

void Records Bibliographic Types ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1247. Putting Records Bibliographic Types together.

1248. This is what gets written to rcbbtyps.h.

⟨ 1248 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Bibliographic Types 1233 ⟩

§1249 IWF Metadata Harvester IIPUTTING RECORDS BIBLIOGRAPHIC TYPES TOGETHER 361

1249. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rcbbtyps.web 1229 ⟩

⟨ Define Records Bibliographic Types functions 1236 ⟩

1250. Physical Descriptions (physdesc.web).

Log

[LDF 2006.08.25.] Created this file. It contains code formerly in physdesc.h and physdesc.cpp.

⟨ physdesc.web 1250 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1270.

1251. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1252. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1253. Include files. ⟨ Include files 13 ⟩ +≡ #include

1254. Physical Descriptions class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Physical Descriptions 1254 ⟩ ≡ class Physical Descriptions : public CRecordset { public: long m physical description id ;

CStringA m text ;

long m pica category id ; long m pica field id ; ⟨ Declare Physical Descriptions functions 1256 ⟩

};

This code is used in section 1269.

1255. Functions.

1256. Constructor. ⟨ Declare Physical Descriptions functions 1256 ⟩ ≡

Physical Descriptions(CDatabase ∗pDatabase = NULL);

(Physical Descriptions)

See also sections 1258, 1260, 1262, 1264, and 1266. This code is used in section 1254.

1257. ⟨ Define Physical Descriptions functions 1257 ⟩ ≡

(Physical Descriptions, CRecordset) Physical Descriptions ::Physical Descriptions(CDatabase ∗pdb) : CRecordset(pdb) {

m physical description id = 0;

m text = ;

m pica category id = 0;

m pica field id = 0;

m nFields = 4;

m nDefaultType = dynaset ; }

See also sections 1259, 1261, 1263, 1265, and 1267. This code is used in section 1270.

1258. Get default connect. [LDF 2006.08.25.] ⟨ Declare Physical Descriptions functions 1256 ⟩ +≡

virtual CString GetDefaultConnect ( );

1259. ⟨ Define Physical Descriptions functions 1257 ⟩ +≡

CString Physical Descriptions ::GetDefaultConnect ( ) {

return ( ); }

1260. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare Physical Descriptions functions 1256 ⟩ +≡

virtual CString GetDefaultSQL( );

1261. ⟨ Define Physical Descriptions functions 1257 ⟩ +≡

CString Physical Descriptions ::GetDefaultSQL( ) {

return ( ); }

1262. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare Physical Descriptions functions 1256 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1263. ⟨ Define Physical Descriptions functions 1257 ⟩ +≡

void Physical Descriptions ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m physical description id ); RFX Text (pFX , ( ), m text , 256); RFX Long (pFX , ( ), m pica category id ); RFX Long (pFX , ( ), m pica field id );

}

1264. Assert Valid. [LDF 2006.08.25.] ⟨ Declare Physical Descriptions functions 1256 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1265. ⟨ Define Physical Descriptions functions 1257 ⟩ +≡ #ifdef

void Physical Descriptions ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1266. Dump. [LDF 2006.08.25.] ⟨ Declare Physical Descriptions functions 1256 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1267. ⟨ Define Physical Descriptions functions 1257 ⟩ +≡ #ifdef

void Physical Descriptions ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1268. Putting Physical Descriptions together.

1269. This is what gets written to physdesc.h.

⟨ 1269 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Physical Descriptions 1254 ⟩

364  PUTTING PHYSICAL DESCRIPTIONS TOGETHER  IWF Metadata Harvester II §1270

1270. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ physdesc.web 1250 ⟩

⟨ Define Physical Descriptions functions 1257 ⟩

1271. Records Physical Descriptions (rcphsdsc.web).

Log

[LDF 2006.08.25.] Created this file. It contains code formerly in rcphsdsc.h and rcphsdsc.cpp.

⟨ rcphsdsc.web 1271 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1291.

1272. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1273. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1274. Include files. ⟨ Include files 13 ⟩ +≡ #include

1275. Records Physical Descriptions class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Physical Descriptions 1275 ⟩ ≡ class Records Physical Descriptions : public CRecordset { public: long m record id ;

long m physical description id ;

⟨ Declare Records Physical Descriptions functions 1277 ⟩ };

This code is used in section 1290.

1276. Functions.

1277. Constructor. ⟨ Declare Records Physical Descriptions functions 1277 ⟩ ≡

Records Physical Descriptions(CDatabase ∗pDatabase = NULL);

(Records Physical Descriptions)

See also sections 1279, 1281, 1283, 1285, and 1287. This code is used in section 1275.

1278. ⟨ Define Records Physical Descriptions functions 1278 ⟩ ≡

(Records Physical Descriptions, CRecordset) Records Physical Descriptions ::Records Physical Descriptions(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m physical description id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1280, 1282, 1284, 1286, and 1288. This code is used in section 1291.

1279. Get default connect. [LDF 2006.08.25.] ⟨ Declare Records Physical Descriptions functions 1277 ⟩ +≡

virtual CString GetDefaultConnect ( );

1280. ⟨ Define Records Physical Descriptions functions 1278 ⟩ +≡

CString Records Physical Descriptions ::GetDefaultConnect ( ) {

return ( ); }

1281. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare Records Physical Descriptions functions 1277 ⟩ +≡

virtual CString GetDefaultSQL( );

1282. ⟨ Define Records Physical Descriptions functions 1278 ⟩ +≡

CString Records Physical Descriptions ::GetDefaultSQL( ) {

return ( ); }

1283. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare Records Physical Descriptions functions 1277 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1284. ⟨ Define Records Physical Descriptions functions 1278 ⟩ +≡

void Records Physical Descriptions ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m physical description id );

}

1285. Assert Valid. [LDF 2006.08.25.] ⟨ Declare Records Physical Descriptions functions 1277 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1286. ⟨ Define Records Physical Descriptions functions 1278 ⟩ +≡ #ifdef

void Records Physical Descriptions ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1287. Dump. [LDF 2006.08.25.] ⟨ Declare Records Physical Descriptions functions 1277 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1288. ⟨ Define Records Physical Descriptions functions 1278 ⟩ +≡ #ifdef

void Records Physical Descriptions ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1289. Putting Records Physical Descriptions together.

1290. This is what gets written to rcphsdsc.h.

⟨ 1290 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Physical Descriptions 1275 ⟩

§1291 IWF Metadata Harvester IIPUTTING RECORDS PHYSICAL DESCRIPTIONS TOGETHER 367

1291. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rcphsdsc.web 1271 ⟩

⟨ Define Records Physical Descriptions functions 1278 ⟩

1292. Authors (authors.web).

Log

[LDF 2006.08.24.] Created this file. It contains code formerly in authors.h and authors.cpp.

⟨ authors.web 1292 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1312.

1293. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1294. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1295. Include files. ⟨ Include files 13 ⟩ +≡ #include

1296. Authors class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Authors 1296 ⟩ ≡ class Authors : public CRecordset { public: long m author id ;

CStringA m given name; CStringA m surname; CStringA m prefix ; m id number ppn; ⟨ Declare Authors functions 1298 ⟩

};

This code is used in section 1311.

1297. Functions.

1298. Constructor. ⟨ Declare Authors functions 1298 ⟩ ≡

Authors(CDatabase ∗pDatabase = NULL);

(Authors)

See also sections 1300, 1302, 1304, 1306, and 1308. This code is used in section 1296.

1299. ⟨ Define Authors functions 1299 ⟩ ≡

(Authors, CRecordset) Authors ::Authors(CDatabase ∗pdb) : CRecordset(pdb) {

m author id = 0;

m given name = ;

m surname = ;

m prefix = ;

m id number ppn = 0;

m nFields = 5;

m nDefaultType = dynaset ; }

See also sections 1301, 1303, 1305, 1307, and 1309. This code is used in section 1312.

1300. Get default connect. [LDF 2006.08.24.] ⟨ Declare Authors functions 1298 ⟩ +≡

virtual CString GetDefaultConnect ( );

1301. ⟨ Define Authors functions 1299 ⟩ +≡

CString Authors ::GetDefaultConnect ( ) {

return ( ); }

1302. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Authors functions 1298 ⟩ +≡

virtual CString GetDefaultSQL( );

1303. ⟨ Define Authors functions 1299 ⟩ +≡

CString Authors ::GetDefaultSQL( ) {

return ( ); }

1304. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Authors functions 1298 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1305. ⟨ Define Authors functions 1299 ⟩ +≡

void Authors ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m author id ); RFX Text (pFX , ( ), m given name); RFX Text (pFX , ( ), m surname); RFX Text (pFX , ( ), m prefix ); RFX BigInt (pFX , ( ), m id number ppn);

}

1306. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Authors functions 1298 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1307. ⟨ Define Authors functions 1299 ⟩ +≡ #ifdef

void Authors ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1308. Dump. [LDF 2006.08.24.] ⟨ Declare Authors functions 1298 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1309. ⟨ Define Authors functions 1299 ⟩ +≡ #ifdef

void Authors ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1310. Putting Authors together.

1311. This is what gets written to authors.h.

⟨ 1311 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Authors 1296 ⟩

370  PUTTING AUTHORS TOGETHER  IWF Metadata Harvester II §1312

1312. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ authors.web 1292 ⟩

⟨ Define Authors functions 1299 ⟩

1313. Records Authors (recathrs.web).

Log

[LDF 2006.09.26.] Created this file. It contains code formerly in Records Authors.h and Records Authors.cpp.

⟨ recathrs.web 1313 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1333.

1314. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1315. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1316. Include files. ⟨ Include files 13 ⟩ +≡ #include

1317. Records Authors class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Authors 1317 ⟩ ≡ class Records Authors : public CRecordset { public: long m record id ;

long m author id ;

⟨ Declare Records Authors functions 1319 ⟩ };

This code is used in section 1332.

1318. Functions.

1319. Constructor. ⟨ Declare Records Authors functions 1319 ⟩ ≡

Records Authors(CDatabase ∗pDatabase = NULL);

(Records Authors)

See also sections 1321, 1323, 1325, 1327, and 1329. This code is used in section 1317.

1320. ⟨ Define Records Authors functions 1320 ⟩ ≡

(Records Authors, CRecordset) Records Authors ::Records Authors(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m author id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1322, 1324, 1326, 1328, and 1330. This code is used in section 1333.

1321. Get default connect. [LDF 2006.08.25.] ⟨ Declare Records Authors functions 1319 ⟩ +≡

virtual CString GetDefaultConnect ( );

1322. ⟨ Define Records Authors functions 1320 ⟩ +≡

CString Records Authors ::GetDefaultConnect ( ) {

return ( ); }

1323. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare Records Authors functions 1319 ⟩ +≡

virtual CString GetDefaultSQL( );

1324. ⟨ Define Records Authors functions 1320 ⟩ +≡

CString Records Authors ::GetDefaultSQL( ) {

return ( ); }

1325. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare Records Authors functions 1319 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1326. ⟨ Define Records Authors functions 1320 ⟩ +≡

void Records Authors ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m author id );

}

1327. Assert Valid. [LDF 2006.08.25.] ⟨ Declare Records Authors functions 1319 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1328. ⟨ Define Records Authors functions 1320 ⟩ +≡ #ifdef

void Records Authors ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1329. Dump. [LDF 2006.08.25.] ⟨ Declare Records Authors functions 1319 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1330. ⟨ Define Records Authors functions 1320 ⟩ +≡ #ifdef

void Records Authors ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1331. Putting Records Authors together.

1332. This is what gets written to recathrs.h.

⟨ 1332 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Authors 1317 ⟩

§1333  IWF Metadata Harvester II  PUTTING RECORDS AUTHORS TOGETHER 373

1333. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ recathrs.web 1313 ⟩

⟨ Define Records Authors functions 1320 ⟩

1334. Contributors (cntrbtrs.web).

Log

[LDF 2006.09.26.] Created this file. It contains code formerly in cntrbtrs.h and cntrbtrs.cpp.

⟨ cntrbtrs.web 1334 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1354.

1335. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1336. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1337. Include files. ⟨ Include files 13 ⟩ +≡ #include

1338. Contributors class declaration.

Log

[LDF 2006.07.26.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Contributors 1338 ⟩ ≡ class Contributors : public CRecordset { public: long m contributor id ;

CStringA m given name; CStringA m surname; CStringA m prefix ; m id number ppn; ⟨ Declare Contributors functions 1340 ⟩

};

This code is used in section 1353.

1339. Functions.

1340. Constructor. ⟨ Declare Contributors functions 1340 ⟩ ≡

Contributors(CDatabase ∗pDatabase = NULL);

(Contributors)

See also sections 1342, 1344, 1346, 1348, and 1350. This code is used in section 1338.

1341. ⟨ Define Contributors functions 1341 ⟩ ≡

(Contributors, CRecordset) Contributors ::Contributors(CDatabase ∗pdb) : CRecordset(pdb) {

m contributor id = 0;

m given name = ;

m surname = ;

m prefix = ;

m id number ppn = 0;

m nFields = 5;

m nDefaultType = dynaset ; }

See also sections 1343, 1345, 1347, 1349, and 1351. This code is used in section 1354.

1342. Get default connect. [LDF 2006.07.26.] ⟨ Declare Contributors functions 1340 ⟩ +≡

virtual CString GetDefaultConnect ( );

1343. ⟨ Define Contributors functions 1341 ⟩ +≡

CString Contributors ::GetDefaultConnect ( ) {

return ( ); }

1344. Standard-SQL for Recordset. [LDF 2006.07.26.] ⟨ Declare Contributors functions 1340 ⟩ +≡

virtual CString GetDefaultSQL( );

1345. ⟨ Define Contributors functions 1341 ⟩ +≡

CString Contributors ::GetDefaultSQL( ) {

return ( ); }

1346. Do Field Exchange. RFX-Unterstützung. [LDF 2006.07.26.] ⟨ Declare Contributors functions 1340 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1347. ⟨ Define Contributors functions 1341 ⟩ +≡

void Contributors ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m contributor id ); RFX Text (pFX , ( ), m given name); RFX Text (pFX , ( ), m surname); RFX Text (pFX , ( ), m prefix ); RFX BigInt (pFX , ( ), m id number ppn);

}

1348. Assert Valid. [LDF 2006.07.26.] ⟨ Declare Contributors functions 1340 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1349. ⟨ Define Contributors functions 1341 ⟩ +≡ #ifdef

void Contributors ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1350. Dump. [LDF 2006.07.26.] ⟨ Declare Contributors functions 1340 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1351. ⟨ Define Contributors functions 1341 ⟩ +≡ #ifdef

void Contributors ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1352. Putting Contributors together.

1353. This is what gets written to cntrbtrs.h.

⟨ 1353 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Contributors 1338 ⟩

376  PUTTING CONTRIBUTORS TOGETHER  IWF Metadata Harvester II §1354

1354. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ cntrbtrs.web 1334 ⟩

⟨ Define Contributors functions 1341 ⟩

1355. Records Contributors (rccntrbt.web).

Log

[LDF 2006.09.26.] Created this file. It contains code formerly in Records Contributors.h and Records Contributors.cpp.

⟨ rccntrbt.web 1355 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1375.

1356. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1357. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1358. Include files. ⟨ Include files 13 ⟩ +≡ #include

1359. Records Contributors class declaration.

Log

[LDF 2006.07.26.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Contributors 1359 ⟩ ≡ class Records Contributors : public CRecordset { public: long m record id ;

long m contributor id ;

⟨ Declare Records Contributors functions 1361 ⟩ };

This code is used in section 1374.

1360. Functions.

1361. Constructor. ⟨ Declare Records Contributors functions 1361 ⟩ ≡

Records Contributors(CDatabase ∗pDatabase = NULL);

(Records Contributors)

See also sections 1363, 1365, 1367, 1369, and 1371. This code is used in section 1359.

1362. ⟨ Define Records Contributors functions 1362 ⟩ ≡

(Records Contributors, CRecordset) Records Contributors ::Records Contributors(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m contributor id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1364, 1366, 1368, 1370, and 1372. This code is used in section 1375.

1363. Get default connect. [LDF 2006.07.26.] ⟨ Declare Records Contributors functions 1361 ⟩ +≡

virtual CString GetDefaultConnect ( );

1364. ⟨ Define Records Contributors functions 1362 ⟩ +≡

CString Records Contributors ::GetDefaultConnect ( ) {

return ( ); }

1365. Standard-SQL for Recordset. [LDF 2006.07.26.] ⟨ Declare Records Contributors functions 1361 ⟩ +≡

virtual CString GetDefaultSQL( );

1366. ⟨ Define Records Contributors functions 1362 ⟩ +≡

CString Records Contributors ::GetDefaultSQL( ) {

return ( ); }

1367. Do Field Exchange. RFX-Unterstützung. [LDF 2006.07.26.] ⟨ Declare Records Contributors functions 1361 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1368. ⟨ Define Records Contributors functions 1362 ⟩ +≡

void Records Contributors ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m contributor id );

}

1369. Assert Valid. [LDF 2006.07.26.] ⟨ Declare Records Contributors functions 1361 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1370. ⟨ Define Records Contributors functions 1362 ⟩ +≡ #ifdef

void Records Contributors ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1371. Dump. [LDF 2006.07.26.] ⟨ Declare Records Contributors functions 1361 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1372. ⟨ Define Records Contributors functions 1362 ⟩ +≡ #ifdef

void Records Contributors ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1373. Putting Records Contributors together.

1374. This is what gets written to rccntrbt.h.

⟨ 1374 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Contributors 1359 ⟩

§1375  IWF Metadata Harvester II  PUTTING RECORDS CONTRIBUTORS TOGETHER 379

1375. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rccntrbt.web 1355 ⟩

⟨ Define Records Contributors functions 1362 ⟩

1376. Main Titles (mnttls.web).

Log

[LDF 2006.09.26.] Created this file. It contains code formerly in mnttls.h and mnttls.cpp.

⟨ mnttls.web 1376 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1396.

1377. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1378. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1379. Include files. ⟨ Include files 13 ⟩ +≡ #include

1380. Main Titles class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

[LDF 2006.09.04.] Added the data member long m continuation.

[LDF 2006.09.05.] Changed long m continuation to m continuation main canonical title. Added long m continuation additions main.

⟨ Declare class Main Titles 1380 ⟩ ≡ class Main Titles : public CRecordset { public: ⟨ Declare Main Titles functions 1382 ⟩

long m main title id ;

CStringA m standard text ;

CStringA m main canonical title;

long m continuation main canonical title; CStringA m additions main; long m continuation additions main; CStringA m additional creator main; CStringA m parallel canonical title; CStringA m additions parallel ; CStringA m additional creator parallel ;

380 MAIN TITLES CLASS DECLARATION IWF Metadata Harvester II §1380

CStringA m authorship; };

This code is used in section 1395.

1381. Functions.

1382. Constructor.

Log

[LDF 2006.09.04.] Added the initialization of long m continuation.

[LDF 2006.09.05.] Changed long m continuation to m continuation main canonical title. Added long m continuation additions main.

⟨ Declare Main Titles functions 1382 ⟩ ≡ Main Titles(CDatabase ∗pDatabase = NULL); (Main Titles)

See also sections 1384, 1386, 1388, 1390, and 1392. This code is used in section 1380.

1383. ⟨ Define Main Titles functions 1383 ⟩ ≡

(Main Titles, CRecordset) Main Titles ::Main Titles(CDatabase ∗pdb) : CRecordset(pdb) {

m main title id = 0; m standard text = ; m main canonical title = ; m continuation main canonical title = 0; m additions main = ; m continuation additions main = 0; m additional creator main = ; m parallel canonical title = ; m additions parallel = ; m additional creator parallel = ; m authorship = ; m nFields = 11; m nDefaultType = dynaset ;

}

See also sections 1385, 1387, 1389, 1391, and 1393. This code is used in section 1396.

1384. Get default connect. [LDF 2006.08.24.] ⟨ Declare Main Titles functions 1382 ⟩ +≡

virtual CString GetDefaultConnect ( );

§1385  IWF Metadata Harvester II  GET DEFAULT CONNECT 381

1385. ⟨ Define Main Titles functions 1383 ⟩ +≡

CString Main Titles ::GetDefaultConnect ( )

{

return ( ); }

1386. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Main Titles functions 1382 ⟩ +≡

virtual CString GetDefaultSQL( );

1387. ⟨ Define Main Titles functions 1383 ⟩ +≡

CString Main Titles ::GetDefaultSQL( )

{

return ( ); }

1388. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Main Titles functions 1382 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX );

1389. ⟨ Define Main Titles functions 1383 ⟩ +≡

void Main Titles ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m main title id ); RFX Text (pFX , ( ), m standard text , 512); RFX Text (pFX , ( ), m main canonical title, 512); RFX Long (pFX , ( ),

m continuation main canonical title); RFX Text (pFX , ( ), m additions main, 512); RFX Long (pFX , ( ), m continuation additions main); RFX Text (pFX , ( ), m additional creator main, 512); RFX Text (pFX , ( ), m parallel canonical title, 512); RFX Text (pFX , ( ), m additions parallel , 512); RFX Text (pFX , ( ), m additional creator parallel , 512); RFX Text (pFX , ( ), m authorship, 512);

}

1390. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Main Titles functions 1382 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif 1391. ⟨ Define Main Titles functions 1383 ⟩ +≡ #ifdef

void Main Titles ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1392. Dump. [LDF 2006.08.24.] ⟨ Declare Main Titles functions 1382 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1393. ⟨ Define Main Titles functions 1383 ⟩ +≡ #ifdef

void Main Titles ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1394. Putting Main Titles together.

1395. This is what gets written to mnttls.h.

⟨ 1395 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Main Titles 1380 ⟩

§1396  IWF Metadata Harvester II  PUTTING MAIN TITLES TOGETHER 383

1396. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ mnttls.web 1376 ⟩

⟨ Define Main Titles functions 1383 ⟩

1397. Records Main Titles (rcmnttls.web).

Log

[LDF 2006.09.26.] Created this file. It contains code formerly in Records Main Titles.h and Records Main Titles.cpp.

⟨ rcmnttls.web 1397 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1417.

1398. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1399. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1400. Include files. ⟨ Include files 13 ⟩ +≡ #include

1401. Records Main Titles class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Main Titles 1401 ⟩ ≡ class Records Main Titles : public CRecordset { public: long m record id ;

long m main title id ;

⟨ Declare Records Main Titles functions 1403 ⟩ };

This code is used in section 1416.

1402. Functions.

1403. Constructor. ⟨ Declare Records Main Titles functions 1403 ⟩ ≡

Records Main Titles(CDatabase ∗pDatabase = NULL);

(Records Main Titles)

See also sections 1405, 1407, 1409, 1411, and 1413. This code is used in section 1401.

1404. ⟨ Define Records Main Titles functions 1404 ⟩ ≡

(Records Main Titles, CRecordset) Records Main Titles ::Records Main Titles(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m main title id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1406, 1408, 1410, 1412, and 1414. This code is used in section 1417.

1405. Get default connect. [LDF 2006.08.24.] ⟨ Declare Records Main Titles functions 1403 ⟩ +≡

virtual CString GetDefaultConnect ( );

1406. ⟨ Define Records Main Titles functions 1404 ⟩ +≡

CString Records Main Titles ::GetDefaultConnect ( ) {

return ( ); }

1407. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Records Main Titles functions 1403 ⟩ +≡

virtual CString GetDefaultSQL( );

1408. ⟨ Define Records Main Titles functions 1404 ⟩ +≡

CString Records Main Titles ::GetDefaultSQL( ) {

return ( ); }

1409. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Records Main Titles functions 1403 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1410. ⟨ Define Records Main Titles functions 1404 ⟩ +≡

void Records Main Titles ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m main title id );

}

1411. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Records Main Titles functions 1403 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1412. ⟨ Define Records Main Titles functions 1404 ⟩ +≡ #ifdef

void Records Main Titles ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1413. Dump. [LDF 2006.08.24.] ⟨ Declare Records Main Titles functions 1403 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1414. ⟨ Define Records Main Titles functions 1404 ⟩ +≡ #ifdef

void Records Main Titles ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1415. Putting Records Main Titles together.

1416. This is what gets written to rcmnttls.h.

⟨ 1416 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Main Titles 1401 ⟩

386  PUTTING RECORDS MAIN TITLES TOGETHER  IWF Metadata Harvester II §1417

1417. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rcmnttls.web 1397 ⟩

⟨ Define Records Main Titles functions 1404 ⟩

1418. Content Summaries (contsums.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in contsums.h and contsums.cpp.

⟨ contsums.web 1418 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1438.

1419. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1420. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1421. Include files. ⟨ Include files 13 ⟩ +≡ #include

1422. Content Summaries class declaration.

Log

[LDF 2006.09.07.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Content Summaries 1422 ⟩ ≡ class Content Summaries : public CRecordset { public: long m content summary id ;

long m record id ; long m continuation; CStringA m content summary ; ⟨ Declare Content Summaries functions 1424 ⟩

};

This code is used in section 1437.

1423. Functions.

1424. Constructor. ⟨ Declare Content Summaries functions 1424 ⟩ ≡

Content Summaries(CDatabase ∗pDatabase = NULL);

(Content Summaries)

See also sections 1426, 1428, 1430, 1432, and 1434. This code is used in section 1422.

1425. ⟨ Define Content Summaries functions 1425 ⟩ ≡

(Content Summaries, CRecordset) Content Summaries ::Content Summaries(CDatabase ∗pdb) : CRecordset(pdb) {

m content summary id = 0;

m record id = 0;

m continuation = 0;

m content summary = ;

m nFields = 4;

m nDefaultType = dynaset ; }

See also sections 1427, 1429, 1431, 1433, and 1435. This code is used in section 1438.

1426. Get default connect. [LDF 2006.09.07.] ⟨ Declare Content Summaries functions 1424 ⟩ +≡

virtual CString GetDefaultConnect ( );

1427. ⟨ Define Content Summaries functions 1425 ⟩ +≡

CString Content Summaries ::GetDefaultConnect ( ) {

return ( ); }

1428. Standard-SQL for Recordset. [LDF 2006.09.07.] ⟨ Declare Content Summaries functions 1424 ⟩ +≡

virtual CString GetDefaultSQL( );

1429. ⟨ Define Content Summaries functions 1425 ⟩ +≡

CString Content Summaries ::GetDefaultSQL( ) {

return ( ); }

1430. Do Field Exchange. RFX-Unterstützung. [LDF 2006.09.07.] ⟨ Declare Content Summaries functions 1424 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1431. ⟨ Define Content Summaries functions 1425 ⟩ +≡

void Content Summaries ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m content summary id ); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m continuation); RFX Text (pFX , ( ), m content summary , 1024);

}

1432. Assert Valid. [LDF 2006.09.07.] ⟨ Declare Content Summaries functions 1424 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1433. ⟨ Define Content Summaries functions 1425 ⟩ +≡ #ifdef

void Content Summaries ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1434. Dump. [LDF 2006.09.07.] ⟨ Declare Content Summaries functions 1424 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1435. ⟨ Define Content Summaries functions 1425 ⟩ +≡ #ifdef

void Content Summaries ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1436. Putting Content Summaries together.

1437. This is what gets written to contsums.h.

⟨ 1437 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Content Summaries 1422 ⟩

§1438  IWF Metadata Harvester II  PUTTING CONTENT SUMMARIES TOGETHER 389

1438. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ contsums.web 1418 ⟩

⟨ Define Content Summaries functions 1425 ⟩

1439. Languages (language.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in language.h and language.cpp.

⟨ language.web 1439 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1459.

1440. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1441. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1442. Include files. ⟨ Include files 13 ⟩ +≡ #include

1443. Languages class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Languages 1443 ⟩ ≡ class Languages : public CRecordset { public: long m language id ;

CStringA m language name english; CStringA m language name german; CStringA m language abbrev ; ⟨ Declare Languages functions 1445 ⟩

};

This code is used in section 1458.

1444. Functions.

1445. Constructor. ⟨ Declare Languages functions 1445 ⟩ ≡

Languages(CDatabase ∗pDatabase = NULL);

(Languages)

See also sections 1447, 1449, 1451, 1453, and 1455. This code is used in section 1443.

1446. ⟨ Define Languages functions 1446 ⟩ ≡

(Languages, CRecordset) Languages ::Languages(CDatabase ∗pdb) : CRecordset(pdb) {

m language id = 0;

m language name english = ;

m language name german = ;

m language abbrev = ;

m nFields = 4;

m nDefaultType = dynaset ; }

See also sections 1448, 1450, 1452, 1454, and 1456. This code is used in section 1459.

1447. Get default connect. [LDF 2006.08.25.] ⟨ Declare Languages functions 1445 ⟩ +≡

virtual CString GetDefaultConnect ( );

1448. ⟨ Define Languages functions 1446 ⟩ +≡

CString Languages ::GetDefaultConnect ( ) {

return ( ); }

1449. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare Languages functions 1445 ⟩ +≡

virtual CString GetDefaultSQL( );

1450. ⟨ Define Languages functions 1446 ⟩ +≡

CString Languages ::GetDefaultSQL( ) {

return ( ); }

1451. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare Languages functions 1445 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1452. ⟨ Define Languages functions 1446 ⟩ +≡

void Languages ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m language id ); RFX Text (pFX , ( ), m language name english); RFX Text (pFX , ( ), m language name german); RFX Text (pFX , ( ), m language abbrev );

}

1453. Assert Valid. [LDF 2006.08.25.] ⟨ Declare Languages functions 1445 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1454. ⟨ Define Languages functions 1446 ⟩ +≡ #ifdef

void Languages ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1455. Dump. [LDF 2006.08.25.] ⟨ Declare Languages functions 1445 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1456. ⟨ Define Languages functions 1446 ⟩ +≡ #ifdef

void Languages ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1457. Putting Languages together.

1458. This is what gets written to language.h.

⟨ 1458 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Languages 1443 ⟩

392  PUTTING LANGUAGES TOGETHER  IWF Metadata Harvester II §1459

1459. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ language.web 1439 ⟩

⟨ Define Languages functions 1446 ⟩

1460. Records Languages (reclang.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in reclang.h and reclang.cpp.

[LDF 2006.10.10.] !! BUG FIX: Replaced the code for the data members. I’d forgotten that Records Languages has more of them than the normal association table.

⟨ reclang.web 1460 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1480.

1461. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1462. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1463. Include files. ⟨ Include files 13 ⟩ +≡ #include

1464. Records Languages class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Languages 1464 ⟩ ≡ class Records Languages : public CRecordset { public: long m record id ;

long m language id ;

CStringA m association type;

CStringA m association type name;

⟨ Declare Records Languages functions 1466 ⟩ };

This code is used in section 1479.

1465. Functions.

1466. Constructor. ⟨ Declare Records Languages functions 1466 ⟩ ≡ Records Languages(CDatabase ∗pDatabase = NULL); (Records Languages)

See also sections 1468, 1470, 1472, 1474, and 1476. This code is used in section 1464.

1467. ⟨ Define Records Languages functions 1467 ⟩ ≡

(Records Languages, CRecordset) Records Languages ::Records Languages(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m language id = 0;

m association type = ;

m association type name = ;

m nFields = 4;

m nDefaultType = dynaset ; }

See also sections 1469, 1471, 1473, 1475, and 1477. This code is used in section 1480.

1468. Get default connect. [LDF 2006.08.25.] ⟨ Declare Records Languages functions 1466 ⟩ +≡

virtual CString GetDefaultConnect ( );

1469. ⟨ Define Records Languages functions 1467 ⟩ +≡

CString Records Languages ::GetDefaultConnect ( ) {

return ( ); }

1470. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare Records Languages functions 1466 ⟩ +≡

virtual CString GetDefaultSQL( );

1471. ⟨ Define Records Languages functions 1467 ⟩ +≡

CString Records Languages ::GetDefaultSQL( ) {

return ( ); }

1472. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare Records Languages functions 1466 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1473. ⟨ Define Records Languages functions 1467 ⟩ +≡

void Records Languages ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m language id ); RFX Text (pFX , ( ), m association type); RFX Text (pFX , ( ), m association type name);

}

1474. Assert Valid. [LDF 2006.08.25.] ⟨ Declare Records Languages functions 1466 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1475. ⟨ Define Records Languages functions 1467 ⟩ +≡ #ifdef

void Records Languages ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1476. Dump. [LDF 2006.08.25.] ⟨ Declare Records Languages functions 1466 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1477. ⟨ Define Records Languages functions 1467 ⟩ +≡ #ifdef

void Records Languages ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1478. Putting Records Languages together.

1479. This is what gets written to reclang.h.

⟨ 1479 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Languages 1464 ⟩

§1480  IWF Metadata Harvester II  PUTTING RECORDS LANGUAGES TOGETHER 395

1480. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ reclang.web 1460 ⟩

⟨ Define Records Languages functions 1467 ⟩

1481. Subject Types (subjtyps.web).

Log

[LDF 2006.10.05.] Created this file. It contains code formerly in subjtyps.h and subjtyps.cpp.

⟨ subjtyps.web 1481 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1501.

1482. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1483. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1484. Include files. ⟨ Include files 13 ⟩ +≡ #include

1485. Subject Types class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Subject Types 1485 ⟩ ≡ class Subject Types : public CRecordset { public: long m subject type id ;

CStringA m indicator ;

CStringA m description german; CStringA m description english; BOOL m pica3 800 ; BOOL m pica3 51xx ; ⟨ Declare Subject Types functions 1487 ⟩

};

This code is used in section 1500.

1486. Functions.

1487. Constructor. ⟨ Declare Subject Types functions 1487 ⟩ ≡

Subject Types(CDatabase ∗pDatabase = NULL);

(Subject Types)

See also sections 1489, 1491, 1493, 1495, and 1497. This code is used in section 1485.

1488. ⟨ Define Subject Types functions 1488 ⟩ ≡

(Subject Types, CRecordset) Subject Types ::Subject Types(CDatabase ∗pdb) : CRecordset(pdb) {

m subject type id = 0;

m indicator = ;

m description german = ;

m description english = ;

m pica3 800 = ;

m pica3 51xx = ;

m nFields = 6;

m nDefaultType = dynaset ; }

See also sections 1490, 1492, 1494, 1496, and 1498. This code is used in section 1501.

1489. Get default connect. [LDF 2006.08.24.] ⟨ Declare Subject Types functions 1487 ⟩ +≡

virtual CString GetDefaultConnect ( );

1490. ⟨ Define Subject Types functions 1488 ⟩ +≡

CString Subject Types ::GetDefaultConnect ( ) {

return ( ); }

1491. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Subject Types functions 1487 ⟩ +≡

virtual CString GetDefaultSQL( );

1492. ⟨ Define Subject Types functions 1488 ⟩ +≡

CString Subject Types ::GetDefaultSQL( ) {

return ( ); }

1493. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Subject Types functions 1487 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1494. ⟨ Define Subject Types functions 1488 ⟩ +≡

void Subject Types ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m subject type id ); RFX Text (pFX , ( ), m indicator ); RFX Text (pFX , ( ), m description german); RFX Text (pFX , ( ), m description english); RFX Bool (pFX , ( ), m pica3 800 ); RFX Bool (pFX , ( ), m pica3 51xx );

}

1495. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Subject Types functions 1487 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1496. ⟨ Define Subject Types functions 1488 ⟩ +≡ #ifdef

void Subject Types ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1497. Dump. [LDF 2006.08.24.] ⟨ Declare Subject Types functions 1487 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1498. ⟨ Define Subject Types functions 1488 ⟩ +≡ #ifdef

void Subject Types ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1499. Putting Subject Types together.

1500. This is what gets written to subjtyps.h.

⟨ 1500 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Subject Types 1485 ⟩

398  PUTTING SUBJECT TYPES TOGETHER  IWF Metadata Harvester II §1501

1501. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ subjtyps.web 1481 ⟩

⟨ Define Subject Types functions 1488 ⟩

1502. Subjects (subjects.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in subjects.h and subjects.cpp.

⟨ subjects.web 1502 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1522.

1503. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1504. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1505. Include files. ⟨ Include files 13 ⟩ +≡ #include

1506. Subjects class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Subjects 1506 ⟩ ≡ class Subjects : public CRecordset { public: long m subject id ;

long m subject type id ; CStringA m subject ; m id number ppn; int m chain number ; int m chain link number ; CStringA m chain info; ⟨ Declare Subjects functions 1508 ⟩

};

This code is used in section 1521.

1507. Functions.

1508. Constructor.

⟨ Declare Subjects functions 1508 ⟩ ≡ Subjects(CDatabase ∗pDatabase = NULL); (Subjects)

See also sections 1510, 1512, 1514, 1516, and 1518. This code is used in section 1506.

1509. ⟨ Define Subjects functions 1509 ⟩ ≡

(Subjects, CRecordset) Subjects ::Subjects(CDatabase ∗pdb) : CRecordset(pdb) {

m subject id = 0;

m subject type id = 0;

m subject = ;

m id number ppn = 0;

m chain number = 0;

m chain link number = 0;

m chain info = ;

m nFields = 7;

m nDefaultType = dynaset ; }

See also sections 1511, 1513, 1515, 1517, and 1519. This code is used in section 1522.

1510. Get default connect. [LDF 2006.08.24.] ⟨ Declare Subjects functions 1508 ⟩ +≡

virtual CString GetDefaultConnect ( );

1511. ⟨ Define Subjects functions 1509 ⟩ +≡

CString Subjects ::GetDefaultConnect ( ) {

return ( ); }

1512. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Subjects functions 1508 ⟩ +≡

virtual CString GetDefaultSQL( );

1513. ⟨ Define Subjects functions 1509 ⟩ +≡

CString Subjects ::GetDefaultSQL( ) {

return ( ); }

1514. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Subjects functions 1508 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1515. ⟨ Define Subjects functions 1509 ⟩ +≡

void Subjects ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m subject id ); RFX Long (pFX , ( ), m subject type id ); RFX Text (pFX , ( ), m subject ); RFX BigInt (pFX , ( ), m id number ppn); RFX Int (pFX , ( ), m chain number ); RFX Int (pFX , ( ), m chain link number ); RFX Text (pFX , ( ), m chain info, 256);

}

1516. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Subjects functions 1508 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1517. ⟨ Define Subjects functions 1509 ⟩ +≡ #ifdef

void Subjects ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1518. Dump. [LDF 2006.08.24.] ⟨ Declare Subjects functions 1508 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1519. ⟨ Define Subjects functions 1509 ⟩ +≡ #ifdef

void Subjects ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1520. Putting Subjects together.

1521. This is what gets written to subjects.h.

⟨ 1521 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Subjects 1506 ⟩

§1522  IWF Metadata Harvester II  PUTTING SUBJECTS TOGETHER 401

1522. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ subjects.web 1502 ⟩

⟨ Define Subjects functions 1509 ⟩

1523. Records Subjects (recsubjs.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in recsubjs.h and recsubjs.cpp.

⟨ recsubjs.web 1523 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1543.

1524. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1525. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1526. Include files. ⟨ Include files 13 ⟩ +≡ #include

1527. Records Subjects class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Subjects 1527 ⟩ ≡ class Records Subjects : public CRecordset { public: long m record id ;

long m subject id ;

⟨ Declare Records Subjects functions 1529 ⟩ };

This code is used in section 1542.

1528. Functions.

1529. Constructor. ⟨ Declare Records Subjects functions 1529 ⟩ ≡

Records Subjects(CDatabase ∗pDatabase = NULL);

(Records Subjects)

See also sections 1531, 1533, 1535, 1537, and 1539. This code is used in section 1527.

1530. ⟨ Define Records Subjects functions 1530 ⟩ ≡

(Records Subjects, CRecordset) Records Subjects ::Records Subjects(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m subject id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1532, 1534, 1536, 1538, and 1540. This code is used in section 1543.

1531. Get default connect. [LDF 2006.08.24.] ⟨ Declare Records Subjects functions 1529 ⟩ +≡

virtual CString GetDefaultConnect ( );

1532. ⟨ Define Records Subjects functions 1530 ⟩ +≡

CString Records Subjects ::GetDefaultConnect ( ) {

return ( ); }

1533. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Records Subjects functions 1529 ⟩ +≡

virtual CString GetDefaultSQL( );

1534. ⟨ Define Records Subjects functions 1530 ⟩ +≡

CString Records Subjects ::GetDefaultSQL( ) {

return ( ); }

1535. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Records Subjects functions 1529 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1536. ⟨ Define Records Subjects functions 1530 ⟩ +≡

void Records Subjects ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m subject id );

}

1537. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Records Subjects functions 1529 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1538. ⟨ Define Records Subjects functions 1530 ⟩ +≡ #ifdef

void Records Subjects ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1539. Dump. [LDF 2006.08.24.] ⟨ Declare Records Subjects functions 1529 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1540. ⟨ Define Records Subjects functions 1530 ⟩ +≡ #ifdef

void Records Subjects ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1541. Putting Records Subjects together.

1542. This is what gets written to recsubjs.h.

⟨ 1542 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Subjects 1527 ⟩

404  PUTTING RECORDS SUBJECTS TOGETHER  IWF Metadata Harvester II §1543

1543. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ recsubjs.web 1523 ⟩

⟨ Define Records Subjects functions 1530 ⟩

1544. Permutation Patterns (prmpttrn.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in prmpttrn.h and prmpttrn.cpp.

⟨ prmpttrn.web 1544 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1564.

1545. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1546. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1547. Include files. ⟨ Include files 13 ⟩ +≡ #include

1548. Permutation Patterns class declaration.

Log

[LDF 2006.08.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Permutation Patterns 1548 ⟩ ≡ class Permutation Patterns : public CRecordset { public: long m permutation pattern id ;

long m record id ;

long m subject id start ; long m subject id end ; long m chain number ; CStringA m permutation pattern; ⟨ Declare Permutation Patterns functions 1550 ⟩

};

This code is used in section 1563.

1549. Functions.

1550. Constructor. ⟨ Declare Permutation Patterns functions 1550 ⟩ ≡

Permutation Patterns(CDatabase ∗pDatabase = NULL);

(Permutation Patterns)

See also sections 1552, 1554, 1556, 1558, and 1560. This code is used in section 1548.

1551. ⟨ Define Permutation Patterns functions 1551 ⟩ ≡

(Permutation Patterns, CRecordset) Permutation Patterns ::Permutation Patterns(CDatabase ∗pdb) : CRecordset(pdb) {

m permutation pattern id = 0;

m record id = 0;

m subject id start = 0;

m subject id end = 0;

m chain number = 0;

m permutation pattern = ;

m nFields = 6;

m nDefaultType = dynaset ; }

See also sections 1553, 1555, 1557, 1559, and 1561. This code is used in section 1564.

1552. Get default connect. [LDF 2006.08.24.] ⟨ Declare Permutation Patterns functions 1550 ⟩ +≡

virtual CString GetDefaultConnect ( );

1553. ⟨ Define Permutation Patterns functions 1551 ⟩ +≡

CString Permutation Patterns ::GetDefaultConnect ( ) {

return ( ); }

1554. Standard-SQL for Recordset. [LDF 2006.08.24.] ⟨ Declare Permutation Patterns functions 1550 ⟩ +≡

virtual CString GetDefaultSQL( );

1555. ⟨ Define Permutation Patterns functions 1551 ⟩ +≡

CString Permutation Patterns ::GetDefaultSQL( ) {

return ( ); }

1556. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.24.] ⟨ Declare Permutation Patterns functions 1550 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1557. ⟨ Define Permutation Patterns functions 1551 ⟩ +≡

void Permutation Patterns ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m permutation pattern id ); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m subject id start ); RFX Long (pFX , ( ), m subject id end ); RFX Long (pFX , ( ), m chain number ); RFX Text (pFX , ( ), m permutation pattern);

}

1558. Assert Valid. [LDF 2006.08.24.] ⟨ Declare Permutation Patterns functions 1550 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1559. ⟨ Define Permutation Patterns functions 1551 ⟩ +≡ #ifdef

void Permutation Patterns ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1560. Dump. [LDF 2006.08.24.] ⟨ Declare Permutation Patterns functions 1550 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1561. ⟨ Define Permutation Patterns functions 1551 ⟩ +≡ #ifdef

void Permutation Patterns ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1562. Putting Permutation Patterns together.

1563. This is what gets written to prmpttrn.h.

⟨ 1563 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Permutation Patterns 1548 ⟩

§1564  IWF Metadata Harvester II  PUTTING PERMUTATION PATTERNS TOGETHER 407

1564. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ prmpttrn.web 1544 ⟩

⟨ Define Permutation Patterns functions 1551 ⟩

1565. Remote Access (rmaccess.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in rmaccess.h and rmaccess.cpp.

⟨ rmaccess.web 1565 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1585.

1566. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1567. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1568. Include files. ⟨ Include files 13 ⟩ +≡ #include

1569. Remote Access class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Remote Access 1569 ⟩ ≡ class Remote Access : public CRecordset { public: long m remote access id ;

BOOL m license indicator ; CStringA m format type; CStringA m web display text ; CStringA m URL; CStringA m URN ; CStringA m internal remarks ; ⟨ Declare Remote Access functions 1571 ⟩

};

This code is used in section 1584.

1570. Functions.

1571. Constructor. ⟨ Declare Remote Access functions 1571 ⟩ ≡ Remote Access(CDatabase ∗pDatabase = NULL); (Remote Access)

See also sections 1573, 1575, 1577, 1579, and 1581. This code is used in section 1569.

1572. ⟨ Define Remote Access functions 1572 ⟩ ≡

(Remote Access, CRecordset) Remote Access ::Remote Access(CDatabase ∗pdb) : CRecordset(pdb) {

m remote access id = 0;

m license indicator = ;

m format type = ;

m web display text = ;

m URL = ;

m URN = ;

m internal remarks = ;

m nFields = 7;

m nDefaultType = dynaset ; }

See also sections 1574, 1576, 1578, 1580, and 1582. This code is used in section 1585.

1573. Get default connect. [LDF 2006.08.25.] ⟨ Declare Remote Access functions 1571 ⟩ +≡

virtual CString GetDefaultConnect ( );

1574. ⟨ Define Remote Access functions 1572 ⟩ +≡

CString Remote Access ::GetDefaultConnect ( ) {

return ( ); }

1575. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare Remote Access functions 1571 ⟩ +≡

virtual CString GetDefaultSQL( );

1576. ⟨ Define Remote Access functions 1572 ⟩ +≡

CString Remote Access ::GetDefaultSQL( ) {

return ( ); }

1577. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare Remote Access functions 1571 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1578. ⟨ Define Remote Access functions 1572 ⟩ +≡

void Remote Access ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m remote access id ); RFX Bool (pFX , ( ), m license indicator ); RFX Text (pFX , ( ), m format type); RFX Text (pFX , ( ), m web display text , 512); RFX Text (pFX , ( ), m URL, 512); RFX Text (pFX , ( ), m URN , 512); RFX Text (pFX , ( ), m internal remarks , 512);

}

1579. Assert Valid. [LDF 2006.08.25.] ⟨ Declare Remote Access functions 1571 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1580. ⟨ Define Remote Access functions 1572 ⟩ +≡ #ifdef

void Remote Access ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1581. Dump. [LDF 2006.08.25.] ⟨ Declare Remote Access functions 1571 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1582. ⟨ Define Remote Access functions 1572 ⟩ +≡ #ifdef

void Remote Access ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1583. Putting Remote Access together.

1584. This is what gets written to rmaccess.h.

⟨ 1584 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Remote Access 1569 ⟩

410  PUTTING REMOTE ACCESS TOGETHER  IWF Metadata Harvester II §1585

1585. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rmaccess.web 1565 ⟩

⟨ Define Remote Access functions 1572 ⟩

1586. Records Remote Access (rcrmaccs.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in rcrmaccs.h and rcrmaccs.cpp.

⟨ rcrmaccs.web 1586 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1606.

1587. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1588. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1589. Include files. ⟨ Include files 13 ⟩ +≡ #include

1590. Records Remote Access class declaration.

Log

[LDF 2006.08.25.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Remote Access 1590 ⟩ ≡ class Records Remote Access : public CRecordset { public: long m record id ;

long m remote access id ;

⟨ Declare Records Remote Access functions 1592 ⟩ };

This code is used in section 1605.

1591. Functions.

1592. Constructor. ⟨ Declare Records Remote Access functions 1592 ⟩ ≡

Records Remote Access(CDatabase ∗pDatabase = NULL);

(Records Remote Access)

See also sections 1594, 1596, 1598, 1600, and 1602. This code is used in section 1590.

1593. ⟨ Define Records Remote Access functions 1593 ⟩ ≡

(Records Remote Access, CRecordset) Records Remote Access ::Records Remote Access(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m remote access id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1595, 1597, 1599, 1601, and 1603. This code is used in section 1606.

1594. Get default connect. [LDF 2006.08.25.] ⟨ Declare Records Remote Access functions 1592 ⟩ +≡

virtual CString GetDefaultConnect ( );

1595. ⟨ Define Records Remote Access functions 1593 ⟩ +≡

CString Records Remote Access ::GetDefaultConnect ( ) {

return ( ); }

1596. Standard-SQL for Recordset. [LDF 2006.08.25.] ⟨ Declare Records Remote Access functions 1592 ⟩ +≡

virtual CString GetDefaultSQL( );

1597. ⟨ Define Records Remote Access functions 1593 ⟩ +≡

CString Records Remote Access ::GetDefaultSQL( ) {

return ( ); }

1598. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.25.] ⟨ Declare Records Remote Access functions 1592 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1599. ⟨ Define Records Remote Access functions 1593 ⟩ +≡

void Records Remote Access ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m remote access id );

}

1600. Assert Valid. [LDF 2006.08.25.] ⟨ Declare Records Remote Access functions 1592 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1601. ⟨ Define Records Remote Access functions 1593 ⟩ +≡ #ifdef

void Records Remote Access ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1602. Dump. [LDF 2006.08.25.] ⟨ Declare Records Remote Access functions 1592 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1603. ⟨ Define Records Remote Access functions 1593 ⟩ +≡ #ifdef

void Records Remote Access ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1604. Putting Records Remote Access together.

1605. This is what gets written to rcrmaccs.h.

⟨ 1605 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Remote Access 1590 ⟩

§1606  IWF Metadata Harvester II  PUTTING RECORDS REMOTE ACCESS TOGETHER 413

1606. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rcrmaccs.web 1586 ⟩

⟨ Define Records Remote Access functions 1593 ⟩

1607. Publishers (publshrs.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in publshrs.h and publshrs.cpp.

⟨ publshrs.web 1607 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1627.

1608. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1609. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1610. Include files. ⟨ Include files 13 ⟩ +≡ #include

1611. Publishers class declaration.

Log

[LDF 2006.08.28.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Publishers 1611 ⟩ ≡ class Publishers : public CRecordset { public: long m publisher id ;

CStringA m publisher name;

CStringA m place;

BOOL m primary info source;

⟨ Declare Publishers functions 1613 ⟩ };

This code is used in section 1626.

1612. Functions.

1613. Constructor. ⟨ Declare Publishers functions 1613 ⟩ ≡

Publishers(CDatabase ∗pDatabase = NULL);

(Publishers)

See also sections 1615, 1617, 1619, 1621, and 1623. This code is used in section 1611.

1614. ⟨ Define Publishers functions 1614 ⟩ ≡

(Publishers, CRecordset)

Publishers ::Publishers(CDatabase ∗pdb)

: CRecordset(pdb) { m publisher id = 0; m publisher name = ; m place = ; m primary info source = ; m nFields = 4; m nDefaultType = dynaset ;

}

See also sections 1616, 1618, 1620, 1622, and 1624. This code is used in section 1627.

1615. Get default connect. [LDF 2006.08.28.] ⟨ Declare Publishers functions 1613 ⟩ +≡

virtual CString GetDefaultConnect ( );

1616. ⟨ Define Publishers functions 1614 ⟩ +≡

CString Publishers ::GetDefaultConnect ( )

{

return ( ); }

1617. Standard-SQL for Recordset. [LDF 2006.08.28.] ⟨ Declare Publishers functions 1613 ⟩ +≡

virtual CString GetDefaultSQL( );

1618. ⟨ Define Publishers functions 1614 ⟩ +≡

CString Publishers ::GetDefaultSQL( )

{

return ( ); }

1619. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.28.]

Log

[LDF 2006.09.11.] In the calls to RFX Text for m publisher name and m publisher place: Added nMaxLength arguments with value 256.

⟨ Declare Publishers functions 1613 ⟩ +≡ virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1620. ⟨ Define Publishers functions 1614 ⟩ +≡

void Publishers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m publisher id ); RFX Text (pFX , ( ), m publisher name, 256); RFX Text (pFX , ( ), m place, 256); RFX Bool (pFX , ( ), m primary info source);

}

1621. Assert Valid. [LDF 2006.08.28.] ⟨ Declare Publishers functions 1613 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1622. ⟨ Define Publishers functions 1614 ⟩ +≡ #ifdef

void Publishers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1623. Dump. [LDF 2006.08.28.] ⟨ Declare Publishers functions 1613 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1624. ⟨ Define Publishers functions 1614 ⟩ +≡ #ifdef

void Publishers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1625. Putting Publishers together.

1626. This is what gets written to publshrs.h.

⟨ 1626 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Publishers 1611 ⟩

416  PUTTING PUBLISHERS TOGETHER  IWF Metadata Harvester II §1627

1627. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ publshrs.web 1607 ⟩

⟨ Define Publishers functions 1614 ⟩

1628. Records Publishers (recpubs.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in recpubs.h and recpubs.cpp.

⟨ recpubs.web 1628 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1648.

1629. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1630. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1631. Include files. ⟨ Include files 13 ⟩ +≡ #include

1632. Records Publishers class declaration.

Log

[LDF 2006.08.28.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Publishers 1632 ⟩ ≡ class Records Publishers : public CRecordset { public: long m record id ;

long m publisher id ;

⟨ Declare Records Publishers functions 1634 ⟩ };

This code is used in section 1647.

1633. Functions.

1634. Constructor. ⟨ Declare Records Publishers functions 1634 ⟩ ≡

Records Publishers(CDatabase ∗pDatabase = NULL);

(Records Publishers)

See also sections 1636, 1638, 1640, 1642, and 1644. This code is used in section 1632.

1635. ⟨ Define Records Publishers functions 1635 ⟩ ≡

(Records Publishers, CRecordset)

Records Publishers ::Records Publishers(CDatabase ∗pdb)

: CRecordset(pdb) { m record id = 0; m publisher id = 0; m nFields = 2; m nDefaultType = dynaset ;

}

See also sections 1637, 1639, 1641, 1643, and 1645. This code is used in section 1648.

1636. Get default connect. [LDF 2006.08.28.] ⟨ Declare Records Publishers functions 1634 ⟩ +≡

virtual CString GetDefaultConnect ( );

1637. ⟨ Define Records Publishers functions 1635 ⟩ +≡

CString Records Publishers ::GetDefaultConnect ( )

{ }

1638. Standard-SQL for Recordset. [LDF 2006.08.28.] ⟨ Declare Records Publishers functions 1634 ⟩ +≡

virtual CString GetDefaultSQL( );

1639. ⟨ Define Records Publishers functions 1635 ⟩ +≡

CString Records Publishers ::GetDefaultSQL( )

{

return ( ); }

1640. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.28.] ⟨ Declare Records Publishers functions 1634 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1641. ⟨ Define Records Publishers functions 1635 ⟩ +≡

void Records Publishers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m publisher id );

}

1642. Assert Valid. [LDF 2006.08.28.] ⟨ Declare Records Publishers functions 1634 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1643. ⟨ Define Records Publishers functions 1635 ⟩ +≡ #ifdef

void Records Publishers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1644. Dump. [LDF 2006.08.28.] ⟨ Declare Records Publishers functions 1634 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1645. ⟨ Define Records Publishers functions 1635 ⟩ +≡ #ifdef

void Records Publishers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1646. Putting Records Publishers together.

1647. This is what gets written to recpubs.h.

⟨ 1647 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Publishers 1632 ⟩

§1648  IWF Metadata Harvester II  PUTTING RECORDS PUBLISHERS TOGETHER 419

1648. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ recpubs.web 1628 ⟩

⟨ Define Records Publishers functions 1635 ⟩

1649. Database Providers (dbprovs.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in dbprovs.h and dbprovs.cpp.

⟨ dbprovs.web 1649 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1669.

1650. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1651. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1652. Include files. ⟨ Include files 13 ⟩ +≡ #include

1653. Database Providers class declaration.

Log

[LDF 2006.08.28.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Database Providers 1653 ⟩ ≡ class Database Providers : public CRecordset { public: long m database provider id ;

CStringA m database provider name;

CStringA m place;

⟨ Declare Database Providers functions 1655 ⟩ };

This code is used in section 1668.

1654. Functions.

1655. Constructor. ⟨ Declare Database Providers functions 1655 ⟩ ≡

Database Providers(CDatabase ∗pDatabase = NULL);

(Database Providers)

See also sections 1657, 1659, 1661, 1663, and 1665. This code is used in section 1653.

1656. ⟨ Define Database Providers functions 1656 ⟩ ≡

(Database Providers, CRecordset) Database Providers ::Database Providers(CDatabase ∗pdb) : CRecordset(pdb) {

m database provider id = 0;

m database provider name = ;

m place = ;

m nFields = 3;

m nDefaultType = dynaset ; }

See also sections 1658, 1660, 1662, 1664, and 1666. This code is used in section 1669.

1657. Get default connect. [LDF 2006.08.28.] ⟨ Declare Database Providers functions 1655 ⟩ +≡

virtual CString GetDefaultConnect ( );

1658. ⟨ Define Database Providers functions 1656 ⟩ +≡

CString Database Providers ::GetDefaultConnect ( ) {

return ( ); }

1659. Standard-SQL for Recordset. [LDF 2006.08.28.] ⟨ Declare Database Providers functions 1655 ⟩ +≡

virtual CString GetDefaultSQL( );

1660. ⟨ Define Database Providers functions 1656 ⟩ +≡

CString Database Providers ::GetDefaultSQL( ) {

return ( ); }

1661. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.28.] ⟨ Declare Database Providers functions 1655 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1662. ⟨ Define Database Providers functions 1656 ⟩ +≡

void Database Providers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m database provider id ); RFX Text (pFX , ( ), m database provider name, 256); RFX Text (pFX , ( ), m place, 256);

}

1663. Assert Valid. [LDF 2006.08.28.] ⟨ Declare Database Providers functions 1655 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1664. ⟨ Define Database Providers functions 1656 ⟩ +≡ #ifdef

void Database Providers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1665. Dump. [LDF 2006.08.28.] ⟨ Declare Database Providers functions 1655 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1666. ⟨ Define Database Providers functions 1656 ⟩ +≡ #ifdef

void Database Providers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1667. Putting Database Providers together.

1668. This is what gets written to dbprovs.h.

⟨ 1668 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Database Providers 1653 ⟩

422  PUTTING DATABASE PROVIDERS TOGETHER  IWF Metadata Harvester II §1669

1669. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ dbprovs.web 1649 ⟩

⟨ Define Database Providers functions 1656 ⟩

1670. Records Database Providers (rcdbprov.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in rcdbprov.h and rcdbprov.cpp.

⟨ rcdbprov.web 1670 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1690.

1671. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1672. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1673. Include files. ⟨ Include files 13 ⟩ +≡ #include

1674. Records Database Providers class declaration.

Log

[LDF 2006.08.28.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Records Database Providers 1674 ⟩ ≡ class Records Database Providers : public CRecordset { public: long m record id ;

long m database provider id ;

⟨ Declare Records Database Providers functions 1676 ⟩ };

This code is used in section 1689.

1675. Functions.

1676. Constructor. ⟨ Declare Records Database Providers functions 1676 ⟩ ≡

Records Database Providers(CDatabase ∗pDatabase = NULL);

(Records Database Providers)

See also sections 1678, 1680, 1682, 1684, and 1686. This code is used in section 1674.

1677. ⟨ Define Records Database Providers functions 1677 ⟩ ≡

(Records Database Providers, CRecordset) Records Database Providers ::Records Database Providers(CDatabase ∗pdb) : CRecordset(pdb) {

m record id = 0;

m database provider id = 0;

m nFields = 2;

m nDefaultType = dynaset ; }

See also sections 1679, 1681, 1683, 1685, and 1687. This code is used in section 1690.

1678. Get default connect. [LDF 2006.08.28.] ⟨ Declare Records Database Providers functions 1676 ⟩ +≡

virtual CString GetDefaultConnect ( );

1679. ⟨ Define Records Database Providers functions 1677 ⟩ +≡

CString Records Database Providers ::GetDefaultConnect ( ) {

return ( ); }

1680. Standard-SQL for Recordset. [LDF 2006.08.28.] ⟨ Declare Records Database Providers functions 1676 ⟩ +≡

virtual CString GetDefaultSQL( );

1681. ⟨ Define Records Database Providers functions 1677 ⟩ +≡

CString Records Database Providers ::GetDefaultSQL( ) {

return ( ); }

1682. Do Field Exchange. RFX-Unterstützung. [LDF 2006.08.28.] ⟨ Declare Records Database Providers functions 1676 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1683. ⟨ Define Records Database Providers functions 1677 ⟩ +≡

void Records Database Providers ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m record id ); RFX Long (pFX , ( ), m database provider id );

}

1684. Assert Valid. [LDF 2006.08.28.] ⟨ Declare Records Database Providers functions 1676 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1685. ⟨ Define Records Database Providers functions 1677 ⟩ +≡ #ifdef

void Records Database Providers ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1686. Dump. [LDF 2006.08.28.] ⟨ Declare Records Database Providers functions 1676 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1687. ⟨ Define Records Database Providers functions 1677 ⟩ +≡ #ifdef

void Records Database Providers ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1688. Putting Records Database Providers together.

1689. This is what gets written to rcdbprov.h.

⟨ 1689 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Records Database Providers 1674 ⟩

§1690 IWF Metadata Harvester IIPUTTING RECORDS DATABASE PROVIDERS TOGETHER 425

1690. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ rcdbprov.web 1670 ⟩

⟨ Define Records Database Providers functions 1677 ⟩

1691. Temp IDs (tempids.web).

Log

[LDF 2006.09.27.] Created this file. It contains code formerly in Temp IDs.h and Temp IDs.cpp.

⟨ tempids.web 1691 ⟩ ≡

static char id string [ ] = ␣ ␣ ␣ ␣ ␣ ␣ ␣ ;

This code is cited in sections 7 and 8. This code is used in section 1711.

1692. Preprocessor macro calls. ⟨ Preprocessor macro calls 10 ⟩ +≡ #pragma once

1693. using declarations for namespaces. ⟨ using declarations for namespaces 191 ⟩ +≡

using namespace std;

1694. Include files. ⟨ Include files 13 ⟩ +≡ #include

1695. Temp IDs class declaration.

Log

[LDF 2006.07.24.] Added this declaration. It was generated by Visual Studio.

⟨ Declare class Temp IDs 1695 ⟩ ≡ class Temp IDs : public CRecordset { public: long m temp id ;

⟨ Declare Temp IDs functions 1697 ⟩ };

This code is used in section 1710.

1696. Functions.

1697. Constructor. ⟨ Declare Temp IDs functions 1697 ⟩ ≡

Temp IDs(CDatabase ∗pDatabase = NULL);

(Temp IDs)

See also sections 1699, 1701, 1703, 1705, and 1707. This code is used in section 1695.

1698. ⟨ Define Temp IDs functions 1698 ⟩ ≡

(Temp IDs, CRecordset) Temp IDs ::Temp IDs(CDatabase ∗pdb) : CRecordset(pdb) {

m temp id = 0;

m nFields = 1;

m nDefaultType = dynaset ; }

See also sections 1700, 1702, 1704, 1706, and 1708. This code is used in section 1711.

1699. Get default connect. [LDF 2006.07.24.] ⟨ Declare Temp IDs functions 1697 ⟩ +≡

virtual CString GetDefaultConnect ( );

1700. ⟨ Define Temp IDs functions 1698 ⟩ +≡

CString Temp IDs ::GetDefaultConnect ( ) {

return ( ); }

1701. Standard-SQL for Recordset. [LDF 2006.07.24.] ⟨ Declare Temp IDs functions 1697 ⟩ +≡

virtual CString GetDefaultSQL( );

1702. ⟨ Define Temp IDs functions 1698 ⟩ +≡

CString Temp IDs ::GetDefaultSQL( ) {

return ( ); }

1703. Do Field Exchange. RFX-Unterstützung. [LDF 2006.07.24.] ⟨ Declare Temp IDs functions 1697 ⟩ +≡

virtual void DoFieldExchange(CFieldExchange ∗pFX ); 1704. ⟨ Define Temp IDs functions 1698 ⟩ +≡

void Temp IDs ::DoFieldExchange(CFieldExchange ∗pFX )

{ pFX SetFieldType(CFieldExchange ::outputColumn); RFX Long (pFX , ( ), m temp id );

}

1705. Assert Valid. [LDF 2006.07.24.] ⟨ Declare Temp IDs functions 1697 ⟩ +≡ #ifdef

virtual void AssertValid ( ) const; #endif

1706. ⟨ Define Temp IDs functions 1698 ⟩ +≡ #ifdef

void Temp IDs ::AssertValid ( ) const

{

CRecordset ::AssertValid ( ); }

#endif

1707. Dump. [LDF 2006.07.24.] ⟨ Declare Temp IDs functions 1697 ⟩ +≡ #ifdef

virtual void Dump(CDumpContext &dc) const; #endif

1708. ⟨ Define Temp IDs functions 1698 ⟩ +≡ #ifdef

void Temp IDs ::Dump(CDumpContext &dc) const {

CRecordset ::Dump(dc); }

#endif

1709. Putting Temp IDs together.

1710. This is what gets written to tempids.h.

⟨ 1710 ⟩ ≡

⟨ Preprocessor macro calls 10 ⟩

⟨ using declarations for namespaces 191 ⟩

⟨ Declare class Temp IDs 1695 ⟩

428  PUTTING TEMP IDS TOGETHER  IWF Metadata Harvester II §1711

1711. This is what gets compiled.

⟨ Include files 13 ⟩

  ⟨ tempids.web 1691 ⟩

⟨ Define Temp IDs functions 1698 ⟩

1712. PICA Codes. [LDF 2006.09.21.]

The Category Container and Subcategory Container functions are ordered according to the Pica+ codes, so it’s not necessary to sort the entries in picapc.tex. However, if the entries in picacp.tex are to be ordered according to the Pica3 codes, an external tool must be used to sort them. It will also be necessary to run TEX twice in order to ensure that the entries are up-to-date. [LDF 2006.09.21.]

To Do

[LDF 2006.09.21.] Add code to ctgcntnr.web and sbctgcnt.web for writing entries to picapc.tex and picacp.tex. Format them as tables with headings.

1713. Ordered by Pica+ Code.

1714. Ordered by Pica3 Code.

1715. GNU General Public License. [LDF 2006.10.23.]

GNU GENERAL PUBLIC LICENSE Version 2, June 1991

Copyright \begin{matrix}c \\ ◯ \end{matrix} 1989, 1991 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software–to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation’s software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

§1715  IWF Metadata Harvester II  GNU GENERAL PUBLIC LICENSE 429

Also, for each author’s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors’ reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone’s free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.

GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The “Program”, below, refers to any such program or work, and a “work based on the Program” means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term “modification”.) Each licensee is addressed as “you”.

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

430  GNU GENERAL PUBLIC LICENSE  IWF Metadata Harvester II §1715

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients’ exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and “any later version”, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTH-ERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IM-PLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABIL-ITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFEC-TIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR RE-DISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PRO-GRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

⟨one line to give the program’s name and a brief idea of what it does.⟩ Copyright (C) ⟨year⟩ ⟨name of author⟩

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WAR-RANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this when it starts in an interactive mode:

Gnomovision version 69, Copyright \begin{matrix}c \\ ◯ \end{matrix} year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’. This is free software, and you are welcome to redistribute it under certain conditions; type ‘show c’ for details.

The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than ‘show w’ and ‘show c’; they could even be mouse-clicks or menu items–whatever suits your program.

You should also get your employer (if you work as a programmer) or your school, if any, to sign a “copyright disclaimer” for the program, if necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program ‘Gnomovision’ (which makes passes at compilers) written by James Hacker.

⟨signature of Ty Coon⟩, 1 April 1989 Ty Coon, President of Vice

This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ⟨ GNU General Public License 1715 ⟩ ≡ /∗ This section contains no C^{++} code. ∗/

This code is cited in section 2. This code is used in section 1717.

§1716  IWF Metadata Harvester II  GNU FREE DOCUMENTATION LICENSE 433

1716. GNU Free Documentation License. [LDF 2006.10.23.]

GNU Free Documentation License Version 1.2, November 2002

Copyright \begin{matrix}c \\ ◯ \end{matrix} 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

0. PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a worldwide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

434  GNU FREE DOCUMENTATION LICENSE  IWF Metadata Harvester II §1716

A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

2. VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

3. COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

4. MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles.

You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties–for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

5. COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements”.

6. COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

9. TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

10. FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright \begin{matrix}c \\ ◯ \end{matrix} YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”.

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with...Texts.” line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.

438  INDEX  IWF Metadata Harvester II §1718

⟨ GNU Free Documentation License 1716 ⟩ ≡ /∗ This section contains no C^{++} code. ∗/

This code is cited in section 2. This code is used in section 1717.

1717. Include sections without C^{++} code. These sections contain no code, or only commented-out code. However, they must be included somewhere, or CWEAVE will issue warnings. [LDF 2006.09.27.]

There is no resource.cpp, so ⟨ resource.web 22 ⟩ doesn’t contain a static id string variable, as most or all of the other CWEB files do. [LDF 2006.10.23.]

⟨ resource.web 22 ⟩

⟨ GNU General Public License 1715 ⟩ ⟨ GNU Free Documentation License 1716 ⟩

1718. Index.

: 133.: \underline{11}.: 13. : \underline{24}. : \underline{24}. : \underline{24}. : \underline{24}. : \underline{11}. : 28, 40, 41, 42, 43, 50, 61, 62, 63, 64, 71, 79, 90, 91, 92, 93, 99, 1012, 1013, 1014, 1015, 1033, 1034, 1035, 1036, 1054, 1055, 1056, 1057, 1075, 1076, 1077, 1078, 1096, 1097, 1098, 1099, 1117, 1118, 1119, 1120, 1138, 1139, 1140, 1141, 1159, 1160, 1161, 1162, 1180, 1181, 1182, 1183, 1201, 1202, 1203, 1204, 1222, 1223, 1224, 1225, 1243, 1244, 1245, 1246, 1264, 1265, 1266, 1267, 1285, 1286, 1287, 1288, 1306, 1307, 1308, 1309, 1327, 1328, 1329, 1330, 1348, 1349, 1350, 1351, 1369, 1370, 1371, 1372, 1390, 1391, 1392, 1393, 1411, 1412, 1413, 1414, 1432, 1433, 1434, 1435, 1453, 1454, 1455, 1456, 1474, 1475, 1476, 1477, 1495, 1496, 1497, 1498, 1516, 1517, 1518, 1519, 1537, 1538, 1539, 1540, 1558, 1559, 1560, 1561, 1579, 1580, 1581, 1582, 1600, 1601, 1602, 1603, 1621, 1622, 1623, 1624, 1642, 1643, 1644, 1645, 1663, 1664, 1665, 1666, 1684, 1685, 1686, 1687, 1705, 1706, 1707, 1708. : 110, 1007, 1009, 1011, 1028, 1030, 1032, 1049, 1051, 1053, 1070, 1072, 1074, 1091, 1093, 1095, 1112, 1114, 1116, 1133, 1135, 1137, 1154, 1156, 1158, 1175, 1177, 1179, 1196, 1198, 1200, 1217, 1219, 1221, 1238, 1240, 1242, 1259, 1261, 1263, 1280, 1282, 1284, 1301, 1303, 1305, 1322, 1324, 1326, 1343, 1345, 1347, 1364, 1366, 1368, 1385, 1387, 1389, 1406, 1408, 1410, 1427, 1429, 1431, 1448, 1450, 1452, 1469, 1471, 1473, 1490, 1492, 1494, 1511, 1513, 1515, 1532, 1534, 1536, 1553, 1555, 1557, 1574, 1576, 1578, 1595, 1597, 1599, 1616, 1618, 1620, 1639, 1641, 1658, 1660, 1662,

1679, 1681, 1683, 1700, 1702, 1704. : \underline{11}. : \underline{11}. : \underline{11}. aboutDlg : \underline{125}. access numbers : \underline{798}, 816, 817, 818, 819, 820. Access Numbers: 7, 8, 16, 798, 816, \underline{1107}, 1109,

1110, 1112, 1114, 1116, 1118, 1120.

accnums.web: 6, 8, \underline{1103}.

AddDocTemplate: 111. addinfo: \underline{200}, \underline{368}, \underline{371}, 373. additional creator main: \underline{543}, 544, \underline{545}, \underline{546}, 547. additional creator parallel : \underline{543}, 544, \underline{545}, \underline{546},

547. additions main: \underline{543}, 544, \underline{545}, \underline{546}, 547, 892. additions parallel : \underline{543}, 544, \underline{545}, \underline{546}, 547. afx msg: 38, 100, 160, 162, 164, 166, 168,

170, 172. AfxEnableControlContainer : 109. AfxMessageBox : 109, 130, 153, 154, 155, 161, 163,

§1718  IWF Metadata Harvester II  INDEX 439

165, 167, 169, 223, 325, 330, 337, 338, 340, 342, 346, 347, 357, 359, 360, 368, 370, 373, 374, 376, 377, 408, 409, 410, 412, 430, 432, 434, 436, 438, 440, 441, 442, 443, 444, 446, 447, 448, 449, 454, 456, 457, 458, 462, 463, 464, 466, 467, 468, 470, 472, 473, 475, 477, 478, 479, 481, 483, 484, 486, 490, 491, 498, 500, 501, 502, 503, 504, 505, 507, 508, 517, 519, 520, 521, 522, 524, 525, 528, 529, 531, 532, 533, 536, 537, 538, 539, 540, 542, 543, 544, 546, 547, 548, 549, 550, 552, 553, 554, 556, 557, 558, 559, 577, 578, 579, 582, 584, 587, 588, 589, 592, 593, 596, 597, 599, 600, 601, 602, 603, 604, 606, 607, 608, 609, 610, 613, 616, 617, 618, 619, 620, 621, 622, 623, 624, 627, 629, 631, 633, 635, 636, 637, 638, 642, 645, 647, 649, 650, 652, 654, 655, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 702, 703, 706, 709, 711, 713, 715, 718, 720, 724, 726, 729, 731, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 789, 793, 794, 797, 799, 802, 803, 807, 810, 811, 817, 822, 825, 826, 833, 838, 841, 842, 864, 867, 868, 875, 878, 879, 886, 889, 890, 896, 897, 912, 915, 916, 923, 926, 927, 934, 940, 943, 944, 960, 963, 964, 970, 973, 974, 982, 983, 985, 987, 991, 992.

AfxOleInit : 109. : \underline{138}, \underline{139}, 150, 171. ambiguity in PICA fields: 710. and str : \underline{547}. : 24. : 24. ar : \underline{59}, \underline{60}. asctime: 789. : 79. : 81. AssertValid : \underline{40}, \underline{41}, \underline{61}, \underline{62}, \underline{90}, \underline{91}, \underline{1012}, \underline{1013},

\underline{1033}, \underline{1034}, \underline{1054}, \underline{1055}, \underline{1075}, \underline{1076}, \underline{1096}, \underline{1097}, \underline{1117}, \underline{1118}, \underline{1138}, \underline{1139}, \underline{1159}, \underline{1160}, \underline{1180}, \underline{1181}, \underline{1201}, \underline{1202}, \underline{1222}, \underline{1223}, \underline{1243}, \underline{1244}, \underline{1264}, \underline{1265}, \underline{1285}, \underline{1286}, \underline{1306}, \underline{1307}, \underline{1327}, \underline{1328}, \underline{1348}, \underline{1349}, \underline{1369}, \underline{1370}, \underline{1390}, \underline{1391}, \underline{1411}, \underline{1412}, \underline{1432}, \underline{1433}, \underline{1453}, \underline{1454}, \underline{1474}, \underline{1475}, \underline{1495}, \underline{1496}, \underline{1516}, \underline{1517}, \underline{1537}, \underline{1538}, \underline{1558}, \underline{1559}, \underline{1579}, \underline{1580}, \underline{1600}, \underline{1601}, \underline{1621}, \underline{1622}, \underline{1642}, \underline{1643}, \underline{1663}, \underline{1664}, \underline{1684}, \underline{1685}, \underline{1705}, \underline{1706}.

assoc table: \underline{556}, 558, 559. assoc table name: \underline{527}, \underline{528}, 532, 533, \underline{534}, \underline{535},

539, 540, \underline{541}, \underline{542}, 544, \underline{545}, \underline{546}, 554. atoi : 454. atol : 455. authors : \underline{798}, 867, 868, 869, 870, 871, 872. Authors: 7, 8, 16, 798, \underline{1296}, 1298, 1299, 1301,

1303, 1305, 1307, 1309.

authors.web: 6, 8, \underline{1292}.

authorship: \underline{543}, 544, \underline{545}, \underline{546}, 547. b: \underline{500}. back : 201, 212, 217, 328.

bbtpcds.web: 6, 8, \underline{1187}.

begin: 207, 325, 410, 411, 412, 414, 430, 441, 454, 490, 491, 507, 508, 530, 531, 543, 544, 561, 810, 825, 841, 867, 878, 889, 915, 926, 943, 963, 973, 987, 989.

: 45, 66, 95, 102, 124, 147. bib id : \underline{606}, 608. bibliographic representation: 853, 854. bibliographic type codes : \underline{798}, 846, 848, 849, 850,

852, 854, 855, 856, 858, 859, 860. Bibliographic Type Codes: 7, 8, 16, 798,

846, 854, 858, \underline{1191}, 1193, 1194, 1196, 1198,

1200, 1202, 1204. Bibliographic Types: 7, 8, 16, 599, 605, 798,

\underline{1212}, 1214, 1215, 1217, 1219, 1221, 1223, 1225. bibliographic types : \underline{798}, 841, 842, 843, 844, 845,

846, 853, 854, 857, 858, 860, 861, 862. Bibliographic Types Records : 862. Bibliographical Type and Status (‘0’) (Pica+ 002@

/ Pica3 0500): 591. Bibliographical Type and Status (Pica+ 002@ /

Pica3 0500): 590. Bibliographische Gattung und Status (‘0’) (Pica+

002@ / Pica3 0500): 591. Bibliographische Gattung und Status (Pica+ 002@

/ Pica3 0500): 590.

bibtyps.web: 6, 8, \underline{1208}.

BOOL: 36, 37, 57, 58, 82, 83, 84, 85, 100, 107,

138, 149, 150, 156, 369, 370, 1485, 1569, 1611. : 150. : 150. buff : \underline{153}, 155. BUG FIX: 340, 409, 451, 473, 501, 503, 524,

537, 550, 551, 558, 601, 646, 650, 652, 655, 702, 759, 918, 1460.

c: \underline{423}, \underline{426}, \underline{427}. c str : 130, 153, 154, 155, 161, 163, 165, 167, 169,

223, 325, 330, 337, 338, 340, 342, 346, 347, 357, 359, 360, 368, 370, 373, 374, 376, 377, 408, 409, 410, 412, 430, 432, 434, 436, 438, 440, 441, 442, 443, 444, 446, 447, 448, 449, 454, 455, 456, 457, 458, 462, 463, 464, 465, 466, 467, 468, 470, 471, 472, 473, 474, 475, 477, 478, 479, 480, 481, 483, 484, 485, 486, 490, 491, 498, 500, 501, 502, 503, 504, 505, 507, 508, 517, 519, 520, 521, 522, 524, 525, 528, 529, 531, 532, 533, 536, 537, 538, 539, 540, 542, 543, 544, 546, 547, 548, 549, 550, 552, 553, 554, 556, 557, 558, 559, 577, 578, 579, 582, 584, 587, 588, 589, 592, 593, 596, 597, 599, 600, 601, 602, 603, 604, 606, 607, 608, 609, 610, 613, 616, 617, 618, 619, 620, 621, 622, 623, 624, 627, 629, 631, 633, 635, 636, 637, 638, 642, 645, 647, 649, 650, 652, 654, 655, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 702, 703, 706, 709, 711, 713, 715, 718, 720, 724, 726, 729, 731, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 789, 793, 794, 797, 799, 800, 802, 803, 806, 807, 810, 811, 816, 817, 821, 822, 825, 826, 832, 833, 837, 838, 841, 842, 846, 854, 858, 863, 864, 867, 868, 874, 875, 878, 879, 885, 886, 889, 890, 896, 897, 911, 912, 915, 916, 922, 923, 926, 927, 929, 933, 934, 939, 940, 943, 944, 947, 951, 959, 960, 963, 964, 969, 970, 973,

974, 982, 983, 985, 987, 991, 992. CAboutDlg: 6, 8, \underline{117}, \underline{122}, 123, 124, 125. call number id : \underline{490}, 491, 498, \underline{499}, \underline{500}, 502, 503. call number ids : 501. call number str : \underline{490}, 491, 492, 494, 498, \underline{499},

\underline{500}, 501, 503. call numbers : \underline{500}, \underline{501}, 503, \underline{798}, 810, 811, 812,

813, 814, 815. Call Numbers: 7, 8, 16, 500, 501, 502, 503, 798,

\underline{1128}, 1130, 1131, 1133, 1135, 1137, 1139, 1141.

callnums.web: 6, 8, \underline{1124}.

CArchive: 59, 60. categories : 359, \underline{400}, 408, 410, 414. Categorization Guidelines: 611, 612. category : \underline{429}, \underline{430}, \underline{431}, \underline{432}, \underline{433}, \underline{434}, \underline{435}, \underline{436},

\underline{437}, \underline{438}, \underline{439}, \underline{440}, 441, \underline{453}, \underline{454}, 456, 460, \underline{461}, \underline{462}, \underline{489}, \underline{490}, 491, 498, \underline{499}, \underline{500}, \underline{506}, \underline{507}, 508, 517, \underline{518}, \underline{519}, \underline{527}, \underline{528}, 529, 530, 532, 533, \underline{534}, \underline{535}, \underline{541}, \underline{542}, 543, 544, \underline{545}, \underline{546}, \underline{574}, \underline{576}, \underline{577}, \underline{581}, \underline{582}, \underline{583}, \underline{584}, \underline{586}, \underline{587}, \underline{591}, \underline{592}, \underline{612}, \underline{613}, \underline{615}, \underline{616}, \underline{626}, \underline{627}, \underline{628}, \underline{629}, \underline{630}, \underline{631}, \underline{632}, \underline{633}, \underline{641}, \underline{642}, \underline{644}, \underline{645}, \underline{646}, \underline{647}, 648, 650, \underline{651}, \underline{652}, 653, 655, \underline{656}, \underline{657}, \underline{658}, \underline{659}, \underline{660}, \underline{661}, \underline{663}, \underline{664}, \underline{665}, \underline{666}, \underline{667}, \underline{668}, \underline{669}, \underline{670}, \underline{672}, \underline{673}, \underline{674}, \underline{675}, \underline{676}, \underline{677}, \underline{679}, \underline{680}, \underline{681}, \underline{682}, \underline{683}, \underline{684}, \underline{685}, \underline{686}, \underline{687}, \underline{688}, \underline{690}, \underline{691}, \underline{692}, \underline{693}, \underline{695}, \underline{696}, \underline{697}, \underline{698}, \underline{700}, \underline{701}, \underline{705}, \underline{706}, \underline{708}, \underline{709}, \underline{710}, \underline{711}, \underline{712}, \underline{713}, \underline{714}, \underline{715}, \underline{717}, \underline{718}, \underline{719}, \underline{720}, \underline{723}, \underline{724}, \underline{728}, \underline{729}, \underline{733}, \underline{734}, \underline{735}, \underline{736}, \underline{737}, \underline{738}, \underline{739}, \underline{740}, \underline{742}, \underline{743}, \underline{745}, \underline{746}, \underline{747}, \underline{748}, \underline{749}, \underline{750}, \underline{751}, \underline{752}, \underline{753}, \underline{754}, \underline{755}, \underline{756}, \underline{769}.

Category Container: 6, 8, 17, 225, 226, 228, 230, 232, 233, 235, 237, 239, 241, 248, 249, 251, 256, 259, 261, 268, 269, 274, 275, 279, 280, 285, 286, 289, 290, 293, 295, 296, 301, 302, 304, 305, 307, 308, 313, 314, 316, 317, 324, 359, 408, 412, \underline{423}, 424, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 451, 452, 453, 454, 460, 461, 462, 488, 489, 490, 498, 499, 500, 505, 506, 507, 517, 518, 519, 525, 527, 528, 533, 534, 535, 540, 541, 542, 544, 545, 546, 554, 555, 556, 559, 561, 574, 576, 577, 581, 582, 583, 584, 586, 587, 591, 592, 612, 613, 615, 616, 626, 627, 628, 629, 630, 631, 632, 633, 641, 642, 644, 645, 646, 647, 651, 652, 656, 657, 658, 659, 660, 661, 663, 664, 665, 666, 667, 668, 669, 670, 672, 673, 674, 675, 676, 677, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 690, 691, 692, 693, 695, 696, 697, 698, 700, 701, 705, 706, 708, 709, 710, 711, 712, 713, 714, 715, 717, 718, 719, 720, 723, 724, 728, 729, 733, 734, 735, 736, 737, 738, 739, 740, 742, 743, 745, 746, 747, 748, 749, 750, 751, 752,

753, 754, 755, 756, \underline{768}, 769, 1712.

Category Container::F 001B: 429, 430. Category Container::F 021A: 431, 432. Category Container::F 028A: 433, 434. Category Container::F 028B: 435, 436. Category Container::F 028C: 437, 438. Category Container::F 033A: 439, 440. Category Container::F 041A: 453, 454. Category Container::F 209A: 489, 490. Category Container::F 209R: 506, 507. Category Container::operator=: 426, 427. Category Container::personal names cate-

gory func: 527, 528. Category Container::publishers database pro-

viders func: 555, 556. Category Container::show: 560, 561. Category Container::sub F 041A: 461, 462. Category Container::sub F 209A: 499, 500. Category Container::sub F 209R: 518, 519. Category Container::sub personal names cate-

gory func: 534, 535. Category Container::sub titles cate-

gory func: 545, 546. Category Container::titles category func: 541. category id : \underline{358}, \underline{359}. category map: \underline{193}, 207, 227, 229, 232, 234, 236, 238, 240, 248, 250, 255, 258, 260, 268, 274, 279, 285, 289, 292, 295, 301, 304, 307, 313, 316, 324, 325, 359, 410.

Category Map Type: 193, 207, 325, \underline{424}. Category Multimap Type: 359, 400, 410,

414, \underline{424}. : 39. : 39. : 39. : 39. : 39. : 39. CButton: 150. CCommandLineInfo: 112. CDatabase: 193, 407, 408, 429, 430, 431, 432,

433, 434, 435, 436, 437, 438, 439, 440, 453, 454, 461, 462, 489, 490, 499, 500, 506, 507, 518, 519, 527, 528, 534, 535, 541, 542, 545, 546, 555, 556, 576, 577, 581, 582, 583, 584, 586, 587, 591, 592, 612, 613, 615, 616, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 641, 642, 644, 645, 646, 647, 651, 652, 656, 657, 658, 659, 660, 661, 663, 664, 665, 666, 667, 668, 669, 670, 672, 673, 674, 675, 676, 677, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 690, 691, 692, 693, 695, 696, 697, 698, 700, 701, 705, 706, 708, 709, 710, 711, 712, 713, 714, 715, 717, 718, 719, 720, 723, 724, 728, 729, 733, 734, 735, 736, 737, 738, 739, 740, 742, 743, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 769, 1004, 1005, 1025, 1026, 1046, 1047, 1067, 1068, 1088, 1089, 1109, 1110, 1130, 1131, 1151, 1152, 1172, 1173, 1193, 1194, 1214, 1215, 1235, 1236, 1256, 1257, 1277, 1278, 1298, 1299, 1319, 1320, 1340, 1341, 1361, 1362, 1382, 1383, 1403, 1404, 1424, 1425, 1445, 1446, 1466, 1467, 1487, 1488, 1508, 1509, 1529, 1530, 1550, 1551, 1571, 1572, 1592, 1593, 1613, 1614, 1634, 1635, 1655, 1656, 1676, 1677, 1697, 1698.

CDataExchange: 118, 123, 145, 146. CDBException: 430, 466, 472, 475, 481, 486,

501, 503, 505, 521, 524, 525, 536, 537, 538, 539, 540, 548, 550, 552, 554, 556, 557, 558, 559, 578, 588, 597, 600, 602, 604, 607, 609, 613, 618, 621, 623, 638, 701, 702, 703, 726, 731, 743, 896.

CDC: 80, 81, 86, 87, 88, 89. CDialog: 117, 122, 123, 124, 136, 142, 146,

147, 151, 157, 159. CDocument: 51, 58, 62, 64, 66. CDumpContext: 42, 43, 63, 64, 92, 93, 1014,

1015, 1035, 1036, 1056, 1057, 1077, 1078, 1098, 1099, 1119, 1120, 1140, 1141, 1161, 1162, 1182, 1183, 1203, 1204, 1224, 1225, 1245, 1246, 1266, 1267, 1287, 1288, 1308, 1309, 1329, 1330, 1350, 1351, 1371, 1372, 1392, 1393, 1413, 1414, 1434, 1435, 1455, 1456, 1476, 1477, 1497, 1498, 1518, 1519, 1539, 1540, 1560, 1561, 1581, 1582, 1602, 1603, 1623, 1624, 1644, 1645, 1665, 1666, 1686, 1687, 1707, 1708.

CEdit: 150, 153. CFieldExchange: 1010, 1011, 1031, 1032, 1052,

1053, 1073, 1074, 1094, 1095, 1115, 1116, 1136, 1137, 1157, 1158, 1178, 1179, 1199, 1200, 1220, 1221, 1241, 1242, 1262, 1263, 1283, 1284, 1304, 1305, 1325, 1326, 1346, 1347, 1367, 1368, 1388, 1389, 1409, 1410, 1430, 1431, 1451, 1452, 1472, 1473, 1493, 1494, 1514, 1515, 1535, 1536, 1556, 1557, 1577, 1578, 1598, 1599, 1619, 1620, 1640, 1641, 1661, 1662, 1682, 1683, 1703, 1704.

CFrameWnd: 29, 37, 39, 41, 43, 45. chain info: \underline{454}, 456, 457, 460, \underline{461}, \underline{462}, 463, 470. chain link number : \underline{454}, 456, 460, \underline{461}, \underline{462}, 470. chain number : \underline{454}, 456, 460, \underline{461}, \underline{462}, 470, 484. char ctr : \underline{334}, 337, 345, \underline{648}, 649, 650, \underline{653},

654, 655, \underline{726}. chars : 343. Clear : 157. clear : 207, 454, 456, 492, 509, 532, 544, 794, 808,

823, 839, 865, 876, 887, 913, 924, 941, 961, 971. clear database: \underline{138}, 142, 146, 150, 156, 169, \underline{222},

\underline{223}, \underline{369}, \underline{370}, 376, 377.

CListBox : 150, 153.

close: 207, 357, 376, 791.

Close: 207, 467, 468, 477, 478, 488, 503, 505, 524, 525, 537, 539, 540, 550, 554, 558, 559, 601, 603, 605, 606, 610, 619, 620, 624, 701, 702, 703, 726, 731, 794, 802, 803, 805, 815, 820, 830, 831, 836, 852, 856, 860, 862, 872, 873, 883, 884, 894, 895, 910, 920, 921, 929, 931, 932, 938, 950, 954, 957, 958, 967, 968, 978, 979.

close html file: 377, 782, \underline{790}, \underline{791}.

CMainFrame: 6, 8, \underline{29}, 32, \underline{33}, \underline{34}, \underline{35}, 37, 39,

41, 43, 45, 111. cmdInfo: \underline{112}, 113. CMutex: 18, 127, 388.

                                           cntrbtrs.web: 6, 8, \underline{1334}.

Code(s) für Sprachen (Pica+ 010@ / Pica3

1500): 614. Code(s) for Languages (Pica+ 010@ / Pica3

1500): 614. : \underline{337}, 342, 349, 354,

355. : \underline{337}, 340, 343, 350, 351, 356.

column: \underline{634}, \underline{635}, 637.

column name: \underline{527}, \underline{528}, 532, 533, \underline{534}, \underline{535}, 536, 537, 538, 539, 540, \underline{541}, \underline{542}, 544, \underline{545}, \underline{546}, 547, 550, 552, 554. column str : \underline{555}, \underline{556}, 557. column strm: \underline{546}, 547, 552. connection ctr : \underline{209}, \underline{210}. connections : \underline{193}, 201, 210, 212, 328. content description english: 226, 227, 228, 229,

230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, 269, 270, 271, 272, 273, 275, 276, 277, 278, 280, 281, 282, 283, 284, 286, 287, 288, 290, 291, 293, 294, 296, 297, 298, 299, 300, 302, 303, 305, 306, 308, 309, 310, 311, 312, 314, 315, 317, 318, 319, 320, 321, 322, 323, \underline{423}, 427, 561, \underline{569}, 573, 758.

content description german: 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 249, 250, 251, 252, 253, 254, 255, 256, 257, 259, 260, 261, 262, 263, 264, 265, 266, 267, 269, 270, 271, 272, 273, 275, 276, 277, 278, 280, 281, 282, 283, 284, 286, 287, 288, 290, 291, 293, 294, 296, 297, 298, 299, 300, 302, 303, 305, 306, 308, 309, 310, 311, 312, 314, 315, 317, 318, 319, 320, 321, 322, 323, 359, 410, \underline{423}, 427, 561, \underline{569}, 573, 758. content summaries : \underline{798}, 896, 897, 900, 901, 902,

903, 904, 905, 907, 909, 910. Content Summaries: 7, 8, 16, 726, 798, 896,

898, \underline{1422}, 1424, 1425, 1427, 1429, 1431, 1433, 1435.

content summary id : \underline{726}. content summary id end : \underline{899}, 904, 905. content summary id start : \underline{899}, 902, 904. content summary strm: \underline{899}, 902, 904, 905. continuation: \underline{545}. continuation additions main: \underline{543}, 544, \underline{545},

\underline{546}, 547. continuation ctr : \underline{648}, 650, \underline{653}, 655, \underline{726}, \underline{899},

904, 905. continuation main canonical title: \underline{543}, 544, \underline{545},

\underline{546}, 547. continuation strm: \underline{648}, 650, \underline{653}, 655, \underline{726}. Contributors: 7, 8, 16, 798, \underline{1338}, 1340, 1341,

1343, 1345, 1347, 1349, 1351. contributors : \underline{798}, 878, 879, 880, 881, 882, 883.

contsums.web: 6, 8, \underline{1418}.

convert : 586. copyright hmtl str : \underline{788}. copyright html str : \underline{18}, \underline{127}, 130, 789. count records : 782, \underline{792}, \underline{793}, 794, 986. CPrintInfo: 84, 85, 86, 87, 88, 89. Create: 39. CreateEx : 39. CREATESTRUCT: 36, 37, 82, 83. CRecordset: 16, 503, 646, 652, 794, 800, 803,

806, 810, 816, 821, 825, 832, 837, 841, 846, 854, 858, 863, 867, 874, 878, 885, 889, 896, 911, 915, 922, 926, 929, 933, 939, 943, 947, 951, 959, 963, 969, 973, 1002, 1005, 1013, 1015, 1018, 1023, 1026, 1034, 1036, 1044, 1047, 1055, 1057, 1065, 1068, 1076, 1078, 1086, 1089, 1097, 1099, 1107, 1110, 1118, 1120, 1128, 1131, 1139, 1141, 1149, 1152, 1160, 1162, 1170, 1173, 1181, 1183, 1191, 1194, 1202, 1204, 1212, 1215, 1223, 1225, 1233, 1236, 1244, 1246, 1254, 1257, 1265, 1267, 1275, 1278, 1286, 1288, 1296, 1299, 1307, 1309, 1317, 1320, 1328, 1330, 1338, 1341, 1349, 1351, 1359, 1362, 1370, 1372, 1380, 1383, 1391, 1393, 1401, 1404, 1412, 1414, 1422, 1425, 1433, 1435, 1443, 1446, 1454, 1456, 1464, 1467, 1475, 1477, 1485, 1488, 1496, 1498, 1506, 1509, 1517, 1519, 1527, 1530, 1538, 1540, 1548, 1551, 1559, 1561, 1569, 1572, 1580, 1582, 1590, 1593, 1601, 1603, 1611, 1614, 1622, 1624, 1632, 1635, 1643, 1645, 1653, 1656, 1664, 1666, 1674, 1677, 1685, 1687, 1695, 1698, 1706, 1708.

cs : \underline{36}, \underline{37}, \underline{82}, \underline{83}.

CSingleDocTemplate: 111. CStatusBar: 29. CString: 138, 155, 369, 370, 377, 782, 981, 982,

1002, 1006, 1007, 1008, 1009, 1027, 1028, 1029, 1030, 1048, 1049, 1050, 1051, 1069, 1070, 1071, 1072, 1090, 1091, 1092, 1093, 1111, 1112, 1113, 1114, 1132, 1133, 1134, 1135, 1153, 1154, 1155, 1156, 1174, 1175, 1176, 1177, 1195, 1196, 1197, 1198, 1216, 1217, 1218, 1219, 1237, 1238, 1239, 1240, 1258, 1259, 1260, 1261, 1279, 1280, 1281, 1282, 1300, 1301, 1302, 1303, 1321, 1322, 1323, 1324, 1342, 1343, 1344, 1345, 1363, 1364, 1365, 1366, 1384, 1385, 1386, 1387, 1405, 1406, 1407, 1408, 1426, 1427, 1428, 1429, 1447, 1448, 1449, 1450, 1468, 1469, 1470, 1471, 1489, 1490, 1491, 1492, 1510, 1511, 1512, 1513, 1531, 1532, 1533, 1534, 1552, 1553, 1554, 1555, 1573, 1574, 1575, 1576, 1594, 1595, 1596, 1597, 1615, 1616, 1617, 1618, 1636, 1637, 1638, 1639, 1657, 1658, 1659, 1660, 1678, 1679, 1680, 1681, 1699, 1700, 1701, 1702.

CStringA: 646, 652, 1002, 1023, 1065, 1086, 1107, 1128, 1170, 1191, 1212, 1254, 1296, 1338, 1380, 1422, 1443, 1464, 1485, 1506, 1548, 1569, 1611, 1653.

CStringW: 1002.

ctgcntnr.web: 6, 8, \underline{418}.

CTime: 803, 1086. CToolBar: 29. curr category container : \underline{225}, 226, 227, 228, 229,

230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, \underline{359}, 360.

curr category id : \underline{336}, 341, 343, 346, 347, 349, 355. curr char : \underline{332}, 337, 338, 344, 345, 346, 347,

351, 352, 355, 356, \underline{760}. curr connection: \underline{201}, 202, 203, 204, \underline{327}, \underline{328}. curr database command : \underline{225}, 229, 231, 232, 234,

238, 240, 242, 243, 244, 245, 246, 247, 248, 250, 252, 253, 254, 255, 257, 262, 263, 264, 265, 267, 268, 270, 271, 273, 274, 276, 277, 278, 279, 281, 282, 283, 284, 285, 287, 288, 289, 291, 294, 295, 297, 298, 299, 300, 301, 303, 304, 306, 307, 309, 310, 311, 312, 313, 315, 316, 318, 319, 320, 321, 322, 323, 324. curr field id : \underline{333}, 340, 341, 343, 345, 347. curr field value: \underline{336}, 340, 341, 343, 346, 347,

350, 351, 356. curr given name: \underline{528}, 532, 533, \underline{670}, \underline{688}. curr id number ppn: \underline{528}, 532, 533. curr pica record : \underline{337}, 338, \underline{341}, 342, 346, 354. curr pica record category container : \underline{359}, 360. curr pica record subcategory container : \underline{359}, 360. curr prefix : \underline{528}, 532, 533. curr query str : \underline{327}, \underline{328}. curr record ctr : \underline{409}, 410, 411, 412. curr reference category : \underline{408}, 410, 411, 412. curr reference subcategory : \underline{408}, 410, 411. curr repeat code: \underline{336}, 341, 343, 346, 349. curr resultset : \underline{328}. curr search command str : \underline{377}. curr str : \underline{635}, 636, 637, \underline{645}, \underline{647}, 648, 649, 650,

\underline{652}, 653, 654, 655, \underline{657}, \underline{659}, \underline{661}, \underline{696}, \underline{698}, \underline{726}. curr subcategory container : \underline{225}, 227, 229, 231,

232, 234, 236, 238, 240, 241, 242, 243, 244, 245, 246, 247, 250, 252, 253, 254, 255, 257, 260, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 276, 277, 278, 281, 282, 283, 284, 287, 288, 291, 294, 297, 298, 299, 300, 303, 306, 309, 310, 311, 312, 315, 318, 319, 320, 321, 322, 323, \underline{359}, 360.

curr surname: \underline{528}, 532, 533, \underline{666}, \underline{684}. curr temp id : \underline{409}. curr text : \underline{701}, 703. CView: 72, 83, 91, 93, 95. CWinApp: 100, 102, 108. CWnd: 141, 142. CZTestApp: 6, 8, \underline{100}, 101, 102, \underline{104}, 105,

107, 116, 125, 126. CZTestDoc: 6, 8, \underline{51}, 53, \underline{54}, \underline{55}, \underline{56}, 58, 60, 62,

64, 66, 78, 79, 81, 111. CZTestView: 6, 8, \underline{72}, 74, \underline{75}, \underline{76}, \underline{77}, 79, 81,

83, 85, 87, 89, 91, 93, 95, 111. database: \underline{193}, 205, 207, 223, 338, 342, \underline{407}, \underline{408},

409, 410, 411, 412, \underline{429}, \underline{430}, \underline{431}, \underline{432}, \underline{433}, \underline{434}, \underline{435}, \underline{436}, \underline{437}, \underline{438}, \underline{439}, \underline{440}, 442, 451, \underline{453}, \underline{454}, 456, 460, \underline{461}, \underline{462}, 465, 471, 474, 480, 485, \underline{489}, \underline{490}, 491, 498, \underline{499}, \underline{500}, 501, 503, 505, \underline{506}, \underline{507}, 508, 517, \underline{518}, \underline{519}, 521, 524, 525, \underline{527}, \underline{528}, 532, 533, \underline{534}, \underline{535}, 536, 537, 538, 539, 540, \underline{541}, \underline{542}, 544, \underline{545}, \underline{546}, 548, 550, 552, 554, \underline{555}, \underline{556}, 557, 558, 559, \underline{576}, \underline{577}, 578, \underline{581}, \underline{582}, \underline{583}, \underline{584}, \underline{586}, \underline{587}, 588, \underline{591}, \underline{592}, 597, 600, 602, 604, 607, 609, \underline{612}, \underline{613}, \underline{615}, \underline{616}, 618, 621, 623, \underline{626}, \underline{627}, \underline{628}, \underline{629}, \underline{630}, \underline{631}, \underline{632}, \underline{633}, \underline{634}, \underline{635}, 638, \underline{641}, \underline{642}, \underline{644}, \underline{645}, \underline{646}, \underline{647}, \underline{651}, \underline{652}, \underline{656}, \underline{657}, \underline{658}, \underline{659}, \underline{660}, \underline{661}, \underline{663}, \underline{664}, \underline{665}, \underline{666}, \underline{667}, \underline{668}, \underline{669}, \underline{670}, \underline{672}, \underline{673}, \underline{674}, \underline{675}, \underline{676}, \underline{677}, \underline{679}, \underline{680}, \underline{681}, \underline{682}, \underline{683}, \underline{684}, \underline{685}, \underline{686}, \underline{687}, \underline{688}, \underline{690}, \underline{691}, \underline{692}, \underline{693}, \underline{695}, \underline{696}, \underline{697}, \underline{698}, \underline{700}, \underline{701}, 702, 703, \underline{705}, \underline{706}, \underline{708}, \underline{709}, \underline{710}, \underline{711}, \underline{712}, \underline{713}, \underline{714}, \underline{715}, \underline{717}, \underline{718}, \underline{719}, \underline{720}, \underline{723}, \underline{724}, 726, \underline{728}, \underline{729}, 731, \underline{733}, \underline{734}, \underline{735}, \underline{736}, \underline{737}, \underline{738}, \underline{739}, \underline{740}, \underline{742}, \underline{743}, \underline{745}, \underline{746}, \underline{747}, \underline{748}, \underline{749}, \underline{750}, \underline{751}, \underline{752}, \underline{753}, \underline{754}, \underline{755}, \underline{756}, \underline{769}.

Database Command: 6, 8, 17, 225, 229, 231, 232, 234, 238, 240, 241, 242, 243, 244, 245, 246, 247, 248, 250, 252, 253, 254, 255, 257, 262, 263, 264, 265, 267, 268, 270, 271, 273, 274, 276, 277, 278, 279, 281, 282, 283, 284, 285, 287, 288, 289, 291, 294, 295, 297, 298, 299, 300, 301, 303, 304, 306, 307, 309, 310, 311, 312, 313, 315, 316, 318, 319, 320, 321, 322, 323, 324, 411, 412, 423, 569, 574, \underline{769}, 771, \underline{772}, 773, \underline{774}.

database command arguments : \underline{423}, 430, 441, 454, 490, 507, 529, 530, 542, 543, 574, 582, 584, 645, 648, 650, 653, 655, 657, 659, 661, 664, 666, 670, 673, 675, 677, 680, 682, 684, 688, 691, 693, 696, 698, 709, 711, 713, 715, 718, 734, 736, 738, 740, 746, 748, 750, 752, 754, 756.

database command brguments : 720. Database Commands : 411, 412. database commands : 229, 231, 232, 234, 238, 240,

242, 243, 244, 245, 246, 247, 248, 250, 252, 253, 254, 255, 257, 262, 263, 264, 265, 267, 268, 270, 271, 273, 274, 276, 277, 278, 279, 281, 282, 283, 284, 285, 287, 288, 289, 291, 294, 295, 297, 298, 299, 300, 301, 303, 304, 306, 307, 309, 310, 311, 312, 313, 315, 316, 318, 319, 320, 321, 322, 323, 324, 410, 411, 412, \underline{423}, \underline{569}.

: 1007, 1028, 1049, 1070, 1091, 1112, 1133, 1154, 1175, 1196, 1217, 1238, 1259, 1280, 1301, 1322, 1343, 1364, 1385, 1406, 1427, 1448, 1469, 1490, 1511, 1532, 1553, 1574, 1595, 1616, 1658, 1679, 1700.

database provider id : 558. database providers : \underline{798}, 973, 974, 975, 976,

977, 978. Database Providers: 7, 8, 16, 557, 559, 798,

\underline{1653}, 1655, 1656, 1658, 1660, 1662, 1664, 1666. date: \underline{430}. datestamp: \underline{789}. datetime: 803. DB Display: 6, 8, 17, 377, \underline{782}, 784, \underline{785}, 786,

\underline{787}, 789, 791, 793, 794, 797, 980, 982, 993. db display : \underline{377}. dbc iter : \underline{411}, \underline{412}.

dbcmmnd.web: 6, 8, \underline{764}.
dbdspl.web: 6, 8, \underline{778}.
dbprovs.web: 6, 8, \underline{1649}.

dc: \underline{42}, \underline{43}, \underline{63}, \underline{64}, \underline{92}, \underline{93}, \underline{1014}, \underline{1015}, \underline{1035}, \underline{1036}, \underline{1056}, \underline{1057}, \underline{1077}, \underline{1078}, \underline{1098}, \underline{1099}, \underline{1119}, \underline{1120}, \underline{1140}, \underline{1141}, \underline{1161}, \underline{1162}, \underline{1182}, \underline{1183}, \underline{1203}, \underline{1204}, \underline{1224}, \underline{1225}, \underline{1245}, \underline{1246}, \underline{1266}, \underline{1267}, \underline{1287}, \underline{1288}, \underline{1308}, \underline{1309}, \underline{1329}, \underline{1330}, \underline{1350}, \underline{1351}, \underline{1371}, \underline{1372}, \underline{1392}, \underline{1393}, \underline{1413}, \underline{1414}, \underline{1434}, \underline{1435}, \underline{1455}, \underline{1456}, \underline{1476}, \underline{1477}, \underline{1497}, \underline{1498}, \underline{1518}, \underline{1519}, \underline{1539}, \underline{1540}, \underline{1560}, \underline{1561}, \underline{1581}, \underline{1582}, \underline{1602}, \underline{1603}, \underline{1623}, \underline{1624}, \underline{1644}, \underline{1645}, \underline{1665}, \underline{1666}, \underline{1686}, \underline{1687}, \underline{1707}, \underline{1708}.

DDX Check : 146. DDX LBIndex : 146. DDX Text : 146. : 28, 50, 71, 99. : \underline{130}. : 136, 1004, 1025, 1046, 1067,

1088, 1109, 1130, 1151, 1172, 1193, 1214, 1235, 1256, 1277, 1298, 1319, 1340, 1361, 1382, 1403, 1424, 1445, 1466, 1487, 1508, 1529, 1550, 1571, 1592, 1613, 1634, 1655, 1676, 1697.

: 32, 53, 74. : 29, 51, 72, 100, 120, \underline{138}. Delete: 430, 466, 472, 475, 481, 486, 501, 503,

505, 521, 524, 525, 536, 537, 538, 539, 540, 548, 550, 552, 554, 556, 557, 558, 559, 578, 588, 597, 600, 602, 604, 607, 609, 613, 618, 621, 623, 638, 701, 702, 703, 726, 731, 743, 896.

description status : 857, 858. diagset : \underline{200}, \underline{371}, 373. Dialog Z 1: 6, 8, 115, 116, \underline{136}, 139, 141, 142,

\underline{143}, \underline{144}, 146, 147, 150, 151, 153, 157, 159, 161, 163, 165, 167, 169, 171, 173.

dialogz1.web: 6, 8, \underline{134}.

display all or range: \underline{138}, 142, 150, 171, 173. display from record : \underline{138}, 142, 146. display records : \underline{138}, 142, 146, 150, 156, 165, \underline{369},

\underline{370}, 377, 782, 802, \underline{981}, \underline{982}, 993. display single record : 782, \underline{796}, \underline{797}, 980, 981,

991, 992. display to record : \underline{138}, 142, 146. dlg 1 : \underline{115}. DockControlBar : 39. DoDataExchange: \underline{118}, \underline{123}, \underline{145}, \underline{146}. DoFieldExchange: \underline{1010}, \underline{1011}, \underline{1031}, \underline{1032}, \underline{1052},

\underline{1053}, \underline{1073}, \underline{1074}, \underline{1094}, \underline{1095}, \underline{1115}, \underline{1116}, \underline{1136}, \underline{1137}, \underline{1157}, \underline{1158}, \underline{1178}, \underline{1179}, \underline{1199}, \underline{1200}, \underline{1220}, \underline{1221}, \underline{1241}, \underline{1242}, \underline{1262}, \underline{1263}, \underline{1283}, \underline{1284}, \underline{1304}, \underline{1305}, \underline{1325}, \underline{1326}, \underline{1346}, \underline{1347}, \underline{1367}, \underline{1368}, \underline{1388}, \underline{1389}, \underline{1409}, \underline{1410}, \underline{1430}, \underline{1431}, \underline{1451}, \underline{1452}, \underline{1472}, \underline{1473}, \underline{1493}, \underline{1494}, \underline{1514}, \underline{1515}, \underline{1535}, \underline{1536}, \underline{1556}, \underline{1557}, \underline{1577}, \underline{1578}, \underline{1598}, \underline{1599}, \underline{1619}, \underline{1620}, \underline{1640}, \underline{1641}, \underline{1661}, \underline{1662}, \underline{1682}, \underline{1683}, \underline{1703}, \underline{1704}.

DoModal : 115, 125.

DoPreparePrinting : 85. Dump: \underline{42}, \underline{43}, \underline{63}, \underline{64}, \underline{92}, \underline{93}, \underline{1014}, \underline{1015}, \underline{1035},

\underline{1036}, \underline{1056}, \underline{1057}, \underline{1077}, \underline{1078}, \underline{1098}, \underline{1099}, \underline{1119}, \underline{1120}, \underline{1140}, \underline{1141}, \underline{1161}, \underline{1162}, \underline{1182}, \underline{1183}, \underline{1203}, \underline{1204}, \underline{1224}, \underline{1225}, \underline{1245}, \underline{1246}, \underline{1266}, \underline{1267}, \underline{1287}, \underline{1288}, \underline{1308}, \underline{1309}, \underline{1329}, \underline{1330}, \underline{1350}, \underline{1351}, \underline{1371}, \underline{1372}, \underline{1392}, \underline{1393}, \underline{1413}, \underline{1414}, \underline{1434}, \underline{1435}, \underline{1455}, \underline{1456}, \underline{1476}, \underline{1477}, \underline{1497}, \underline{1498}, \underline{1518}, \underline{1519}, \underline{1539}, \underline{1540}, \underline{1560}, \underline{1561}, \underline{1581}, \underline{1582}, \underline{1602}, \underline{1603}, \underline{1623}, \underline{1624}, \underline{1644}, \underline{1645}, \underline{1665}, \underline{1666}, \underline{1686}, \underline{1687}, \underline{1707}, \underline{1708}.

dynaset : 503, 794, 800, 803, 806, 810, 816, 821, 825, 832, 837, 841, 846, 854, 858, 863, 867, 874, 878, 885, 889, 896, 911, 915, 922, 926, 929, 933, 939, 943, 947, 951, 959, 963, 969, 973, 1005, 1026, 1047, 1068, 1089, 1110, 1131, 1152, 1173, 1194, 1215, 1236, 1257, 1278, 1299, 1320, 1341, 1362, 1383, 1404, 1425, 1446, 1467, 1488, 1509, 1530, 1551, 1572, 1593, 1614, 1635, 1656, 1677, 1698.

e: \underline{430}, \underline{466}, \underline{472}, \underline{475}, \underline{481}, \underline{486}, \underline{501}, \underline{503}, \underline{505}, \underline{521}, \underline{524}, \underline{525}, \underline{536}, \underline{537}, \underline{538}, \underline{539}, \underline{540}, \underline{548}, \underline{550}, \underline{552}, \underline{554}, \underline{556}, \underline{557}, \underline{558}, \underline{559}, \underline{578}, \underline{588}, \underline{597}, \underline{600}, \underline{602}, \underline{604}, \underline{607}, \underline{609}, \underline{613}, \underline{618}, \underline{621}, \underline{623}, \underline{638}, \underline{701}, \underline{702}, \underline{703}, \underline{726}, \underline{731}, \underline{743}, \underline{896}.

eln: \underline{430}. ELN (External Library Number): 429. EnableDocking : 39. end : 207, 325, 359, 410, 411, 412, 414, 430, 441,

444, 447, 454, 490, 491, 507, 508, 530, 531, 543, 544, 561, \underline{792}, \underline{793}, 794, 810, 825, 841, 867, 878, 889, 915, 926, 943, 963, 973, \underline{981}, \underline{982}, 985, 986, 987, 989, 991, 992.

: 45, 66, 95, 102, 124, 147. endl : 153, 154, 155, 328, 338, 340, 342, 346, 347,

349, 359, 370, 376, 408, 409, 410, 414, 430, 441, 443, 444, 446, 447, 449, 454, 462, 463, 466, 467, 472, 475, 477, 481, 483, 484, 486, 490, 491, 498, 501, 503, 504, 505, 507, 508, 517, 519, 520, 521, 524, 525, 528, 529, 530, 531, 532, 533, 536, 537, 538, 539, 540, 542, 543, 544, 547, 548, 550, 552, 553, 554, 556, 557, 558, 559, 561, 577, 578, 582, 584, 587, 588, 592, 593, 596, 597, 600, 602, 603, 604, 606, 607, 609, 613, 616, 618, 619, 621, 623, 627, 629, 631, 633, 635, 636, 638, 642, 645, 647, 650, 652, 655, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 702, 703, 706, 709, 711, 713, 715, 718, 720, 724, 726, 729, 731, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 758, 789, 794, 797, 799, 802, 803, 807, 810, 811, 817, 822, 825, 826, 833, 838, 841, 842, 864, 867, 868, 875, 878, 879, 886, 889, 890, 896, 897, 912, 915, 916, 923, 926, 927, 934, 940, 943, 944, 960, 963, 964, 970, 973, 974, 982, 983, 985, 987.

entry ctr : \underline{800}, 808, 809, 818, 823, 824, 834, 839, 840, 865, 866, 876, 877, 887, 888, 898, 913, 914, 924, 925, 935, 941, 942, 961, 962, 971, 972.

equal range: 359. erase: 349, 444, 447, 650, 655, 726. errmsg : \underline{200}, \underline{368}, \underline{371}, 373. Erscheinungsjahr (Beginn), Sortierform (‘a’) (Pica+

011@ / Pica3 1100): 626. Erscheinungsjahr (Ende), Sortierform (‘b’) (Pica+

011@ / Pica3 1100): 628. Erscheinungsjahr (nach RAK-WB) (‘n’) (Pica+

011@ / Pica3 1100): 632. Erscheinungsjahr (Pica+ 011@ / Pica3 1100): 625. Erster Sprachencode für den vorliegenden Text (‘a’)

(Pica+ 010@ / Pica3 1500): 615. ExecuteSQL: 223, 409, 410, 430, 465, 471, 474,

480, 485, 501, 503, 505, 521, 524, 525, 536, 537, 538, 539, 540, 548, 550, 552, 554, 556, 557, 558, 559, 578, 586, 588, 597, 600, 602, 604, 607, 609, 613, 618, 621, 623, 638, 701, 702, 703, 726, 731, 743.

exemplar production number : 728, 730, 832. exemplar production number numeric: 728, 730,

832. exemplar production number text : 728, 730, 832. Exemplar Production Numbers: 7, 8, 16,

728, 730, 798, 832, \underline{1170}, 1172, 1173, 1175, 1177, 1179, 1181, 1183.

exemplar production numbers : \underline{798}, 832, 833,

834, 835, 836. exit : 116, 159, 368, 378.

exprnums.web: 6, 8, \underline{1166}.

extended chars : \underline{374}, 376. External Library Number (ELN): 429. f 001A 0 : 229, \underline{576}, \underline{577}, 579. : 232, 423, \underline{429}, \underline{430}. f 001B t : 232, \underline{583}, \underline{584}. f 001B 0 : 231, \underline{581}, \underline{582}. f 001D 0 : 234, \underline{586}, \underline{587}, 589. f 002 AT 0 : 238, \underline{591}, \underline{592}, 610. f 003 AT 0 : 240, \underline{612}, \underline{613}. f 010 AT a: 250, \underline{615}, \underline{616}, 624. f 011 AT a: 252, \underline{626}, \underline{627}. f 011 AT b: 253, \underline{628}, \underline{629}. f 011 AT e: 254, \underline{630}, \underline{631}. f 011 AT n: 255, \underline{632}, \underline{633}. f 016H 0 : 257, \underline{641}, \underline{642}. : 268, \underline{431}, \underline{432}. f 021A a: 263, \underline{646}, \underline{647}, 650. f 021A d : 264, \underline{651}, \underline{652}, 655. f 021A e: 265, \underline{656}, \underline{657}. f 021A f : \underline{658}, \underline{659}. f 021A h: 267, \underline{660}, \underline{661}. f 021A 1 : 262, \underline{644}, \underline{645}. : 274, \underline{433}, \underline{434}. f 028A a: 271, \underline{665}, \underline{666}. f 028A c: \underline{667}, \underline{668}. f 028A d : 273, \underline{669}, \underline{670}. f 028A 9 : 270, \underline{663}, \underline{664}. : 279, 423, \underline{435}, \underline{436}. f 028B a: 277, \underline{674}, \underline{675}. f 028B d : 278, \underline{676}, \underline{677}. f 028B 9 : 276, \underline{672}, \underline{673}. : 285, 423, \underline{437}, \underline{438}. f 028C a: 282, \underline{683}, \underline{684}. f 028C c: 283, \underline{685}, \underline{686}. f 028C d : 284, \underline{687}, \underline{688}. f 028C 8 : \underline{679}, \underline{680}. f 028C 9 : 281, \underline{681}, \underline{682}. f 029A a: \underline{692}, \underline{693}. f 029A 8 : \underline{690}, \underline{691}. : 289, \underline{439}, \underline{440}, 452, 555. f 033A n: 287, \underline{695}, \underline{696}. f 033A p: 288, \underline{697}, \underline{698}. f 034D a: 291, \underline{700}, \underline{701}, 703. : 295. f 039B a: 294, \underline{705}, \underline{706}. : 301, 422, 423, \underline{453}, \underline{454}, 460, 461. f 041A a: 298, \underline{710}, \underline{711}. f 041A f : 299, \underline{712}, \underline{713}. f 041A S : 300, \underline{714}, \underline{715}. f 041A 9 : 297, \underline{708}, \underline{709}. f 045F a: \underline{717}, \underline{718}. f 045F b: \underline{719}, \underline{720}. : 304. f 047I a: 303, \underline{723}, \underline{724}, 726. : 307. f 203 AT 0 : 306, \underline{728}, \underline{729}, 731. : 313, 423, \underline{489}, \underline{490}, 498. f 209A a: 309, \underline{733}, \underline{734}. f 209A b: 310, \underline{735}, \underline{736}. f 209A f : 311, \underline{737}, \underline{738}. f 209A j : 312, \underline{739}, \underline{740}. : 316. f 209C a: 315, \underline{742}, \underline{743}. : 248, 324, 423, \underline{506}, \underline{507}, 517. f 209R a: 243, 319, \underline{747}, \underline{748}. f 209R g : 244, 320, \underline{749}, \underline{750}. f 209R S : 245, 321, \underline{751}, \underline{752}. f 209R x : 246, 322, \underline{753}, \underline{754}. f 209R y : 247, 323, \underline{755}, \underline{756}. f 209R 0 : 242, 318, \underline{745}, \underline{746}. : 37, 58, 109, 111, 113, 142, 150, 151, 157,

1488, 1572, 1614. false: 440, 442, 444, 447, 454, 463, 500, 730. field id: 350. field value: 350. field id : \underline{358}, \underline{359}, 360. field value: \underline{358}, \underline{359}, 360, 410, \underline{569}, 577, 582, 584,

587, 592, 593, 594, 595, 613, 616, 617, 619, 620, 626, 627, 629, 631, 633, 635, 642, 645, 647, 652, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 706, 709, 711, 713, 715, 718, 720, 724, 726, 729, 730, 731, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 758.

find : 349, 454, 491, 508, 531, 544. find last of : 430. first : 325, 359, 430, 441, 442, 443, 445, 446, 448,

449, 454, 455, 456, 457, 458, 459, 460, 490, 491, 494, 495, 496, 497, 498, 507, 508, 511, 512, 513, 514, 515, 516, 517, 530, 531, 532, 533, 543, 544.

First Language Code for the Current Text (‘a’)

(Pica+ 010@ / Pica3 1500): 615. first column: \underline{182}. first line: \underline{182}. fix string : 494, 495, 496, 497, 511, 512, 513, 514,

515, 516, 645, 647, 652, 657, 659, 661, 666, 670, 684, 688, 696, 698, 701, 726, \underline{759}, \underline{760}.

Format : 804. format str : \underline{507}, 508, 509, 511, 517, \underline{518}, \underline{519},

521, 524. function: 229, 231, 232, 234, 238, 240, 241, 242,

243, 244, 245, 246, 247, 248, 250, 252, 253, 254, 255, 257, 262, 263, 264, 265, 267, 268, 270, 271, 273, 274, 276, 277, 278, 279, 281, 282, 283, 284, 285, 287, 288, 289, 291, 294, 295, 297, 298, 299, 300, 301, 303, 304, 306, 307, 309, 310, 311, 312, 313, 315, 316, 318, 319, 320, 321, 322, 323, 324, 411, 412, 769.

: 155, \underline{192}, \underline{194}, 370. get : 337, 345. get connection: \underline{209}, \underline{210}. get last connection: \underline{211}, \underline{212}, 372, 373, 378. get last resultset : \underline{216}, \underline{217}, 221, 375, 378. get last resultset size: \underline{220}, \underline{221}, 374. get resultset : \underline{214}, \underline{215}. get resultset size: \underline{218}, \underline{219}. GetDefaultConnect : \underline{1006}, \underline{1007}, \underline{1027}, \underline{1028}, \underline{1048},

\underline{1049}, \underline{1069}, \underline{1070}, \underline{1090}, \underline{1091}, \underline{1111}, \underline{1112}, \underline{1132},

\underline{1133}, \underline{1153}, \underline{1154}, \underline{1174}, \underline{1175}, \underline{1195}, \underline{1196}, \underline{1216},
\underline{1217}, \underline{1237}, \underline{1238}, \underline{1258}, \underline{1259}, \underline{1279}, \underline{1280}, \underline{1300},
\underline{1301}, \underline{1321}, \underline{1322}, \underline{1342}, \underline{1343}, \underline{1363}, \underline{1364}, \underline{1384},

\underline{1385}, \underline{1405}, \underline{1406}, \underline{1426}, \underline{1427}, \underline{1447}, \underline{1448}, \underline{1468},
\underline{1469}, \underline{1489}, \underline{1490}, \underline{1510}, \underline{1511}, \underline{1531}, \underline{1532}, \underline{1552},
\underline{1553}, \underline{1573}, \underline{1574}, \underline{1594}, \underline{1595}, \underline{1615}, \underline{1616}, \underline{1636},
\underline{1637}, \underline{1657}, \underline{1658}, \underline{1678}, \underline{1679}, \underline{1699}, \underline{1700}.

GetDefaultSQL: \underline{1008}, \underline{1009}, \underline{1029}, \underline{1030}, \underline{1050},

\underline{1051}, \underline{1071}, \underline{1072}, \underline{1092}, \underline{1093}, \underline{1113}, \underline{1114}, \underline{1134},
\underline{1135}, \underline{1155}, \underline{1156}, \underline{1176}, \underline{1177}, \underline{1197}, \underline{1198}, \underline{1218},
\underline{1219}, \underline{1239}, \underline{1240}, \underline{1260}, \underline{1261}, \underline{1281}, \underline{1282}, \underline{1302},
\underline{1303}, \underline{1323}, \underline{1324}, \underline{1344}, \underline{1345}, \underline{1365}, \underline{1366}, \underline{1386},
\underline{1387}, \underline{1407}, \underline{1408}, \underline{1428}, \underline{1429}, \underline{1449}, \underline{1450}, \underline{1470},
\underline{1471}, \underline{1491}, \underline{1492}, \underline{1512}, \underline{1513}, \underline{1533}, \underline{1534}, \underline{1554},
\underline{1555}, \underline{1575}, \underline{1576}, \underline{1596}, \underline{1597}, \underline{1617}, \underline{1618}, \underline{1638},
\underline{1639}, \underline{1659}, \underline{1660}, \underline{1680}, \underline{1681}, \underline{1701}, \underline{1702}.

GetDlgItem: 150, 153. GetDocument : \underline{78}, \underline{79}, 81. GetExtendedChars : 376. GetSelItems : 153. GetText : 155. GetWindowText : 155. given name: \underline{534}, \underline{535}, 536, 538. html filename: \underline{788}, \underline{789}. html strm: \underline{782}, 788, 789, 790, 791, 799, 804, 805, 807, 808, 813, 815, 817, 818, 819, 822, 828, 833, 834, 835, 838, 844, 847, 848, 849, 850, 851, 852, 853, 855, 856, 857, 859, 860, 864, 865, 870, 872, 875, 876, 881, 883, 886, 892, 897, 899, 901, 904, 909, 912, 918, 923, 929, 934, 936, 937, 940, 946, 948, 949, 950, 952, 953, 955, 960, 961, 965, 967, 970, 971, 976, 978, 983, 987, 988, 989, 990, 991, 992.

i: \underline{155}, \underline{635}, \underline{730}, \underline{760}, \underline{989}.

: 102.

id column: \underline{556}, 558, 559.

: 102. : 102. : 95. : 95. : 95. : 102. : 30. : 30. : 30. id number ppn: \underline{454}, 455, 456, 460, \underline{461}, \underline{462}, 463,

470, \underline{534}, \underline{535}, 536, 538.

: 30.

id string : \underline{9}, \underline{25}, \underline{47}, \underline{68}, \underline{97}, \underline{134}, \underline{177}, \underline{188}, \underline{364}, \underline{384}, \underline{395}, \underline{418}, \underline{565}, \underline{764}, \underline{778}, \underline{998}, \underline{1019}, \underline{1040}, \underline{1061}, \underline{1082}, \underline{1103}, \underline{1124}, \underline{1145}, \underline{1166}, \underline{1187}, \underline{1208}, \underline{1229}, \underline{1250}, \underline{1271}, \underline{1292}, \underline{1313}, \underline{1334}, \underline{1355}, \underline{1376}, \underline{1397}, \underline{1418}, \underline{1439}, \underline{1460}, \underline{1481}, \underline{1502}, \underline{1523}, \underline{1544}, \underline{1565}, \underline{1586}, \underline{1607}, \underline{1628}, \underline{1649}, \underline{1670}, \underline{1691}, 1717.

id vector : \underline{798}, 808, 809, 810, 823, 824, 825, 839, 840, 841, 865, 866, 867, 876, 877, 878, 887, 888, 889, 913, 914, 915, 924, 925, 926, 941, 942, 943, 961, 962, 963, 971, 972, 973.

id vector iter : \underline{798}, 810, 825, 841, 867, 878, 889,

915, 926, 943, 963, 973. : \underline{24}, 146, 147, 150. : \underline{24}, 147, 150. : \underline{24}, 146. : \underline{24}, 147. : \underline{24}, 146, 147, 150. : \underline{24}, 146. : \underline{24}. : \underline{24}, 146, 147, 150. : \underline{24}, 146, 147, 150. : \underline{24}, 146, 150, 153. : 150, 153. : \underline{24}, 146, 147, 150. : 118, 122, 137, 142. : \underline{24}, 118. : \underline{24}, 137. Identification Number (PPN) (‘0’) (Pica+ 003@

/ Pica3 0100): 612. Identification Number (PPN) (Pica+ 003@ /

Pica3 0100): 611. Identifier and Date of the Change (‘0’) (Pica+

001B /Pica3 0210): 581. Identifier and Date of the Change (‘0’) (Pica+

001D / Pica3 0230): 586. Identifier and Date of the Change in Status (Pica+

001D / Pica3 0230): 585. Identifier and Date of the Most Recent Change

(Pica+ 001B / Pica3 0210) : 580. Identifier and Date of the Original Catalogue Entry

(Pica+ 001A / Pica3 0200): 575, 576. Identifikationsnummer (PPN) (‘0’) (Pica+ 003@

/ Pica3 0100): 612. Identifikationsnummer (PPN) (Pica+ 003@ /

Pica3 0100): 611. : \underline{24}, 109. : \underline{24}, 39, 111. IDR ZTestTYPE : \underline{24}. ifstream: 331. : \underline{142}, 1018, \underline{1026}, \underline{1047}, \underline{1068},

\underline{1089}, \underline{1110}, \underline{1131}, \underline{1152}, \underline{1173}, \underline{1194}, \underline{1215}, \underline{1236}, \underline{1257}, \underline{1278}, \underline{1299}, \underline{1320}, \underline{1341}, \underline{1362}, \underline{1383}, \underline{1404}, \underline{1425}, \underline{1446}, \underline{1467}, \underline{1488}, \underline{1509}, \underline{1530}, \underline{1551}, \underline{1572},

\underline{1593}, \underline{1614}, \underline{1635}, \underline{1656}, \underline{1677}, \underline{1698}.

: 45, 66, 95. in file: \underline{331}, 337, 342, 345, 357. in filename: \underline{329}, \underline{330}, 331. in string : \underline{759}, \underline{760}. indicators : \underline{30}, 39. init category map: 192, \underline{224}, \underline{225}, 326, 370. init copyright strings : 107, 115, \underline{129}, \underline{130}. InitCommonControls : 108. InitInstance: \underline{100}, \underline{107}, 108, 116. insert : 359. InsertString : 150. int value: \underline{181}. internal str : \underline{507}, 508, 509, 515, 517, \underline{518}, \underline{519},

521, 524. is open: 799, 983. IsBOF : 467, 477, 501, 503, 521, 524, 537, 538,

540, 549, 550, 554, 557, 599, 603, 608, 619, 622, 701, 702, 703, 726, 731, 794, 802, 803, 805, 807, 811, 812, 814, 817, 818, 819, 822, 826, 827, 829, 833, 834, 835, 838, 842, 843, 848, 852, 855, 856, 859, 860, 861, 864, 868, 869, 871, 875, 879, 880, 882, 886, 890, 891, 893, 897, 909, 912, 916, 917, 919, 923, 927, 928, 929, 930, 934, 937, 940, 944, 945, 948, 952, 956, 960, 964, 966, 970, 974, 975, 977.

isdigit : 635, 730.

IsEOF : 794, 809, 813, 818, 824, 828, 834, 840, 844, 866, 870, 877, 881, 888, 892, 900, 904, 914, 918, 925, 929, 936, 942, 946, 962, 965, 972, 976. IsFieldNull : 805, 834, 849, 852, 855, 856, 859, 860. IsKindOf : 79. IsOpen: 223, 488, 505, 525, 559, 610, 624, 703, 731. isspace: 347, 352, 650, 655. IsStoring : 60. items ctr : \underline{153}, 154, 155. iter : \underline{207}, \underline{325}, \underline{359}, \underline{410}, 411, 412, \underline{414}, \underline{430}, \underline{441},

442, 443, 445, 446, 448, 449, \underline{454}, 455, 456, 457, 458, 459, 460, \underline{490}, 491, 494, 495, 496, 497, 498, \underline{507}, 508, 511, 512, 513, 514, 515, 516, 517, \underline{530},

531, 532, 533, \underline{543}, 544, \underline{561}, \underline{987}, \underline{989}.

iter pair : \underline{359}.

iterator: 207, 325, 359, 410, 411, 412, 414, 430, 441, 454, 490, 507, 528, 530, 542, 543, 561, 798, 987, 989.

j: \underline{990}. J-Satz: 262. j-set: 262. Katagorisierungsrichtlinien: 611, 612. Kennung und Datum der Änderung (‘0’) (Pica+

001B / Pica3 0210): 581. Kennung und Datum der Änderung (‘0’) (Pica+

001D / Pica3 0230): 586. Kennung und Datum der Ersterfassung (Pica+

001A / Pica3 0200): 575, 576. Kennung und Datum der letzten Änderung (Pica+

001B / Pica3 0210) : 580.

Kennung und Datum der Statusänderung (Pica+

001D / Pica3 0230): 585. lang id : \underline{620}, 622.

language.web: 6, 8, \underline{1439}.

Languages: 7, 8, 16, 619, 620, 798, \underline{1443}, 1445,

1446, 1448, 1450, 1452, 1454, 1456. languages : \underline{798}, 915, 916, 917, 918, 919, 920. Languages Records: 921. last column: \underline{182}. last line: \underline{182}. : 153, 155. : \underline{642}. len: \underline{374}, 375, 376. length: 349, 635, 636, 648, 649, 650, 653, 654,

655, 726, 760. library department str : \underline{490}, 491, 492, 497, 498,

\underline{499}, \underline{500}, 501, 503. library number str : \underline{490}, 491, 492, 495, 498, \underline{499},

\underline{500}, 501, 503. license str : \underline{507}, 508, 509, 514, 517, \underline{518}, \underline{519},

520, 521, 524. LoadStdProfileSettings : 110. LoadToolBar : 39. local strm: \underline{414}, \underline{560}, \underline{561}, \underline{758}. local time: \underline{789}. localtime: 789. location: \underline{183}, \underline{184}. Lock : 390, 789. lock : 200, 207, 338, 340, 342, 344, 346, 347, 352,

356, 359, \underline{388}, \underline{390}. log file: \underline{193}, \underline{199}, \underline{206}, \underline{329}, \underline{358}, \underline{401}, \underline{407}. log strm: \underline{193}, \underline{199}, 200, \underline{206}, 207, \underline{329}, 338, 340,

342, 344, 346, 347, 352, 356, \underline{358}, 359, \underline{401}, \underline{407}, \underline{408}, \underline{411}, \underline{412}, \underline{423}, \underline{428}, \underline{429}, \underline{430}, \underline{431}, \underline{432}, \underline{433}, \underline{434}, \underline{435}, \underline{436}, \underline{437}, \underline{438}, \underline{439}, \underline{440}, 442, 451, \underline{453}, \underline{454}, 456, 460, \underline{461}, \underline{462}, \underline{489}, \underline{490}, 491, 498, \underline{499}, \underline{500}, \underline{506}, \underline{507}, 508, 517, \underline{518}, \underline{519}, \underline{527}, \underline{528}, 532, 533, \underline{534}, \underline{535}, \underline{541}, \underline{542}, 544, \underline{545}, \underline{546}, \underline{555}, \underline{556}, \underline{569}, \underline{574}, \underline{576}, \underline{577}, \underline{581}, \underline{582}, \underline{583}, \underline{584}, \underline{586}, \underline{587}, \underline{591}, \underline{592}, \underline{612}, \underline{613}, \underline{615}, \underline{616}, \underline{626}, \underline{627}, \underline{628}, \underline{629}, \underline{630}, \underline{631}, \underline{632}, \underline{633}, \underline{634}, \underline{635}, \underline{641}, \underline{642}, \underline{644}, \underline{645}, \underline{646}, \underline{647}, \underline{651}, \underline{652}, \underline{656}, \underline{657}, \underline{658}, \underline{659}, \underline{660}, \underline{661}, \underline{663}, \underline{664}, \underline{665}, \underline{666}, \underline{667}, \underline{668}, \underline{669}, \underline{670}, \underline{672}, \underline{673}, \underline{674}, \underline{675}, \underline{676}, \underline{677}, \underline{679}, \underline{680}, \underline{681}, \underline{682}, \underline{683}, \underline{684}, \underline{685}, \underline{686}, \underline{687}, \underline{688}, \underline{690}, \underline{691}, \underline{692}, \underline{693}, \underline{695}, \underline{696}, \underline{697}, \underline{698}, \underline{700}, \underline{701}, \underline{705}, \underline{706}, \underline{708}, \underline{709}, \underline{710}, \underline{711}, \underline{712}, \underline{713}, \underline{714}, \underline{715}, \underline{717}, \underline{718}, \underline{719}, \underline{720}, \underline{723}, \underline{724}, \underline{728}, \underline{729}, \underline{733}, \underline{734}, \underline{735}, \underline{736}, \underline{737}, \underline{738}, \underline{739}, \underline{740}, \underline{742}, \underline{743}, \underline{745}, \underline{746}, \underline{747}, \underline{748}, \underline{749}, \underline{750}, \underline{751}, \underline{752}, \underline{753}, \underline{754}, \underline{755}, \underline{756}, \underline{769}.

: 1170, 1296, 1338, 1506. lookahead: 332.

LPCREATESTRUCT: 38, 39. lpCreateStruct : \underline{38}, \underline{39}. m access number : 818, \underline{1107}, 1110, 1116. m access number id : 818, \underline{1107}, 1110, 1116. m additional creator main: 892, \underline{1380}, 1383, 1389. m additional creator parallel : 892, \underline{1380}, 1383,

1389. m additions main: 892, \underline{1380}, 1383, 1389. m additions parallel : 892, \underline{1380}, 1383, 1389. m association type: 918, \underline{1464}, 1467, 1473. m association type name: 918, \underline{1464}, 1467, 1473. m author id : 866, 870, \underline{1296}, 1299, 1305, \underline{1317},

1320, 1326. m authorship: 892, \underline{1380}, 1383, 1389. m bibliographic representation: 853, 854, \underline{1212},

1215, 1221. m bibliographic representation code: \underline{1191}, 1194,

1200. m bibliographic representation description english: 855,

\underline{1191}, 1194, 1200. m bibliographic representation description german: 856,

\underline{1191}, 1194, 1200. m bibliographic representation refinement : 860,

\underline{1212}, 1215, 1221. m bibliographic type code id : \underline{1191}, 1194, 1200. m bibliographic type id : 840, 844, \underline{1212}, 1215,

1221, \underline{1233}, 1236, 1242. m call number : 813, \underline{1128}, 1131, 1137. m call number id : 503, 809, 813, \underline{1128}, 1131,

1137, \underline{1149}, 1152, 1158. m chain info: 929, \underline{1506}, 1509, 1515. m chain link number : 929, \underline{1506}, 1509, 1515. m chain number : 929, 936, \underline{1506}, 1509, 1515,

\underline{1548}, 1551, 1557. m content summary : 901, 902, 905, \underline{1422}, 1425,

1431. m content summary id : 901, 902, 905, \underline{1422},

1425, 1431. m continuation: \underline{892}, 901, 902, 904, 905, 907,

\underline{1380}, \underline{1382}, \underline{1422}, 1425, 1431. m continuation additions main: 892, \underline{1380}, \underline{1382},

1383, 1389. m continuation main canonical title: 892, \underline{1380},

1382, 1383, 1389. m contributor id : 877, 881, \underline{1338}, 1341, 1347,

\underline{1359}, 1362, 1368. m database provider id : 972, 976, \underline{1653}, 1656,

1662, \underline{1674}, 1677, 1683. m database provider name: 976, \underline{1653}, 1656, 1662. m date most recent change: 804, 1086, 1089, 1095. m date original entry : 804, 1086, 1089, 1095. m date status change: 804, 1086, 1089, 1095. m description english: 929, 949, 953, \underline{1002}, 1005,

1011, \underline{1023}, 1026, 1032, \underline{1485}, 1488, 1494. m description german: 929, 949, 953, \underline{1002}, 1005,

1011, \underline{1023}, 1026, 1032, \underline{1485}, 1488, 1494. m description status : 857, 858, \underline{1212}, 1215, 1221. m description status code: \underline{1191}, 1194, 1200. m description status description english: 859,

\underline{1191}, 1194, 1200. m description status description german: 860,

\underline{1191}, 1194, 1200. m eln most recent change: 804, \underline{1086}, 1089, 1095. m eln original entry : 804, \underline{1086}, 1089, 1095. m eln status change: 804, \underline{1086}, 1089, 1095. m exemplar production number : 1170. m exemplar production number id : 834, \underline{1170},

1173, 1179. m exemplar production number numeric: 834,

1170, 1173, 1179. m exemplar production number text : 834, \underline{1170},

1173, 1179. m format type: 828, \underline{1569}, 1572, 1578. m given name: 870, 881, \underline{1296}, 1299, 1305, \underline{1338},

1341, 1347. m id number ppn: 870, 881, 929, 1296, 1299, 1305,

1338, 1341, 1347, 1506, 1509, 1515. m identification number : 804, \underline{1086}, 1089, 1094,

1095. m indicator : \underline{1485}, 1488, 1494. m internal remarks : 828, \underline{1569}, 1572, 1578. m language abbrev : 918, \underline{1443}, 1446, 1452. m language id : 914, 918, \underline{1443}, 1446, 1452, \underline{1464},

1467, 1473. m language name english: 918, \underline{1443}, 1446, 1452. m language name german: 918, \underline{1443}, 1446, 1452. m library department : 813, \underline{1128}, 1131, 1137. m library number : 813, \underline{1128}, 1131, 1137. m license indicator : 828, \underline{1569}, 1572, 1578. m main canonical title: 892, \underline{1380}, 1383, 1389. m main title id : 888, 892, \underline{1380}, 1383, 1389,

\underline{1401}, 1404, 1410. m miscellaneous : 860, \underline{1212}, 1215, 1221. m nDefaultType: 1005, 1026, 1047, 1068, 1089,

1110, 1131, 1152, 1173, 1194, 1215, 1236, 1257, 1278, 1299, 1320, 1341, 1362, 1383, 1404, 1425, 1446, 1467, 1488, 1509, 1530, 1551, 1572, 1593, 1614, 1635, 1656, 1677, 1698.

m nFields : 1005, 1026, 1047, 1068, 1089, 1110, 1131, 1152, 1173, 1194, 1215, 1236, 1257, 1278, 1299, 1320, 1341, 1362, 1383, 1404, 1425, 1446, 1467, 1488, 1509, 1530, 1551, 1572, 1593, 1614, 1635, 1656, 1677, 1698.

m nRetCode: 430, 466, 472, 475, 481, 486, 501, 503, 505, 521, 524, 525, 536, 537, 538, 539, 540, 548, 550, 552, 554, 556, 557, 558, 559, 578, 588, 597, 600, 602, 604, 607, 609, 613, 618, 621, 623, 638, 701, 702, 703, 726, 731, 743, 896. m parallel canonical title: 892, \underline{1380}, 1383, 1389. m pDatabase: 205. m pDocument : 79. m permutation pattern: 936, \underline{1548}, 1551, 1557. m permutation pattern id : 936, \underline{1548}, 1551, 1557. m physical description id : 942, 946, \underline{1254}, 1257,

1263, \underline{1275}, 1278, 1284.

m physical form: 845, 846, \underline{1212}, 1215, 1221. m physical form code: \underline{1191}, 1194, 1200. m physical form material name english: 849, 850,

\underline{1191}, 1194, 1200. m physical form material name german: 852,

\underline{1191}, 1194, 1200. m pica category id : 946, 947, \underline{1002}, 1005, 1011, \underline{1044}, 1047, 1053, \underline{1254}, 1257, 1263.

m pica field id : 950, 951, \underline{1023}, 1026, 1032, \underline{1044},

1047, 1053, \underline{1254}, 1257, 1263. m pica plus category code: 949, \underline{1002}, 1005, 1011. m pica plus field code: 953, \underline{1023}, 1026, 1032. m pica 3 category code: 949, \underline{1002}, 1005, 1011. m pica 3 field code: 953, \underline{1023}, 1026, 1032. m pica3 51xx : \underline{1485}, 1488, 1494. m pica3 800 : \underline{1485}, 1488, 1494. m place: 965, 976, \underline{1611}, 1614, 1620, \underline{1653},

1656, 1662. m pMainWnd : 114. m prefix : 870, 881, \underline{1296}, 1299, 1305, \underline{1338},

1341, 1347. m primary info source: 965, \underline{1611}, 1614, 1620. m publisher id : 962, 965, \underline{1611}, 1614, 1620, \underline{1632},

1635, 1641. m publisher name: 965, \underline{1611}, 1614, 1619, 1620. m publisher place: 1619. m record id : 794, 803, 804, 807, 808, 817, 818,

822, 828, 833, 834, 838, 844, 864, 865, 875, 876, 886, 892, 897, 899, 901, 904, 912, 918, 923, 929, 934, 936, 940, 946, 960, 961, 970, 971, \underline{1086}, 1089, 1095, \underline{1107}, 1110, 1116, \underline{1149}, 1152, 1158, \underline{1170}, 1173, 1179, \underline{1233}, 1236, 1242, \underline{1275}, 1278, 1284, \underline{1317}, 1320, 1326, \underline{1359}, 1362, 1368, \underline{1401}, 1404, 1410, \underline{1422}, 1425, 1431, \underline{1464}, 1467, 1473, \underline{1527}, 1530, 1536, \underline{1548}, 1551, 1557, \underline{1590}, 1593, 1599, \underline{1632}, 1635, 1641, \underline{1674}, 1677, 1683. m remote access id : 824, 828, \underline{1569}, 1572, 1578,

\underline{1590}, 1593, 1599.

m source abbrev : 803, \underline{1065}, 1068, 1074.

m source address : 803, \underline{1065}, 1068, 1073, 1074. m source id : 803, 804, \underline{1065}, 1068, 1074, \underline{1086},

1089, 1095. m source name: 803, \underline{1065}, 1068, 1074. m special location: 813, \underline{1128}, 1131, 1137. m standard text : 892, \underline{1380}, 1383, 1389. m strError : 430, 466, 472, 475, 481, 486, 501, 503,

505, 521, 524, 525, 536, 537, 538, 539, 540, 548, 550, 552, 554, 556, 557, 558, 559, 578, 588, 597, 600, 602, 604, 607, 609, 613, 618, 621, 623, 638, 701, 702, 703, 726, 731, 743, 896.

m subject : 929, \underline{1506}, 1509, 1515. m subject id : 925, 929, \underline{1506}, 1509, 1515, \underline{1527},

1530, 1536. m subject id end : 936, \underline{1548}, 1551, 1557. m subject id start : 936, \underline{1548}, 1551, 1557. m subject type id : 929, \underline{1485}, 1488, 1494, \underline{1506},

1509, 1515. m surname: 870, 881, \underline{1296}, 1299, 1305, \underline{1338},

1341, 1347. m temp id : 409, 467, 468, 477, 478, 501, 504, 524,

537, 538, 540, 549, 550, 553, 554, 557, 558, 559, 599, 603, 606, 608, 619, 620, 622, 624, 701, 702, 703, 726, 731, \underline{1695}, 1698, 1704.

m text : 946, \underline{1254}, 1257, 1263. m transliteration code: 860, \underline{1212}, 1215, 1221. m URL: 828, \underline{1569}, 1572, 1578. m URN : 828, \underline{1569}, 1572, 1578. m web display text : 828, \underline{1569}, 1572, 1578. m wndStatusBar : \underline{29}, 39. m wndToolBar : \underline{29}, 39. m year appearance begin: 805, \underline{1086}, 1089, 1095. m year appearance end : 805, \underline{1086}, 1089, 1095. m year appearance original : 805, \underline{1086}, 1089,

1095. m year appearance rak wb: 805, \underline{1086}, 1089, 1095. : \underline{542}, 544. main canonical title: \underline{543}, 544, \underline{545}, \underline{546}, 547. main table name: \underline{527}, \underline{528}, 532, 533, \underline{534}, \underline{535},

536, 537, 538, \underline{541}, \underline{542}, 544, \underline{545}, \underline{546}, 547, 550, 552.

main titles : \underline{798}, 889, 890, 891, 892, 893, 894. Main Titles: 7, 8, 16, 548, 549, 552, 553, 646,

652, 798, 892, \underline{1380}, 1382, 1383, 1385, 1387, 1389, 1391, 1393.

Main Titles Records : 895.

mainfrm.web: 6, 8, \underline{25}.

make pair : 359, 360, 582, 584, 645, 648, 650, 653, 655, 657, 659, 661, 664, 666, 670, 673, 675, 677, 680, 682, 684, 688, 691, 693, 696, 698, 709, 711, 713, 715, 718, 720, 734, 736, 738, 740, 746, 748, 750, 752, 754, 756.

malloc: 201, 328. map: 424, 570. : \underline{192}, \underline{194}. : \underline{192}, \underline{194}. MDH YYLTYPE: \underline{182}. MDH YYSTYPE: \underline{181}. message strm: \underline{370}. min: 649, 654, 726.

mnttls.web: 6, 8, \underline{1376}.

MoveNext : 794, 809, 813, 818, 824, 828, 834, 840, 860, 866, 870, 877, 881, 888, 892, 901, 903, 914, 918, 925, 929, 936, 942, 955, 962, 965, 972, 976.

multimap: 424. multithreading: 422. mutex : \underline{388}, 390, 391. mutex. See CMutex: 3. name column: \underline{556}, 557. next char : \underline{332}, 342. nMaxLength: 1073, 1094, 1619. non digit switch: \underline{730}, 731. npos : 430. : \underline{337}. ODBC (Open Database Connectivity): 7. ofstream: 193, 199, 206, 329, 358, 374, 388, 401,

407, 411, 412, 423, 428, 569, 574, 769, 782. : 147. : 95, 102. : 45. OnAppAbout : \underline{100}, 102, \underline{125}. OnBeginPrinting : \underline{86}, \underline{87}. OnBnClickedClearDatabase: 147, \underline{168}, \underline{169}. OnBnClickedDisplayAll : 147, \underline{170}, \underline{171}. OnBnClickedDisplayRange: 147, \underline{172}, \underline{173}. OnBnClickedDisplayRecords : 147, \underline{164}, \underline{165}. OnBnClickedParseRecords : 147, \underline{162}, \underline{163}. OnBnClickedPerformSearch: 147, \underline{160}, \underline{161}. OnBnClickedWriteRecordsFile: 147, \underline{166}, \underline{167}. OnCancel : \underline{158}, \underline{159}. once: 10, 27, 49, 70, 133, 176, 179, 190, 385, 396,

419, 566, 765, 779, 999, 1020, 1041, 1062, 1083, 1104, 1125, 1146, 1167, 1188, 1209, 1230, 1251, 1272, 1293, 1314, 1335, 1356, 1377, 1398, 1419, 1440, 1461, 1482, 1503, 1524, 1545, 1566, 1587, 1608, 1629, 1650, 1671, 1692.

OnCreate: \underline{38}, \underline{39}. OnDraw : \underline{80}, \underline{81}. OnEndPrinting : \underline{88}, \underline{89}. OnFileNew : 102. OnFileOpen: 102. OnFilePrint : 95. OnFilePrintPreview : 95. OnFilePrintSetup: 102. OnInitDialog : \underline{149}, \underline{150}, 151.

OnNewDocument : \underline{57}, \underline{58}. OnOK : 116, \underline{152}, \underline{153}, 157. OnPreparePrinting : \underline{84}, \underline{85}. Open: 205, 409, 466, 476, 501, 503, 521, 524, 536,

537, 539, 548, 550, 554, 556, 558, 598, 603, 608, 618, 621, 701, 702, 726, 731, 794, 800, 803, 806, 810, 816, 821, 825, 832, 837, 841, 846, 854, 858, 863, 867, 874, 878, 885, 889, 896, 911, 915, 922, 926, 929, 933, 939, 943, 947, 951, 959, 963, 969, 973.

open: 200, 331, 374, 789. Open Database Connectivity (ODBC): 7. open html file: 377, 782, \underline{788}, \underline{789}.

opstrmtp.web: 6, 8, \underline{384}.

Original Year of Appearance (‘e’) (Pica+ 011@

/ Pica3 1100): 630. out file: \underline{374}, 376. out string : \underline{759}, \underline{760}. output stream: 200, 207, 338, 340, 342, 344, 346,

347, 352, 356, 359, \underline{388}. Output Stream Type: 6, 8, 15, 193, 199, 206,

329, 358, \underline{388}, 390, 391, 401, 407, 408, 411, 412, 423, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 453, 454, 461, 462, 489, 490, 499, 500, 506, 507, 518, 519, 527, 528, 534, 535, 541, 542, 545, 546, 555, 556, 574, 576, 577, 581, 582, 583, 584, 586, 587, 591, 592, 612, 613, 615, 616, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 641, 642, 644, 645, 646, 647, 651, 652, 656, 657, 658, 659, 660, 661, 663, 664, 665, 666, 667, 668, 669, 670, 672, 673, 674, 675, 676, 677, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 690, 691, 692, 693, 695, 696, 697, 698, 700, 701, 705, 706, 708, 709, 710, 711, 712, 713, 714, 715, 717, 718, 719, 720, 723, 724, 728, 729, 733, 734, 735, 736, 737, 738, 739, 740, 742, 743, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 769.

outputColumn: 1011, 1032, 1053, 1074, 1095, 1116, 1137, 1158, 1179, 1200, 1221, 1242, 1263, 1284, 1305, 1326, 1347, 1368, 1389, 1410, 1431, 1452, 1473, 1494, 1515, 1536, 1557, 1578, 1599, 1620, 1641, 1662, 1683, 1704.

: \underline{337}, 339, 342, 348, 354. pair: 359, 423, 430, 441, 454, 490, 507, 530,

543, 570. : \underline{542}, 544. parallel canonical title: \underline{543}, 544, \underline{545}, \underline{546}, 547. parameter : \underline{183}, \underline{184}. parse record : 192. parse records : \underline{138}, 142, 146, 150, 156, 163, \underline{329},

\underline{330}, 357, \underline{369}, \underline{370}, 376, 377. ParseCommandLine: 112. pBT : \underline{150}.

                                           pccatfld.web: 6, 8, \underline{1040}.

pDatabase: \underline{1004}, \underline{1025}, \underline{1046}, \underline{1067}, \underline{1088}, \underline{1109},

\underline{1130}, \underline{1151}, \underline{1172}, \underline{1193}, \underline{1214}, \underline{1235}, \underline{1256}, \underline{1277},
\underline{1298}, \underline{1319}, \underline{1340}, \underline{1361}, \underline{1382}, \underline{1403}, \underline{1424}, \underline{1445},
\underline{1466}, \underline{1487}, \underline{1508}, \underline{1529}, \underline{1550}, \underline{1571}, \underline{1592}, \underline{1613},
\underline{1634}, \underline{1655}, \underline{1676}, \underline{1697}.

pdb: \underline{1005}, \underline{1026}, \underline{1047}, \underline{1068}, \underline{1089}, \underline{1110}, \underline{1131},

\underline{1152}, \underline{1173}, \underline{1194}, \underline{1215}, \underline{1236}, \underline{1257}, \underline{1278},
\underline{1299}, \underline{1320}, \underline{1341}, \underline{1362}, \underline{1383}, \underline{1404}, \underline{1425}, \underline{1446},
\underline{1467}, \underline{1488}, \underline{1509}, \underline{1530}, \underline{1551}, \underline{1572}, \underline{1593}, \underline{1614},
\underline{1635}, \underline{1656}, \underline{1677}, \underline{1698}.

pDC : \underline{80}, \underline{81}, \underline{86}, \underline{87}, \underline{88}, \underline{89}.

pDoc: \underline{81}.

pDocTemplate: \underline{111}.

pDX : \underline{118}, \underline{123}, \underline{145}, \underline{146}. pEB : \underline{150}, \underline{153}, 155, 157. peek : 342. perform search: \underline{138}, 142, 146, 150, 156, 161,

\underline{369}, \underline{370}, 376, 377, 378.

permutation pattern: \underline{454}, 456, 459, 460, \underline{461},

\underline{462}, 484.

permutation patterns : \underline{798}, 933, 934, 936, 937, 938. Permutation Patterns: 7, 8, 16, 470, 798,

933, 935, \underline{1548}, 1550, 1551, 1553, 1555, 1557, 1559, 1561.

permutation switch: \underline{454}, 456, 459, 460, \underline{461}, \underline{462},

463, 483, 484, 487. personal names : 423, 527. personal names category func: 423, 433, 434, 436,

438, \underline{527}, \underline{528}, 533. pFX : \underline{1010}, \underline{1011}, \underline{1031}, \underline{1032}, \underline{1052}, \underline{1053}, \underline{1073},

\underline{1074}, \underline{1094}, \underline{1095}, \underline{1115}, \underline{1116}, \underline{1136}, \underline{1137}, \underline{1157}, \underline{1158}, \underline{1178}, \underline{1179}, \underline{1199}, \underline{1200}, \underline{1220}, \underline{1221}, \underline{1241}, \underline{1242}, \underline{1262}, \underline{1263}, \underline{1283}, \underline{1284}, \underline{1304}, \underline{1305}, \underline{1325}, \underline{1326}, \underline{1346}, \underline{1347}, \underline{1367}, \underline{1368}, \underline{1388}, \underline{1389}, \underline{1409}, \underline{1410}, \underline{1430}, \underline{1431}, \underline{1451}, \underline{1452}, \underline{1472}, \underline{1473}, \underline{1493}, \underline{1494}, \underline{1514}, \underline{1515}, \underline{1535}, \underline{1536}, \underline{1556}, \underline{1557}, \underline{1577}, \underline{1578}, \underline{1598}, \underline{1599}, \underline{1619}, \underline{1620}, \underline{1640}, \underline{1641}, \underline{1661},

\underline{1662}, \underline{1682}, \underline{1683}, \underline{1703}, \underline{1704}.

                                           physdesc.web: 6, 8, \underline{1250}.

physical description id : \underline{701}, 703.

Physical Descriptions: 7, 8, 16, 702, 703, 798, \underline{1254}, 1256, 1257, 1259, 1261, 1263, 1265, 1267.

physical descriptions : \underline{798}, 943, 944, 945, 946,

947, 950, 951, 955, 956, 957. Physical Descriptions Records : 958. physical form: 845, 846. PICA Production Number (PPN): 453, 611, 612. Pica+ 001A (Pica3 0200) Identifier and Date of the Original Catalogue Entry: 575, 576. Pica+ 001A (Pica3 0200) Kennung und Datum

der Ersterfassung: 575, 576. Pica+ 001B (Pica3 0210): 581, 583. Pica+ 001B (Pica3 0210) Identifier and Date of

the Most Recent Change: 580. Pica+ 001B (Pica3 0210) Kennung und Datum

der letzten Änderung: 580. Pica+ 001D (Pica3 0230): 586. Pica+ 001D (Pica3 0230) Identifier and Date of

the Change in Status: 585. Pica+ 001D (Pica3 0230) Kennung und Datum

der Statusänderung: 585. Pica+ 002@ (Pica3 0500): 591. Pica+ 002@ (Pica3 0500) Bibliographical Type

and Status: 590. Pica+ 002@ (Pica3 0500) Bibliographische Gattung

und Status: 590. Pica+ 003@ (Pica3 0100) Identification Number

(PPN): 611, 612. Pica+ 003@ (Pica3 0100) Identifikationsnummer

(PPN): 611, 612. Pica+ 010@ (Pica3 1500) Code(s) für

Sprachen: 614, 615. Pica+ 010@ (Pica3 1500) Code(s) for

Languages: 614, 615. Pica+ 011@ (Pica3 1100) Erscheinungsjahr: 625,

626, 628, 630, 632. Pica+ 011@ (Pica3 1100) Year of

Appearance: 625, 626, 628, 630, 632. PICA Categories: 7, 8, 16, 701, 798, \underline{1002},

1004, \underline{1005}, 1007, 1009, 1011, 1013, 1015, 1018. pica categories : \underline{798}, 947, 948, 949, 950. pica categories pica fields : \underline{798}. PICA Categories PICA Fields: 7, 8, 16, 798,

\underline{1044}, 1046, 1047, 1049, 1051, 1053, 1055, 1057. pica category id : \underline{701}, 703. pica field id : \underline{701}, 703. pica fields : \underline{798}, 951, 952, 953, 954. PICA Fields: 7, 8, 16, 701, 798, \underline{1023}, 1025,

1026, 1028, 1030, 1032, 1034, 1036. pica plus category id : 226, 228, 230, 233, 235,

237, 239, 241, 249, 251, 256, 259, 261, 269, 275, 280, 286, 290, 293, 296, 302, 305, 308, 314, 317, 410, \underline{423}, 427, 561.

pica plus field id : 227, 229, 231, 232, 234, 236, 238, 240, 242, 243, 244, 245, 246, 247, 250, 252, 253, 254, 255, 257, 260, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 276, 277, 278, 281, 282, 283, 284, 287, 288, 291, 294, 297, 298, 299, 300, 303, 306, 309, 310, 311, 312, 315, 318, 319, 320, 321, 322, 323, 410, \underline{569}, 573, 582, 584, 645, 648, 650, 653, 655, 657, 659, 661, 664, 666, 670, 673, 675, 677, 680, 682, 684, 688, 691, 693, 696, 698, 709, 711, 713, 715, 718, 720, 734, 736, 738, 740, 746, 748, 750, 752, 754, 756, 758.

pica record : \underline{358}, \underline{359}. Pica Record: 6, 8, 17, 192, 337, 341, 354,

358, 359, 399, \underline{400}, 403, \underline{404}, 405, \underline{406}, 408,

412, 414, \underline{423}, \underline{569}.

pica 3 category id : 226, 228, 230, 233, 235, 237, 239, 241, 249, 251, 256, 259, 261, 269, 275, 280, 286, 290, 293, 296, 302, 305, 308, 314, 317, \underline{423}, 427, 561.

picacats.web: 6, 8, \underline{998}.
picaflds.web: 6, 8, \underline{1019}.
picarcrd.web: 6, 8, \underline{395}.

Pica3 0100 (Pica+ 003@) Identification Number

(PPN): 611, 612. Pica3 0100 (Pica+ 003@) Identifikationsnummer

(PPN): 611, 612. Pica3 0200 (Pica+ 001A) Identifier and Date of the

Original Catalogue Entry: 575, 576. Pica3 0200 (Pica+ 001A) Kennung und Datum

der Ersterfassung: 575, 576. Pica3 0210 (Pica+ 001B): 581, 583. Pica3 0210 (Pica+ 001B) Identifier and Date of

the Most Recent Change: 580. Pica3 0210 (Pica+ 001B) Kennung und Datum

der letzten Änderung: 580. Pica3 0230 (Pica+ 001D): 586. Pica3 0230 (Pica+ 001D) Identifier and Date of

the Change in Status: 585. Pica3 0230 (Pica+ 001D) Kennung und Datum

der Statusänderung: 585. Pica3 0500 (Pica+ 002@): 591. Pica3 0500 (Pica+ 002@) Bibliographical Type

and Status: 590. Pica3 0500 (Pica+ 002@) Bibliographische Gattung

und Status: 590. Pica3 1100 (Pica+ 011@) Erscheinungsjahr: 625,

626, 628, 630, 632. Pica3 1100 (Pica+ 011@) Year of

Appearance: 625, 626, 628, 630, 632. Pica3 1500 (Pica+ 010@) Code(s) für

Sprachen: 614, 615. Pica3 1500 (Pica+ 010@) Code(s) for

Languages: 614, 615. pInfo: \underline{84}, \underline{85}, \underline{86}, \underline{87}, \underline{88}, \underline{89}. place str : \underline{440}, 442, 446, 447, 451, \underline{555}, \underline{556}, 557. place switch: \underline{440}, 442, 448. pLB : 150, 153, 155. pointer value: \underline{181}. port num: \underline{199}, \underline{200}, 204. pos : \underline{349}, \underline{374}, 375, 376, \underline{430}. position: \underline{182}. pParent : \underline{141}, \underline{142}. PPN (PICA Production Number): 453, 611, 612. PQF (Prefix Query Format: 327. PreCreateWindow : \underline{36}, \underline{37}, \underline{82}, \underline{83}. prefix : \underline{534}, \underline{535}, 536, 538, \underline{560}, \underline{561}, \underline{758}. prev field id : \underline{333}, 340, 343, 345, 346, 347. previous repeat code: 422, 423. previous repeat code ctr : \underline{422}, 454, 460. primary corporate entity : 689. primary corporate entity expansion: 689. primary switch: \underline{440}, 442, 444, 447, 451, \underline{555},

\underline{556}, 557. printf : 184.

prmpttrn.web: 6, 8, \underline{1544}.

ProcessShellCommand : 113. publisher id : 558. publisher str : \underline{440}, 442, 443, 444, 451. publisher switch: \underline{440}, 442, 445. publishers : \underline{798}, 963, 964, 965, 966, 967. Publishers: 7, 8, 16, 557, 559, 689, 798, \underline{1611},

1613, 1614, 1616, 1618, 1620, 1622, 1624. publishers database providers func: 442, 451,

\underline{555}, \underline{556}, 559.

publshrs.web: 6, 8, \underline{1607}.

push back : 201, 229, 231, 232, 234, 238, 240, 242, 243, 244, 245, 246, 247, 248, 250, 252, 253, 254, 255, 257, 262, 263, 264, 265, 267, 268, 270, 271, 273, 274, 276, 277, 278, 279, 281, 282, 283, 284, 285, 287, 288, 289, 291, 294, 295, 297, 298, 299, 300, 301, 303, 304, 306, 307, 309, 310, 311, 312, 313, 315, 316, 318, 319, 320, 321, 322, 323, 324, 328, 360, 454, 498, 517, 531, 532, 544, 582, 584, 645, 648, 650, 653, 655, 657, 659, 661, 664, 666, 670, 673, 675, 677, 680, 682, 684, 688, 691, 693, 696, 698, 709, 711, 713, 715, 718, 720, 734, 736, 738, 740, 746, 748, 750, 752, 754, 756, 794, 809, 824, 840, 866, 877, 888, 914, 925, 942, 962, 972.

r: \underline{368}, \underline{440}, \underline{490}, \underline{507}, \underline{984}. : \underline{138}, \underline{139}, 173.

rcbbtyps.web: 6, 8, \underline{1229}.
rccllnms.web: 6, 8, \underline{1145}.
rccntrbt.web: 6, 8, \underline{1355}.
rcdbprov.web: 6, 8, \underline{1670}.
rcmnttls.web: 6, 8, \underline{1397}.
rcphsdsc.web: 6, 8, \underline{1271}.
rcrmaccs.web: 6, 8, \underline{1586}.

rec: \underline{368}, \underline{374}, 375, 376. rec ctr : \underline{371}, 374, 375.

recathrs.web: 6, 8, \underline{1313}.
reclang.web: 6, 8, \underline{1460}.

record ctr : \underline{335}, 342, 354, \underline{782}, \underline{793}, 794, \underline{796}, \underline{797}, 804, \underline{986}, 987, 991, 992.

record id : \underline{429}, \underline{430}, \underline{431}, \underline{432}, \underline{433}, \underline{434}, \underline{435}, \underline{436},

\underline{437}, \underline{438}, \underline{439}, \underline{440}, 442, 451, \underline{453}, \underline{454}, 456, 460, \underline{461}, \underline{462}, 479, 484, \underline{489}, \underline{490}, 491, 498, \underline{499}, \underline{500}, 503, 505, \underline{506}, \underline{507}, 508, 517, \underline{518}, \underline{519}, 525, \underline{527}, \underline{528}, 532, 533, \underline{534}, \underline{535}, 539, 540, \underline{541}, \underline{542}, 544, \underline{545}, \underline{546}, 554, \underline{555}, \underline{556}, 558, 559, \underline{576}, \underline{577}, \underline{581}, \underline{582}, \underline{583}, \underline{584}, \underline{586}, \underline{587}, \underline{591}, \underline{592}, 603, 606, 608, \underline{612}, \underline{613}, \underline{615}, \underline{616}, 620, 622, \underline{626}, \underline{627}, \underline{628}, \underline{629}, \underline{630}, \underline{631}, \underline{632}, \underline{633}, \underline{634}, \underline{635}, 636, 637, \underline{641}, \underline{642}, \underline{644}, \underline{645}, \underline{646}, \underline{647}, \underline{651}, \underline{652}, \underline{656}, \underline{657}, \underline{658}, \underline{659}, \underline{660}, \underline{661}, \underline{663}, \underline{664}, \underline{665}, \underline{666}, \underline{667}, \underline{668}, \underline{669}, \underline{670}, \underline{672}, \underline{673}, \underline{674}, \underline{675}, \underline{676}, \underline{677}, \underline{679}, \underline{680}, \underline{681}, \underline{682}, \underline{683}, \underline{684}, \underline{685}, \underline{686}, \underline{687}, \underline{688}, \underline{690}, \underline{691}, \underline{692}, \underline{693}, \underline{695}, \underline{696}, \underline{697}, \underline{698}, \underline{700}, \underline{701}, 703, \underline{705}, \underline{706}, \underline{708}, \underline{709}, \underline{710}, \underline{711}, \underline{712}, \underline{713}, \underline{714}, \underline{715}, \underline{717}, \underline{718}, \underline{719}, \underline{720}, \underline{723}, \underline{724}, 726, \underline{728}, \underline{729}, 731, \underline{733}, \underline{734}, \underline{735}, \underline{736}, \underline{737}, \underline{738}, \underline{739}, \underline{740}, \underline{742}, \underline{743}, \underline{745}, \underline{746}, \underline{747}, \underline{748}, \underline{749}, \underline{750}, \underline{751}, \underline{752}, \underline{753}, \underline{754}, \underline{755}, \underline{756}, \underline{769}, 801, 821, 837, 874, 911, 939, 959, 969, 992. record id vector : \underline{792}, \underline{793}, 794, \underline{986}, 987, 989. record ids : 991. record number : \underline{796}, \underline{797}, 800, 801, 802, 806, 807, 816, 817, 821, 822, 832, 833, 837, 838, 863, 864, 874, 875, 885, 886, 896, 897, 911, 912, 922, 923, 933, 934, 939, 940, 959, 960, 969, 970. records : \underline{793}, 794, \underline{798}, 800, 802, 803, 804, 805,

807, 808, 817, 818, 822, 828, 833, 834, 838, 844, 864, 865, 875, 876, 886, 892, 897, 899, 912, 918, 923, 929, 934, 936, 940, 946, 960, 961, 970, 971. Records: 7, 8, 16, 626, 793, 798, 801, 803, \underline{1086}, 1088, 1089, 1091, 1093, 1095, 1097, 1099.

                                               records.web: 6, 8, \underline{1082}.

Records Authors: 7, 8, 16, 798, 863, 865, 873, \underline{1317}, 1319, 1320, 1322, 1324, 1326, 1328, 1330.

records authors : \underline{798}, 863, 864, 866, 873.

Records Bibliographic Types: 7, 8, 16, 601, 609, 610, 798, 837, 839, \underline{1233}, 1235, 1236, 1238, 1240, 1242, 1244, 1246.

records bibliographic types : \underline{798}, 837, 838, 840,

862. Records Call Numbers: 7, 8, 16, 505, 798,

806, 808, 815, \underline{1149}, 1151, 1152, 1154, 1156, 1158, 1160, 1162.

records call numbers : \underline{798}, 806, 807, 809, 815. records contributors : \underline{798}, 874, 875, 877, 884. Records Contributors: 7, 8, 16, 798, 874,

876, 884, \underline{1359}, 1361, 1362, 1364, 1366, 1368, 1370, 1372.

Records Database Providers: 7, 8, 16, 798, 969, 971, 979, \underline{1674}, 1676, 1677, 1679, 1681, 1683, 1685, 1687.

records database providers : \underline{798}, 969, 970, 972,

979. Records Languages: 7, 8, 16, 798, 911, 913,

1460, \underline{1464}, 1466, 1467, 1469, 1471, 1473, 1475, 1477.

records languages : \underline{798}, 911, 912, 914, 918, 921. Records Main Titles: 7, 8, 16, 554, 798, 885,

887, \underline{1401}, 1403, 1404, 1406, 1408, 1410, 1412, 1414.

records main titles : \underline{798}, 885, 886, 888, 895. Records Physical Descriptions: 7, 8, 16, 703,

798, 939, 941, \underline{1275}, 1277, 1278, 1280, 1282, 1284, 1286, 1288.

records physical descriptions : \underline{798}, 939, 940,

942, 958. records publishers : \underline{798}, 959, 960, 962, 968. Records Publishers: 7, 8, 16, 798, 959, 961,

968, \underline{1632}, 1634, 1635, 1637, 1639, 1641, 1643, 1645.

Records Remote Access: 7, 8, 16, 241, 525, 798, 821, 823, \underline{1590}, 1592, 1593, 1595, 1597, 1599, 1601, 1603.

records remote access : \underline{798}, 821, 822, 824, 831. records subjects : \underline{798}, 922, 923, 925, 932. Records Subjects: 7, 8, 16, 479, 798, 922, 924,

\underline{1527}, 1529, 1530, 1532, 1534, 1536, 1538, 1540.

recpubs.web: 6, 8, \underline{1628}.
recsubjs.web: 6, 8, \underline{1523}.

Remote Access: 7, 8, 16, 241, 521, 522, 523, 798,

\underline{1569}, 1571, 1572, 1574, 1576, 1578, 1580, 1582. remote access : \underline{798}, 825, 826, 827, 828, 829, 830. remote access id : \underline{507}, 508, 517, \underline{518}, \underline{519}, 522,

523, 524. Remote Access Records : 831. repeat code: \underline{358}, \underline{359}, \underline{423}, 454, 490, 561. repeat code ctr : \underline{454}, 456, 457, 458, 460, \underline{461}, \underline{462}. replace: 430.

resource.web: 6, 8, \underline{22}.

result : \underline{330}, 338, 341, 346. resultset ctr : \underline{214}, \underline{215}, \underline{218}, \underline{219}. resultsets : \underline{193}, 215, 217, 219, 221, 328. reusing Category Container and

Subcategory Container functions: 241. RFX BigInt : 1179, 1305, 1347, 1515. RFX Bool : 1494, 1578, 1620. RFX Date: 1095. RFX Int : 1011, 1095, 1137, 1515. RFX Long : 1011, 1032, 1053, 1074, 1095, 1116,

1137, 1158, 1179, 1200, 1221, 1242, 1263, 1284, 1305, 1326, 1347, 1368, 1389, 1410, 1431, 1452, 1473, 1494, 1515, 1536, 1557, 1578, 1599, 1620, 1641, 1662, 1683, 1704.

RFX Text : 1011, 1032, 1073, 1074, 1094, 1095, 1116, 1137, 1179, 1200, 1221, 1263, 1305, 1347, 1389, 1431, 1452, 1473, 1494, 1515, 1557, 1578, 1619, 1620, 1662.

rmaccess.web: 6, 8, \underline{1565}.

: 79, 111. s: \underline{414}, \underline{561}, \underline{573}. save char ctr : \underline{648}, 649, 650, \underline{653}, 654, 655, \underline{726}.

sbctgcnt.web: 6, 8, \underline{565}.
scanner.web: 6, 8, \underline{177}.

search command : \underline{138}, 146, 150, 155, 156, 157,

\underline{369}, \underline{370}, 377, \underline{981}. search command str : \underline{782}, \underline{981}, \underline{982}, 987. search pqf : \underline{327}, \underline{328}, 370. search str : \underline{370}. second : 207, 325, 359, 410, 411, 412, 414, 430,

441, 443, 446, 449, 454, 455, 456, 457, 458, 459, 460, 490, 494, 495, 496, 497, 498, 507, 511, 512, 513, 514, 515, 516, 517, 530, 533, 543, 544, 561.

select : 409, 473, 503, 524, 537, 550, 558, 601, 702. select value: \underline{153}, 155. selection str : \underline{155}. Serialize: \underline{59}, \underline{60}. server name: \underline{199}, \underline{200}, 204. server selector : \underline{153}, 155, \underline{156}, \underline{369}, \underline{370}. SetCheck : 150. SetFieldType: 1011, 1032, 1053, 1074, 1095, 1116,

1137, 1158, 1179, 1200, 1221, 1242, 1263, 1284, 1305, 1326, 1347, 1368, 1389, 1410, 1431, 1452, 1473, 1494, 1515, 1536, 1557, 1578, 1599, 1620, 1641, 1662, 1683, 1704.

SetFocus : 150, 157. SetIndicators : 39. SetLoginTimeout : 205. SetQueryTimeout : 205. SetRegistryKey : 110. SetSel : 150, 157. show : 325, 338, 342, 359, \underline{413}, \underline{414}, \underline{560}, \underline{561},

\underline{757}, \underline{758}. ShowWindow : 114. size: 210, 212, 215, 217, 219, 221, 408, 410, 529,

542, 543, 561, 593, 595, 730. size type: 209, 210, 214, 215, 218, 219, 349,

430, 760. source abbrev str : \underline{803}, 804. source address str : \underline{803}, 804. source id : 192, \underline{193}, 200, 410. source name str : \underline{803}, 804. source recordset : \underline{193}, 205, 207. Sources: 7, 8, 16, 193, 798, \underline{1065}, 1067, 1068,

1070, 1072, 1074, 1076, 1078. sources : \underline{798}, 803.

sources.web: 6, 8, \underline{1061}.

special location str : \underline{490}, 491, 492, 496, 498, \underline{499},

\underline{500}, 501, 503. sql strm: \underline{223}, \underline{370}, \underline{408}, 409, 410, \underline{422}, \underline{430}, \underline{462},

464, 465, 466, 470, 471, 472, 473, 474, 475, 479, 480, 481, 484, 485, 486, \underline{500}, 501, 503, 505, \underline{519}, 521, 524, 525, \underline{535}, 536, 537, 538, 539, 540, \underline{546}, 547, 548, 550, 552, 554, \underline{556}, 557, 558, 559, \underline{577}, 578, \underline{587}, 588, \underline{592}, 594, 595, 596, 597, 601, 602, 603, 604, 606, 607, 608, 609, \underline{613}, \underline{616}, 617, 618, 620, 621, 622, 623, \underline{635}, 637, 638, \underline{701}, 702, 703, \underline{724}, 726, \underline{729}, 731, \underline{743}, \underline{793}, 794, \underline{798}, 800, 803, 806, 810, 816, 821, 825, 832, 837, 841, 846, 854, 858, 863, 867, 874, 878, 885, 889, 896, 911, 915, 922, 926, 929, 933, 939, 943, 947, 951, 959, 963, 969, 973.

sql 1 strm: \underline{591}, \underline{592}, 594, 595, 596, 600, 606. ssource id : \underline{199}, \underline{200}. standard text : \underline{543}, 544, \underline{545}, \underline{546}, 547. start : \underline{792}, \underline{793}, 794, \underline{981}, \underline{982}, 985, 986, 991, 992. state: \underline{337}, 339, 340, 342, 343, 348, 349, 350, 351,

354, 355, 356, \underline{542}, 544. static variables and thread-safety: 422. std: \underline{191}, \underline{366}, \underline{387}, \underline{398}, \underline{420}, \underline{567}, \underline{766}, \underline{780}, \underline{1000},

\underline{1021}, \underline{1042}, \underline{1063}, \underline{1084}, \underline{1105}, \underline{1126}, \underline{1147}, \underline{1168}, \underline{1189}, \underline{1210}, \underline{1231}, \underline{1252}, \underline{1273}, \underline{1294}, \underline{1315}, \underline{1336}, \underline{1357}, \underline{1378}, \underline{1399}, \underline{1420}, \underline{1441}, \underline{1462}, \underline{1483}, \underline{1504}, \underline{1525}, \underline{1546}, \underline{1567}, \underline{1588}, \underline{1609}, \underline{1630}, \underline{1651}, \underline{1672}, \underline{1693}.

stdafx.web: 6, 8, \underline{9}.

str : 130, 153, 154, 155, 161, 163, 165, 167, 169, 223, 325, 330, 337, 338, 340, 342, 346, 347, 357, 359, 360, 368, 370, 373, 374, 376, 377, 408, 409, 410, 412, 430, 432, 434, 436, 438, 440, 441, 442, 443, 444, 446, 447, 448, 449, 454, 456, 457, 458, 462, 463, 464, 465, 466, 467, 468, 470, 471, 472, 473, 474, 475, 477, 478, 479, 480, 481, 483, 484, 485, 486, 490, 491, 498, 500, 501, 502, 503, 504, 505, 507, 508, 517, 519, 520, 521, 522, 524, 525, 528, 529, 531, 532, 533, 536, 537, 538, 539, 540, 542, 543, 544, 546, 547, 548, 549, 550, 552, 553, 554, 556, 557, 558, 559, 577, 578, 579, 582, 584, 587, 588, 589, 592, 593, 596, 597, 599, 600, 601, 602, 603, 604, 606, 607, 608, 609, 610, 613, 616, 617, 618, 619, 620, 621, 622, 623, 624, 627, 629, 631, 633, 635, 636, 637, 638, 642, 645, 647, 649, 650, 652, 654, 655, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 702, 703, 706, 709, 711, 713, 715, 718, 720, 724, 726, 729, 731, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 789, 793, 794, 797, 799, 800, 802, 803, 806, 807, 810, 811, 816, 817, 821, 822, 825, 826, 832, 833, 837, 838, 841, 842, 846, 854, 858, 863, 864, 867, 868, 874, 875, 878, 879, 885, 886, 889, 890, 896, 897, 904, 911, 912, 915, 916, 922, 923, 926, 927, 929, 933, 934, 939, 940, 943, 944, 947, 951, 959, 960, 963, 964, 969, 970, 973, 974, 982, 983, 985, 987, 991, 992.

string: 18, 127, 336, 349, 358, 359, 370, 413, 414, 423, 424, 430, 440, 441, 454, 461, 462, 490, 499, 500, 507, 518, 519, 527, 528, 530, 534, 535, 541, 542, 543, 544, 545, 546, 547, 555, 556, 560, 561, 569, 634, 635, 645, 647, 648, 652, 653, 657, 659, 661, 666, 670, 684, 688, 696, 698, 701, 726, 757, 758, 759, 760, 788, 803.

string length limit : \underline{725}, 726.

string value: \underline{181}. strings : 343. stringstream: 130, 153, 161, 163, 165, 167, 169, 223, 328, 330, 358, 359, 368, 370, 408, 413, 414, 422, 430, 432, 434, 436, 438, 440, 454, 462, 490, 500, 507, 519, 528, 535, 542, 546, 556, 560, 561, 577, 582, 584, 587, 591, 592, 613, 616, 627, 629, 631, 633, 635, 642, 645, 647, 648, 652, 653, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 706, 709, 711, 713, 715, 718, 720, 724, 726, 729, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 757, 758, 793, 798, 899, 982, 1007.

strtol : 533.

sub F 028A: 433.

sub F 041A: 422, 423, 454, 456, 460, \underline{461}, \underline{462}, 488. sub F 209A: 423, 489, 491, 498, \underline{499}, \underline{500}, 505. sub F 209R: 423, 508, 517, \underline{518}, \underline{519}, 525. sub iter : \underline{410}, 411. sub personal names : 423, 534. sub personal names category func: 423, 532, 533,

\underline{534}, \underline{535}, 540. sub titles category func: 423, 544, \underline{545}, \underline{546}, 554. subcategories : \underline{423}. subcategory : \underline{429}, \underline{430}, \underline{431}, \underline{432}, \underline{433}, \underline{434}, \underline{435},

\underline{436}, \underline{437}, \underline{438}, \underline{439}, \underline{440}, \underline{453}, \underline{454}, \underline{489}, \underline{490}, \underline{506}, \underline{507}, \underline{576}, \underline{577}, \underline{581}, \underline{582}, \underline{583}, \underline{584}, \underline{586}, \underline{587}, \underline{591}, \underline{592}, 593, 594, 595, \underline{612}, \underline{613}, \underline{615}, \underline{616}, 617, 619, 620, \underline{626}, \underline{627}, \underline{628}, \underline{629}, \underline{630}, \underline{631}, \underline{632}, \underline{633}, \underline{634}, \underline{635}, \underline{641}, \underline{642}, \underline{644}, \underline{645}, \underline{646}, \underline{647}, 648, 650, \underline{651}, \underline{652}, 653, 655, \underline{656}, \underline{657}, \underline{658}, \underline{659}, \underline{660}, \underline{661}, \underline{663}, \underline{664}, \underline{665}, \underline{666}, \underline{667}, \underline{668}, \underline{669}, \underline{670}, \underline{672}, \underline{673}, \underline{674}, \underline{675}, \underline{676}, \underline{677}, \underline{679}, \underline{680}, \underline{681}, \underline{682}, \underline{683}, \underline{684}, \underline{685}, \underline{686}, \underline{687}, \underline{688}, \underline{690}, \underline{691}, \underline{692}, \underline{693}, \underline{695}, \underline{696}, \underline{697}, \underline{698}, \underline{700}, \underline{701}, \underline{705}, \underline{706}, \underline{708}, \underline{709}, \underline{710}, \underline{711}, \underline{712}, \underline{713}, \underline{714}, \underline{715}, \underline{717}, \underline{718}, \underline{719}, \underline{720}, \underline{723}, \underline{724}, 726, \underline{728}, \underline{729}, 730, 731, \underline{733}, \underline{734}, \underline{735}, \underline{736}, \underline{737}, \underline{738}, \underline{739}, \underline{740}, \underline{742}, \underline{743}, \underline{745}, \underline{746}, \underline{747}, \underline{748}, \underline{749}, \underline{750},

\underline{751}, \underline{752}, \underline{753}, \underline{754}, \underline{755}, \underline{756}, \underline{769}. Subcategory Container: 6, 8, 17, 225, 227,

229, 231, 232, 234, 236, 238, 240, 241, 242, 243, 244, 245, 246, 247, 250, 252, 253, 254, 255, 257, 260, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 276, 277, 278, 281, 282, 283, 284, 287, 288, 291, 294, 297, 298, 299, 300, 303, 306, 309, 310, 311, 312, 315, 318, 319, 320, 321, 322, 323, 359, 360, 408, 411, 418, \underline{423}, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 453, 454, 489, 490, 494, 495, 496, 497, 506, 507, 511, 512, 513, 514, 515, 516, 565, \underline{569}, 570, 572, 573, 574, 576, 577, 579, 581, 582, 583, 584, 586, 587, 589, 591, 592, 610, 612, 613, 615, 616, 624, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 639, 641, 642, 644, 645, 646, 647, 650, 651, 652, 655, 656, 657, 658, 659, 660, 661, 663, 664, 665, 666, 667, 668, 669, 670, 672, 673, 674, 675, 676, 677, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 690, 691, 692, 693, 695, 696, 697, 698, 700, 701, 703, 705, 706, 708, 709, 710, 711, 712, 713, 714, 715, 717, 718, 719, 720, 723, 724, 726, 728, 729, 731, 733, 734, 735, 736, 737, 738, 739, 740, 742, 743, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 758, 760, \underline{768}, 769, 1712.

Subcategory Container::f 001A 0: 576, 577. Subcategory Container::f 001B t: 583. Subcategory Container::f 001B 0: 581, 582. Subcategory Container::f 001D 0: 586. Subcategory Container::f 002@ 0: 591. Subcategory Container::f 003@ 0: 612, 613. Subcategory Container::f 010 AT a: 615, 616. Subcategory Container::f 011 AT a: 626, 627. Subcategory Container::f 011 AT b: 628, 629. Subcategory Container::f 011 AT e: 630, 631. Subcategory Container::f 011 AT n: 632, 633. Subcategory Container::operator=: 572, 573. Subcategory Container::year appear-

ance func/: 634, 635. subcategory map: 227, 229, 231, 232, 234, 236,

238, 240, 242, 243, 244, 245, 246, 247, 250, 252, 253, 254, 255, 257, 260, 262, 263, 264, 265, 266, 267, 270, 271, 272, 273, 276, 277, 278, 281, 282, 283, 284, 287, 288, 291, 294, 297, 298, 299, 300, 303, 306, 309, 310, 311, 312, 315, 318, 319, 320, 321, 322, 323, 359, 410, \underline{423}.

Subcategory Map Type: 423, \underline{570}. Subcategory Multimap Type: 423. subcategory repeat vector : \underline{454}, 456, \underline{490}, 491, 492,

498, \underline{507}, 508, 509, 517. subcategory vector : 360, 410, \underline{423}, 561. Subcategory Vector Type: 410, 423, 561, \underline{570}.

subject : \underline{454}, 456, 458, 460, \underline{461}, \underline{462}, 463, 470.
subject id : \underline{422}, 423, 454, 462, 470, 473, 477,

478, 479, 483, 484. subject id end : 470. subject id start : \underline{422}, 423, 454, 470, 478, 483, 484. subject ids : 470. subject type char : \underline{454}, 456, 460, \underline{461}, \underline{462}, 463,

464, 467, 469, 470. subject type id : \underline{464}, 468, 470.

subject types : \underline{798}, 929.

Subject Types: 7, 8, 16, 798, \underline{1485}, 1487, 1488,

1490, 1492, 1494, 1496, 1498. subjects : \underline{798}, 926, 927, 928, 929, 930, 931. Subjects: 7, 8, 16, 470, 477, 798, \underline{1506}, 1508, 1509, 1511, 1513, 1515, 1517, 1519.

                                           subjects.web: 6, 8, \underline{1502}.

Subjects Records : 932.

                                           subjtyps.web: 6, 8, \underline{1481}.

substr : 349, 430, 577, 587, 650, 655, 726.

surname: \underline{534}, \underline{535}, 536, 538.

: 114.

table: \underline{556}, 557, 558.

table ctr : \underline{528}, 532, 533, \underline{534}, \underline{535}, 537, \underline{543}, 544,

\underline{545}, \underline{546}, 550, 551, 554. table id : \underline{537}, 538, 539, 540, \underline{546}, 550, 551,

552, 553, 554. table switch: \underline{555}, \underline{556}. : 39. temp call number id : \underline{501}, 503, 504, 505. temp id : 501. temp ids : \underline{422}, \underline{462}, 466, 467, 468, 476, 477, 478,

488, \underline{500}, 501, 503, 504, 505, \underline{519}, 521, 524, 525, \underline{535}, 536, 537, 538, 539, 540, \underline{546}, 548, 549, 550, 553, 554, \underline{556}, 557, 558, 559, \underline{592}, 598, 599, 601, 603, 605, 606, 608, 610, \underline{617}, 618, 619, 620, 621,

622, 624, \underline{701}, 702, 703, \underline{726}, \underline{729}, 731.

Temp IDs: 7, 8, 16, 409, 422, 462, 500, 501, 519, 535, 546, 556, 592, 617, 701, 726, 729, \underline{1695}, 1697, 1698, 1700, 1702, 1704, 1706, 1708.

temp remote access id : \underline{521}, 524, 525.

temp str : \underline{648}, 650, \underline{653}, 655, \underline{726}.

temp strm: \underline{130}, \underline{153}, 154, 155, \underline{161}, \underline{163}, \underline{165}, \underline{167}, \underline{169}, \underline{223}, 325, \underline{328}, \underline{330}, 337, 338, 340, 342, 346, 347, 349, 357, \underline{358}, \underline{359}, 360, \underline{368}, \underline{370}, 373, 374, 376, 377, \underline{408}, 409, 410, 412, \underline{422}, \underline{430}, \underline{432}, \underline{434}, \underline{436}, \underline{438}, \underline{440}, 441, 442, 443, 444, 446, 447, 448, 449, \underline{454}, 456, 457, 458, \underline{462}, 463, 464, 466, 467, 468, 470, 472, 473, 475, 477, 478, 479, 481, 483, 484, 486, \underline{490}, 491, 498, \underline{500}, 501, 502, 503, 504, 505, \underline{507}, 508, 517, \underline{519}, 520, 521, 522, 524, 525, \underline{528}, 529, 530, 531, 532, 533, \underline{535}, 536, 537, 538, 539, 540, \underline{542}, 543, 544, \underline{546}, 547, 548, 549, 550, 552, 553, 554, \underline{556}, 557, 558, 559, \underline{577}, 578, 579, \underline{582}, \underline{584}, \underline{587}, 588, 589, \underline{592}, 593, 596, 597, 599, 600, 601, 602, 603, 604, 606, 607, 608, 609, 610, \underline{613}, \underline{616}, 617, 618, 619, 620, 621, 622, 623, 624, \underline{627}, \underline{629}, \underline{631}, \underline{633}, \underline{635}, 636, 637, 638, \underline{642}, \underline{645}, \underline{647}, 649, 650, \underline{652}, 654, 655, \underline{657}, \underline{659}, \underline{661}, \underline{664}, \underline{666}, \underline{668}, \underline{670}, \underline{673}, \underline{675}, \underline{677}, \underline{680}, \underline{682}, \underline{684}, \underline{686}, \underline{688}, \underline{691}, \underline{693}, \underline{696}, \underline{698}, \underline{701}, 702, 703, \underline{706}, \underline{709}, \underline{711}, \underline{713}, \underline{715}, \underline{718}, \underline{720}, \underline{724}, 726, \underline{729}, 731, \underline{734}, \underline{736}, \underline{738}, \underline{740}, \underline{743}, \underline{746}, \underline{748}, \underline{750}, \underline{752}, \underline{754}, \underline{756}, 789, \underline{793}, 794, 797, \underline{798}, 799, 802, 803, 807, 810, 811, 817, 822, 825, 826, 833, 838, 841, 842, 864, 867, 868, 875, 878, 879, 886, 889, 890, 896, 897, 912, 915, 916, 923, 926, 927, 934, 940, 943, 944, 960, 963, 964, 970, 973, 974, \underline{982}, 983, 985, 987, 991, 992, \underline{1007}.

tempids.web: 6, 8, \underline{1691}.

theApp: \underline{101}, \underline{105}. this : 39, 338, 342. thread safety: 422. thread-safety and static variables: 422. threads: 422. time: \underline{430}, 789. Time (‘t’) (Pica+ 001B / Pica3 0210): 583. time mutex : \underline{18}, \underline{127}, 789. titles category func: 423, 432, \underline{541}, \underline{542}, 544. tm: 789. TO DO: 5, 218, 220, 265, 422, 586, 593, 619,

721, 1712. top: 409, 473, 503, 524, 537, 550, 558, 601, 702. tp: \underline{789}. : 39. true: 155, 337, 369, 440, 442, 445, 448, 451, 456,

459, 483, 500, 730. : 37, 58, 116, 150, 151, 369. u: \underline{181}. Uhrzeit (‘t’) (Pica+ 001B / Pica3 0210): 583. UINT: 30, 39. Unlock : 391, 789. unlock : 200, 207, 338, 340, 342, 344, 346, 347,

352, 356, 359, \underline{388}, \underline{391}. UpdateData: 150, 157. UpdateWindow : 114, 150, 157. URL str : \underline{507}, 508, 509, 512, 517, \underline{518}, \underline{519},

521, 524. URN str : \underline{507}, 508, 509, 513, 517, \underline{518}, \underline{519},

521, 524. Ursprüngliches Erscheinungsjahr (‘e’) (Pica+ 011@

/ Pica3 1100): 630. : \underline{368}. used fields : \underline{528}, 531, 532, \underline{542}, 544. used fields iter : \underline{528}, 531, \underline{542}, 544. value: \underline{183}, \underline{184}. value strm: \underline{546}, 547, 552. : \underline{11}. vector: 193, 209, 210, 214, 215, 218, 219, 411,

412, 423, 430, 441, 454, 490, 507, 528, 530, 542, 543, 569, 570, 574, 792, 793, 798, 986, 987, 989.

web str : \underline{507}, 508, 509, 516, 517, \underline{518}, \underline{519},

521, 524. : \underline{11}. write field data: 341, 346, \underline{358}, \underline{359}, 360. write records file: \underline{138}, 142, 146, 150, 156, 167,

\underline{369}, \underline{370}, 374, 376, 377. write to database: 338, 342, 400, 401, \underline{407},

\underline{408}, 412. : 39. : 39. YAZ: 364. Year of Appearance (according to RAK-WB) (‘n’)

(Pica+ 011@ / Pica3 1100): 632. Year of Appearance (Beginning), Form for Sorting

(‘a’) (Pica+ 011@ / Pica3 1100): 626. Year of Appearance (End), Form for Sorting (‘b’)

(Pica+ 011@ / Pica3 1100): 628. Year of Appearance (Pica+ 011@ / Pica3

1100): 625. year appearance func: 627, 629, 631, 633, \underline{634},

\underline{635}, 639. yylex : 6, 8, \underline{183}, \underline{184}. YYLTYPE: \underline{182}, 183, 184. YYSTYPE: \underline{181}, 183, 184. z: \underline{368}, \underline{370}. zclient : \underline{400}, \underline{407}, \underline{408}, 410. ZClient: 6, 8, 17, 155, \underline{192}, 194, 197, \underline{198}, 199,

\underline{200}, 205, 206, \underline{207}, 209, 210, 212, 215, 217, 219, 221, 223, 224, 225, 326, 328, 330, 357, 358, 359, 360, 370, 378, \underline{399}, 400, 407, 408, \underline{423}, \underline{569}, 619.

zclient.web: 6, 8, \underline{188}.

ZOOM connection: 193, 201, 209, 210, 211,

212, 327, 328, 368. ZOOM connection connect : 204. ZOOM connection create: 201. ZOOM connection destroy : 378. ZOOM connection error : 368. ZOOM connection error x : 373. ZOOM connection new : 368. ZOOM connection option set : 202, 203, 368. ZOOM connection search pqf : 328, 368. ZOOM event : 372. ZOOM record get : 368, 375. ZOOM resultset: 193, 214, 215, 216, 217,

218, 219, 328, 368. ZOOM resultset destroy : 378.

ZOOM resultset record : 368, 375. ZOOM resultset size: 219, 221. zoomtst0 : 116, \underline{367}, \underline{368}. zoomtst2 : 116, 156, \underline{369}, \underline{370}, 378. zoomtst3 : \underline{379}, \underline{380}.

ztest.web: 6, 8, \underline{97}.
ztestdoc.web: 6, 8, \underline{47}.
ztstview.web: 6, 8, \underline{68}.
ztstzoom.web: 6, 8, \underline{364}.

IWF Metadata Harvester II NAMES OF THE SECTIONS 459

⟨ Declare ZOOM functions 367, 369, 379 ⟩ Used in section 383.

⟨ Declare global functions 129 ⟩ Used in section 133.

⟨ Declare location type 182 ⟩ Used in sections 186 and 187. ⟨ Declare Access Numbers functions 1109, 1111, 1113, 1115, 1117, 1119 ⟩ Used in section 1107. ⟨ Declare Authors functions 1298, 1300, 1302, 1304, 1306, 1308 ⟩ Used in section 1296. ⟨ Declare Bibliographic Type Codes functions 1193, 1195, 1197, 1199, 1201, 1203 ⟩ Used in section 1191. ⟨ Declare Bibliographic Types functions 1214, 1216, 1218, 1220, 1222, 1224 ⟩ Used in section 1212. ⟨ Declare Call Numbers functions 1130, 1132, 1134, 1136, 1138, 1140 ⟩ Used in section 1128. ⟨ Declare Category Container functions 426, 429, 431, 433, 435, 437, 439, 453, 461, 489, 499, 506, 518, 527, 534,

541, 545, 555, 560 ⟩ Used in section 423. ⟨ Declare Content Summaries functions 1424, 1426, 1428, 1430, 1432, 1434 ⟩ Used in section 1422. ⟨ Declare Contributors functions 1340, 1342, 1344, 1346, 1348, 1350 ⟩ Used in section 1338. ⟨ Declare DB Display functions 784, 786, 788, 790, 792, 796, 981 ⟩ Used in section 782. ⟨ Declare Database Command functions 771, 773 ⟩ Used in section 769. ⟨ Declare Database Providers functions 1655, 1657, 1659, 1661, 1663, 1665 ⟩ Used in section 1653. ⟨ Declare Exemplar Production Numbers functions 1172, 1174, 1176, 1178, 1180, 1182 ⟩ Used in section 1170. ⟨ Declare Languages functions 1445, 1447, 1449, 1451, 1453, 1455 ⟩ Used in section 1443. ⟨ Declare Main Titles functions 1382, 1384, 1386, 1388, 1390, 1392 ⟩ Used in section 1380. ⟨ Declare PICA Categories PICA Fields functions 1046, 1048, 1050, 1052, 1054, 1056 ⟩ Used in section 1044. ⟨ Declare PICA Categories functions 1004, 1006, 1008, 1010, 1012, 1014 ⟩ Used in section 1002. ⟨ Declare PICA Fields functions 1025, 1027, 1029, 1031, 1033, 1035 ⟩ Used in section 1023. ⟨ Declare Permutation Patterns functions 1550, 1552, 1554, 1556, 1558, 1560 ⟩ Used in section 1548. ⟨ Declare Physical Descriptions functions 1256, 1258, 1260, 1262, 1264, 1266 ⟩ Used in section 1254. ⟨ Declare Pica Record functions 403, 405, 407, 413 ⟩ Used in section 401. ⟨ Declare Publishers functions 1613, 1615, 1617, 1619, 1621, 1623 ⟩ Used in section 1611. ⟨ Declare Records Authors functions 1319, 1321, 1323, 1325, 1327, 1329 ⟩ Used in section 1317. ⟨ Declare Records Bibliographic Types functions 1235, 1237, 1239, 1241, 1243, 1245 ⟩ Used in section 1233. ⟨ Declare Records Call Numbers functions 1151, 1153, 1155, 1157, 1159, 1161 ⟩ Used in section 1149. ⟨ Declare Records Contributors functions 1361, 1363, 1365, 1367, 1369, 1371 ⟩ Used in section 1359. ⟨ Declare Records Database Providers functions 1676, 1678, 1680, 1682, 1684, 1686 ⟩ Used in section 1674. ⟨ Declare Records Languages functions 1466, 1468, 1470, 1472, 1474, 1476 ⟩ Used in section 1464. ⟨ Declare Records Main Titles functions 1403, 1405, 1407, 1409, 1411, 1413 ⟩ Used in section 1401. ⟨ Declare Records Physical Descriptions functions 1277, 1279, 1281, 1283, 1285, 1287 ⟩ Used in section 1275. ⟨ Declare Records Publishers functions 1634, 1636, 1638, 1640, 1642, 1644 ⟩ Used in section 1632. ⟨ Declare Records Remote Access functions 1592, 1594, 1596, 1598, 1600, 1602 ⟩ Used in section 1590. ⟨ Declare Records Subjects functions 1529, 1531, 1533, 1535, 1537, 1539 ⟩ Used in section 1527. ⟨ Declare Records functions 1088, 1090, 1092, 1094, 1096, 1098 ⟩ Used in section 1086. ⟨ Declare Remote Access functions 1571, 1573, 1575, 1577, 1579, 1581 ⟩ Used in section 1569. ⟨ Declare Sources functions 1067, 1069, 1071, 1073, 1075, 1077 ⟩ Used in section 1065. ⟨ Declare Subcategory Container functions 572, 576, 581, 583, 586, 591, 612, 615, 626, 628, 630, 632, 634, 641, 644,

646, 651, 656, 658, 660, 663, 665, 667, 669, 672, 674, 676, 679, 681, 683, 685, 687, 690, 692, 695, 697, 700, 705, 708, 710, 712, 714, 717, 719, 723, 728, 733, 735, 737, 739, 742, 745, 747, 749, 751, 753, 755, 757, 759 ⟩ Used in section 569.

⟨ Declare Subject Types functions 1487, 1489, 1491, 1493, 1495, 1497 ⟩ Used in section 1485. ⟨ Declare Subjects functions 1508, 1510, 1512, 1514, 1516, 1518 ⟩ Used in section 1506. ⟨ Declare Temp IDs functions 1697, 1699, 1701, 1703, 1705, 1707 ⟩ Used in section 1695. ⟨ Declare ZClient functions 197, 199, 206, 209, 211, 214, 216, 218, 220, 222, 224, 327, 329, 358 ⟩ Used in section 192. ⟨ Declare class Access Numbers 1107 ⟩ Used in section 1122. ⟨ Declare class Authors 1296 ⟩ Used in section 1311. ⟨ Declare class Bibliographic Type Codes 1191 ⟩ Used in section 1206. ⟨ Declare class Bibliographic Types 1212 ⟩ Used in section 1227. ⟨ Declare class CAboutDlg 117, 118, 119, 120 ⟩ Used in section 132. ⟨ Declare class CMainFrame 29 ⟩ Used in section 46.

⟨ Declare class CZTestDoc 51 ⟩ Used in section 67. ⟨ Declare class CZTestView 72 ⟩ Used in section 96. ⟨ Declare class Call Numbers 1128 ⟩ Used in section 1143. ⟨ Declare class Category Container 423 ⟩ Used in section 563. ⟨ Declare class Content Summaries 1422 ⟩ Used in section 1437. ⟨ Declare class Contributors 1338 ⟩ Used in section 1353. ⟨ Declare class DB Display 782 ⟩ Used in section 995. ⟨ Declare class Database Providers 1653 ⟩ Used in section 1668. ⟨ Declare class Dialog Z 1 136, 137, 138 ⟩ Used in section 176. ⟨ Declare class Exemplar Production Numbers 1170 ⟩ Used in section 1185. ⟨ Declare class Languages 1443 ⟩ Used in section 1458. ⟨ Declare class Main Titles 1380 ⟩ Used in section 1395. ⟨ Declare class PICA Categories PICA Fields 1044 ⟩ Used in section 1059. ⟨ Declare class PICA Categories 1002 ⟩ Used in section 1017. ⟨ Declare class PICA Fields 1023 ⟩ Used in section 1038. ⟨ Declare class Permutation Patterns 1548 ⟩ Used in section 1563. ⟨ Declare class Physical Descriptions 1254 ⟩ Used in section 1269. ⟨ Declare class Pica Record 400, 401 ⟩ Used in section 416. ⟨ Declare class Publishers 1611 ⟩ Used in section 1626. ⟨ Declare class Records Authors 1317 ⟩ Used in section 1332. ⟨ Declare class Records Bibliographic Types 1233 ⟩ Used in section 1248. ⟨ Declare class Records Call Numbers 1149 ⟩ Used in section 1164. ⟨ Declare class Records Contributors 1359 ⟩ Used in section 1374. ⟨ Declare class Records Database Providers 1674 ⟩ Used in section 1689. ⟨ Declare class Records Languages 1464 ⟩ Used in section 1479. ⟨ Declare class Records Main Titles 1401 ⟩ Used in section 1416. ⟨ Declare class Records Physical Descriptions 1275 ⟩ Used in section 1290. ⟨ Declare class Records Publishers 1632 ⟩ Used in section 1647. ⟨ Declare class Records Remote Access 1590 ⟩ Used in section 1605. ⟨ Declare class Records Subjects 1527 ⟩ Used in section 1542. ⟨ Declare class Records 1086 ⟩ Used in section 1101. ⟨ Declare class Remote Access 1569 ⟩ Used in section 1584. ⟨ Declare class Sources 1065 ⟩ Used in section 1080. ⟨ Declare class Subcategory Container 569 ⟩ Used in section 762. ⟨ Declare class Subject Types 1485 ⟩ Used in section 1500. ⟨ Declare class Subjects 1506 ⟩ Used in section 1521. ⟨ Declare class Temp IDs 1695 ⟩ Used in section 1710. ⟨ Declare class ZClient 192, 193 ⟩ Used in section 363. ⟨ Declare protected CMainFrame functions 32, 38 ⟩ Used in section 29.

⟨ Declare protected CZTestDoc functions 53 ⟩ Used in section 51.

⟨ Declare protected CZTestView functions 74, 84, 86, 88 ⟩ Used in section 72. ⟨ Declare protected Dialog Z 1 functions 145, 152, 158 ⟩ Used in section 138. ⟨ Declare public CMainFrame functions 34, 36, 40, 42 ⟩ Used in section 29. ⟨ Declare public CZTestDoc functions 55, 57, 59, 61, 63 ⟩ Used in section 51. ⟨ Declare public CZTestView functions 76, 78, 80, 82, 90, 92 ⟩ Used in section 72. ⟨ Declare public Dialog Z 1 functions 141, 143, 149, 160, 162, 164, 166, 168, 170, 172 ⟩ Used in section 138. ⟨ Declare static variables 422 ⟩ Used in section 564. ⟨ Declare static indicators array. 30 ⟩ Used in section 45. ⟨ Declare struct Database Command 769 ⟩ Used in section 776. ⟨ Declare struct Output Stream Type 388 ⟩ Used in section 393. ⟨ Declare yylex 183 ⟩ Used in section 187. ⟨ Define ZOOM functions 368, 370, 371, 372, 373, 374, 375, 376, 377, 378, 380 ⟩ Used in section 382.

⟨ Define global functions 130 ⟩ Used in section 132.

⟨ Define Access Numbers functions 1110, 1112, 1114, 1116, 1118, 1120 ⟩ Used in section 1123. ⟨ Define Authors functions 1299, 1301, 1303, 1305, 1307, 1309 ⟩ Used in section 1312. ⟨ Define Bibliographic Type Codes functions 1194, 1196, 1198, 1200, 1202, 1204 ⟩ Used in section 1207. ⟨ Define Bibliographic Types functions 1215, 1217, 1219, 1221, 1223, 1225 ⟩ Used in section 1228. ⟨ Define CAboutDlg functions 122, 123, 124 ⟩ Used in section 132. ⟨ Define CMainFrame functions 33, 35, 37, 39, 41, 43 ⟩ Used in section 45. ⟨ Define CZTestApp functions 125 ⟩ Used in section 132. ⟨ Define CZTestDoc functions 54, 56, 58, 60, 62, 64 ⟩ Used in section 66. ⟨ Define CZTestView functions 75, 77, 79, 81, 83, 85, 87, 89, 91, 93 ⟩ Used in section 95. ⟨ Define Call Numbers functions 1131, 1133, 1135, 1137, 1139, 1141 ⟩ Used in section 1144. ⟨ Define Category Container functions 427, 430, 432, 434, 436, 438, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,

450, 451, 452, 454, 455, 456, 457, 458, 459, 460, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 490, 491, 492, 493, 494, 495, 496, 497, 498, 500, 501, 502, 503, 504, 505, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 519, 520, 521, 522, 523, 524, 525, 528, 529, 530, 531, 532, 533, 535, 536, 537, 538, 539, 540, 542, 543, 544, 546, 547, 548, 549, 550, 551, 552, 553, 554, 556, 557, 558, 559, 561 ⟩ Used in section 564.

⟨ Define Content Summaries functions 1425, 1427, 1429, 1431, 1433, 1435 ⟩ Used in section 1438. ⟨ Define Contributors functions 1341, 1343, 1345, 1347, 1349, 1351 ⟩ Used in section 1354. ⟨ Define DB Display functions 785, 787, 789, 791, 793, 794, 797, 798, 799, 800, 802, 803, 804, 805, 806, 807, 808, 809,

810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993 ⟩ Used in section 996.

⟨ Define Database Command functions 772, 774 ⟩ Used in section 777. ⟨ Define Database Providers functions 1656, 1658, 1660, 1662, 1664, 1666 ⟩ Used in section 1669. ⟨ Define Dialog Z 1 functions 142, 144, 146, 150, 151, 153, 154, 155, 156, 157, 159, 161, 163, 165, 167, 169, 171, 173 ⟩

Used in section 175. ⟨ Define Exemplar Production Numbers functions 1173, 1175, 1177, 1179, 1181, 1183 ⟩ Used in section 1186. ⟨ Define Languages functions 1446, 1448, 1450, 1452, 1454, 1456 ⟩ Used in section 1459. ⟨ Define Main Titles functions 1383, 1385, 1387, 1389, 1391, 1393 ⟩ Used in section 1396. ⟨ Define Output Stream Type functions 390, 391 ⟩ Used in section 394. ⟨ Define PICA Categories PICA Fields functions 1047, 1049, 1051, 1053, 1055, 1057 ⟩ Used in section 1060. ⟨ Define PICA Categories functions 1005, 1007, 1009, 1011, 1013, 1015 ⟩ Used in section 1018. ⟨ Define PICA Fields functions 1026, 1028, 1030, 1032, 1034, 1036 ⟩ Used in section 1039. ⟨ Define Permutation Patterns functions 1551, 1553, 1555, 1557, 1559, 1561 ⟩ Used in section 1564. ⟨ Define Physical Descriptions functions 1257, 1259, 1261, 1263, 1265, 1267 ⟩ Used in section 1270. ⟨ Define Pica Record functions 404, 406, 408, 409, 410, 411, 412, 414 ⟩ Used in section 417. ⟨ Define Publishers functions 1614, 1616, 1618, 1620, 1622, 1624 ⟩ Used in section 1627. ⟨ Define Records Authors functions 1320, 1322, 1324, 1326, 1328, 1330 ⟩ Used in section 1333. ⟨ Define Records Bibliographic Types functions 1236, 1238, 1240, 1242, 1244, 1246 ⟩ Used in section 1249. ⟨ Define Records Call Numbers functions 1152, 1154, 1156, 1158, 1160, 1162 ⟩ Used in section 1165. ⟨ Define Records Contributors functions 1362, 1364, 1366, 1368, 1370, 1372 ⟩ Used in section 1375. ⟨ Define Records Database Providers functions 1677, 1679, 1681, 1683, 1685, 1687 ⟩ Used in section 1690. ⟨ Define Records Languages functions 1467, 1469, 1471, 1473, 1475, 1477 ⟩ Used in section 1480. ⟨ Define Records Main Titles functions 1404, 1406, 1408, 1410, 1412, 1414 ⟩ Used in section 1417. ⟨ Define Records Physical Descriptions functions 1278, 1280, 1282, 1284, 1286, 1288 ⟩ Used in section 1291. ⟨ Define Records Publishers functions 1635, 1637, 1639, 1641, 1643, 1645 ⟩ Used in section 1648.

⟨ Define Records Remote Access functions 1593, 1595, 1597, 1599, 1601, 1603 ⟩ Used in section 1606. ⟨ Define Records Subjects functions 1530, 1532, 1534, 1536, 1538, 1540 ⟩ Used in section 1543. ⟨ Define Records functions 1089, 1091, 1093, 1095, 1097, 1099 ⟩ Used in section 1102. ⟨ Define Remote Access functions 1572, 1574, 1576, 1578, 1580, 1582 ⟩ Used in section 1585. ⟨ Define Sources functions 1068, 1070, 1072, 1074, 1076, 1078 ⟩ Used in section 1081. ⟨ Define Subcategory Container functions 573, 577, 578, 579, 582, 584, 587, 588, 589, 592, 593, 594, 595, 596, 597,

598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 613, 616, 617, 618, 619, 620, 621, 622, 623, 624, 627, 629, 631, 633, 635, 636, 637, 638, 639, 642, 645, 647, 648, 649, 650, 652, 653, 654, 655, 657, 659, 661, 664, 666, 668, 670, 673, 675, 677, 680, 682, 684, 686, 688, 691, 693, 696, 698, 701, 702, 703, 706, 709, 711, 713, 715, 718, 720, 724, 725, 726, 729, 730, 731, 734, 736, 738, 740, 743, 746, 748, 750, 752, 754, 756, 758, 760 ⟩ Used in section 763.

⟨ Define Subject Types functions 1488, 1490, 1492, 1494, 1496, 1498 ⟩ Used in section 1501. ⟨ Define Subjects functions 1509, 1511, 1513, 1515, 1517, 1519 ⟩ Used in section 1522. ⟨ Define Temp IDs functions 1698, 1700, 1702, 1704, 1706, 1708 ⟩ Used in section 1711. ⟨ Define ZClient ::init category map 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,

242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326 ⟩ Used in section 362.

⟨ Define ZClient functions 198, 200, 201, 202, 203, 204, 205, 207, 210, 212, 215, 217, 219, 221, 223, 328, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 359, 360 ⟩ Used in section 362.

⟨ Define yylex 184 ⟩ Used in section 186. ⟨ Forward declarations 399, 768 ⟩ Used in sections 416 and 776. ⟨ GNU Free Documentation License 1716 ⟩ Cited in section 2. Used in section 1717. ⟨ GNU General Public License 1715 ⟩ Cited in section 2. Used in section 1717. ⟨ Global variables 18, 127 ⟩ Used in sections 21 and 132. ⟨ Include files 13, 14, 15, 16, 17, 26, 48, 69, 98, 135, 178, 189, 365, 386, 397, 421, 568, 767, 781, 1001, 1022, 1043, 1064, 1085,

1106, 1127, 1148, 1169, 1190, 1211, 1232, 1253, 1274, 1295, 1316, 1337, 1358, 1379, 1400, 1421, 1442, 1463, 1484, 1505, 1526, 1547, 1568, 1589, 1610, 1631, 1652, 1673, 1694 ⟩ Used in sections 21, 45, 66, 95, 132, 175, 186, 362, 382, 394, 417, 564, 763, 777, 996, 1018, 1039, 1060, 1081, 1102, 1123, 1144, 1165, 1186, 1207, 1228, 1249, 1270, 1291, 1312, 1333, 1354, 1375, 1396, 1417, 1438, 1459, 1480, 1501, 1522, 1543, 1564, 1585, 1606, 1627, 1648, 1669, 1690, and 1711.

⟨ Initialize static constants for ZClient 194 ⟩ Used in section 362. ⟨ Local static constants for Dialog Z 1 139 ⟩ Used in section 175. ⟨ Macro calls for Dialog Z 1 message map 147 ⟩ Used in section 175.

⟨ Preprocessor macro calls 10, 27, 49, 70, 179, 190, 385, 396, 419, 566, 765, 779, 999, 1020, 1041, 1062, 1083, 1104, 1125, 1146, 1167, 1188, 1209, 1230, 1251, 1272, 1293, 1314, 1335, 1356, 1377, 1398, 1419, 1440, 1461, 1482, 1503, 1524, 1545, 1566, 1587, 1608, 1629, 1650, 1671, 1692 ⟩ Used in sections 21, 46, 67, 96, 187, 363, 393, 416, 563, 762, 776, 995, 1017, 1038, 1059, 1080, 1101, 1122, 1143, 1164, 1185, 1206, 1227, 1248, 1269, 1290, 1311, 1332, 1353, 1374, 1395, 1416, 1437, 1458, 1479, 1500, 1521, 1542, 1563, 1584, 1605, 1626, 1647, 1668, 1689, and 1710.

⟨ Preprocessor macro definitions 11, 28, 50, 71, 99 ⟩ Used in sections 21, 45, 66, 95, and 132. ⟨ Type definitions 424, 570 ⟩ Used in sections 563 and 762. ⟨ Union declaration for YYSTYPE 181 ⟩ Used in sections 186 and 187. ⟨ accnums.web 1103 ⟩ Cited in sections 7 and 8. Used in section 1123. ⟨ authors.web 1292 ⟩ Cited in sections 7 and 8. Used in section 1312. ⟨ bbtpcds.web 1187 ⟩ Cited in sections 7 and 8. Used in section 1207. ⟨ bibtyps.web 1208 ⟩ Cited in sections 7 and 8. Used in section 1228. ⟨ callnums.web 1124 ⟩ Cited in sections 7 and 8. Used in section 1144. ⟨ cntrbtrs.web 1334 ⟩ Cited in sections 7 and 8. Used in section 1354. ⟨ contsums.web 1418 ⟩ Cited in sections 7 and 8. Used in section 1438. ⟨ ctgcntnr.web 418 ⟩ Cited in sections 6 and 8. Used in section 564. ⟨ dbcmmnd.web 764 ⟩ Cited in sections 6 and 8. Used in section 777. ⟨ dbdspl.web 778 ⟩ Cited in sections 6 and 8. Used in section 996.

⟨ dbprovs.web 1649 ⟩ Cited in sections 7 and 8. Used in section 1669. ⟨ dialogz1.web 134 ⟩ Cited in sections 6 and 8. Used in section 175. ⟨ exprnums.web 1166 ⟩ Cited in sections 7 and 8. Used in section 1186. ⟨ language.web 1439 ⟩ Cited in sections 7 and 8. Used in section 1459. ⟨ mainfrm.web 25 ⟩ Cited in sections 6 and 8. Used in section 45. ⟨ mnttls.web 1376 ⟩ Cited in sections 7 and 8. Used in section 1396. ⟨ opstrmtp.web 384 ⟩ Cited in sections 6 and 8. Used in section 394. ⟨ pccatfld.web 1040 ⟩ Cited in sections 7 and 8. Used in section 1060. ⟨ physdesc.web 1250 ⟩ Cited in sections 7 and 8. Used in section 1270. ⟨ picacats.web 998 ⟩ Cited in sections 7 and 8. Used in section 1018. ⟨ picaflds.web 1019 ⟩ Cited in sections 7 and 8. Used in section 1039. ⟨ picarcrd.web 395 ⟩ Cited in sections 6 and 8. Used in section 417. ⟨ prmpttrn.web 1544 ⟩ Cited in sections 7 and 8. Used in section 1564. ⟨ publshrs.web 1607 ⟩ Cited in sections 7 and 8. Used in section 1627. ⟨ rcbbtyps.web 1229 ⟩ Cited in sections 7 and 8. Used in section 1249. ⟨ rccllnms.web 1145 ⟩ Cited in sections 7 and 8. Used in section 1165. ⟨ rccntrbt.web 1355 ⟩ Cited in sections 7 and 8. Used in section 1375. ⟨ rcdbprov.web 1670 ⟩ Cited in sections 7 and 8. Used in section 1690. ⟨ rcmnttls.web 1397 ⟩ Cited in sections 7 and 8. Used in section 1417. ⟨ rcphsdsc.web 1271 ⟩ Cited in sections 7 and 8. Used in section 1291. ⟨ rcrmaccs.web 1586 ⟩ Cited in sections 7 and 8. Used in section 1606. ⟨ recathrs.web 1313 ⟩ Cited in sections 7 and 8. Used in section 1333. ⟨ reclang.web 1460 ⟩ Cited in sections 7 and 8. Used in section 1480. ⟨ records.web 1082 ⟩ Cited in sections 7 and 8. Used in section 1102. ⟨ recpubs.web 1628 ⟩ Cited in sections 7 and 8. Used in section 1648. ⟨ recsubjs.web 1523 ⟩ Cited in sections 7 and 8. Used in section 1543. ⟨ resource.web 22 ⟩ Cited in sections 6, 8, and 1717. Used in section 1717. ⟨ rmaccess.web 1565 ⟩ Cited in sections 7 and 8. Used in section 1585. ⟨ sbctgcnt.web 565 ⟩ Cited in sections 6 and 8. Used in section 763. ⟨ scanner.web 177 ⟩ Cited in sections 6 and 8. Used in section 186. ⟨ sources.web 1061 ⟩ Cited in sections 7 and 8. Used in section 1081. ⟨ stdafx.web 9 ⟩ Cited in sections 6 and 8. Used in section 20. ⟨ subjects.web 1502 ⟩ Cited in sections 7 and 8. Used in section 1522. ⟨ subjtyps.web 1481 ⟩ Cited in sections 7 and 8. Used in section 1501. ⟨ tempids.web 1691 ⟩ Cited in sections 7 and 8. Used in section 1711. ⟨ zclient.web 188 ⟩ Cited in sections 6 and 8. Used in section 362. ⟨ ztest.web 97 ⟩ Cited in sections 6 and 8. Used in section 132. ⟨ ztestdoc.web 47 ⟩ Cited in sections 6 and 8. Used in section 66. ⟨ ztstview.web 68 ⟩ Cited in sections 6 and 8. Used in section 95. ⟨ ztstzoom.web 364 ⟩ Cited in sections 6 and 8. Used in section 382. ⟨ “Using” declarations for namespaces 387, 420, 567 ⟩ Used in sections 393, 563, and 762. ⟨ 1122 ⟩ ⟨ 1311 ⟩ ⟨ 1206 ⟩ ⟨ 1227 ⟩ ⟨ 1143 ⟩ ⟨ 1353 ⟩ ⟨ 1437 ⟩ ⟨ 563 ⟩ ⟨ 776 ⟩ ⟨ 995 ⟩ ⟨ 1668 ⟩ ⟨ 176 ⟩ ⟨ 1185 ⟩ ⟨ 1458 ⟩

⟨ 46 ⟩

⟨ 1395 ⟩ ⟨ 393 ⟩ ⟨ 1059 ⟩ ⟨ 1269 ⟩ ⟨ 1017 ⟩ ⟨ 1038 ⟩ ⟨ 416 ⟩ ⟨ 1563 ⟩ ⟨ 1626 ⟩ ⟨ 1248 ⟩ ⟨ 1164 ⟩ ⟨ 1374 ⟩ ⟨ 1689 ⟩ ⟨ 1416 ⟩ ⟨ 1290 ⟩ ⟨ 1605 ⟩ ⟨ 1332 ⟩ ⟨ 1479 ⟩ ⟨ 1101 ⟩ ⟨ 1647 ⟩ ⟨ 1542 ⟩

⟨ 24 ⟩

⟨ 1584 ⟩ ⟨ 762 ⟩ ⟨ 187 ⟩ ⟨ 1080 ⟩

⟨ 21 ⟩

⟨ 1521 ⟩ ⟨ 1500 ⟩ ⟨ 1710 ⟩ ⟨ 363 ⟩ ⟨ 133 ⟩

⟨ 67 ⟩ ⟨ 96 ⟩

⟨ 383 ⟩ ⟨ CZTestApp code 102, 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116 ⟩ Used in section 132. ⟨ CZTestApp declaration 100 ⟩ Used in section 133.

⟨ extern variable declarations 101 ⟩ Used in section 133.

⟨ using declarations for namespaces 191, 366, 398, 766, 780, 1000, 1021, 1042, 1063, 1084, 1105, 1126, 1147, 1168, 1189, 1210, 1231, 1252, 1273, 1294, 1315, 1336, 1357, 1378, 1399, 1420, 1441, 1462, 1483, 1504, 1525, 1546, 1567, 1588, 1609, 1630, 1651, 1672, 1693 ⟩ Used in sections 363, 382, 383, 416, 776, 995, 1017, 1038, 1059, 1080, 1101, 1122, 1143, 1164, 1185, 1206, 1227, 1248, 1269, 1290, 1311, 1332, 1353, 1374, 1395, 1416, 1437, 1458, 1479, 1500, 1521, 1542, 1563, 1584, 1605, 1626, 1647, 1668, 1689, and 1710.

IWF Metadata Harvester II ZTest: The Program Version 1.0 by Laurence D. Finston

October 2006

Section Page

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 Copyright and licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1 Formatting commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1 File Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1 Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1

Logical and Hierarchical Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 ODBC Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 Alphabetical Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3

stdafx (stdafx.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5 Preprocessor macro definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5 Include files in stdafx.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5 Global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 9 Putting stdafx.web together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 9 Preprocessor macro definitions for resources (resource.web) . . . . . . . . . . . . . . . . . . . . . . . . 22 10 Putting resource.web together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 10 CMainFrame (mainfrm.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 11 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 11 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 11 Preprocessor macro definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 11 Declare class CMainFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 12 Declare static indicators array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 12 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 12

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 12 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 12 Pre-Create Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 13 On Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 13 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 13 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 14

Putting CMainFrame together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 14

ii  TABLE OF CONTENTS  IWF Metadata Harvester II

CZTestDoc (ztestdoc.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 15 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 15 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 15 Preprocessor macro definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 15 Declare class CZTestDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 15 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 15

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 15 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 16 On New Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 16 Serialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 16 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 17 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 17

Putting CZTestDoc together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 17 CZTestView (ztstview.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 18 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 18 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 18 Preprocessor macro definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 18 Declare class CZTestView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 18 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 18

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 18 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 19 Get Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 19 On Draw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 19 Pre-Create Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 20 On Prepare Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 20 On Begin Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 20 On End Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 20 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 21 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 21

Putting CZTestView together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 21 ZTest (ztest.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 22 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 22 Preprocessor macro definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 22 CZTestApp declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 22 Extern variable declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 22 CZTestApp message map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 22 CZTestApp Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 23

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 23 Initialize instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 23

Class CAboutDlg declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 24 CAboutDlg Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 25

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 25 Do Data Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 25 CAboutDlg Message map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 25

Global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 26 Global functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 26

Initialize copyright string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 26 Putting ZTest together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 27 Dialog Z 1 (dialogz1.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 28 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 28 Dialog Z 1 class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 28 Local static constants for Dialog Z 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 29

IWF Metadata Harvester II TABLE OF CONTENTS iii

Dialog Z 1 functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 29 Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 29 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 30 DoDataExchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 30 Message map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 31 Event handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 31

OnInitDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 31 On OK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 33 OnCancel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 36 OnBnClickedPerformSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 37 OnBnClickedParseRecords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 37 OnBnClickedDisplayRecords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 38 OnBnClickedWriteRecordsFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 38 OnBnClickedClearDatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 39 OnBnClickedDisplayAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 39 OnBnClickedDisplayRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 39

Putting Dialog Z 1 together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 40 Scanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 41 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 41 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 41 Type declarations for the scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 41

Union declaration for YYSTYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 41 Location type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 41

yylex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 42 Putting the scanner together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 42 ZClient (zclient.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 43 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 43 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 43 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 43 ZClient class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 43 Initialize static constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 44 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 44

Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 44 Default Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 44 Non-Default Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 45

Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 46 Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 46

Get connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 46 Get last connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 47

Resultsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 47 Get resultset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 47 Get last resultset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 47 Get resultset size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 48 Get last resultset size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 48

Clear database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 48 Initialize category map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 49

001@ — Unknown Category . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 50

‘0’ — Unknown Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 50 001A — Identifier and Date of the Original Catalogue Entry . . . . . . . . . . . . . . . . . . . . . . 228 50

‘0’ — Identifier and Date of the Original Catalogue Entry . . . . . . . . . . . . . . . . . . . . 229 51 001B — Identifier and Date of the Most Recent Change . . . . . . . . . . . . . . . . . . . . . . . . . . 230 51

‘0’ — Identifier and Date of the Most Recent Change . . . . . . . . . . . . . . . . . . . . . . . . 231 51

iv  TABLE OF CONTENTS  IWF Metadata Harvester II

‘t’ — Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 52 001D — Identifier and Date of the Status Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 52

‘0’ — Identifier and Date of the Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 53 001X — Unknown Category . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 53

‘0’ — Unknown Field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 53 002@ — Bibliographical Type and Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 54

‘0’ — Bibliographical Type and Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 54 @ — Identification Number (PPN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 55 ‘0’ — Identification Number (PPN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 55

009P — Remote access to electronic resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 56 ‘0’ — Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 56 ‘a’ — URL (Universal Resource Locator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 57 ‘g’ — URN (Universal Resource Name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 57 ‘S’ — License indicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 57 ‘x’ — Internal Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 58 ‘y’ — Text for the Web Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 58

010@ — Code(s) for Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 59

‘a’ — First Language Code for the Current Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 59 011@ — Year of Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 59

‘a’ — Year of Appearance (Beginning), Form for Sorting . . . . . . . . . . . . . . . . . . . . . 252 60 ‘b’ — Year of Appearance (End), Form for Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . 253 60 ‘e’ — Original Year of Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 61 ‘n’ — Year of Appearance (according to RAK-WB) . . . . . . . . . . . . . . . . . . . . . . . . . . 255 61

016H — General Material Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 62

‘0’ — General Material Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 62 019@ — Code for Country of Publication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 63

‘a’ — Code for First Country of Publication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 63 021A — Main Canonical Title, Additional Information, Authorship . . . . . . . . . . . . . . . . 261 63

‘1’ — Standard Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 64 ‘a’ — Main Canonical Title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 64 ‘d’ — Additions to the Main Canonical Title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 64 ‘e’ — Additional Creator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 65 ‘f’ — Parallel Canonical Title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 65 ‘h’ Authorship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 65

028A — First author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 66 ‘9’ — Identification Number (PPN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 66 ‘a’ — Surname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 66 ‘c’ — Prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 67 ‘d’ — Given Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 67

028B — Personal Name / Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 68 ‘9’ — Identification Number (PPN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 68 ‘a’ — Surname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 68 ‘d’ — Given Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 69

028C — Other Contributing Persons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 69 ‘9’ — Identification Number (PPN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 69 ‘a’ — Surname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 70 ‘c’ — Prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 70 ‘d’ — Given Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 70

033A — Place of Publication, Publisher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 71 ‘n’ — Publisher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 71 ‘p’ — Place of Publication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 71

034D — Size or Range, Specification of Material, Technical System . . . . . . . . . . . . . . . . 290 72

IWF Metadata Harvester II TABLE OF CONTENTS v

‘a’ — Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 72 Link To Superordinate Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 73 ‘a’ — Title of the Superordinate Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 73 041A — Subjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 74 ‘9’ — Identification Number (PPN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 74 ‘a’ — Subject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 75 ‘f’ — Permutation Pattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 75 ‘S’ — Indicator/Subject Indicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 76 047I — Content Summary (short) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 76 ‘a’ — Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 77 203@ — Exemplar Production Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 77 ‘0’ — Exemplar Production Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 78 209A — Call Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 78 ‘a’ — Call Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 79 ‘b’ — Library Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 79 ‘f’ — Special Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 80 ‘j’ — Library Department . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 80 209C — Access Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 81 ‘a’ — Access Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 81 209R — Remote Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 82 ‘0’ — Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 82 ‘a’ — URL (Universal Resource Locator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 82 ‘g’ — URN (Universal Resource Name) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 83 ‘S’ — License indicator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 83 ‘x’ — Internal Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 83 ‘y’ — Text for the Web Display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 84

Search using PQF syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 84 Parse Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 85 Write Field Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 92

Putting ZClient together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 95 ZOOM functions (ztstzoom.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 96 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 96 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 96 zoomtst0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 96 zoomtst2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 97 zoomtst3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 103 Putting ZOOM functions together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 103 Output Stream Type (opstrmtp.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 104 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 104 Include files for Output Stream Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 104 “Using” declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 104 Output Stream Type struct declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 104 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 104

Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 104 Unlocking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 105

Putting Output Stream Type together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 105 Pica Record (picarcrd.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 106 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 106 Include files for Pica Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 106 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 106 Forward declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 106 Pica Record class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 106

vi  TABLE OF CONTENTS  IWF Metadata Harvester II

Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 107 Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 107 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 107 Write to database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 108 Show . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 111

Putting Pica Record together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 112 Category Container (ctgcntnr.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 113 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 113 “Using” declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 113 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 113 Static variable declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 113 Category Container class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 114 Type definitions (typedefs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 115 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 115

Assignment operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 115 PICA Category Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 116 Identifier and Date of the Most Recent Change (F 001B) . . . . . . . . . . . . . . . . . . . . . . . . 429 116 Main Canonical Title, Additional Information, Authorship (F 021A) . . . . . . . . . . . . . . 431 118 First Author (F 028A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 119 Personal Name, Author (F 028B) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 120 Other Contributing Persons (F 028C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 121 Place, Publisher (F 033A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 122 Main Subject and Subsidiary Subjects (F 041A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 126 sub F 041A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 131 Call Number (F 209A) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 138 sub F 209A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 141 Local information regarding remote access to electronic resources (F 209R) . . . . . . . . 506 145 sub F 209R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 148

Functions for groups of categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 153 personal names category func . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 153 sub personal names category func . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 156 titles category func . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 161 sub titles category func . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 166 publishers database providers func . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 173 Showing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 177

Putting Category Container together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 178 Subcategory Container (sbctgcnt.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565 179 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 179 “Using” declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 179 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 179 Subcategory Container class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 179 Type definitions (typedefs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 180 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 180

Assignment operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 180 Functions for Subcategories (PICA Fields) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 181 Identifier and Date of the Original Catalogue Entry (Pica+ 001A / Pica3 0200) . . . . . 575 181 Identifier and Date of the Original Catalogue Entry (‘0’) . . . . . . . . . . . . . . . . . . . . . 576 181 Identifier and Date of the Most Recent Change (Pica+ 001B / Pica3 0210) . . . . . . . . . 580 182 Identifier and Date of the Change (‘0’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 183 Time (‘t’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 183 Identifier and Date of the Change in Status (Pica+ 001D / Pica3 0230) . . . . . . . . . . . . 585 184 Identifier and Date of the Change (‘0’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586 184

IWF Metadata Harvester II TABLE OF CONTENTS vii

Bibliographical Type and Status (Pica+ 002@ / Pica3 0500) . . . . . . . . . . . . . . . . . . . . . . 590 186

Bibliographical Type and Status (‘0’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 186 Identification Number (PPN) (Pica+ 003@ / Pica3 0100) . . . . . . . . . . . . . . . . . . . . . . . . 611 192 Identification Number (PPN) (‘0’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 192 Code(s) for Languages (Pica+ 010@ / Pica3 1500) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 193

First Language Code for the Current Text (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 194 Year of Appearance (Pica+ 011@ / Pica3 1100) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 197

Year of Appearance (Beginning), Form for Sorting (‘a’) . . . . . . . . . . . . . . . . . . . . . . 626 198 Year of Appearance (End), Form for Sorting (‘b’) . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 198 Original Year of Appearance (‘e’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 199 Year of Appearance (according to RAK-WB) (‘n’) . . . . . . . . . . . . . . . . . . . . . . . . . . . 632 200 year appearance func . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 201

General Material Name (Pica+ 016H / Pica3 1108) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 203

General Material Name (‘0’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641 203 Main Canonical Title, Additional Information, Authorship (Pica+ 021A / Pica3 4000) 643 204

Standard Text (‘1’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644 204 Main Canonical Title (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646 205 Additions to the Main Canonical Title (‘d’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651 208 Additional Creator (‘e’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 210 Parallel Canonical Title (‘f’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658 211 Authorship (‘h’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660 212

028A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 213 (‘9’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663 213 (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 214 (‘c’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 215 (‘d’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 216

Personal Name; Author (Pica+ 028B / Pica3 120, 3000–3009) . . . . . . . . . . . . . . . . . . . . 671 217 Identification Number (PPN) (‘9’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 218 Surname (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 218 Given Name (‘d’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 219

028C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 220 Expansion of the Cataloguing Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 220 (‘9’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 221 (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683 222 (‘c’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685 223 (‘d’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 224

029A. Primary corporate entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689 225 ’8’ Expansion of the cataloguing form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 225 ’a’ Corporate entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692 226

033A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694 227 (‘n’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695 227 (‘p’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697 228

Size or Range, Specification of Material, Technical System (Pica+ 034D / Pica3 4060) 699 229

Text (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700 229 Link To Superordinate Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704 236

Title of the Superordinate Entity (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705 236 Main Subject and Subsidiary Subjects (Subject Assignment) . . . . . . . . . . . . . . . . . . . . . . 707 237

Identification Number (PPN) (‘9’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 237 Main Subject/Subject (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710 238 Permutation Pattern (‘f’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 239 Indicator/Subject Indicator (‘S’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714 240

045F. DDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 241

viii  TABLE OF CONTENTS  IWF Metadata Harvester II

’a’ Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717 241 ’b’ Additional identifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719 242 045H . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721 243 Content Summary (short) (Pica+ 047I / Pica3 4207) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 243 Text (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 243 Exemplar Production Number (Pica+ 203@ / Pica3 7800) . . . . . . . . . . . . . . . . . . . . . . . . 727 247 Exemplar Production Number (‘0’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728 248 Call Number (Pica+ 209A / Pica3 7100–7109) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732 252 Call Number (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 252 Library Number (‘b’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 253 Special Location (‘f’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 254 Library Department (‘j’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739 255 Access Number (Pica+ 209C / Pica3 8100) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741 256 Access Number (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742 256 Remote Access (Pica+ 209R / Pica3 7133) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744 257 Format (‘0’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745 258 URL (Universal Resource Locator) (‘a’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747 258 URN (Universal Resource Name) (‘g’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749 259 License indicator (‘S’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 260 Internal Remarks (‘x’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 261 Text for the Web Display (‘y’) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755 262

Showing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 263 Fix string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 263

Putting Subcategory Container together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761 264

Database Command (dbcmmnd.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 265 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 265 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 265 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 265 Forward declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 265 Database Command struct declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769 265 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 266

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771 266 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773 266

Putting Database Command together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775 266

DB Display (dbdspl.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778 268 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 268 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780 268 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781 268 DB Display class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782 268 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783 268

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784 268 Destructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 269 Open HTML file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788 269 Close HTML file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 270 Counting records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792 271 Displaying records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795 272 Display single record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 273 Display records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 314

Putting DB Display together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994 320

ODBC Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 321

PICA Categories (picacats.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998 321

IWF Metadata Harvester II TABLE OF CONTENTS ix

Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999 321 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 321

Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001 321 PICA Categories class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002 321 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003 322

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004 322 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 322 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008 322 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010 323 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012 323 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014 323

Putting PICA Categories together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016 324

PICA Fields (picaflds.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019 325 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020 325 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021 325 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022 325 PICA Fields class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023 325 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024 325

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025 325 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027 326 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029 326 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031 326 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033 327 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035 327

Putting PICA Fields together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037 327

PICA Categories PICA Fields (pccatfld.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040 328 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041 328 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042 328 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043 328 PICA Categories PICA Fields class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044 328 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045 328

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046 328 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048 329 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050 329 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052 329 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054 330 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056 330

Putting PICA Categories PICA Fields together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058 330

Sources (sources.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061 331 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062 331 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063 331 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064 331 Sources class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065 331 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066 331

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067 331 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069 332 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071 332 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073 332 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075 333 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077 333

Putting Sources together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079 333

x  TABLE OF CONTENTS  IWF Metadata Harvester II

Records (records.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082 334 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083 334 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084 334 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085 334 Records class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086 334 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087 335

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088 335 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090 335 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092 335 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094 336 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096 336 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098 337

Putting Records together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1100 337 Access Numbers (accnums.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103 338 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104 338 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105 338 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106 338 Access Numbers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107 338 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108 338

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109 338 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111 339 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113 339 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115 339 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117 340 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119 340

Putting Access Numbers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121 340 Call Numbers (callnums.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124 341 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125 341 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126 341 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127 341 Call Numbers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128 341 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129 341

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130 341 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132 342 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134 342 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136 342 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138 343 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140 343

Putting Call Numbers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142 343 Records Call Numbers (rccllnms.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1145 344 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1146 344 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1147 344 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1148 344 Records Call Numbers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149 344 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1150 344

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1151 344 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153 345 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1155 345 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157 345 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159 346 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161 346

Putting Records Call Numbers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163 346

IWF Metadata Harvester II TABLE OF CONTENTS xi

Exemplar Production Numbers (exprnums.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166 347 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1167 347 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168 347 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169 347 Exemplar Production Numbers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170 347 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171 347

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172 347 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174 348 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176 348 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178 348 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180 349 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182 349

Putting Exemplar Production Numbers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184 349 Bibliographic Type Codes (bbtpcds.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187 350 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188 350 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189 350 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190 350 Bibliographic Type Codes class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191 350 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192 350

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193 351 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195 351 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197 351 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199 352 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201 352 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203 353

Putting Bibliographic Type Codes together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205 353 Bibliographic Types (bibtyps.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208 354 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209 354 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210 354 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211 354 Bibliographic Types class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212 354 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213 354

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214 354 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216 355 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218 355 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220 355 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222 356 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224 356

Putting Bibliographic Types together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226 356 Records Bibliographic Types (rcbbtyps.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1229 358 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1230 358 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1231 358 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232 358 Records Bibliographic Types class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1233 358 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234 358

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1235 358 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1237 359 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239 359 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241 359 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1243 360 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245 360

Putting Records Bibliographic Types together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1247 360

xii  TABLE OF CONTENTS  IWF Metadata Harvester II

Physical Descriptions (physdesc.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250 361 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1251 361 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252 361 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253 361 Physical Descriptions class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254 361 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1255 361

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256 361 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1258 362 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1260 362 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262 362 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1264 363 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1266 363

Putting Physical Descriptions together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268 363 Records Physical Descriptions (rcphsdsc.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1271 364 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272 364 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1273 364 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274 364 Records Physical Descriptions class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1275 364 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276 364

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1277 364 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279 365 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281 365 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283 365 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285 366 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287 366

Putting Records Physical Descriptions together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1289 366 Authors (authors.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292 367 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293 367 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294 367 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1295 367 Authors class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296 367 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297 367

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298 367 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1300 368 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302 368 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304 368 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306 369 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308 369

Putting Authors together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310 369 Records Authors (recathrs.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313 370 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1314 370 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315 370 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316 370 Records Authors class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317 370 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318 370

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1319 370 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321 371 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323 371 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325 371 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327 372 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1329 372

Putting Records Authors together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331 372

IWF Metadata Harvester II TABLE OF CONTENTS xiii

Contributors (cntrbtrs.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334 373 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335 373 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336 373 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337 373 Contributors class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338 373 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339 373

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340 373 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342 374 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344 374 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346 374 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348 375 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1350 375

Putting Contributors together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352 375 Records Contributors (rccntrbt.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355 376 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356 376 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357 376 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358 376 Records Contributors class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359 376 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1360 376

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1361 376 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363 377 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365 377 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1367 377 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369 378 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371 378

Putting Records Contributors together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1373 378 Main Titles (mnttls.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376 379 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377 379 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378 379 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379 379 Main Titles class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380 379 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1381 380

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382 380 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384 380 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386 381 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388 381 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390 381 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392 382

Putting Main Titles together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394 382 Records Main Titles (rcmnttls.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397 383 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1398 383 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399 383 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400 383 Records Main Titles class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401 383 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402 383

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403 383 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405 384 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407 384 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409 384 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411 385 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413 385

Putting Records Main Titles together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415 385

xiv  TABLE OF CONTENTS  IWF Metadata Harvester II

Content Summaries (contsums.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1418 386 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419 386 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1420 386 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421 386 Content Summaries class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422 386 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423 386

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424 386 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426 387 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428 387 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430 387 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432 388 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434 388

Putting Content Summaries together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436 388 Languages (language.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1439 389 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1440 389 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441 389 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442 389 Languages class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443 389 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444 389

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445 389 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1447 390 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1449 390 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1451 390 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453 391 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455 391

Putting Languages together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457 391 Records Languages (reclang.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1460 392 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1461 392 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462 392 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1463 392 Records Languages class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1464 392 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1465 392

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1466 392 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468 393 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470 393 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472 393 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1474 394 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476 394

Putting Records Languages together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1478 394 Subject Types (subjtyps.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481 395 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482 395 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1483 395 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484 395 Subject Types class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485 395 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486 395

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487 395 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1489 396 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491 396 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493 396 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1495 397 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1497 397

Putting Subject Types together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499 397

IWF Metadata Harvester II TABLE OF CONTENTS xv

Subjects (subjects.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502 398 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503 398 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504 398 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505 398 Subjects class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506 398 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507 398

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508 398 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1510 399 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512 399 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514 399 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1516 400 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1518 400

Putting Subjects together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1520 400 Records Subjects (recsubjs.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523 401 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1524 401 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525 401 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526 401 Records Subjects class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1527 401 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1528 401

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1529 401 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531 402 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533 402 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535 402 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537 403 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539 403

Putting Records Subjects together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1541 403 Permutation Patterns (prmpttrn.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544 404 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545 404 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546 404 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547 404 Permutation Patterns class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548 404 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549 404

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550 404 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552 405 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554 405 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556 405 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558 406 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560 406

Putting Permutation Patterns together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562 406 Remote Access (rmaccess.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1565 407 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566 407 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567 407 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568 407 Remote Access class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569 407 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570 407

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571 407 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573 408 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575 408 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577 408 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579 409 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581 409

Putting Remote Access together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583 409

xvi  TABLE OF CONTENTS  IWF Metadata Harvester II

Records Remote Access (rcrmaccs.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1586 410 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587 410 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1588 410 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589 410 Records Remote Access class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1590 410 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591 410

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592 410 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594 411 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 411 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 411 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 412 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602 412

Putting Records Remote Access together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1604 412 Publishers (publshrs.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607 413 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1608 413 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609 413 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1610 413 Publishers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611 413 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612 413

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613 413 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1615 414 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617 414 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1619 414 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1621 415 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623 415

Putting Publishers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625 415 Records Publishers (recpubs.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628 416 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629 416 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630 416 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631 416 Records Publishers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632 416 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633 416

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634 416 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636 417 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638 417 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1640 417 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642 418 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644 418

Putting Records Publishers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646 418 Database Providers (dbprovs.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1649 419 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1650 419 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1651 419 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652 419 Database Providers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653 419 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1654 419

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655 419 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1657 420 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1659 420 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661 420 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663 421 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1665 421

Putting Database Providers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667 421

IWF Metadata Harvester II TABLE OF CONTENTS xvii

Records Database Providers (rcdbprov.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1670 422 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1671 422 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672 422 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1673 422 Records Database Providers class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1674 422 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1675 422

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1676 422 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1678 423 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1680 423 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1682 423 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1684 424 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686 424

Putting Records Database Providers together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688 424 Temp IDs (tempids.web) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1691 425 Preprocessor macro calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692 425 using declarations for namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693 425 Include files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694 425 Temp IDs class declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695 425 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696 425

Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697 425 Get default connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1699 426 Standard-SQL for Recordset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1701 426 Do Field Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703 426 Assert Valid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705 427 Dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707 427

Putting Temp IDs together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1709 427 PICA Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712 428 Ordered by Pica+ Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713 428 Ordered by Pica3 Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1714 428 GNU General Public License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1715 428 GNU Free Documentation License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1716 432 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1718 438