sharedobjgen/src/SOxModuleSOCode.m3


                            -*- Mode: Modula-3 -*- 
 * 
 * For information about this program, contact Blair MacIntyre            
 * (bm@cs.columbia.edu) or Steven Feiner (feiner@cs.columbia.edu)         
 * at the Computer Science Dept., Columbia University,                    
 * 1214 Amsterdam Ave. Mailstop 0401, New York, NY, 10027.                
 *                                                                        
 * Copyright (C) 1995, 1996 by The Trustees of Columbia University in the 
 * City of New York.  Blair MacIntyre, Computer Science Department.       
 * See file COPYRIGHT-COLUMBIA for details.
 * 
 * Author          : Tobias Hoellerer (htobias)
 * Created On      : Fri Nov 10 17:37:04 EST 1995
 * Last Modified By: Blair MacIntyre
 * Last Modified On: Mon Apr  6 20:51:30 1998
 * Update Count    : 183
 * 
 * $Source: /usr/cvs/cm3/doc/help/gen_html/sharedobjgen/src/SOxModuleSOCode.m3.html,v $
 * $Date: 2003/07/16 13:18:06 $
 * $Author: wagner $
 * $Revision: 1.2 $
 * 
 * $Log: SOxModuleSOCode.m3.html,v $
 * Revision 1.2  2003/07/16 13:18:06  wagner
 * update generated docs for release 5.2.6
 *
 * added: doc/PkgDesc
 * added: doc/help/gen_html/db/src/DB.m3.html
 * added: doc/help/gen_html/db/src/MySQLDB.i3.html
 * added: doc/help/gen_html/db/src/MySQLDBStub.m3.html
 * added: doc/help/gen_html/db/src/ODBCDB.i3.html
 * added: doc/help/gen_html/db/src/PostgreSQLDB.i3.html
 * added: doc/help/gen_html/db/src/PostgreSQLDBStub.m3.html
 * added: doc/help/gen_html/db/src/odbc/ODBCDB.m3.html
 * added: doc/help/gen_html/db/src/odbc/ODBCDBRep.i3.html
 * added: doc/help/gen_html/href/I3_231.html
 * added: doc/help/gen_html/href/I3_232.html
 * added: doc/help/gen_html/href/I3_233.html
 * added: doc/help/gen_html/href/I3_234.html
 * added: doc/help/gen_html/href/I3_235.html
 * added: doc/help/gen_html/href/I3_236.html
 * added: doc/help/gen_html/href/I3_237.html
 * added: doc/help/gen_html/href/I3_238.html
 * added: doc/help/gen_html/href/I3_239.html
 * added: doc/help/gen_html/href/I3_240.html
 * added: doc/help/gen_html/href/I3_241.html
 * added: doc/help/gen_html/href/I3_242.html
 * added: doc/help/gen_html/href/I3_243.html
 * added: doc/help/gen_html/href/I3_244.html
 * added: doc/help/gen_html/href/I3_245.html
 * added: doc/help/gen_html/href/I3_246.html
 * added: doc/help/gen_html/href/I3_247.html
 * added: doc/help/gen_html/href/I3_248.html
 * added: doc/help/gen_html/href/I3_249.html
 * added: doc/help/gen_html/href/I3_250.html
 * added: doc/help/gen_html/href/I3_251.html
 * added: doc/help/gen_html/href/I3_252.html
 * added: doc/help/gen_html/href/I3_253.html
 * added: doc/help/gen_html/href/I3_254.html
 * added: doc/help/gen_html/href/I3_255.html
 * added: doc/help/gen_html/href/I3_256.html
 * added: doc/help/gen_html/href/I3_257.html
 * added: doc/help/gen_html/href/I3_258.html
 * added: doc/help/gen_html/href/I3_259.html
 * added: doc/help/gen_html/href/I3_260.html
 * added: doc/help/gen_html/href/I3_261.html
 * added: doc/help/gen_html/href/I3_262.html
 * added: doc/help/gen_html/href/I3_263.html
 * added: doc/help/gen_html/href/I3_264.html
 * added: doc/help/gen_html/href/I3_265.html
 * added: doc/help/gen_html/href/I3_266.html
 * added: doc/help/gen_html/href/I3_267.html
 * added: doc/help/gen_html/href/I3_268.html
 * added: doc/help/gen_html/href/I3_269.html
 * added: doc/help/gen_html/href/I3_270.html
 * added: doc/help/gen_html/href/I3_271.html
 * added: doc/help/gen_html/href/M3_142.html
 * added: doc/help/gen_html/href/M3_143.html
 * added: doc/help/gen_html/href/M3_144.html
 * added: doc/help/gen_html/href/M3_145.html
 * added: doc/help/gen_html/href/M3_146.html
 * added: doc/help/gen_html/href/M3_147.html
 * added: doc/help/gen_html/href/M3_148.html
 * added: doc/help/gen_html/href/M3_149.html
 * added: doc/help/gen_html/href/M3_150.html
 * added: doc/help/gen_html/href/M3_151.html
 * added: doc/help/gen_html/href/M3_152.html
 * added: doc/help/gen_html/href/M3_153.html
 * added: doc/help/gen_html/href/M3_154.html
 * added: doc/help/gen_html/href/M3_155.html
 * added: doc/help/gen_html/href/M3_156.html
 * added: doc/help/gen_html/href/M3_157.html
 * added: doc/help/gen_html/href/M3_158.html
 * added: doc/help/gen_html/href/M3_159.html
 * added: doc/help/gen_html/href/M3_160.html
 * added: doc/help/gen_html/href/M3_161.html
 * added: doc/help/gen_html/href/M3_162.html
 * added: doc/help/gen_html/href/M3_163.html
 * added: doc/help/gen_html/href/M3_164.html
 * added: doc/help/gen_html/href/M3_165.html
 * added: doc/help/gen_html/href/M3_166.html
 * added: doc/help/gen_html/href/M3_167.html
 * added: doc/help/gen_html/href/M3_168.html
 * added: doc/help/gen_html/href/M3_169.html
 * added: doc/help/gen_html/href/M3_170.html
 * added: doc/help/gen_html/href/M3_171.html
 * added: doc/help/gen_html/href/M3_172.html
 * added: doc/help/gen_html/href/M3_173.html
 * added: doc/help/gen_html/href/M3_174.html
 * added: doc/help/gen_html/href/M3_175.html
 * added: doc/help/gen_html/href/M3_176.html
 * added: doc/help/gen_html/href/M3_177.html
 * added: doc/help/gen_html/href/M3_178.html
 * added: doc/help/gen_html/href/M3_179.html
 * added: doc/help/gen_html/href/M3_180.html
 * added: doc/help/gen_html/href/M3_181.html
 * added: doc/help/gen_html/href/M3_182.html
 * added: doc/help/gen_html/href/M3_183.html
 * added: doc/help/gen_html/href/M3_184.html
 * added: doc/help/gen_html/href/M3_185.html
 * added: doc/help/gen_html/libm3/src/uid/POSIX/MachineIDPosixC.c.html
 * added: doc/help/gen_html/libm3/src/uid/POSIX/MachineIDPosixC.i3.html
 * added: doc/help/gen_html/m3core/src/C/Common/CerrnoC.c.html
 * added: doc/help/gen_html/m3core/src/unix/linux-libc6/Utermio.i3.html
 * added: doc/help/gen_html/m3core/src/unix/linux-libc6-le/Uin.m3.html
 * added: doc/help/gen_html/mentor/derived/BinpackAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/BinpackAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/BinpackDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/BinpackDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/BinpackIE.i3.html
 * added: doc/help/gen_html/mentor/derived/BinpackIE.m3.html
 * added: doc/help/gen_html/mentor/derived/BinpackTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/BinpackTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/BinpackViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/BinpackViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/BinpackmyviewObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/BinpackmyviewObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamIE.i3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamIE.m3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/BresenhamViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/CPAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/CPAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/CPDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/CPDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/CPIE.i3.html
 * added: doc/help/gen_html/mentor/derived/CPIE.m3.html
 * added: doc/help/gen_html/mentor/derived/CPTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/CPTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/CPViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/CPViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/DGraphAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/DGraphAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/DGraphDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/DGraphDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/DGraphIE.i3.html
 * added: doc/help/gen_html/mentor/derived/DGraphIE.m3.html
 * added: doc/help/gen_html/mentor/derived/DGraphTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/DGraphTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/DGraphViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/DGraphViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/EuclidAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/EuclidAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/EuclidDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/EuclidDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/EuclidIE.i3.html
 * added: doc/help/gen_html/mentor/derived/EuclidIE.m3.html
 * added: doc/help/gen_html/mentor/derived/EuclidTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/EuclidTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/EuclidViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/EuclidViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/HashAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/HashAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/HashDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/HashDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/HashIE.i3.html
 * added: doc/help/gen_html/mentor/derived/HashIE.m3.html
 * added: doc/help/gen_html/mentor/derived/HashTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/HashTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/HashViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/HashViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/HullAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/HullAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/HullDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/HullDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/HullIE.i3.html
 * added: doc/help/gen_html/mentor/derived/HullIE.m3.html
 * added: doc/help/gen_html/mentor/derived/HullTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/HullTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/HullViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/HullViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/MatchAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/MatchAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/MatchDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/MatchDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/MatchIE.i3.html
 * added: doc/help/gen_html/mentor/derived/MatchIE.m3.html
 * added: doc/help/gen_html/mentor/derived/MatchTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/MatchTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/MatchViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/MatchViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowIE.i3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowIE.m3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/MaxflowViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/MentorBundle.i3.html
 * added: doc/help/gen_html/mentor/derived/MentorBundle.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxIE.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxIE.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewColorScaleObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewColorScaleObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewGameTreeAObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewGameTreeAObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewGameTreeBObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/MinimaxViewGameTreeBObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PQueueAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/PQueueAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/PQueueDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/PQueueDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/PQueueIE.i3.html
 * added: doc/help/gen_html/mentor/derived/PQueueIE.m3.html
 * added: doc/help/gen_html/mentor/derived/PQueueTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/PQueueTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/PQueueViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/PQueueViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/ParseAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/ParseAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/ParseDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/ParseDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/ParseIE.i3.html
 * added: doc/help/gen_html/mentor/derived/ParseIE.m3.html
 * added: doc/help/gen_html/mentor/derived/ParseTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/ParseTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/ParseViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/ParseViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteIE.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteIE.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteManyPacketsMoveObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteManyPacketsMoveObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteManyPacketsStepObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteManyPacketsStepObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketMoveObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketMoveObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketRouteObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketRouteObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketStepObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketStepObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketTraceObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRoutePacketTraceObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteQueueSizesObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteQueueSizesObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/PktRouteViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/RealList.i3.html
 * added: doc/help/gen_html/mentor/derived/RealList.m3.html
 * added: doc/help/gen_html/mentor/derived/RealPQ.i3.html
 * added: doc/help/gen_html/mentor/derived/RealPQ.m3.html
 * added: doc/help/gen_html/mentor/derived/RealPQRep.i3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeIE.i3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeIE.m3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/SearchTreeViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathIE.i3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathIE.m3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathSPGraphObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathSPGraphObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/ShortestPathViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/SiteList.i3.html
 * added: doc/help/gen_html/mentor/derived/SiteList.m3.html
 * added: doc/help/gen_html/mentor/derived/SortAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/SortAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/SortDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/SortDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/SortIE.i3.html
 * added: doc/help/gen_html/mentor/derived/SortIE.m3.html
 * added: doc/help/gen_html/mentor/derived/SortTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/SortTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/SortViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/SortViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchIE.i3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchIE.m3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/StringSearchViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeIE.i3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeIE.m3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/SubtypeViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/Subtypeview1ObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/Subtypeview1ObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindAverageDepthObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindAverageDepthObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindBigTreeObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindBigTreeObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindChangeParentObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindChangeParentObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindFindLengthObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindFindLengthObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindIE.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindIE.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindNodeDepthObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindNodeDepthObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindTreeObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindTreeObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/UnionFindViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerCompressObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerCompressObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerDecompressObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerDecompressObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerIE.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerIE.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/WheelerWhyDecompressWorksObliqView.i3.html
 * added: doc/help/gen_html/mentor/derived/WheelerWhyDecompressWorksObliqView.m3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperIE.i3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperIE.m3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/ZPaperViewClass.m3.html
 * added: doc/help/gen_html/mentor/derived/logoAlgClass.i3.html
 * added: doc/help/gen_html/mentor/derived/logoAlgClass.m3.html
 * added: doc/help/gen_html/mentor/derived/logoDataView.i3.html
 * added: doc/help/gen_html/mentor/derived/logoDataView.m3.html
 * added: doc/help/gen_html/mentor/derived/logoIE.i3.html
 * added: doc/help/gen_html/mentor/derived/logoIE.m3.html
 * added: doc/help/gen_html/mentor/derived/logoTranscriptView.i3.html
 * added: doc/help/gen_html/mentor/derived/logoTranscriptView.m3.html
 * added: doc/help/gen_html/mentor/derived/logoViewClass.i3.html
 * added: doc/help/gen_html/mentor/derived/logoViewClass.m3.html
 * added: doc/help/gen_html/mentor/src/Main.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFF.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFF.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFFCodeView.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFFCodeView.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFFPromptForWeights.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFFPromptForWeights.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFFSimple.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/AlgFFSimple.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/BinpackAux.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/BinpackAux.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView1.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView1.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView2.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView2.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView3.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView3.m3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView4.i3.html
 * added: doc/help/gen_html/mentor/src/binpack/PackingView4.m3.html
 * added: doc/help/gen_html/mentor/src/bresenham/AlgBresenham.i3.html
 * added: doc/help/gen_html/mentor/src/bresenham/AlgBresenham.m3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewError.i3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewError.m3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewIncrementalReal.i3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewIncrementalReal.m3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewLine.i3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewLine.m3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewOnlyLine.i3.html
 * added: doc/help/gen_html/mentor/src/bresenham/ViewOnlyLine.m3.html
 * added: doc/help/gen_html/mentor/src/closestpoint/CPAlg.i3.html
 * added: doc/help/gen_html/mentor/src/closestpoint/CPAlg.m3.html
 * added: doc/help/gen_html/mentor/src/closestpoint/CPView.i3.html
 * added: doc/help/gen_html/mentor/src/closestpoint/CPView.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrix.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrix.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixVBT.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixVBT.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixView.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixView.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixView01.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixView01.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixView01_K.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/AdjMatrixView01_K.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DFS.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DFS.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DFSTC.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DFSTC.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DFSTreeView.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DFSTreeView.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DepthToColor.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/DepthToColor.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/GraphView.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/GraphView.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/GridMJJ.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/GridMJJ.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/ReadGraph.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/ReadGraph.m3.html
 * added: doc/help/gen_html/mentor/src/dgraph/Warshall.i3.html
 * added: doc/help/gen_html/mentor/src/dgraph/Warshall.m3.html
 * added: doc/help/gen_html/mentor/src/euclid/Euclid.i3.html
 * added: doc/help/gen_html/mentor/src/euclid/EuclidAlg.m3.html
 * added: doc/help/gen_html/mentor/src/euclid/EuclidView.m3.html
 * added: doc/help/gen_html/mentor/src/hash/HashAlgs.i3.html
 * added: doc/help/gen_html/mentor/src/hash/HashAlgs.m3.html
 * added: doc/help/gen_html/mentor/src/hash/HashFmt.i3.html
 * added: doc/help/gen_html/mentor/src/hash/HashFmt.m3.html
 * added: doc/help/gen_html/mentor/src/hash/HashStatsView.i3.html
 * added: doc/help/gen_html/mentor/src/hash/HashStatsView.m3.html
 * added: doc/help/gen_html/mentor/src/hash/HashViews.i3.html
 * added: doc/help/gen_html/mentor/src/hash/HashViews.m3.html
 * added: doc/help/gen_html/mentor/src/hull/AlgTypes.i3.html
 * added: doc/help/gen_html/mentor/src/hull/AlgTypes.m3.html
 * added: doc/help/gen_html/mentor/src/hull/ArrayView.i3.html
 * added: doc/help/gen_html/mentor/src/hull/ArrayView.m3.html
 * added: doc/help/gen_html/mentor/src/hull/GeomView.i3.html
 * added: doc/help/gen_html/mentor/src/hull/GeomView.m3.html
 * added: doc/help/gen_html/mentor/src/hull/HullFmt.i3.html
 * added: doc/help/gen_html/mentor/src/hull/HullFmt.m3.html
 * added: doc/help/gen_html/mentor/src/hull/HullInput.i3.html
 * added: doc/help/gen_html/mentor/src/hull/HullInput.m3.html
 * added: doc/help/gen_html/mentor/src/hull/MyColors.i3.html
 * added: doc/help/gen_html/mentor/src/hull/MyColors.m3.html
 * added: doc/help/gen_html/mentor/src/hull/RubberAlg.i3.html
 * added: doc/help/gen_html/mentor/src/hull/RubberAlg.m3.html
 * added: doc/help/gen_html/mentor/src/hull/Site.i3.html
 * added: doc/help/gen_html/mentor/src/hull/Site.m3.html
 * added: doc/help/gen_html/mentor/src/hull/WrapAlg.i3.html
 * added: doc/help/gen_html/mentor/src/hull/WrapAlg.m3.html
 * added: doc/help/gen_html/mentor/src/kpaths/AtomEdgeTbl.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/AtomEdgeTbl.m3.html
 * added: doc/help/gen_html/mentor/src/kpaths/AtomVertexTbl.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/AtomVertexTbl.m3.html
 * added: doc/help/gen_html/mentor/src/kpaths/Edge.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/EdgeSeq.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/EdgeSeq.m3.html
 * added: doc/help/gen_html/mentor/src/kpaths/EdgeSeqRep.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/ShortestPath.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/ShortestPath.m3.html
 * added: doc/help/gen_html/mentor/src/kpaths/Vertex.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/VertexSeq.i3.html
 * added: doc/help/gen_html/mentor/src/kpaths/VertexSeq.m3.html
 * added: doc/help/gen_html/mentor/src/kpaths/VertexSeqRep.i3.html
 * added: doc/help/gen_html/mentor/src/logo/Logo.i3.html
 * added: doc/help/gen_html/mentor/src/logo/Logo.m3.html
 * added: doc/help/gen_html/mentor/src/match/AlgMatch.i3.html
 * added: doc/help/gen_html/mentor/src/match/AlgMatch.m3.html
 * added: doc/help/gen_html/mentor/src/match/Match.i3.html
 * added: doc/help/gen_html/mentor/src/match/Match.m3.html
 * added: doc/help/gen_html/mentor/src/match/MatchRect.i3.html
 * added: doc/help/gen_html/mentor/src/match/MatchSelector.i3.html
 * added: doc/help/gen_html/mentor/src/match/MatchSelector.m3.html
 * added: doc/help/gen_html/mentor/src/match/ViewMatch.i3.html
 * added: doc/help/gen_html/mentor/src/match/ViewMatch.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFAlgs.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFAlgs.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFBarView.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFBarView.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFEdgeView.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFEdgeView.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFFmt.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFFmt.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFGraph.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFGraph.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFLegendView.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFLegendView.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFViews.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFViews.m3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFViews2.i3.html
 * added: doc/help/gen_html/mentor/src/maxflow/MFViews2.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/AlgMinimax.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/AlgMinimax.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/GameBoard.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/GameBoard.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/GameBoardPrivate.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/GameMove.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/GameMove.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/GamePlay.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/GamePlay.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/HumanPlayer.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/HumanPlayer.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/Minimax.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/Minimax.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/MoveList.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/MoveList.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/TypeFmt.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/TypeFmt.m3.html
 * added: doc/help/gen_html/mentor/src/minimax/ViewGameBoard.i3.html
 * added: doc/help/gen_html/mentor/src/minimax/ViewGameBoard.m3.html
 * added: doc/help/gen_html/mentor/src/parse/A_BottomUp.i3.html
 * added: doc/help/gen_html/mentor/src/parse/A_BottomUp.m3.html
 * added: doc/help/gen_html/mentor/src/parse/A_RecDescent.i3.html
 * added: doc/help/gen_html/mentor/src/parse/A_RecDescent.m3.html
 * added: doc/help/gen_html/mentor/src/parse/A_TopDown.i3.html
 * added: doc/help/gen_html/mentor/src/parse/A_TopDown.m3.html
 * added: doc/help/gen_html/mentor/src/parse/Parse.i3.html
 * added: doc/help/gen_html/mentor/src/parse/Parse.m3.html
 * added: doc/help/gen_html/mentor/src/parse/ParseColor.i3.html
 * added: doc/help/gen_html/mentor/src/parse/ParseColor.m3.html
 * added: doc/help/gen_html/mentor/src/parse/Token.i3.html
 * added: doc/help/gen_html/mentor/src/parse/Token.m3.html
 * added: doc/help/gen_html/mentor/src/parse/V_Input.i3.html
 * added: doc/help/gen_html/mentor/src/parse/V_Input.m3.html
 * added: doc/help/gen_html/mentor/src/parse/V_Stack.i3.html
 * added: doc/help/gen_html/mentor/src/parse/V_Stack.m3.html
 * added: doc/help/gen_html/mentor/src/parse/V_Tree.i3.html
 * added: doc/help/gen_html/mentor/src/parse/V_Tree.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/ASP.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/ASP.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/AlgGreedy.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/AlgGreedy.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/AlgTwoPhase.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/AlgTwoPhase.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/Graph.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/Graph.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/GraphRep.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/IntListUtils.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/IntListUtils.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/MakePackets.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/MakePackets.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/MyReal.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/MyReal.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/OblFmt.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/OblFmt.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/ObliqExtension.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/ObliqExtension.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/Packet.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/Packet.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/PacketRep.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/RefIntArray.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/RefIntArray.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/Topology.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/Topology.m3.html
 * added: doc/help/gen_html/mentor/src/pktroute/VertexSizeAnim.i3.html
 * added: doc/help/gen_html/mentor/src/pktroute/VertexSizeAnim.m3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQAlgs.i3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQAlgs.m3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQBarView.i3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQBarView.m3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQViews.i3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQViews.m3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQueue.i3.html
 * added: doc/help/gen_html/mentor/src/pqueue/PQueue.m3.html
 * added: doc/help/gen_html/mentor/src/searchtree/BSTAlg.i3.html
 * added: doc/help/gen_html/mentor/src/searchtree/BSTAlg.m3.html
 * added: doc/help/gen_html/mentor/src/searchtree/BSTView.i3.html
 * added: doc/help/gen_html/mentor/src/searchtree/BSTView.m3.html
 * added: doc/help/gen_html/mentor/src/searchtree/RedBlackAlg.i3.html
 * added: doc/help/gen_html/mentor/src/searchtree/RedBlackAlg.m3.html
 * added: doc/help/gen_html/mentor/src/searchtree/STView.i3.html
 * added: doc/help/gen_html/mentor/src/searchtree/STView.m3.html
 * added: doc/help/gen_html/mentor/src/searchtree/SkelView.i3.html
 * added: doc/help/gen_html/mentor/src/searchtree/SkelView.m3.html
 * added: doc/help/gen_html/mentor/src/searchtree/SkinnyBinTree.i3.html
 * added: doc/help/gen_html/mentor/src/searchtree/SkinnyBinTree.m3.html
 * added: doc/help/gen_html/mentor/src/searchtree/UnbalancedAlg.i3.html
 * added: doc/help/gen_html/mentor/src/searchtree/UnbalancedAlg.m3.html
 * added: doc/help/gen_html/mentor/src/sorting/ChipsView.i3.html
 * added: doc/help/gen_html/mentor/src/sorting/ChipsView.m3.html
 * added: doc/help/gen_html/mentor/src/sorting/DotsView.i3.html
 * added: doc/help/gen_html/mentor/src/sorting/DotsView.m3.html
 * added: doc/help/gen_html/mentor/src/sorting/Sort.i3.html
 * added: doc/help/gen_html/mentor/src/sorting/SortAlgs.i3.html
 * added: doc/help/gen_html/mentor/src/sorting/SortAlgs.m3.html
 * added: doc/help/gen_html/mentor/src/sorting/SticksView.i3.html
 * added: doc/help/gen_html/mentor/src/sorting/SticksView.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/AlgsBase.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/AlgsBase.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/AutoView.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/AutoView.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/BM.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/BM.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/BruteForce.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/BruteForce.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/KMP.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/KMP.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/PrefixView.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/PrefixView.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/SliderView.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/SliderView.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/TextView.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/TextView.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/TouchView.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/TouchView.m3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/ViewsBase.i3.html
 * added: doc/help/gen_html/mentor/src/stringsearch/ViewsBase.m3.html
 * added: doc/help/gen_html/mentor/src/subtype/AlgSubtype.i3.html
 * added: doc/help/gen_html/mentor/src/subtype/AlgSubtype.m3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgBoth.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgBoth.m3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgCompress.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgCompress.m3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgList.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgList.m3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgQuickFind.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgQuickFind.m3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgSimple.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgSimple.m3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgUnionByRank.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/AlgUnionByRank.m3.html
 * added: doc/help/gen_html/mentor/src/unionfind/TreeNode.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/UFInput.i3.html
 * added: doc/help/gen_html/mentor/src/unionfind/UFInput.m3.html
 * added: doc/help/gen_html/mentor/src/wheeler/CharArraySort.i3.html
 * added: doc/help/gen_html/mentor/src/wheeler/CharArraySort.m3.html
 * added: doc/help/gen_html/mentor/src/wheeler/MiscFmt.i3.html
 * added: doc/help/gen_html/mentor/src/wheeler/MiscFmt.m3.html
 * added: doc/help/gen_html/mentor/src/wheeler/Wheeler.i3.html
 * added: doc/help/gen_html/mentor/src/wheeler/Wheeler.m3.html
 * added: doc/help/gen_html/mentor/src/zpaper/AlgFn.i3.html
 * added: doc/help/gen_html/mentor/src/zpaper/AlgFn.m3.html
 * added: doc/help/gen_html/mentor/src/zpaper/Fn.i3.html
 * added: doc/help/gen_html/mentor/src/zpaper/ViewFn.i3.html
 * added: doc/help/gen_html/mentor/src/zpaper/ViewFn.m3.html
 * added: doc/help/gen_html/mentor/src/zpaper/ViewHisto.i3.html
 * added: doc/help/gen_html/mentor/src/zpaper/ViewHisto.m3.html
 * added: doc/help/gen_html/mentor/src/zpaper/ViewMFn.i3.html
 * added: doc/help/gen_html/mentor/src/zpaper/ViewMFn.m3.html
 * added: doc/help/gen_html/tcp/src/POSIX/HerrnoC.c.html
 * modified: doc/help/gen_html/INDEX.html
 * modified: doc/help/gen_html/m3db
 * modified: doc/help/gen_html/cm3/src/Builder.m3.html
 * modified: doc/help/gen_html/cm3/src/Dirs.m3.html
 * modified: doc/help/gen_html/cm3/src/M3Build.m3.html
 * modified: doc/help/gen_html/cm3/src/Makefile.m3.html
 * modified: doc/help/gen_html/cm3/src/Msg.i3.html
 * modified: doc/help/gen_html/cm3/src/Msg.m3.html
 * modified: doc/help/gen_html/db/src/DB.i3.html
 * modified: doc/help/gen_html/debug/src/Debug.i3.html
 * modified: doc/help/gen_html/debug/src/Debug.m3.html
 * modified: doc/help/gen_html/embutils/src/EmbProxiedObj.m3.html
 * modified: doc/help/gen_html/events/src/Event.i3.html
 * modified: doc/help/gen_html/events/src/Event.m3.html
 * modified: doc/help/gen_html/events/src/EventConn.i3.html
 * modified: doc/help/gen_html/events/src/EventConn.m3.html
 * modified: doc/help/gen_html/events/src/EventCounter.i3.html
 * modified: doc/help/gen_html/events/src/EventCounter.m3.html
 * modified: doc/help/gen_html/events/src/EventHandle.i3.html
 * modified: doc/help/gen_html/events/src/EventIO.i3.html
 * modified: doc/help/gen_html/events/src/EventNumber.i3.html
 * modified: doc/help/gen_html/events/src/EventNumber.m3.html
 * modified: doc/help/gen_html/events/src/EventNumberF.i3.html
 * modified: doc/help/gen_html/events/src/EventPort.i3.html
 * modified: doc/help/gen_html/events/src/EventPort.m3.html
 * modified: doc/help/gen_html/events/src/EventProtocol.i3.html
 * modified: doc/help/gen_html/events/src/EventRd.i3.html
 * modified: doc/help/gen_html/events/src/EventRd.m3.html
 * modified: doc/help/gen_html/events/src/EventSpaceID.i3.html
 * modified: doc/help/gen_html/events/src/EventSpaceID.m3.html
 * modified: doc/help/gen_html/events/src/EventStubLib.i3.html
 * modified: doc/help/gen_html/events/src/EventStubLib.m3.html
 * modified: doc/help/gen_html/events/src/EventWireRep.i3.html
 * modified: doc/help/gen_html/events/src/EventWireRep.m3.html
 * modified: doc/help/gen_html/events/src/EventWr.i3.html
 * modified: doc/help/gen_html/events/src/EventWr.m3.html
 * modified: doc/help/gen_html/events/src/EventWrF.i3.html
 * modified: doc/help/gen_html/events/src/HostInfo.i3.html
 * modified: doc/help/gen_html/events/src/HostInfo.m3.html
 * modified: doc/help/gen_html/events/src/RdWrMutex.i3.html
 * modified: doc/help/gen_html/events/src/RdWrMutex.m3.html
 * modified: doc/help/gen_html/events/src/Work.i3.html
 * modified: doc/help/gen_html/events/src/WorkerPool.i3.html
 * modified: doc/help/gen_html/events/src/WorkerPool.m3.html
 * modified: doc/help/gen_html/events/src/Zombie.i3.html
 * modified: doc/help/gen_html/fisheye/derived/FisheyeBundle.m3.html
 * modified: doc/help/gen_html/formsedit/derived/formseditBundle.m3.html
 * modified: doc/help/gen_html/href/I3_1.html
 * modified: doc/help/gen_html/href/I3_10.html
 * modified: doc/help/gen_html/href/I3_100.html
 * modified: doc/help/gen_html/href/I3_101.html
 * modified: doc/help/gen_html/href/I3_102.html
 * modified: doc/help/gen_html/href/I3_103.html
 * modified: doc/help/gen_html/href/I3_104.html
 * modified: doc/help/gen_html/href/I3_105.html
 * modified: doc/help/gen_html/href/I3_106.html
 * modified: doc/help/gen_html/href/I3_107.html
 * modified: doc/help/gen_html/href/I3_108.html
 * modified: doc/help/gen_html/href/I3_109.html
 * modified: doc/help/gen_html/href/I3_11.html
 * modified: doc/help/gen_html/href/I3_110.html
 * modified: doc/help/gen_html/href/I3_111.html
 * modified: doc/help/gen_html/href/I3_112.html
 * modified: doc/help/gen_html/href/I3_113.html
 * modified: doc/help/gen_html/href/I3_114.html
 * modified: doc/help/gen_html/href/I3_115.html
 * modified: doc/help/gen_html/href/I3_116.html
 * modified: doc/help/gen_html/href/I3_117.html
 * modified: doc/help/gen_html/href/I3_118.html
 * modified: doc/help/gen_html/href/I3_119.html
 * modified: doc/help/gen_html/href/I3_12.html
 * modified: doc/help/gen_html/href/I3_120.html
 * modified: doc/help/gen_html/href/I3_121.html
 * modified: doc/help/gen_html/href/I3_122.html
 * modified: doc/help/gen_html/href/I3_123.html
 * modified: doc/help/gen_html/href/I3_124.html
 * modified: doc/help/gen_html/href/I3_125.html
 * modified: doc/help/gen_html/href/I3_126.html
 * modified: doc/help/gen_html/href/I3_127.html
 * modified: doc/help/gen_html/href/I3_128.html
 * modified: doc/help/gen_html/href/I3_129.html
 * modified: doc/help/gen_html/href/I3_130.html
 * modified: doc/help/gen_html/href/I3_131.html
 * modified: doc/help/gen_html/href/I3_132.html
 * modified: doc/help/gen_html/href/I3_133.html
 * modified: doc/help/gen_html/href/I3_134.html
 * modified: doc/help/gen_html/href/I3_135.html
 * modified: doc/help/gen_html/href/I3_136.html
 * modified: doc/help/gen_html/href/I3_137.html
 * modified: doc/help/gen_html/href/I3_138.html
 * modified: doc/help/gen_html/href/I3_139.html
 * modified: doc/help/gen_html/href/I3_14.html
 * modified: doc/help/gen_html/href/I3_140.html
 * modified: doc/help/gen_html/href/I3_141.html
 * modified: doc/help/gen_html/href/I3_142.html
 * modified: doc/help/gen_html/href/I3_143.html
 * modified: doc/help/gen_html/href/I3_144.html
 * modified: doc/help/gen_html/href/I3_145.html
 * modified: doc/help/gen_html/href/I3_146.html
 * modified: doc/help/gen_html/href/I3_147.html
 * modified: doc/help/gen_html/href/I3_148.html
 * modified: doc/help/gen_html/href/I3_149.html
 * modified: doc/help/gen_html/href/I3_150.html
 * modified: doc/help/gen_html/href/I3_151.html
 * modified: doc/help/gen_html/href/I3_152.html
 * modified: doc/help/gen_html/href/I3_153.html
 * modified: doc/help/gen_html/href/I3_154.html
 * modified: doc/help/gen_html/href/I3_155.html
 * modified: doc/help/gen_html/href/I3_156.html
 * modified: doc/help/gen_html/href/I3_157.html
 * modified: doc/help/gen_html/href/I3_158.html
 * modified: doc/help/gen_html/href/I3_159.html
 * modified: doc/help/gen_html/href/I3_160.html
 * modified: doc/help/gen_html/href/I3_161.html
 * modified: doc/help/gen_html/href/I3_162.html
 * modified: doc/help/gen_html/href/I3_163.html
 * modified: doc/help/gen_html/href/I3_164.html
 * modified: doc/help/gen_html/href/I3_165.html
 * modified: doc/help/gen_html/href/I3_166.html
 * modified: doc/help/gen_html/href/I3_167.html
 * modified: doc/help/gen_html/href/I3_168.html
 * modified: doc/help/gen_html/href/I3_169.html
 * modified: doc/help/gen_html/href/I3_17.html
 * modified: doc/help/gen_html/href/I3_170.html
 * modified: doc/help/gen_html/href/I3_171.html
 * modified: doc/help/gen_html/href/I3_172.html
 * modified: doc/help/gen_html/href/I3_173.html
 * modified: doc/help/gen_html/href/I3_174.html
 * modified: doc/help/gen_html/href/I3_175.html
 * modified: doc/help/gen_html/href/I3_176.html
 * modified: doc/help/gen_html/href/I3_177.html
 * modified: doc/help/gen_html/href/I3_178.html
 * modified: doc/help/gen_html/href/I3_179.html
 * modified: doc/help/gen_html/href/I3_18.html
 * modified: doc/help/gen_html/href/I3_180.html
 * modified: doc/help/gen_html/href/I3_181.html
 * modified: doc/help/gen_html/href/I3_182.html
 * modified: doc/help/gen_html/href/I3_183.html
 * modified: doc/help/gen_html/href/I3_184.html
 * modified: doc/help/gen_html/href/I3_185.html
 * modified: doc/help/gen_html/href/I3_186.html
 * modified: doc/help/gen_html/href/I3_187.html
 * modified: doc/help/gen_html/href/I3_188.html
 * modified: doc/help/gen_html/href/I3_189.html
 * modified: doc/help/gen_html/href/I3_19.html
 * modified: doc/help/gen_html/href/I3_190.html
 * modified: doc/help/gen_html/href/I3_191.html
 * modified: doc/help/gen_html/href/I3_192.html
 * modified: doc/help/gen_html/href/I3_193.html
 * modified: doc/help/gen_html/href/I3_194.html
 * modified: doc/help/gen_html/href/I3_195.html
 * modified: doc/help/gen_html/href/I3_196.html
 * modified: doc/help/gen_html/href/I3_197.html
 * modified: doc/help/gen_html/href/I3_198.html
 * modified: doc/help/gen_html/href/I3_199.html
 * modified: doc/help/gen_html/href/I3_20.html
 * modified: doc/help/gen_html/href/I3_200.html
 * modified: doc/help/gen_html/href/I3_201.html
 * modified: doc/help/gen_html/href/I3_202.html
 * modified: doc/help/gen_html/href/I3_203.html
 * modified: doc/help/gen_html/href/I3_204.html
 * modified: doc/help/gen_html/href/I3_205.html
 * modified: doc/help/gen_html/href/I3_206.html
 * modified: doc/help/gen_html/href/I3_207.html
 * modified: doc/help/gen_html/href/I3_208.html
 * modified: doc/help/gen_html/href/I3_209.html
 * modified: doc/help/gen_html/href/I3_210.html
 * modified: doc/help/gen_html/href/I3_211.html
 * modified: doc/help/gen_html/href/I3_212.html
 * modified: doc/help/gen_html/href/I3_213.html
 * modified: doc/help/gen_html/href/I3_214.html
 * modified: doc/help/gen_html/href/I3_215.html
 * modified: doc/help/gen_html/href/I3_216.html
 * modified: doc/help/gen_html/href/I3_217.html
 * modified: doc/help/gen_html/href/I3_218.html
 * modified: doc/help/gen_html/href/I3_219.html
 * modified: doc/help/gen_html/href/I3_220.html
 * modified: doc/help/gen_html/href/I3_221.html
 * modified: doc/help/gen_html/href/I3_222.html
 * modified: doc/help/gen_html/href/I3_223.html
 * modified: doc/help/gen_html/href/I3_224.html
 * modified: doc/help/gen_html/href/I3_225.html
 * modified: doc/help/gen_html/href/I3_226.html
 * modified: doc/help/gen_html/href/I3_227.html
 * modified: doc/help/gen_html/href/I3_228.html
 * modified: doc/help/gen_html/href/I3_229.html
 * modified: doc/help/gen_html/href/I3_230.html
 * modified: doc/help/gen_html/href/I3_25.html
 * modified: doc/help/gen_html/href/I3_26.html
 * modified: doc/help/gen_html/href/I3_27.html
 * modified: doc/help/gen_html/href/I3_28.html
 * modified: doc/help/gen_html/href/I3_29.html
 * modified: doc/help/gen_html/href/I3_30.html
 * modified: doc/help/gen_html/href/I3_31.html
 * modified: doc/help/gen_html/href/I3_32.html
 * modified: doc/help/gen_html/href/I3_33.html
 * modified: doc/help/gen_html/href/I3_34.html
 * modified: doc/help/gen_html/href/I3_35.html
 * modified: doc/help/gen_html/href/I3_36.html
 * modified: doc/help/gen_html/href/I3_37.html
 * modified: doc/help/gen_html/href/I3_38.html
 * modified: doc/help/gen_html/href/I3_39.html
 * modified: doc/help/gen_html/href/I3_40.html
 * modified: doc/help/gen_html/href/I3_41.html
 * modified: doc/help/gen_html/href/I3_42.html
 * modified: doc/help/gen_html/href/I3_43.html
 * modified: doc/help/gen_html/href/I3_44.html
 * modified: doc/help/gen_html/href/I3_45.html
 * modified: doc/help/gen_html/href/I3_46.html
 * modified: doc/help/gen_html/href/I3_47.html
 * modified: doc/help/gen_html/href/I3_48.html
 * modified: doc/help/gen_html/href/I3_49.html
 * modified: doc/help/gen_html/href/I3_5.html
 * modified: doc/help/gen_html/href/I3_50.html
 * modified: doc/help/gen_html/href/I3_51.html
 * modified: doc/help/gen_html/href/I3_52.html
 * modified: doc/help/gen_html/href/I3_53.html
 * modified: doc/help/gen_html/href/I3_54.html
 * modified: doc/help/gen_html/href/I3_55.html
 * modified: doc/help/gen_html/href/I3_56.html
 * modified: doc/help/gen_html/href/I3_57.html
 * modified: doc/help/gen_html/href/I3_58.html
 * modified: doc/help/gen_html/href/I3_59.html
 * modified: doc/help/gen_html/href/I3_60.html
 * modified: doc/help/gen_html/href/I3_61.html
 * modified: doc/help/gen_html/href/I3_62.html
 * modified: doc/help/gen_html/href/I3_63.html
 * modified: doc/help/gen_html/href/I3_64.html
 * modified: doc/help/gen_html/href/I3_65.html
 * modified: doc/help/gen_html/href/I3_66.html
 * modified: doc/help/gen_html/href/I3_67.html
 * modified: doc/help/gen_html/href/I3_68.html
 * modified: doc/help/gen_html/href/I3_69.html
 * modified: doc/help/gen_html/href/I3_70.html
 * modified: doc/help/gen_html/href/I3_71.html
 * modified: doc/help/gen_html/href/I3_72.html
 * modified: doc/help/gen_html/href/I3_73.html
 * modified: doc/help/gen_html/href/I3_74.html
 * modified: doc/help/gen_html/href/I3_75.html
 * modified: doc/help/gen_html/href/I3_76.html
 * modified: doc/help/gen_html/href/I3_77.html
 * modified: doc/help/gen_html/href/I3_78.html
 * modified: doc/help/gen_html/href/I3_79.html
 * modified: doc/help/gen_html/href/I3_80.html
 * modified: doc/help/gen_html/href/I3_81.html
 * modified: doc/help/gen_html/href/I3_82.html
 * modified: doc/help/gen_html/href/I3_83.html
 * modified: doc/help/gen_html/href/I3_84.html
 * modified: doc/help/gen_html/href/I3_85.html
 * modified: doc/help/gen_html/href/I3_86.html
 * modified: doc/help/gen_html/href/I3_87.html
 * modified: doc/help/gen_html/href/I3_88.html
 * modified: doc/help/gen_html/href/I3_89.html
 * modified: doc/help/gen_html/href/I3_9.html
 * modified: doc/help/gen_html/href/I3_90.html
 * modified: doc/help/gen_html/href/I3_91.html
 * modified: doc/help/gen_html/href/I3_92.html
 * modified: doc/help/gen_html/href/I3_93.html
 * modified: doc/help/gen_html/href/I3_94.html
 * modified: doc/help/gen_html/href/I3_95.html
 * modified: doc/help/gen_html/href/I3_96.html
 * modified: doc/help/gen_html/href/I3_97.html
 * modified: doc/help/gen_html/href/I3_98.html
 * modified: doc/help/gen_html/href/I3_99.html
 * modified: doc/help/gen_html/href/M3_10.html
 * modified: doc/help/gen_html/href/M3_100.html
 * modified: doc/help/gen_html/href/M3_101.html
 * modified: doc/help/gen_html/href/M3_102.html
 * modified: doc/help/gen_html/href/M3_103.html
 * modified: doc/help/gen_html/href/M3_104.html
 * modified: doc/help/gen_html/href/M3_105.html
 * modified: doc/help/gen_html/href/M3_106.html
 * modified: doc/help/gen_html/href/M3_107.html
 * modified: doc/help/gen_html/href/M3_108.html
 * modified: doc/help/gen_html/href/M3_109.html
 * modified: doc/help/gen_html/href/M3_11.html
 * modified: doc/help/gen_html/href/M3_110.html
 * modified: doc/help/gen_html/href/M3_111.html
 * modified: doc/help/gen_html/href/M3_112.html
 * modified: doc/help/gen_html/href/M3_113.html
 * modified: doc/help/gen_html/href/M3_114.html
 * modified: doc/help/gen_html/href/M3_115.html
 * modified: doc/help/gen_html/href/M3_116.html
 * modified: doc/help/gen_html/href/M3_117.html
 * modified: doc/help/gen_html/href/M3_118.html
 * modified: doc/help/gen_html/href/M3_119.html
 * modified: doc/help/gen_html/href/M3_12.html
 * modified: doc/help/gen_html/href/M3_120.html
 * modified: doc/help/gen_html/href/M3_121.html
 * modified: doc/help/gen_html/href/M3_122.html
 * modified: doc/help/gen_html/href/M3_123.html
 * modified: doc/help/gen_html/href/M3_124.html
 * modified: doc/help/gen_html/href/M3_125.html
 * modified: doc/help/gen_html/href/M3_126.html
 * modified: doc/help/gen_html/href/M3_127.html
 * modified: doc/help/gen_html/href/M3_128.html
 * modified: doc/help/gen_html/href/M3_129.html
 * modified: doc/help/gen_html/href/M3_13.html
 * modified: doc/help/gen_html/href/M3_130.html
 * modified: doc/help/gen_html/href/M3_131.html
 * modified: doc/help/gen_html/href/M3_132.html
 * modified: doc/help/gen_html/href/M3_133.html
 * modified: doc/help/gen_html/href/M3_134.html
 * modified: doc/help/gen_html/href/M3_135.html
 * modified: doc/help/gen_html/href/M3_136.html
 * modified: doc/help/gen_html/href/M3_137.html
 * modified: doc/help/gen_html/href/M3_138.html
 * modified: doc/help/gen_html/href/M3_139.html
 * modified: doc/help/gen_html/href/M3_14.html
 * modified: doc/help/gen_html/href/M3_140.html
 * modified: doc/help/gen_html/href/M3_141.html
 * modified: doc/help/gen_html/href/M3_15.html
 * modified: doc/help/gen_html/href/M3_16.html
 * modified: doc/help/gen_html/href/M3_17.html
 * modified: doc/help/gen_html/href/M3_18.html
 * modified: doc/help/gen_html/href/M3_19.html
 * modified: doc/help/gen_html/href/M3_20.html
 * modified: doc/help/gen_html/href/M3_21.html
 * modified: doc/help/gen_html/href/M3_22.html
 * modified: doc/help/gen_html/href/M3_23.html
 * modified: doc/help/gen_html/href/M3_24.html
 * modified: doc/help/gen_html/href/M3_25.html
 * modified: doc/help/gen_html/href/M3_26.html
 * modified: doc/help/gen_html/href/M3_27.html
 * modified: doc/help/gen_html/href/M3_28.html
 * modified: doc/help/gen_html/href/M3_29.html
 * modified: doc/help/gen_html/href/M3_3.html
 * modified: doc/help/gen_html/href/M3_30.html
 * modified: doc/help/gen_html/href/M3_31.html
 * modified: doc/help/gen_html/href/M3_32.html
 * modified: doc/help/gen_html/href/M3_33.html
 * modified: doc/help/gen_html/href/M3_34.html
 * modified: doc/help/gen_html/href/M3_35.html
 * modified: doc/help/gen_html/href/M3_36.html
 * modified: doc/help/gen_html/href/M3_37.html
 * modified: doc/help/gen_html/href/M3_38.html
 * modified: doc/help/gen_html/href/M3_39.html
 * modified: doc/help/gen_html/href/M3_40.html
 * modified: doc/help/gen_html/href/M3_41.html
 * modified: doc/help/gen_html/href/M3_42.html
 * modified: doc/help/gen_html/href/M3_43.html
 * modified: doc/help/gen_html/href/M3_44.html
 * modified: doc/help/gen_html/href/M3_45.html
 * modified: doc/help/gen_html/href/M3_46.html
 * modified: doc/help/gen_html/href/M3_47.html
 * modified: doc/help/gen_html/href/M3_48.html
 * modified: doc/help/gen_html/href/M3_49.html
 * modified: doc/help/gen_html/href/M3_5.html
 * modified: doc/help/gen_html/href/M3_50.html
 * modified: doc/help/gen_html/href/M3_51.html
 * modified: doc/help/gen_html/href/M3_52.html
 * modified: doc/help/gen_html/href/M3_53.html
 * modified: doc/help/gen_html/href/M3_54.html
 * modified: doc/help/gen_html/href/M3_55.html
 * modified: doc/help/gen_html/href/M3_56.html
 * modified: doc/help/gen_html/href/M3_57.html
 * modified: doc/help/gen_html/href/M3_58.html
 * modified: doc/help/gen_html/href/M3_59.html
 * modified: doc/help/gen_html/href/M3_6.html
 * modified: doc/help/gen_html/href/M3_60.html
 * modified: doc/help/gen_html/href/M3_61.html
 * modified: doc/help/gen_html/href/M3_62.html
 * modified: doc/help/gen_html/href/M3_63.html
 * modified: doc/help/gen_html/href/M3_64.html
 * modified: doc/help/gen_html/href/M3_65.html
 * modified: doc/help/gen_html/href/M3_66.html
 * modified: doc/help/gen_html/href/M3_67.html
 * modified: doc/help/gen_html/href/M3_68.html
 * modified: doc/help/gen_html/href/M3_69.html
 * modified: doc/help/gen_html/href/M3_7.html
 * modified: doc/help/gen_html/href/M3_70.html
 * modified: doc/help/gen_html/href/M3_71.html
 * modified: doc/help/gen_html/href/M3_72.html
 * modified: doc/help/gen_html/href/M3_73.html
 * modified: doc/help/gen_html/href/M3_74.html
 * modified: doc/help/gen_html/href/M3_75.html
 * modified: doc/help/gen_html/href/M3_76.html
 * modified: doc/help/gen_html/href/M3_77.html
 * modified: doc/help/gen_html/href/M3_78.html
 * modified: doc/help/gen_html/href/M3_79.html
 * modified: doc/help/gen_html/href/M3_8.html
 * modified: doc/help/gen_html/href/M3_80.html
 * modified: doc/help/gen_html/href/M3_81.html
 * modified: doc/help/gen_html/href/M3_82.html
 * modified: doc/help/gen_html/href/M3_83.html
 * modified: doc/help/gen_html/href/M3_84.html
 * modified: doc/help/gen_html/href/M3_85.html
 * modified: doc/help/gen_html/href/M3_86.html
 * modified: doc/help/gen_html/href/M3_87.html
 * modified: doc/help/gen_html/href/M3_88.html
 * modified: doc/help/gen_html/href/M3_89.html
 * modified: doc/help/gen_html/href/M3_9.html
 * modified: doc/help/gen_html/href/M3_90.html
 * modified: doc/help/gen_html/href/M3_91.html
 * modified: doc/help/gen_html/href/M3_92.html
 * modified: doc/help/gen_html/href/M3_93.html
 * modified: doc/help/gen_html/href/M3_94.html
 * modified: doc/help/gen_html/href/M3_95.html
 * modified: doc/help/gen_html/href/M3_96.html
 * modified: doc/help/gen_html/href/M3_97.html
 * modified: doc/help/gen_html/href/M3_98.html
 * modified: doc/help/gen_html/href/M3_99.html
 * modified: doc/help/gen_html/href/MG_2.html
 * modified: doc/help/gen_html/juno-app/derived/JunoBundle.m3.html
 * modified: doc/help/gen_html/libm3/src/os/POSIX/FSPosix.m3.html
 * modified: doc/help/gen_html/libm3/src/os/POSIX/FilePosix.m3.html
 * modified: doc/help/gen_html/libm3/src/os/POSIX/OSConfigPosix.m3.html
 * modified: doc/help/gen_html/libm3/src/os/POSIX/OSErrorPosix.i3.html
 * modified: doc/help/gen_html/libm3/src/os/POSIX/OSErrorPosix.m3.html
 * modified: doc/help/gen_html/libm3/src/os/POSIX/ProcessPosix.m3.html
 * modified: doc/help/gen_html/libm3/src/os/POSIX/SocketPosix.m3.html
 * modified: doc/help/gen_html/libm3/src/params/Env.m3.html
 * modified: doc/help/gen_html/libm3/src/pickle/ver2/Pickle2.m3.html
 * modified: doc/help/gen_html/libm3/src/uid/POSIX/MachineIDPosix.m3.html
 * modified: doc/help/gen_html/listfuncs/src/ListFuncs.ig.html
 * modified: doc/help/gen_html/listfuncs/src/ListFuncs.mg.html
 * modified: doc/help/gen_html/m3bundle/src/m3bundle.m3.html
 * modified: doc/help/gen_html/m3core/derived/Compiler.i3.html
 * modified: doc/help/gen_html/m3core/src/C/Common/Cerrno.i3.html
 * modified: doc/help/gen_html/m3core/src/Csupport/Common/hand.c.html
 * modified: doc/help/gen_html/m3core/src/main/Main.i3.html
 * modified: doc/help/gen_html/m3core/src/runtime/POSIX/RTOS.m3.html
 * modified: doc/help/gen_html/m3core/src/runtime/common/RT0.i3.html
 * modified: doc/help/gen_html/m3core/src/runtime/common/RTLinker.i3.html
 * modified: doc/help/gen_html/m3core/src/runtime/common/RTLinker.m3.html
 * modified: doc/help/gen_html/m3core/src/runtime/common/RTLinkerX.i3.html
 * modified: doc/help/gen_html/m3core/src/thread/POSIX/ThreadPosix.m3.html
 * modified: doc/help/gen_html/m3core/src/unix/linux-libc6/Uerror.i3.html
 * modified: doc/help/gen_html/m3core/src/unix/linux-libc6/Uerror.m3.html
 * modified: doc/help/gen_html/m3core/src/unix/linux-libc6/Uexec.i3.html
 * modified: doc/help/gen_html/m3core/src/unix/linux-libc6/Uin.i3.html
 * modified: doc/help/gen_html/m3front/src/builtinInfo/InfoModule.m3.html
 * modified: doc/help/gen_html/m3front/src/exprs/ExprParse.m3.html
 * modified: doc/help/gen_html/m3front/src/misc/CG.m3.html
 * modified: doc/help/gen_html/m3front/src/misc/ESet.m3.html
 * modified: doc/help/gen_html/m3front/src/misc/M3Front.m3.html
 * modified: doc/help/gen_html/m3front/src/misc/M3Header.m3.html
 * modified: doc/help/gen_html/m3front/src/misc/Scanner.i3.html
 * modified: doc/help/gen_html/m3front/src/misc/Scanner.m3.html
 * modified: doc/help/gen_html/m3front/src/misc/Token.i3.html
 * modified: doc/help/gen_html/m3front/src/misc/Token.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/AssertStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/AssignStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/BlockStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/CaseStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/DebugStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/EvalStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/ExitStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/ForStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/IfStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/LockStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/LoopStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/RaiseStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/RepeatStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/ReturnStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/Stmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/TryFinStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/TryStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/TypeCaseStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/WhileStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/stmts/WithStmt.m3.html
 * modified: doc/help/gen_html/m3front/src/types/ArrayType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/Brand.m3.html
 * modified: doc/help/gen_html/m3front/src/types/EnumType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/NamedType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/ObjectType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/PackedType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/ProcType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/RecordType.i3.html
 * modified: doc/help/gen_html/m3front/src/types/RecordType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/RefType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/SetType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/SubrangeType.m3.html
 * modified: doc/help/gen_html/m3front/src/types/Type.i3.html
 * modified: doc/help/gen_html/m3front/src/types/Type.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Constant.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Decl.i3.html
 * modified: doc/help/gen_html/m3front/src/values/Decl.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Exceptionz.m3.html
 * modified: doc/help/gen_html/m3front/src/values/External.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Formal.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Ident.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Module.i3.html
 * modified: doc/help/gen_html/m3front/src/values/Module.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Procedure.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Revelation.m3.html
 * modified: doc/help/gen_html/m3front/src/values/Tipe.i3.html
 * modified: doc/help/gen_html/m3front/src/values/Tipe.m3.html
 * modified: doc/help/gen_html/m3front/src/values/ValueRep.i3.html
 * modified: doc/help/gen_html/m3front/src/values/Variable.m3.html
 * modified: doc/help/gen_html/m3gc-enhanced/src/runtime/LINUXLIBC6/RTHeapDepC.c.html
 * modified: doc/help/gen_html/m3gc-simple/src/runtime/LINUXLIBC6/sysdeps.c.html
 * modified: doc/help/gen_html/m3linker/src/MxGen.i3.html
 * modified: doc/help/gen_html/m3linker/src/MxGen.m3.html
 * modified: doc/help/gen_html/m3middle/src/M3File.m3.html
 * modified: doc/help/gen_html/m3middle/src/Target.i3.html
 * modified: doc/help/gen_html/m3middle/src/Target.m3.html
 * modified: doc/help/gen_html/m3quake/src/QMachine.m3.html
 * modified: doc/help/gen_html/m3totex/derived/B.m3.html
 * modified: doc/help/gen_html/m3zume/derived/ZoomBundle.m3.html
 * modified: doc/help/gen_html/netobj/src/netobjrt/NetObjF.i3.html
 * modified: doc/help/gen_html/obliq/derived/ObliqBdl2.m3.html
 * modified: doc/help/gen_html/obliqlibemb/derived/ObEmbBundle.m3.html
 * modified: doc/help/gen_html/obliqlibemb/src/LibEmbDirs.i3.html
 * modified: doc/help/gen_html/obliqlibemb/src/LibEmbDirsPosix.m3.html
 * modified: doc/help/gen_html/obliqlibemb/src/ObLibEmb.i3.html
 * modified: doc/help/gen_html/obliqlibemb/src/ObLibEmb.m3.html
 * modified: doc/help/gen_html/obliqlibemb/src/ObLoader.i3.html
 * modified: doc/help/gen_html/obliqlibemb/src/ObLoader.m3.html
 * modified: doc/help/gen_html/obliqrt/derived/ObValueCB.i3.html
 * modified: doc/help/gen_html/obliqrt/derived/ObValueCB.m3.html
 * modified: doc/help/gen_html/obliqrt/derived/ObValueCBProxy.i3.html
 * modified: doc/help/gen_html/obliqrt/derived/ObValuePickle.i3.html
 * modified: doc/help/gen_html/obliqrt/derived/ObValueProxy.i3.html
 * modified: doc/help/gen_html/obliqrt/derived/ObValueSO.m3.html
 * modified: doc/help/gen_html/obliqrt/src/ObValue.m3.html
 * modified: doc/help/gen_html/obliqrt/src/ObValueNotify.i3.html
 * modified: doc/help/gen_html/obliqrt/src/ObValueNotify.m3.html
 * modified: doc/help/gen_html/obliqrt/src/ObValueRep.i3.html
 * modified: doc/help/gen_html/patternmatching/src/Glob.i3.html
 * modified: doc/help/gen_html/patternmatching/src/Glob.m3.html
 * modified: doc/help/gen_html/patternmatching/src/GlobTree.i3.html
 * modified: doc/help/gen_html/patternmatching/src/GlobTree.m3.html
 * modified: doc/help/gen_html/patternmatching/src/Uglob.i3.html
 * modified: doc/help/gen_html/patternmatching/src/libglob/fnmatch.c.html
 * modified: doc/help/gen_html/pkl-fonts/derived/PklFontsBundle.m3.html
 * modified: doc/help/gen_html/rdwr/src/RdWrPipe.i3.html
 * modified: doc/help/gen_html/rdwr/src/RdWrPipe.m3.html
 * modified: doc/help/gen_html/rdwr/src/SimpleMsgRW.i3.html
 * modified: doc/help/gen_html/rdwr/src/SimpleMsgRW.m3.html
 * modified: doc/help/gen_html/rdwr/src/TeeWr.i3.html
 * modified: doc/help/gen_html/rdwr/src/TeeWr.m3.html
 * modified: doc/help/gen_html/sharedobj/src/LocalObjectSpace.i3.html
 * modified: doc/help/gen_html/sharedobj/src/LocalObjectSpace.m3.html
 * modified: doc/help/gen_html/sharedobj/src/Message.i3.html
 * modified: doc/help/gen_html/sharedobj/src/Message.m3.html
 * modified: doc/help/gen_html/sharedobj/src/ObjCopy.i3.html
 * modified: doc/help/gen_html/sharedobj/src/ObjCopy.m3.html
 * modified: doc/help/gen_html/sharedobj/src/ObjectInfo.i3.html
 * modified: doc/help/gen_html/sharedobj/src/ObjectInfo.m3.html
 * modified: doc/help/gen_html/sharedobj/src/ObjectSpace.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObj.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjError.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjF.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjF.m3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjRT.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjRT.m3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjRTF.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjRep.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjRep.m3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjStubLib.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SharedObjStubLib.m3.html
 * modified: doc/help/gen_html/sharedobj/src/SpaceConn.i3.html
 * modified: doc/help/gen_html/sharedobj/src/SpaceConn.m3.html
 * modified: doc/help/gen_html/sharedobj/src/WeakerRef.i3.html
 * modified: doc/help/gen_html/sharedobj/src/WeakerRef.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxCodeFiles.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxCodeFiles.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxCodeGenError.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxCodeGenError.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxCodeUtils.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxCodeUtils.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxCoder.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxDummyCode.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxDummyCode.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfCBCode.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfCBCode.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfCBProxyCode.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfCBProxyCode.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfPklCode.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfPklCode.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfProxyCode.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxIntfProxyCode.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxModuleCBCode.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxModuleCBCode.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxModuleSOCode.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/SOxModuleSOCode.m3.html
 * modified: doc/help/gen_html/sharedobjgen/src/StubGenTool.i3.html
 * modified: doc/help/gen_html/sharedobjgen/src/StubGenTool.m3.html
 * modified: doc/help/gen_html/tcp/src/POSIX/Herrno.i3.html
 * modified: doc/help/gen_html/tcp/src/POSIX/IP.m3.html
 * modified: doc/help/gen_html/tcp/src/POSIX/IPErrorPosix.m3.html
 * modified: doc/help/gen_html/tcp/src/POSIX/TCP.m3.html
 * modified: doc/help/gen_html/tcp/src/POSIX/TCPHack.i3.html
 * modified: doc/help/gen_html/udp/src/POSIX/UDPPosix.m3.html
 * modified: doc/help/gen_html/vbtkit/derived/VBTKitBundle.m3.html
 * modified: doc/help/gen_html/visualobliq/derived/DialogBundle.m3.html
 * modified: doc/help/gen_html/vocgi/derived/VOCgiBundle.m3.html
 * modified: doc/help/gen_html/vorun/derived/VORunBundle.m3.html
 * modified: doc/help/gen_html/webvbt/derived/ResourceBundle.m3.html
 * modified: doc/help/gen_html/zeus/derived/ZeusBundle.m3.html
 * modified: doc/help/gen_html/zeus/src/ZeusPanel.m3.html
 *
 * Revision 1.2  2001/12/03 17:23:37  wagner
 * add copyright notes and overrides
 *
 * added: sharedobjgen/COPYRIGHT
 * added: sharedobjgen/COPYRIGHT-COLUMBIA
 * added: sharedobjgen/src/COPYRIGHT-COLUMBIA
 * added: sharedobjgen/src/m3overrides
 * modified: sharedobjgen/src/SOxCodeFiles.i3
 * modified: sharedobjgen/src/SOxCodeFiles.m3
 * modified: sharedobjgen/src/SOxCodeGenError.i3
 * modified: sharedobjgen/src/SOxCodeGenError.m3
 * modified: sharedobjgen/src/SOxCodeUtils.i3
 * modified: sharedobjgen/src/SOxCodeUtils.m3
 * modified: sharedobjgen/src/SOxCoder.i3
 * modified: sharedobjgen/src/SOxDummyCode.i3
 * modified: sharedobjgen/src/SOxDummyCode.m3
 * modified: sharedobjgen/src/SOxIntfCBCode.i3
 * modified: sharedobjgen/src/SOxIntfCBCode.m3
 * modified: sharedobjgen/src/SOxIntfCBProxyCode.i3
 * modified: sharedobjgen/src/SOxIntfCBProxyCode.m3
 * modified: sharedobjgen/src/SOxIntfPklCode.i3
 * modified: sharedobjgen/src/SOxIntfPklCode.m3
 * modified: sharedobjgen/src/SOxIntfProxyCode.i3
 * modified: sharedobjgen/src/SOxIntfProxyCode.m3
 * modified: sharedobjgen/src/SOxModuleCBCode.i3
 * modified: sharedobjgen/src/SOxModuleCBCode.m3
 * modified: sharedobjgen/src/SOxModuleProxyCode.i3
 * modified: sharedobjgen/src/SOxModuleProxyCode.m3
 * modified: sharedobjgen/src/SOxModuleSOCode.i3
 * modified: sharedobjgen/src/SOxModuleSOCode.m3
 * modified: sharedobjgen/src/StubGenTool.i3
 * modified: sharedobjgen/src/StubGenTool.m3
 *
 * Revision 1.1.1.1  2001/12/02 13:15:54  wagner
 * Blair MacIntyre's sharedobjgen package
 *
 * Revision 1.9  1998/05/11 02:34:29  bm
 * bug fixes, added SharedObj.Wait
 *
 * Revision 1.8  1997/11/13 23:45:06  bm
 * Changed lock location of generated picklers, to allow recursion
 *
 * Revision 1.7  1997/10/22 14:45:13  bm
 * Bug fix.  Naming conflicts.
 *
 * Revision 1.6  1997/08/11 20:36:41  bm
 * Various fixes
 *
 * 
 * HISTORY
 

MODULE SOxModuleSOCode;

IMPORT SOxCodeUtils, SOxCoder, Formatter, ImportList, SOxCodeGenError,
       Type, SOxCodeFiles, Wr, CodeForType, Atom, AtomList,
       AtomListFuncs, Text, Value, Fmt, StubCode;

REVEAL
  T = SOxCoder.T BRANDED OBJECT
        initializers:= "";
      OVERRIDES
        InitImports := initImports;
        Import      := import;
        Head        := head;
        Decls       := decls;
        Main        := main;
        Bottom      := bottom;
      END;

<* FATAL Wr.Failure*>

PROCEDURE PutLine (fmtWr: Formatter.T; text: TEXT) =
  BEGIN
    Formatter.PutText(fmtWr, text);
    Formatter.NewLine(fmtWr, freshLine := FALSE);
  END PutLine;

PROCEDURE EndLine (fmtWr: Formatter.T; text: TEXT) =
  BEGIN
    Formatter.PutText(fmtWr, text);
    Formatter.End(fmtWr);
    Formatter.NewLine(fmtWr, freshLine := FALSE);
  END EndLine;

VAR
  extraImports := ARRAY [1 .. 16] OF
                    Atom.T{
                    Atom.FromText("SharedObj"),
                    Atom.FromText("SharedObjRep"),
                    Atom.FromText("SharedObjStubLib"),
                    Atom.FromText("WeakRef"),
                    Atom.FromText("EventStubLib"),
                    Atom.FromText("EventProtocol"), Atom.FromText("Rd"),
                    Atom.FromText("Wr"), Atom.FromText("SharedObjError"),
                    Atom.FromText("ThreadF"), Atom.FromText("Thread"),
                    Atom.FromText("Event"),
                    Atom.FromText("Pickle2 AS Pickle"),
                    Atom.FromText("EmbProxiedObj"),
                    Atom.FromText("PickleStubs"),
                    Atom.FromText("ObjectSpace")
                    (*
                    Atom.FromText("Time"), Atom.FromText("Fmt"),
                    Atom.FromText("IO")
                    *)
                    };
PROCEDURE initImports (<*UNUSED*> self    : T;
                                  basename: TEXT;
                                  imports : ImportList.T) =
  VAR
    imp := ARRAY [1 .. 1] OF
             Atom.T{Atom.FromText(SOxCodeUtils.FileName(
                                    basename, SOxCodeFiles.T.CB_I3))};
  BEGIN
    CodeForType.AugmentImportList(imports, extraImports);
    CodeForType.AugmentImportList(imports, imp);
  END initImports;

PROCEDURE import (<*UNUSED*> self    : T;
                             type    : Type.Object;
                             methods : ImportList.MethodList;
                             umethods: AtomList.T;
                             imports : ImportList.T           ) =
  BEGIN
    (* CodeForType.ImportLst(type, imports, methods, umethods); *)
    CodeForType.ImportSOLst(type, imports, methods, umethods);
  END import;

PROCEDURE head (self    : T;
                wr      : Formatter.T;
                fname   : TEXT;
                basename: TEXT;
                imports : ImportList.T ) =
  BEGIN
    WITH Put = Formatter.PutText,
         Tab = Formatter.Begin,
         Nl  = Formatter.NewLine  DO
      SOxCodeUtils.HeaderComment(wr, fname);
      self.basename := basename;
      self.fbasename :=
        SOxCodeUtils.FileName(basename, SOxCodeFiles.T.SO_M3);

      Put(wr, "MODULE " & self.fbasename & " EXPORTS ");
      Tab(wr, 0);
      PutLine(wr, SOxCodeUtils.FileName(basename,
                                        SOxCodeFiles.T.PKL_I3) & ", ");
      EndLine(wr, self.basename & ", " & SOxCodeUtils.FileName(
                                           basename, SOxCodeFiles.T.PRX_I3)
                    & ";");

      CodeForType.ProduceImports(wr, imports);

      Nl(wr, freshLine := FALSE);
      PutLine(wr, "CONST SharedObj_Protocol: EventProtocol.StubProtocol = 1;");

      PutLine(wr, "EXCEPTION DuplicateSpecial;");
      Nl(wr, freshLine := TRUE);
    END;
  END head;

PROCEDURE decls (           self    : T;
                            wr      : Formatter.T;
                            typeID  : Type.Qid;
                            stypeID : Type.Qid;
                 <*UNUSED*> implName: TEXT;
                            methods : ImportList.MethodList;
                            umethods: AtomList.T             ) =
  VAR
    typTxt               : TEXT;
    identfTxt, identfsTxt: TEXT;
    meth                 : Atom.T;
    firstMeth            : BOOLEAN;
  BEGIN
    WITH Put    = Formatter.PutText,
         Nl     = Formatter.NewLine,
         Tab    = Formatter.Begin,
         Br     = Formatter.Break,
         Grp    = Formatter.Group,
         EndTab = Formatter.End      DO
      typTxt := CodeForType.QidToText(typeID);
      identfTxt := CodeForType.QidToIdentf(typeID);
      identfsTxt := CodeForType.QidToIdentf(stypeID);

      Put(wr, "TYPE " & identfTxt & "_SOMethods = {");
      Tab(wr, 0);
      firstMeth := TRUE;
      FOR i := 0 TO LAST(methods^) DO
        meth := methods[i].name;
        IF AtomList.Member(umethods, meth) THEN
          IF firstMeth THEN
            firstMeth := FALSE
          ELSE
            Put(wr, ", ");
            Br(wr);
          END;
          Put(wr, Atom.ToText(meth));
        END;
      END;
      EndLine(wr, "};");
      Nl(wr, freshLine := FALSE);

      Tab(wr, 2);
      Put(wr, "REVEAL");

      Nl(wr, freshLine := FALSE);
      PutLine(wr, identfTxt & " = " & identfsTxt & " BRANDED \"Shared"
                    & " " & self.basename & "." & identfTxt &
                    " v1.0\" OBJECT");

      Tab(wr, 2);
      PutLine(wr, "OVERRIDES");

      IF SOxCodeUtils.genProxyCode THEN
        PutLine(wr, "makeProxy := MakeProxy_" & identfTxt & ";");
      END;
      PutLine(wr, "applyUpdate := ApplyUpdate_" & identfTxt & ";");
      FOR i := 0 TO LAST(methods^) DO
        meth := methods[i].name;
        Nl(wr, freshLine := FALSE);
        Grp(wr);
        Put(wr, Atom.ToText(meth) & " := ");
        Put(wr, "Shared_" & Atom.ToText(meth) & "_" & identfTxt & ";");
        EndTab(wr);
      END;
      EndTab(wr);
      Nl(wr, freshLine := FALSE);
      PutLine(wr, "END;");

      EndTab(wr);
      Nl(wr, freshLine := FALSE);
    END;
  END decls;

PROCEDURE main (           self    : T;
                           wr      : Formatter.T;
                           typeID  : Type.Qid;
                           type    : Type.Object;
                           stypeID : Type.Qid;
                <*UNUSED*> implName: TEXT;
                           methods : ImportList.MethodList;
                           umethods: AtomList.T             )
  RAISES {SOxCodeGenError.E} =
  VAR
    methTxt, typTxt      : TEXT;
    identfTxt, identfsTxt: TEXT;
    meth                 : Atom.T;
    exceptions           : AtomList.T := NIL;
    SOexports := AtomList.List2(Atom.FromText(self.basename),
                                Atom.FromText(SOxCodeUtils.FileName(
                                                  self.basename,
                                                  SOxCodeFiles.T.PRX_I3)));
  BEGIN
    WITH Put    = Formatter.PutText,
         Br     = Formatter.Break,
         Nl     = Formatter.NewLine,
         Tab    = Formatter.Begin,
         EndTab = Formatter.End      DO
      typTxt := CodeForType.QidToText(typeID);
      identfTxt := CodeForType.QidToIdentf(typeID);
      identfsTxt := CodeForType.QidToIdentf(stypeID);

      FOR i := 0 TO LAST(methods^) DO
        IF AtomList.Member(umethods, methods[i].name) THEN
          CodeForType.AugmentExceptionList(exceptions,
                                           methods[i].sig.raises, SOexports);
        END;
      END;

      IF SOxCodeUtils.genProxyCode THEN
        Tab(wr, 2);
        PutLine(wr, "PROCEDURE MakeProxy_" & identfTxt &
          " (self: " & identfTxt & ") =");
        Tab(wr, 2);
        PutLine(wr, "BEGIN");
        Tab(wr, 2);
        PutLine(wr, "IF MkProxy" & identfTxt & " # NIL THEN");
        EndLine(wr, "MkProxy" & identfTxt & "(self);");
        EndLine(wr, "END;");
        EndLine(wr, "END MakeProxy_" & identfTxt & ";");
      END;
      Nl(wr, freshLine := FALSE);

      Tab(wr, 2);
      Put(wr, "PROCEDURE ApplyUpdate_" & identfTxt & " (");
      Tab(wr, 0);
      Put(wr, "self: " & identfTxt & "; ");
      Br(wr);
      Put(wr, "ev: Event.T; ");
      Br(wr);
      Put(wr, "h: EventStubLib.Handle) ");
      EndTab(wr);
      Br(wr);
      Put(wr, "RAISES {");
      Tab(wr, 0);
      Put(wr, "SharedObj.Error, ");
      EVAL AtomListFuncs.DeleteD(exceptions, Atom.FromText("SharedObj.Error"));
      Br(wr);
      IF AtomListFuncs.DeleteD(exceptions,
                               Atom.FromText("SharedObj.Fatal")) # NIL THEN
        Put(wr, "SharedObj.Fatal, ");
        Br(wr);
      END;
      Put(wr, "Event.Error, ");
      Br(wr);
      Put(wr, "Rd.Failure, ");
      Br(wr);
      EndLine(wr, "Thread.Alerted} =");

      Tab(wr, 2);
      PutLine(wr, "BEGIN");

      Tab(wr, 2);
      PutLine(wr, "IF ev.prot # SharedObj_Protocol THEN");
      EndLine(wr, "EventStubLib.RaiseUnmarshalFailure();");
      PutLine(wr, "END;");
      Tab(wr, 2);
      PutLine(wr, "WITH meth = SharedObjStubLib.InInt32(h) DO");
      Tab(wr, 2);

      IF exceptions # NIL THEN
        PutLine(wr, "TRY");
        Tab(wr, 2);
      END;
      PutLine(wr, "TRY");
      PutLine(wr, "SharedObjStubLib.AcquireWriteLock(self);");
      PutLine(wr, "self.updating := ThreadF.MyId();");
      PutLine(wr, "CASE meth OF");

      FOR i := 0 TO LAST(methods^) DO
        meth := methods[i].name;
        methTxt := Atom.ToText(meth);
        IF AtomList.Member(umethods, meth) THEN
          Put(wr, "| ");
          Tab(wr, 0);
          Put(wr, "ORD(" & identfTxt & "_SOMethods." & methTxt & ") => ");
          Br(wr);
          EndLine(wr, "Stub_" & methTxt & "_" & identfTxt & "(self, h);");
        END;
      END;
      Tab(wr, 2);
      PutLine(wr, "ELSE");
      EndLine(wr, "EventStubLib.RaiseUnmarshalFailure();");
      EndLine(wr, "END;");
      Tab(wr, 2);
      PutLine(wr, "FINALLY");
      PutLine(wr, "self.updating := -1;");
      EndLine(wr, "SharedObjStubLib.ReleaseWriteLock(self);");
      EndLine(wr, "END;");
      IF exceptions # NIL THEN
        Tab(wr, 2);
        Put(wr, "EXCEPT ");
        Br(wr);
        WHILE exceptions # NIL DO
          Put(wr, Atom.ToText(exceptions.head));
          IF exceptions.tail # NIL THEN
            Put(wr, ", ");
          END;
          Br(wr);
          exceptions := exceptions.tail;
        END;
        Put(wr, "=> ");
        Br(wr);
        EndLine(wr, "(* ignore these exceptions quietly *)");
        EndLine(wr, "END;");
      END;
      EndLine(wr, "END;");
      EndLine(wr, "END ApplyUpdate_" & identfTxt & ";");

      Nl(wr, freshLine := FALSE);
      Surrogates(self, wr, type, identfTxt, identfsTxt, methods, umethods);
      Stubs(self, wr, type, identfTxt, identfsTxt, methods, umethods);
      Callbacks(self, wr, type, identfTxt, identfsTxt, methods, umethods);
      Picklers(self, wr, type, identfTxt, identfsTxt);
    END;
  END main;

PROCEDURE bottom (self: T; wr: Formatter.T; <*UNUSED*> fname: TEXT) =
  BEGIN
    WITH Put    = Formatter.PutText,
         Nl = Formatter.NewLine DO
      Nl(wr, freshLine := FALSE);
      PutLine(wr, "BEGIN");
      Put(wr, self.initializers);
      PutLine(wr, "END " & self.fbasename & ".");
    END;
  END bottom;

TYPE Direction = {In, Out};

PROCEDURE PrintStubArgs (wr : Formatter.T;
                         sig: Type.Signature;
                         dir: Direction       ) =
  BEGIN
    FOR j := 0 TO LAST(sig.formals^) DO
      Formatter.PutText(wr, ", ");
      Formatter.Break(wr);
      Formatter.PutText(wr, Atom.ToText(sig.formals[j].name) & "_arg");
      IF dir = Direction.In THEN
        TYPECASE sig.formals[j].type OF
        | Type.OpenArray => Formatter.PutText(wr, "^");
        ELSE
        END;
      END;
    END;
  END PrintStubArgs;

PROCEDURE Surrogates (self: T;
                      wr      : Formatter.T;
                      t       : Type.Object;
                      identfTxt, identfsTxt: TEXT;
                      methods : ImportList.MethodList;
                      umethods: AtomList.T           )
  RAISES {SOxCodeGenError.E} =
  VAR
    procedureName: TEXT;
    uMeth                     : BOOLEAN;
    methTxt      : TEXT;
    meth                 : Atom.T;
    SOexports := AtomList.List2(Atom.FromText(self.basename),
                                Atom.FromText(SOxCodeUtils.FileName(
                                                  self.basename,
                                                  SOxCodeFiles.T.PRX_I3)));
  BEGIN
    WITH Put    = Formatter.PutText,
         Nl     = Formatter.NewLine,
         Tab    = Formatter.Begin,
         EndTab = Formatter.End      DO
      FOR i := 0 TO LAST(methods^) DO
        meth := methods[i].name;
        methTxt := Atom.ToText(meth);

        uMeth := AtomList.Member(umethods, meth);
        procedureName := "Shared_" & Atom.ToText(methods[i].name) &
                             "_" & identfTxt;

        Tab(wr, 2);
        CodeForType.ProcHeader(wr, t, procedureName, methods[i].sig,
                               suffix := "_arg", exports := SOexports);
        PutLine(wr, " = ");

        IF uMeth THEN
          Tab(wr, 4);
          PutLine(wr, "VAR out: SharedObjStubLib.Handle;");
          PutLine(wr, "id := ThreadF.MyId();");
          EndLine(wr, "dataPresent: BOOLEAN; <* NOWARN *>");
          (* PutLine(wr, "stubProt: StubLib.StubProtocol;"); *)
          (*
            IF methods[i].sig.result # NIL THEN
              PutLine(wr, "res: " &
                CodeForType.ToText(methods[i].sig.result) & ";");
            END;
          *)
          (*
            IF StubUtils.perfMon THEN
              PutLine(wr, "wridx, rdidx: INTEGER;" & PerfComment);
            END;
          *)
        END;
        Tab(wr, 2);
        PutLine(wr, "BEGIN");
        IF Text.Equal("init", Atom.ToText(methods[i].name)) THEN
          PutLine(
            wr, "(**************************************************)");
          PutLine(
            wr, "(* This get's done once. After that, it's a noop. *)");
          PutLine(
            wr, "(**************************************************)");
          PutLine(wr, "self := NARROW(SharedObj.Init(self), " &
                                   identfTxt & ");");
          PutLine(wr, "self.makeProxy();");
          PutLine(
            wr, "(**************************************************)");
        END;
        PutLine(wr, "IF NOT self.ok THEN "
                      & "SharedObjError.RaiseDeadObject() END;");
        IF uMeth THEN
          Tab(wr, 2);
          PutLine(wr, "TRY");
          PutLine(wr, "SharedObjStubLib.AcquireReadLock(self);");
          Tab(wr, 2);
          PutLine(wr, "IF self.updating = id THEN ");
          PutLine(wr, "(* do a simple, non-update call to the method *)");
          IF methods[i].sig.result # NIL THEN
            Put(wr, "RETURN ");
          END;
          Put(wr, identfsTxt & "." & Atom.ToText(methods[i].name) & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, methods[i].sig, Direction.Out);
          EndTab(wr);
          IF methods[i].sig.result # NIL THEN
            EndLine(wr, ");");
          ELSE
            PutLine(wr, ");");
            EndLine(wr, "RETURN;");
          END;
          EndLine(wr, "END;");
          Tab(wr, 2);
          PutLine(wr, "FINALLY");
          EndLine(wr, "SharedObjStubLib.ReleaseReadLock(self);");
          PutLine(wr, "END;");
          (* "SharedObjError.RaiseRecursiveUpdate(); END;"); *)

          Tab(wr, 2);
          PutLine(wr, "TRY");
          (*
            IF StubUtils.perfMon THEN
            PutLine(wr, "IF NetObjPerf.enabled THEN" & PerfComment);
            PutLine(wr, "  NetObjPerf.StartCall(PerfUtil.ThreadId(), " &
              Fmt.Int(NUMBER(methods[i].sig.formals^)) & ");");
            PutLine(wr, "END;");
            END;
          *)
          PutLine(wr, "out := SharedObjStubLib.StartCall(self);");
          Tab(wr, 2);
          PutLine(wr, "IF SharedObjStubLib.MarshalArgs(out) THEN");
          PutLine(wr, "SharedObjStubLib.OutInt32(out, ORD(" &
            identfTxt & "_SOMethods." & Atom.ToText(methods[i].name) & "));");
          (*
            IF StubUtils.perfMon THEN
              PutLine(wr, "wridx := Wr.Index(c.wr);" & PerfComment);
            END;
          *)
          FOR j := 0 TO LAST(methods[i].sig.formals^) DO
            WITH f = methods[i].sig.formals[j] DO
              MarshalTypedVal(wr, Atom.ToText(f.name) & "_arg",
                              "SharedObjStubLib", f.type, Direction.Out,
                              calling := TRUE, maySuppress := TRUE);
            END;
          END;
          (*
            IF StubUtils.perfMon THEN
              PutLine(wr, "wridx := Wr.Index(c.wr) - wridx;" & PerfComment);
            END;
          *)
          EndTab(wr);
          PutLine(wr, "END;");
          PutLine(wr, "SharedObjStubLib.SequenceCall(out, SharedObj_Protocol);");
          Tab(wr, 2);
          PutLine(wr, "TRY");
          PutLine(wr, "SharedObjStubLib.AcquireWriteLock(self);");
          PutLine(wr, "self.updating := id;");
          Put(wr, "Callback_pre_" & Atom.ToText(methods[i].name) &
            "_" & identfTxt & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, methods[i].sig, Direction.Out);
          EndTab(wr);
          PutLine(wr, ");");
          IF methods[i].sig.result # NIL THEN
            Tab(wr, 2);
            Put(wr, "WITH res = ");
          END;
          Put(wr, identfsTxt & "." & Atom.ToText(methods[i].name) & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, methods[i].sig, Direction.Out);
          EndTab(wr);
          IF methods[i].sig.result # NIL THEN
            PutLine(wr, ") DO");
          ELSE
            PutLine(wr, ");");
          END;
          Put(wr, "Callback_post_" & Atom.ToText(methods[i].name) &
            "_" & identfTxt & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, methods[i].sig, Direction.Out);
          EndTab(wr);
          IF methods[i].sig.result # NIL THEN
            PutLine(wr, ");");
            EndLine(wr, "RETURN res;");
            EndLine(wr, "END;");
          ELSE
            EndLine(wr, ");");
          END;
          Tab(wr, 2);
          PutLine(wr, "FINALLY");
          PutLine(wr, "self.updating := -1;");
          PutLine(wr, "SharedObjStubLib.ReleaseWriteLock(self);");
          EndLine(wr, "SharedObjStubLib.EndCall(out);");
          EndLine(wr, "END;");
          PutLine(wr, "EXCEPT");
          Put(wr, "| Wr.Failure (ec) => SharedObjError.RaiseCommFailure(ec)");
          IF methods[i].sig.result # NIL THEN
            PutLine(wr, "; <*ASSERT FALSE*>");
          ELSE
            PutLine(wr, ";");
          END;
          Put(wr, "| Thread.Alerted => SharedObjError.RaiseAlerted()");
          IF methods[i].sig.result # NIL THEN
            PutLine(wr, "; <*ASSERT FALSE*>");
          ELSE
            PutLine(wr, ";");
          END;
          EndLine(wr, "END;");

          (*
            IF StubUtils.perfMon THEN
              PutLine(wr, "rdidx := Rd.Index(c.rd);" & PerfComment);
            END;
          *)
        ELSE
          Tab(wr, 2);
          PutLine(wr, "TRY");
          PutLine(wr, "SharedObjStubLib.AcquireReadLock(self);");
          IF methods[i].sig.result # NIL THEN
            Put(wr, "RETURN ");
          END;
          Put(wr, identfsTxt & "." & Atom.ToText(methods[i].name) & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, methods[i].sig, Direction.Out);
          EndTab(wr);
          EndLine(wr, ");");
          Tab(wr, 2);
          PutLine(wr, "FINALLY");
          EndLine(wr, "SharedObjStubLib.ReleaseReadLock(self);");
          EndLine(wr, "END;");
        END;
        EndLine(wr, "END " & procedureName & ";");
        Nl(wr, freshLine := FALSE);
      END;
    END;
  END Surrogates;

PROCEDURE Stubs (self: T;
                 wr      : Formatter.T;
                 t: Type.Object;
                 identfTxt, identfsTxt: TEXT;
                 methods : ImportList.MethodList;
                 umethods: AtomList.T           )
  RAISES {SOxCodeGenError.E} =
  VAR
    varType: Type.T;
    SOexports := AtomList.List2(Atom.FromText(self.basename),
                                Atom.FromText(SOxCodeUtils.FileName(
                                                  self.basename,
                                                  SOxCodeFiles.T.PRX_I3)));
  BEGIN
    FOR i := 0 TO LAST(methods^) DO
      WITH Put    = Formatter.PutText,
         Nl     = Formatter.NewLine,
         Tab    = Formatter.Begin,
         EndTab = Formatter.End,

Br = Formatter.Break,

         sig    = methods[i].sig,
         stubSig = StubCode.SigForStub(sig),
         meth = methods[i].name,
         methTxt = Atom.ToText(meth),
         procedureName = "Stub_" & methTxt & "_" & identfTxt
       DO
        IF AtomList.Member(umethods, meth) THEN
          Tab(wr, 2);
          CodeForType.ProcHeader(wr, t, procedureName, stubSig,
                                 StubCode.PragmasForStub(),
                                 exports := SOexports);
          PutLine(wr, " = ");
          IF NUMBER(sig.formals^) > 0 THEN
            Tab(wr, 6);
            Put(wr, "  VAR ");
            FOR j := 0 TO LAST(sig.formals^) DO
              WITH f = sig.formals[j] DO
                TYPECASE f.type OF
                | Type.OpenArray (oa) => varType := oa.refArray
                ELSE varType := f.type;
                END;
                WITH txt = Atom.ToText(f.name)& "_arg: " &
                     CodeForType.ToText(varType, exports := SOexports) & ";" DO
                  PutLine(wr, txt);
                END;
              END;
            END;
            EndLine(wr, "dataPresent: BOOLEAN <* NOWARN *>;");
          END;
          Tab(wr, 2);
          PutLine(wr, "BEGIN");

          FOR j := 0 TO LAST(sig.formals^) DO
            WITH f = sig.formals[j] DO
              MarshalTypedVal(wr, Atom.ToText(f.name) & "_arg",
                              "SharedObjStubLib", f.type, Direction.In,
                              calling := TRUE, maySuppress := TRUE);
            END;
          END;

          Put(wr, "Callback_pre_" & methTxt & "_" & identfTxt & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, sig, Direction.In);
          EndTab(wr);
          PutLine(wr, ");");
          IF sig.result # NIL THEN
            Put(wr, "EVAL ");
          END;
          Put(wr, identfsTxt & "." & methTxt & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, sig, Direction.In);
          EndTab(wr);
          PutLine(wr, ");");

          Put(wr, "Callback_post_" & methTxt &  "_" & identfTxt & "(");
          Tab(wr, 0);
          Put(wr, "self");
          PrintStubArgs(wr, sig, Direction.In);
          EndTab(wr);
          EndLine(wr, ");");
          EndLine(wr, "END " & procedureName & ";");
          Nl(wr, freshLine := FALSE);
        END;
      END;
    END;
  END Stubs;

VAR cbName := ARRAY [0..1] OF Text.T{ "pre", "post" };

PROCEDURE Callbacks (self: T;
                     wr      : Formatter.T;
                     <*UNUSED*>t: Type.Object;
                     identfTxt: TEXT;
                     <*UNUSED*>identfsTxt: TEXT;
                     methods : ImportList.MethodList;
                     umethods: AtomList.T           ) =
  VAR
    SOexports := AtomList.List2(Atom.FromText(self.basename),
                                Atom.FromText(SOxCodeUtils.FileName(
                                                  self.basename,
                                                  SOxCodeFiles.T.PRX_I3)));
    procedureName: TEXT;
  BEGIN
    FOR i := 0 TO LAST(methods^) DO
      WITH Put    = Formatter.PutText,
         Nl     = Formatter.NewLine,
         EndTab = Formatter.End,
         Tab    = Formatter.Begin,
         sig = methods[i].sig,
         meth = methods[i].name,
         methTxt = Atom.ToText(meth)
       DO
        IF AtomList.Member(umethods, meth) THEN
          FOR j := FIRST(cbName) TO LAST(cbName) DO
            procedureName := "Callback_" & cbName[j] & "_" & methTxt &
                                 "_" & identfTxt;

            Tab(wr, 2);
            Put(wr, "PROCEDURE " & procedureName & "(");
            Tab(wr,0);
            Put(wr, "self: " & identfTxt);
            CodeForType.PrintSig(wr, sig, NIL, suffix := "_arg",
                                exports := SOexports);
            EndLine(wr, ") =");
            (*
            CodeForType.ProcHeader(wr, t, procedureName, sig,
                                   suffix := "_arg", exports := SOexports);
            *)
            PutLine(wr, "VAR cbs := self.callbacks;");
            Tab(wr, 2);
            PutLine(wr, "BEGIN");
            Tab(wr, 2);
            PutLine(wr, "WHILE cbs # NIL DO");
            Tab(wr, 2);
            PutLine(wr, "IF cbs.head.ready THEN");
            Tab(wr, 2);
            PutLine(wr, "WITH ref = WeakRef.ToRef(cbs.head.weakRef) DO");
            Tab(wr, 2);
            PutLine(wr, "IF ref # NIL THEN");
            Tab(wr, 2);
            PutLine(wr, "WITH cb = NARROW(ref, " &
              SOxCodeUtils.FileName(self.basename,
                                    SOxCodeFiles.T.CB_I3) & "." &
                                    identfTxt & ") DO");
            Tab(wr, 2);
            Put(wr, "IF NOT cb." & cbName[j] & "_" & methTxt & "(");
            Tab(wr, 0);
            Put(wr, "self");
            PrintStubArgs(wr, sig, Direction.Out);
            EndTab(wr);
            PutLine(wr, ") THEN");
            EndLine(wr, "cb." & cbName[j] & "_anyChange(self);");
            EndLine(wr, "END;");
            EndLine(wr, "END;");
            EndLine(wr, "END;");
            EndLine(wr, "END;");
            PutLine(wr, "END;");
            EndLine(wr, "cbs := cbs.tail;");
            EndLine(wr, "END;");
            EndLine(wr, "END " & procedureName & ";");
            Nl(wr, freshLine := FALSE);
          END;
        END;
      END;
    END;
  END Callbacks;

PROCEDURE Picklers (self: T;
                 wr      : Formatter.T;
                 t: Type.Object;
                 identfTxt, identfsTxt: TEXT) RAISES {SOxCodeGenError.E} =
  VAR
    procedureName: Text.T;
  BEGIN
    WITH Put    = Formatter.PutText,
         Nl     = Formatter.NewLine,
         EndTab = Formatter.End,
         Br     = Formatter.Break,
         Tab    = Formatter.Begin,
         nodata = (NUMBER(t.fields^) = 0) DO

      PutLine(wr, "(* The pickling routine for this shared object." &
        " We will register a");
      PutLine(wr, "   pickler for " & self.basename & "." &
        identfsTxt & ", and then handle both " & identfsTxt & " and " &
        identfTxt & ".");
      PutLine(wr, "   Pickling subtypes of " & identfTxt & " is illegal. *)");

      Tab(wr, 2);
      PutLine(wr, "REVEAL");
      Put(wr, identfTxt & "Special = ");
      Tab(wr, 0);
      PutLine(wr, "SharedObj.Special BRANDED \"" & self.basename & "." &
        identfTxt & "Special\" OBJECT");
      Tab(wr, 2);
      PutLine(wr, "OVERRIDES");
      PutLine(wr, "write := DefaultSpWrite_" & identfTxt & ";");
      EndLine(wr, "read := DefaultSpRead_" & identfTxt & ";");
      EndLine(wr, "END;");
      EndLine(wr, "");

      Tab(wr, 2);
      PutLine(wr, "TYPE");
      Put(wr, identfTxt & "_Special = ");
      Tab(wr, 0);
      Tab(wr, 2);
      PutLine(wr, "Pickle.Special OBJECT");
      PutLine(wr, "mu: MUTEX;");
      PutLine(wr, "sp: " & identfTxt & "Special;");
      EndLine(wr, "registered: BOOLEAN := FALSE;");

      Tab(wr, 2);
      PutLine(wr, "OVERRIDES");
      PutLine(wr, "write := Write_" & identfTxt & ";");
      EndLine(wr, "read := Read_" & identfTxt & ";");
      EndLine(wr, "END;");
      EndLine(wr, "");

      Tab(wr, 2);
      procedureName := "DefaultSpWrite_" & identfTxt;
      Put(wr, "PROCEDURE " & procedureName & " (");
      Tab(wr, 0);
      Put(wr, "<*UNUSED*>self: " & identfTxt & "Special; ");
      Br(wr);
      IF nodata THEN
        Put(wr, "<*UNUSED*>");
      END;
      Put(wr, "shobj: SharedObj.T; ");
      Br(wr);
      IF nodata THEN
        Put(wr, "<*UNUSED*>");
      END;
      PutLine(wr, "out: Pickle.Writer)");
      EndTab(wr);
      IF nodata THEN
        PutLine(wr, " =");
      ELSE
        PutLine(wr, "RAISES {Pickle.Error, Wr.Failure, Thread.Alerted} =");
      END;
      Tab(wr, 2);
      IF NOT nodata THEN
        PutLine(wr, "VAR");
        EndLine(wr, "obj := NARROW(shobj, " & identfsTxt & ");");
        Tab(wr, 2);
      END;
      PutLine(wr, "BEGIN");
      FOR j := 0 TO LAST(t.fields^) DO
        WITH f = t.fields[j] DO
          MarshalTypedVal(wr, "obj." & Atom.ToText(f.name),
                          "PickleStubs", f.type, Direction.Out,
                          calling := TRUE, maySuppress := TRUE);
        END;
      END;
      EndTab(wr);
      Nl(wr, freshLine := FALSE);
      EndLine(wr, "END " & procedureName & ";");
      Nl(wr, freshLine := FALSE);

      Tab(wr, 2);
      procedureName := "Write_" & identfTxt;
      Put(wr, "PROCEDURE " & procedureName & " (");
      Tab(wr, 0);
      Put(wr, "<*UNUSED*>ts: " & identfTxt & "_Special; ");
      Br(wr);
      Put(wr, "ref: REFANY; ");
      Br(wr);
      PutLine(wr, "out: Pickle.Writer)");
      EndTab(wr);
      PutLine(wr, "RAISES {Pickle.Error, Wr.Failure, Thread.Alerted} =");
      Tab(wr, 2);
      PutLine(wr, "VAR");
      PutLine(wr, "obj: " & identfsTxt & ";");
      PutLine(wr, "sp: " & identfTxt & "Special;");
      EndLine(wr, "tc := TYPECODE(ref);");
      Tab(wr, 2);
      PutLine(wr, "BEGIN");

      (*
      PutLine(wr, "IO.Put(\"Pickle.Special for " &
        self.basename & "." & identfsTxt & "\\n\");");
      *)
      Tab(wr, 2);
      PutLine(wr, "IF tc # TYPECODE(" & identfsTxt &
        ") AND tc # TYPECODE(" & identfTxt & ") THEN");
      EndLine(wr, "RAISE Pickle.Error(\"Can't pickle subtypes of " &
        self.basename & "." & identfTxt & "\");");
      PutLine(wr, "END;");
      PutLine(wr, "obj := NARROW(ref, " & identfsTxt & ");");
      PutLine(wr, "out.writeType(tc);");
      (*
      PutLine(wr, "IO.Put(\"Pickle.Special.wr for " &
        self.basename & "." & identfsTxt & ": writing shared obj\\n\");");
      *)
      PutLine(wr, "SharedObjStubLib.StartWritePickle(obj, out);");
      Tab(wr,2);
      PutLine(wr, "LOCK sp" & identfTxt & ".mu DO");
      EndLine(wr, "sp := sp" & identfTxt & ".sp;");
      PutLine(wr, "END;");
      PutLine(wr, "sp.write(obj, out);");

      EndLine(wr, "SharedObjStubLib.EndWritePickle(obj, out);");
      (*
      EndLine(wr, "IO.Put(\"Pickle.Special.wr for " &
        self.basename & "." & identfsTxt & ": wrote shared obj\\n\");");
      *)
      EndLine(wr, "END " & procedureName & ";");
      Nl(wr, freshLine := FALSE);

      Tab(wr, 2);
      procedureName := "DefaultSpRead_" & identfTxt;
      Put(wr, "PROCEDURE " & procedureName & " (");
      Tab(wr, 0);
      Put(wr, "<*UNUSED*>self: " & identfTxt & "Special; ");
      Br(wr);
      IF nodata THEN
        Put(wr, "<*UNUSED*>");
      END;
      Put(wr, "shobj: SharedObj.T; ");
      Br(wr);
      IF nodata THEN
        Put(wr, "<*UNUSED*>");
      END;
      Put(wr, "in: Pickle.Reader) ");
      Br(wr);
      EndTab(wr);
      IF nodata THEN
        PutLine(wr, " =");
      ELSE
        Put(wr, "RAISES {");
        Br(wr);
        Tab(wr, 0);
        Put(wr, "Pickle.Error, ");
        Br(wr);
        Put(wr, "Rd.EndOfFile, ");
        Br(wr);
        Put(wr, "Rd.Failure, ");
        Br(wr);
        EndLine(wr, "Thread.Alerted} =");
      END;
      Tab(wr, 2);
      IF NOT nodata THEN
        PutLine(wr, "VAR");
        EndLine(wr, "obj := NARROW(shobj, " & identfsTxt & ");");
        Tab(wr, 2);
      END;
      PutLine(wr, "BEGIN");
      FOR j := 0 TO LAST(t.fields^) DO
        WITH f = t.fields[j] DO
          MarshalTypedVal(wr, "obj." & Atom.ToText(f.name),
                          "PickleStubs", f.type, Direction.In,
                          calling := TRUE, maySuppress := TRUE);
        END;
      END;
      EndTab(wr);
      Nl(wr, freshLine := FALSE);
      EndLine(wr, "END " & procedureName & ";");
      Nl(wr, freshLine := FALSE);

      Tab(wr, 2);
      procedureName := "Read_" & identfTxt;
      Put(wr, "PROCEDURE " & procedureName & " (");
      Tab(wr, 0);
      Put(wr, "<*UNUSED*>ts: " & identfTxt & "_Special; in: Pickle.Reader; ");
      Br(wr);
      Put(wr, "id: Pickle.RefID):");
      Br(wr);
      EndTab(wr);
      Put(wr, "REFANY RAISES {");
      Br(wr);
      Tab(wr, 0);
      Put(wr, "Pickle.Error, ");
      Br(wr);
      Put(wr, "Rd.EndOfFile, ");
      Br(wr);
      Put(wr, "Rd.Failure, ");
      Br(wr);
      EndLine(wr, "Thread.Alerted} =");
      Tab(wr, 2);
      PutLine(wr, "VAR");
      PutLine(wr, "space: ObjectSpace.T;");
      PutLine(wr, "obj: " & identfsTxt & ";");
      PutLine(wr, "sp: " & identfTxt & "Special;");
      PutLine(wr, "proxy: EmbProxiedObj.Proxy;");
      EndLine(wr, "tc := in.readType();");
      Tab(wr, 2);
      PutLine(wr, "BEGIN");
      Tab(wr, 2);
      PutLine(wr, "IF tc = TYPECODE(" & identfTxt & ") THEN");
      (*
      PutLine(wr, "IO.Put(\"Pickle.Special.rd for " &
        self.basename & "." & identfsTxt & ": shared obj\\n\");");
      *)
      EndLine(wr, "obj := NEW(" & identfTxt & ");");
      Tab(wr, 2);
      PutLine(wr, "ELSIF tc = TYPECODE(" & identfsTxt & ") THEN");
      (*
      PutLine(wr, "IO.Put(\"Pickle.Special.rd for " &
        self.basename & "." & identfsTxt & ": non-shared obj\\n\");");
      *)
      EndLine(wr, "obj := NEW(" & identfsTxt & ");");
      Tab(wr, 2);
      PutLine(wr, "ELSE");
      EndLine(wr, "RAISE Pickle.Error(\"Can't unpickle subtypes of " &
        self.basename & "." & identfTxt & "\");");
      PutLine(wr, "END;");

      (*
      PutLine(wr, "IO.Put(\"Pickle.Special.rd for " &
        self.basename & "." & identfsTxt & ": reading space\\n\");");
      *)
      PutLine(wr, "space := in.read();");
      (*
      PutLine(wr, "IO.Put(\"Pickle.Special.rd for " &
        self.basename & "." & identfsTxt & ": reading shared obj\\n\");");
      *)
      PutLine(wr, "SharedObjStubLib.StartReadPickle(obj, in, space);");

      Tab(wr,2);
      PutLine(wr, "LOCK sp" & identfTxt & ".mu DO");
      EndLine(wr, "sp := sp" & identfTxt & ".sp;");
      PutLine(wr, "END;");
      PutLine(wr, "sp.read(obj, in);");

      Tab(wr, 2);
      PutLine(wr, "IF tc = TYPECODE(" & identfTxt & ") THEN");
      (*
      PutLine(wr, "IO.Put(\"Pickle.Special.rd for " &
        self.basename & "." & identfsTxt & ": setup shared obj\\n\");");
      *)
      PutLine(wr, "obj := SharedObjStubLib.SetupNewCopy(obj, in, id, space);");
      PutLine(wr, "proxy := PickleStubs.InRef(in);");
      Tab(wr, 2);
      PutLine(wr, "IF obj.proxy = NIL THEN");
      EndLine(wr, "obj.proxy := proxy;");
      PutLine(wr, "END;");
      EndLine(wr, "obj.makeProxy();");
      Tab(wr, 2);
      PutLine(wr, "ELSE");
      PutLine(wr, "obj.proxy := NIL;");
      EndLine(wr, "obj.proxy := PickleStubs.InRef(in);");
      PutLine(wr, "END;");

      (*
      PutLine(wr, "IO.Put(\"Pickle.Special.rd for " &
        self.basename & "." & identfsTxt & ": done\\n\");");
      *)
      EndLine(wr, "RETURN obj;");
      EndLine(wr, "END " & procedureName & ";");
      Nl(wr, freshLine := FALSE);

      Tab(wr, 2);
      procedureName := "RegisterSpecial_" & identfTxt;
      Put(wr, "PROCEDURE " & procedureName & " (");
      PutLine(wr, "sp: " & identfTxt & "Special) =");
      PutLine(wr, "<* FATAL DuplicateSpecial *>");
      Tab(wr, 2);
      PutLine(wr, "BEGIN");
      PutLine(wr, "(* we will need to NEW it here if RegisterSpecial_" &
        identfTxt);
      PutLine(wr, "   is called from " & self.basename & " *)");
      Tab(wr, 2);
      PutLine(wr, "IF sp" & identfTxt & " = NIL THEN");
      Put(wr, "sp" & identfTxt & " := NEW(");
      Tab(wr, 0);
      Put(wr, identfTxt & "_Special, ");
      Br(wr);
      Put(wr, "sc := TYPECODE(" & identfsTxt & "), ");
      Br(wr);
      Put(wr, "mu := NEW(MUTEX)");
      EndTab(wr);
      EndLine(wr, ");");
      PutLine(wr, "END;");

      Tab(wr, 2);
      PutLine(wr, "LOCK sp" & identfTxt & ".mu DO");
      Tab(wr, 2);
      PutLine(wr, "IF sp" & identfTxt & ".registered THEN");
      EndLine(wr, "RAISE DuplicateSpecial;");
      PutLine(wr, "END;");
      PutLine(wr, "sp" & identfTxt & ".registered := TRUE;");
      EndLine(wr, "sp" & identfTxt & ".sp := sp;");
      EndLine(wr, "END;");
      EndLine(wr, "END " & procedureName & ";");
      Nl(wr, freshLine := FALSE);

      Tab(wr, 2);
      PutLine(wr, "VAR");
      EndLine(wr, "sp" & identfTxt & ": " & identfTxt & "_Special := NIL;");

      (* Add to the initializers *)
      self.initializers := self.initializers &
         "  IF sp" & identfTxt & " = NIL THEN\n    sp" & identfTxt &
         " := NEW(" & identfTxt & "_Special,\n       sc := TYPECODE(" &
         identfsTxt & "),\n      mu := NEW(MUTEX),\n" &
         "      sp := NEW(" & identfTxt &
         "Special));\n  END;\n  Pickle.RegisterSpecial(sp" & identfTxt & ");\n";
    END;
  END Picklers;

PROCEDURE MarshalTypedVal (fmtWr      : Formatter.T;
                           varName    : TEXT;
                           libName    : TEXT;
                           t          : Type.T;
                           d          : Direction;
                           calling    : BOOLEAN;
                           indexDepth                 := 0;
                           maySuppress                := FALSE)
  RAISES {SOxCodeGenError.E} =
  BEGIN
    TYPECASE t OF
    | Type.Char (ch) =>
        Enumeration(fmtWr, varName, libName, ch, d, 0, ORD(LAST(CHAR)));
    | Type.UserDefined (ud) =>
        Enumeration(fmtWr, varName, libName, t, d, 0, LAST(ud.elts^));
    | Type.Subrange (sub) =>
        IF t = Type.integer THEN
          StubLibCall(fmtWr, "Integer", varName, libName, d);
        ELSE
          SubRange(fmtWr, varName, libName, t, d,
                   NARROW(sub.min, Value.Ordinal).ord,
                   NARROW(sub.max, Value.Ordinal).ord);
        END;
    | Type.Real => StubLibCall(fmtWr, "Real", varName, libName, d);
    | Type.LongReal => StubLibCall(fmtWr, "Longreal", varName, libName, d);
    | Type.Extended => StubLibCall(fmtWr, "Extended", varName, libName, d);
    | Type.Reference (r) =>
        IF Type.MayBeRefAny(r) OR NOT Type.NamedType(r) THEN
          StubLibCall(fmtWr, "Ref", varName, libName, d, ", -1");
        ELSE
          StubLibCall(fmtWr, "Ref", varName, libName, d,
                      ", TYPECODE(" & CodeForType.ToText(r) & ")");
        END;
    | Type.Array (a) =>
        IF a.index = NIL THEN
          MarshalOpenArray(fmtWr, varName, libName, t, d, calling,
                           indexDepth, maySuppress);
        ELSE
          BeginOutOnly(fmtWr, libName, t, d, maySuppress);
          Formatter.Begin(fmtWr, 2);
          PutLine(fmtWr, "FOR i" & Fmt.Int(indexDepth) & " := FIRST("
                           & CodeForType.ToText(a.index) & ") TO LAST("
                           & CodeForType.ToText(a.index) & ") DO");
          MarshalTypedVal(
            fmtWr, varName & "[i" & Fmt.Int(indexDepth) & "]", libName,
            a.element, d, calling, indexDepth + 1);
          EndLine(fmtWr, "END;");
          EndOutOnly(fmtWr, maySuppress);
        END;
    | Type.Packed (p) =>
        BeginOutOnly(fmtWr, libName, t, d, maySuppress);
        MarshalTypedVal(
          fmtWr, varName, libName, p.base, d, calling, indexDepth);
        EndOutOnly(fmtWr, maySuppress);
    | Type.Record (rec) =>
        BeginOutOnly(fmtWr, libName, t, d, maySuppress);
        FOR i := 0 TO LAST(rec.fields^) DO
          MarshalTypedVal(
            fmtWr, varName & "." & Atom.ToText(rec.fields[i].name),
            libName, rec.fields[i].type, d, calling, indexDepth);
        END;
        EndOutOnly(fmtWr, maySuppress);
    | Type.Set (s) =>
        BeginOutOnly(fmtWr, libName, t, d, maySuppress);
        IF d = Direction.In THEN
          PutLine(fmtWr, varName & ":=" & CodeForType.ToText(s) & "{};");
          Formatter.Begin(fmtWr, 2);
          PutLine(fmtWr, "FOR i" & Fmt.Int(indexDepth) & " := FIRST("
                           & CodeForType.ToText(s.range) & ") TO LAST("
                           & CodeForType.ToText(s.range) & ") DO");
          Formatter.Begin(fmtWr, 2);
          PutLine(fmtWr, "IF " & libName & ".InBoolean(in) THEN");
          PutLine(fmtWr, varName & " := " & varName & " + "
                           & CodeForType.ToText(s) & "{i"
                           & Fmt.Int(indexDepth) & "};");
          EndLine(fmtWr, "END")
        ELSE
          Formatter.Begin(fmtWr, 2);
          PutLine(fmtWr, "FOR i" & Fmt.Int(indexDepth) & " := FIRST("
                           & CodeForType.ToText(s.range) & ") TO LAST("
                           & CodeForType.ToText(s.range) & ") DO");
          PutLine(fmtWr, libName & ".OutBoolean(out, i" & Fmt.Int(indexDepth)
                           & " IN " & varName & ");");
        END;
        EndLine(fmtWr, "END;");
        EndOutOnly(fmtWr, maySuppress);
    | Type.Procedure =>
        RAISE SOxCodeGenError.E("Can't have a procedure as argument or result "
                                & "of a network object method.");
    ELSE
      RAISE SOxCodeGenError.E("Run time error -- shouldn't occur");
    END;
  END MarshalTypedVal;

PROCEDURE SubRange (fmtWr   : Formatter.T;
                    varName : TEXT;
                    libName : TEXT;
                    t       : Type.Subrange;
                    d       : Direction;
                    min, max: INTEGER        ) RAISES {SOxCodeGenError.E}=
  BEGIN
    IF t.base = Type.integer OR t.base = t THEN
      StubLibCall(fmtWr, "Integer", varName, libName, d,
                  ", " & Fmt.Int(min) & ", " & Fmt.Int(max));
    ELSE
      TYPECASE t.base OF
      | Type.Enumeration =>
          Enumeration(fmtWr, varName, libName, t.base, d, min, max);
      | Type.Subrange =>
          SubRange(fmtWr, varName, libName, t.base, d, min, max);
      ELSE
        RAISE SOxCodeGenError.E("Run time error -- shouldn't occur");
      END;
    END;
  END SubRange;

PROCEDURE Enumeration (fmtWr   : Formatter.T;
                       varName : TEXT;
                       libName : TEXT;
                       t       : Type.Enumeration;
                       d       : Direction;
                       min, max: INTEGER           ) =
  BEGIN
    IF d = Direction.In THEN
      PutLine(fmtWr, varName & " := VAL(" & libName & ".InInteger(in, "
                       & Fmt.Int(min) & "," & Fmt.Int(max) & "), "
                       & CodeForType.ToText(t) & ");");
    ELSE
      PutLine(fmtWr, libName & ".OutInteger(out, ORD(" & varName & "));");
    END;
  END Enumeration;

PROCEDURE StubLibCall (fmtWr  : Formatter.T;
                       proc   : TEXT;
                       varName: TEXT;
                       libName: TEXT;
                       d      : Direction;
                       extra                  := "") =
  BEGIN
    IF d = Direction.In THEN
      PutLine(fmtWr, varName & " := " & libName & ".In" & proc & "(in"
                       & extra & ");");
    ELSE
      PutLine(fmtWr, libName & ".Out" & proc & "(out, " & varName & ");");
    END;
  END StubLibCall;

PROCEDURE StubLibCallNoRep (fmtWr  : Formatter.T;
                            proc   : TEXT;
                            varName: TEXT;
                            libName: TEXT;
                            d      : Direction;
                            extra                  := "") =
  BEGIN
    IF d = Direction.In THEN
      PutLine(fmtWr, varName & " := " & libName & ".In" & proc & "(in"
                       & extra & ");");
    ELSE
      PutLine(fmtWr, libName & ".Out" & proc & "(out, " & varName & ");");
    END;
  END StubLibCallNoRep;

PROCEDURE BeginOutOnly (           fmtWr      : Formatter.T;
                                   libName    : TEXT;
                        <*UNUSED*> t          : Type.T;
                                   d          : Direction;
                                   maySuppress: BOOLEAN      ) =
  VAR dataPresent := TRUE;       (* Could check for size *)
  (* When recognizing pragma, dataPresent determined by
     methods[i].formals[j].outOnly *)
  BEGIN
    IF maySuppress THEN
      IF d = Direction.Out THEN
        PutLine(fmtWr, "dataPresent := " & Fmt.Bool(dataPresent) & ";");
      END;
      StubLibCallNoRep(fmtWr, "Boolean", "dataPresent", libName, d);
      Formatter.Begin(fmtWr, 2);
      PutLine(fmtWr, "IF dataPresent THEN ");
    END;
  END BeginOutOnly;

PROCEDURE EndOutOnly (fmtWr: Formatter.T; maySuppress: BOOLEAN) =
  BEGIN
    IF maySuppress THEN PutLine(fmtWr, "END;"); Formatter.End(fmtWr); END;
  END EndOutOnly;

PROCEDURE MarshalOpenArray (fmtWr      : Formatter.T;
                            varName    : TEXT;
                            libName    : TEXT;
                            a          : Type.OpenArray;
                            d          : Direction;
                            calling    : BOOLEAN;
                            indexDepth : INTEGER;
                            maySuppress: BOOLEAN         )
  RAISES {SOxCodeGenError.E} =
  VAR
    nDimensions                        := a.openDimensions;
    aName, baseName, boundList: Text.T;
    component                 : Type.T;
  BEGIN
    WITH Put    = Formatter.PutText,
         Tab    = Formatter.Begin,
         EndTab = Formatter.End      DO
      IF calling THEN            (* Must marshal/unmarshal array bounds *)
        IF d = Direction.Out THEN
          StubLibCall(
            fmtWr, "Integer", "NUMBER(" & varName & ")", libName, d);
          aName := varName & "[0";
          FOR i := 2 TO nDimensions DO
            StubLibCall(
              fmtWr, "Integer", "NUMBER(" & aName & "])", libName, d);
            aName := aName & ", 0";
          END;
          baseName := varName;
        ELSE
          Put(fmtWr, "WITH n1 = " & libName & ".InInteger(in)");
          boundList := "n1";
          FOR i := 2 TO nDimensions DO
            PutLine(fmtWr, ",");
            Put(fmtWr, "    n" & Fmt.Int(i) & " = " & libName
                         & ".InInteger(in)");
            boundList := boundList & ", n" & Fmt.Int(i);
          END;
          PutLine(fmtWr, " DO");
          PutLine(fmtWr, "  " & varName & " := NEW("
                           & CodeForType.ToText(a.refArray) & ", "
                           & boundList & ");");
          PutLine(fmtWr, "END;");
          baseName := varName & "^";
        END;
      ELSE
        IF d = Direction.Out THEN
          baseName := varName & "^";
        ELSE
          baseName := varName;
        END;
      END;

      (* Suppress actual data for <*OUTPUT*> params on call *)
      BeginOutOnly(fmtWr, libName, a, d, maySuppress);

      Tab(fmtWr, 2);
      PutLine(fmtWr, "FOR n1 := 0 TO LAST(" & baseName & ") DO");
      aName := varName & "[n1";
      component := a.element;
      FOR i := 2 TO nDimensions DO
        Tab(fmtWr, 2);
        PutLine(
          fmtWr, "FOR n" & Fmt.Int(i) & " := 0 TO LAST(" & aName & "]) DO");
        aName := aName & ",  n" & Fmt.Int(i);
        component := NARROW(component, Type.OpenArray).element;
      END;
      MarshalTypedVal(
        fmtWr, aName & "]", libName, component, d, calling, indexDepth);
      FOR i := 1 TO nDimensions DO
        EndTab(fmtWr);
        PutLine(fmtWr, "END;");  (* End FOR Loop *)
      END;
      EndOutOnly(fmtWr, maySuppress);
    END;
  END MarshalOpenArray;

BEGIN
END SOxModuleSOCode.

interface ImportList is in:


interface Type is in:


interface CodeForType is in:


interface Value is in:


interface StubCode is in: