/*Directives*/

::CLASS DESKTOP
::CLASS DTTOOLS SUBCLASS DESKTOP
::METHOD STEM_INIT CLASS
	EXPOSE OutputStem.
	USE ARG InitializeValue
	OutputStem. = .STEM~NEW
	OutputStem. = InitializeValue
	RETURN OutputStem.

::METHOD GET_SETUP CLASS
	USE ARG Location, Command_Processor_Path, InputStem., Msg.
	NotFound_Flag = .DTTOOLS~FIND_STREAM("SETUP", Location, Msg.)
	IF NotFound_Flag = 0 THEN DO
		Setup_Lines. = .IO~READ_DATA_2(Location"SETUP", " = ", "=")
		DO I = 1 TO Setup_Lines.[0] BY 1
			Assignment = Setup_Lines.[I]
			INTERPRET Assignment
		END I	/*Ends "DO I = 1 TO Setup_Lines.[0] BY 1" Sections*/
		InputStem.File_Type.0.0 = 0
		InputStem.File_Filter.0.0 = 0
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "WP", 1, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "N_ED", 4, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "R_ED", 2, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "L_ED", 1, 1, 2, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "R_R", 2, 1, 2, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "SS", 1, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "FIN", 1, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "WB", 2, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "PDF", 3, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "PS", 1, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "GRAPHICS", 1, 1, 50, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "DRAFTING", 1, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
		RC = .DTTOOLS~VERIFY_COUNT(Command_Processor_Path, InputStem., "USER_DEFINED", 20, 1, 3, InputStem.File_Type.0.0, InputStem.File_Filter.0.0)
	END	/*Ends "IF NotFound_Flag = 0 THEN DO" Section*/
	ELSE RC = .DTTOOLS~CONSTRUCT_SETUP0(Location)
	RETURN NotFound_Flag

::METHOD VERIFY_COUNT CLASS
	USE ARG Command_Processor_Path, InputStem., File_Category, Maximum_Allowable, Type_Maximum, Filter_Maximum, Type_Count, Filter_Count
	Count = 0
	Trap_Call = 0
	CALL ON ERROR NAME VERIFY_COUNT_TRAP
	CALL ON FAILURE NAME VERIFY_COUNT_TRAP
	DO I = 1 TO Maximum_Allowable BY 1
		SearchPath = InputStem.Application.File_Category.PPath.I
		IF SearchPath \= "" THEN DO
			Found_Application. = ""
			RC = SYSFILETREE(SearchPath,"Found_Application","FO")
			SELECT
				WHEN Found_Application.0 = 1 THEN DO
					Count = Count + 1
					DO J = 1 TO Type_Maximum BY 1
						Type_Count = Type_Count + 1
						InputStem.File_Type.Type_Count.1 = InputStem.Application.File_Category.AAssociation_File_Type.I
						InputStem.File_Type.Type_Count.2 = InputStem.Application.File_Category.PPath.I
						InputStem.File_Type.0.0 = Type_Count
					END J	/*Ends "DO J = 1 TO Type_Maximum BY 1" Section*/

					DO K = 1 TO Filter_Maximum BY 1
						Filter_Count = Filter_Count + 1
						InputStem.File_Filter.Filter_Count.1 = InputStem.Application.File_Category.AAssociation_File_Filter.I.K
						InputStem.File_Filter.Filter_Count.2 = InputStem.Application.File_Category.PPath.I
						InputStem.File_Filter.0.0 = Filter_Count
					END K	/*Ends "DO K = 1 TO Filter_Maximum BY 1" Section*/
				END	/*Ends "WHEN Found_Application.0 = 1 THEN DO" Section*/

				WHEN Found_Application.0 = 0 | Trap_Call = 1 THEN DO
					RC = .IO~APPLICATION_NOT_FOUND(InputStem., File_Category, Maximum_Allowable, SearchPath, Count)
					LEAVE I
				END	/*Ends "WHEN Found_Application.0 = 0 | Trap_Call = 1 THEN DO" Section*/

				OTHERWISE NOP
			END	/*Ends "SELECT" Section*/
		END	/*Ends "IF SearchPath \= "" THEN DO" Section*/
		ELSE LEAVE I
	END I	/*Ends "DO I = 1 TO Maximum_Allowable BY 1" Section*/
	InputStem.Application.File_Category.NName.0 = Count
	CALL OFF ERROR
	CALL OFF FAILURE
	RETURN 0
	VERIFY_COUNT_TRAP:
	Trap_Call = 1
	RETURN

::METHOD CONSTRUCT_SETUP0 CLASS
	USE ARG Location
	Setup0_Line.[1] = '/*This ASCII (text) file, SETUP, provides the setup function for the REXX SEEK application (it assigns values to several SEEK setup variables).*/'
	Setup0_Line.[2] = '/*It provides time and date formats in the SEEK presort facility, file associations for launching files into applications and user choice on whether or not to use REXXLIB and REXXEA*/'
	Setup0_Line.[3] = 'NOTES:'
	Setup0_Line.[4] = '	1.	You can add your own notes to this setup file anywhere you like. IMPORTANT: Do not use an "equal sign" (ASCII control sequence of 61) anywhere in this file, unless you are using it to assign'
	Setup0_Line.[5] = '		a value to a setup/options variable that the SEEK program uses.'
	Setup0_Line.[6] = ''
	Setup0_Line.[7] = '	2.	The SEEK program knows the location of this file, among others, via the SEEK variable, "ProgramLocation", which has a value assigned to it via the REXX "PARSE SOURCE" code. On my computer'
	Setup0_Line.[8] = '		ProgramLocation is assigned the value of "C:\Development\REXX\VisProREXX\PROJECTS\Seek_Gold\LSB_Radix_Sort\Seek\".'
	Setup0_Line.[9] = ''
	Setup0_Line.[10] = '	3.	The SEEK program does a REXX SYSFILESEARCH() operation to find this file, "SETUP". It then uses the "equal sign" (ASCII control sequence of 61) as the item to search for to find all of the'
	Setup0_Line.[11] = '		SEEK SETUP variable assignments.'
	Setup0_Line.[12] = ''
	Setup0_Line.[13] = '	4.	Below, use the "equal sign" (ASCII control sequence of 61) to establish SETUP parameters for the SEEK program. If a particular parameter is to have no value, then just'
	Setup0_Line.[14] = '		use an "equal sign" (ASCII control sequence of 61) with nothing at all to the right of it, or with a set of double quotation marks to the right.'
	Setup0_Line.[15] = '		NOTE: You can use a space to the left and to the right of the "equal sign" (ASCII control sequence of 61), or not (your choice).'
	Setup0_Line.[16] = ''
	Setup0_Line.[17] = ''
	Setup0_Line.[18] = ''
	Setup0_Line.[19] = '/*Section: 1: Begin establishing SEEK program specific variables, such as for the date and time formats*/'
	Setup0_Line.[20] = 'These formats establish how SEEK displays dates and times in its "Presort" facility'
	Setup0_Line.[21] = 'To set the desired date or time format, do the following:'
	Setup0_Line.[22] = '	1.	Copy and the desired format from the date or time explanation section, immediately below (example: InputStem.Presort_Date_Format?"MM DD YYYY")'
	Setup0_Line.[23] = ''
	Setup0_Line.[24] = '	2.	Note that these formats have a question mark ("?") near the right-hand side'
	Setup0_Line.[25] = ''
	Setup0_Line.[26] = '	3.	Paste that format in the first line or second line right after the line: "/*Begin setting the date and time formats*/"'
	Setup0_Line.[27] = ''
	Setup0_Line.[28] = '	4.	Replace the question mark, "?", with an "equal sign" (ASCII control sequence 61)'
	Setup0_Line.[29] = ''
	Setup0_Line.[30] = ''
	Setup0_Line.[31] = '/*Begin explanation of allowed date formats (to use one of the formats, replace the "?" with an "equal sign")*/'
	Setup0_Line.[32] = 'InputStem.Presort_Date_Format?"MM DD YYYY"		"equivalent to the USA format, except that the years are 4 digits, not 2"'
	Setup0_Line.[33] = 'InputStem.Presort_Date_Format?"DD MM YYYY"		"equivalent to the European date format, except that the years are 4 digits, not 2"'
	Setup0_Line.[34] = 'InputStem.Presort_Date_Format?"YYYY MM DD"		"equivalent to the Standard format"'
	Setup0_Line.[35] = '/*End explanation of allowed date formats (to use one of the formats, replace the "?" with an "equal sign")*/'
	Setup0_Line.[36] = ''
	Setup0_Line.[37] = '/*Begin explanation of allowed time formats (to use one of the formats, replace the "?" with an "equal sign")*/'
	Setup0_Line.[38] = 'InputStem.Presort_Time_Format?"HH MM SS AMPM"		"hours, minutes and seconds of the day, based on a 12 hour clock with AM and PM designations"'
	Setup0_Line.[39] = 'InputStem.Presort_Time_Format?"HH MM SS"		"hours, minutes and seconds of the day, based on a 24 hour clock"'
	Setup0_Line.[40] = '/*End explanation of allowed time formats (to use one of the formats, replace the "?" with an "equal sign")*/'
	Setup0_Line.[41] = ''
	Setup0_Line.[42] = '/*Begin setting the date and time formats*/'
	Setup0_Line.[43] = 'InputStem.Presort_Date_Format = "MM DD YYYY"'
	Setup0_Line.[44] = 'InputStem.Presort_Time_Format = "HH MM SS AMPM"'
	Setup0_Line.[45] = '/*End setting the date and time formats*/'
	Setup0_Line.[46] = '/*Section: 1: End establishing SEEK program specific variables, such as for the date and time formats*/'
	Setup0_Line.[47] = ''
	Setup0_Line.[48] = ''
	Setup0_Line.[49] = ''
	Setup0_Line.[50] = ''
	Setup0_Line.[51] = ''
	Setup0_Line.[52] = '/*Sections 2 through 14: Begin setting up and establishing the user file associations for applications (programs) used on this computer*/'
	Setup0_Line.[53] = '/*Begin explanation of the of how the file associations work*/'
	Setup0_Line.[54] = 'These sections of SETUP establish the file/application associations that SEEK will use to open, or launch, requested files.'
	Setup0_Line.[55] = 'When you request SEEK to launch (open) a file into an application, you can do so in one of two (2) ways:'
	Setup0_Line.[56] = '	1.	Select the specific application to use for opening the file'
	Setup0_Line.[57] = '	2.	Allow SEEK to select the application, based on your established file-to-application associations (associating by file types and/or file filters)'
	Setup0_Line.[58] = ''
	Setup0_Line.[59] = 'You can establish an association to an application in either or both of the usual OS/2 (ECS) ways:'
	Setup0_Line.[60] = '	A.	Association by "file type" (examples: "Describe Document" or "Mesa Workbook File")'
	Setup0_Line.[61] = '	B.	Association by "file filter (examples: "*.TXT", for an ASCII file associated with a text editor program, or "*.M2", for a file associated with the Mesa2 spreadsheet program).'
	Setup0_Line.[62] = ''
	Setup0_Line.[63] = 'SEEK uses the extended attributes of a file to establish it's file type. It attempts to match one of the file's extended attributes to any of the listed file type associations listed here in SETUP'
	Setup0_Line.[64] = ''
	Setup0_Line.[65] = 'Except for the graphics program, you can use up to three (3) file filters to associate files to given program (application). For the graphics program you can associate up to 50 graphics file filters.'
	Setup0_Line.[66] = 'When a particular file filter has two (2) or more applications associated with it, SEEK will use the first listed application as the default for launching these files.'
	Setup0_Line.[67] = '/*End explanation of the of how the file associations work*/'
	Setup0_Line.[68] = ''
	Setup0_Line.[69] = ''
	Setup0_Line.[70] = '/*Section 2: Begin establishing the word processor data file - only one (1) application allowed*/'
	Setup0_Line.[71] = 'WORDPROCESSORS:'
	Setup0_Line.[72] = 'InputStem.Application.WP.NName.1 = "Describe"'
	Setup0_Line.[73] = 'InputStem.Application.WP.PPath.1 = "C:\Describe\OS2\Describe.exe"'
	Setup0_Line.[74] = 'InputStem.Application.WP.AAssociation_File_Type.1 = "DeScribe Document"'
	Setup0_Line.[75] = 'InputStem.Application.WP.AAssociation_File_Filter.1.1 = ""'
	Setup0_Line.[76] = 'InputStem.Application.WP.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[77] = 'InputStem.Application.WP.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[78] = 'InputStem.Application.WP.NName.0 = 1'
	Setup0_Line.[79] = '/*Section 2: End establishing the word processor data file - only one (1) application allowed*/'
	Setup0_Line.[80] = ''
	Setup0_Line.[81] = ''
	Setup0_Line.[82] = ''
	Setup0_Line.[83] = '/*Section 3: Begin establishing data files for normally used text editors -  up to four (4) applications allowed*/'
	Setup0_Line.[84] = 'NORMAL_TEXTEDITORS:'
	Setup0_Line.[85] = 'InputStem.Application.N_ED.NName.1 = "Future Wave Editor"'
	Setup0_Line.[86] = 'InputStem.Application.N_ED.PPath.1 = "C:\UTILITIES\TEXT_EDITORS\FWE\FWE.EXE"'
	Setup0_Line.[87] = 'InputStem.Application.N_ED.NName.2 = "The OS/2 System Editor"'
	Setup0_Line.[88] = 'InputStem.Application.N_ED.PPath.2 = "E:\OS2\E.EXE"'
	Setup0_Line.[89] = 'InputStem.Application.N_ED.NName.3 = "Enhanced E Editor"'
	Setup0_Line.[90] = 'InputStem.Application.N_ED.PPath.3 = "C:\UTILITIES\TEXT_EDITORS\EEENHANCED_EDITOR\EE.EXE"'
	Setup0_Line.[91] = 'InputStem.Application.N_ED.NName.4 = "Enhanced EE Editor"'
	Setup0_Line.[92] = 'InputStem.Application.N_ED.PPath.4 = "C:\UTILITIES\TEXT_EDITORS\EEENHANCED_EDITOR\EEE.EXE"'
	Setup0_Line.[93] = 'InputStem.Application.N_ED.AAssociation_File_Type.1.1 = "ASCII"'
	Setup0_Line.[94] = 'InputStem.Application.N_ED.AAssociation_File_Filter.1.1 = ".TXT"'
	Setup0_Line.[95] = 'InputStem.Application.N_ED.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[96] = 'InputStem.Application.N_ED.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[97] = 'InputStem.Application.N_ED.AAssociation_File_Type.2.1 = "ASCII"'
	Setup0_Line.[98] = 'InputStem.Application.N_ED.AAssociation_File_Filter.2.1 = ".TXT"'
	Setup0_Line.[99] = 'InputStem.Application.N_ED.AAssociation_File_Filter.2.2 = ""'
	Setup0_Line.[100] = 'InputStem.Application.N_ED.AAssociation_File_Filter.2.3 = ""'
	Setup0_Line.[101] = 'InputStem.Application.N_ED.AAssociation_File_Type.3.1 = "ASCII"'
	Setup0_Line.[102] = 'InputStem.Application.N_ED.AAssociation_File_Filter.3.1 = ".TXT"'
	Setup0_Line.[103] = 'InputStem.Application.N_ED.AAssociation_File_Filter.3.2 = ""'
	Setup0_Line.[104] = 'InputStem.Application.N_ED.AAssociation_File_Filter.3.3 = ""'
	Setup0_Line.[105] = 'InputStem.Application.N_ED.AAssociation_File_Type.4.1 = "ASCII"'
	Setup0_Line.[106] = 'InputStem.Application.N_ED.AAssociation_File_Filter.4.1 = ".TXT"'
	Setup0_Line.[107] = 'InputStem.Application.N_ED.AAssociation_File_Filter.4.2 = ""'
	Setup0_Line.[108] = 'InputStem.Application.N_ED.AAssociation_File_Filter.4.3 = ""'
	Setup0_Line.[109] = 'InputStem.Application.N_ED.NName.0 = 4'
	Setup0_Line.[110] = '/*Section 3: End establishing data files for normally used text editors -  up to four (4) applications allowed*/'
	Setup0_Line.[111] = ''
	Setup0_Line.[112] = ''
	Setup0_Line.[113] = ''
	Setup0_Line.[114] = '/*Section 4: Begin establishing data files for REXX programming text editors -  up to two (2) applications allowed*/'
	Setup0_Line.[115] = 'REXX_TEXTEDITORS:'
	Setup0_Line.[116] = 'InputStem.Application.R_ED.NName.1 = "Future Wave Editor"'
	Setup0_Line.[117] = 'InputStem.Application.R_ED.PPath.1 = "C:\UTILITIES\TEXT_EDITORS\FWE\FWE.EXE"'
	Setup0_Line.[118] = 'InputStem.Application.R_ED.NName.2 = ""'
	Setup0_Line.[119] = 'InputStem.Application.R_ED.PPath.2 = ""'
	Setup0_Line.[120] = 'InputStem.Application.R_ED.AAssociation_File_Type.1.1 = "ASCII"'
	Setup0_Line.[121] = 'InputStem.Application.R_ED.AAssociation_File_Filter.1.1 = "*.CMD"'
	Setup0_Line.[122] = 'InputStem.Application.R_ED.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[123] = 'InputStem.Application.R_ED.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[124] = 'InputStem.Application.R_ED.AAssociation_File_Type.2.1 = ""'
	Setup0_Line.[125] = 'InputStem.Application.R_ED.AAssociation_File_Filter.2.1 = ""'
	Setup0_Line.[126] = 'InputStem.Application.R_ED.AAssociation_File_Filter.2.2 = ""'
	Setup0_Line.[127] = 'InputStem.Application.R_ED.AAssociation_File_Filter.2.3 = ""'
	Setup0_Line.[128] = 'InputStem.Application.R_ED.NName.0 = 1'
	Setup0_Line.[129] = '/*Section 4: End establishing data files for REXX programming text editors -  up to two (2) applications allowed*/'
	Setup0_Line.[130] = ''
	Setup0_Line.[131] = ''
	Setup0_Line.[132] = ''
	Setup0_Line.[133] = '/*Section 5: Begin establishing the data file for the LaTeX text editor - only one (1) application allowed*/'
	Setup0_Line.[134] = 'LATEX_TEXTEDITORS:'
	Setup0_Line.[135] = 'InputStem.Application.L_ED.NName.1 = "The OS/2 Enhanced Editor"'
	Setup0_Line.[136] = 'InputStem.Application.L_ED.PPath.1 = "C:\LaTeX\EmTexTDS\EPM_and_EPM_Front_End\EPM.EXE"'
	Setup0_Line.[137] = 'InputStem.Application.L_ED.AAssociation_File_Type.1.1 = "ASCII"'
	Setup0_Line.[138] = 'InputStem.Application.L_ED.AAssociation_File_Filter.1.1 = "*.TEX"'
	Setup0_Line.[139] = 'InputStem.Application.L_ED.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[140] = 'InputStem.Application.L_ED.NName.0 = 0'
	Setup0_Line.[141] = '/*Section 5: End establishing the data file for the LaTeX text editor - only one (1) application allowed*/'
	Setup0_Line.[142] = ''
	Setup0_Line.[143] = ''
	Setup0_Line.[144] = ''
	Setup0_Line.[145] = '/*Section 6: Begin establishing the data file for running REXX programs (scripts) - up to two (2) applications*/'
	Setup0_Line.[146] = 'RUN_REXX:'
	Setup0_Line.[147] = 'InputStem.Application.R_R.NName.1 = "PM REXX"'
	Setup0_Line.[148] = 'InputStem.Application.R_R.PPath.1 = "E:\OS2\PMREXX.EXE"'
	Setup0_Line.[149] = 'InputStem.Application.R_R.NName.2 = "REXX CommandLine"'
	Setup0_Line.[150] = 'InputStem.Application.R_R.PPath.2 = Command_Processor_Path'
	Setup0_Line.[151] = 'InputStem.Application.R_R.AAssociation_File_Type.1.1 = "ASCII"'
	Setup0_Line.[152] = 'InputStem.Application.R_R.AAssociation_File_Filter.1.1 = "*.CMD"'
	Setup0_Line.[153] = 'InputStem.Application.R_R.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[154] = 'InputStem.Application.R_R.AAssociation_File_Type.1.1 = "ASCII"'
	Setup0_Line.[155] = 'InputStem.Application.R_R.AAssociation_File_Filter.1.1 = "*.CMD"'
	Setup0_Line.[156] = 'InputStem.Application.R_R.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[157] = 'InputStem.Application.R_R.NName.0 = 1'
	Setup0_Line.[158] = '/*Section 6: End establishing the  data file for running REXX programs (scripts)  - up to two (2) applications*/'
	Setup0_Line.[159] = ''
	Setup0_Line.[160] = ''
	Setup0_Line.[161] = ''
	Setup0_Line.[162] = '/*Section 7: Begin establishing the data file for the spreadsheet program - only one (1) application allowed*/'
	Setup0_Line.[163] = 'SPREADSHEETS:'
	Setup0_Line.[164] = 'InputStem.Application.SS.NName.1 = "Mesa 2"'
	Setup0_Line.[165] = 'InputStem.Application.SS.PPath.1 = "C:\Mesa2\Mesa2.exe"'
	Setup0_Line.[166] = 'InputStem.Application.SS.AAssociation_File_Type.1 = "Mesa Workbook File"'
	Setup0_Line.[167] = 'InputStem.Application.SS.AAssociation_File_Filter.1.1 = "*.M2"'
	Setup0_Line.[168] = 'InputStem.Application.SS.AAssociation_File_Filter.1.2 = "*.M2B"'
	Setup0_Line.[169] = 'InputStem.Application.SS.AAssociation_File_Filter.1.3 = ".M2T"'
	Setup0_Line.[170] = 'InputStem.Application.SS.NName.0 = 1'
	Setup0_Line.[171] = '/*Section 7: End establishing the data file for the spreadsheet program - only one (1) application allowed*/'
	Setup0_Line.[172] = ''
	Setup0_Line.[173] = ''
	Setup0_Line.[174] = ''
	Setup0_Line.[175] = '/*Section 8: Begin establishing the financial program data file - only one (1) application allowed*/'
	Setup0_Line.[176] = 'FINANCE:'
	Setup0_Line.[177] = 'InputStem.Application.FIN.NName.1 = ""'
	Setup0_Line.[178] = 'InputStem.Application.FIN.PPath.1 = ""'
	Setup0_Line.[179] = 'InputStem.Application.FIN.AAssociation_File_Filter.1.1 = ""'
	Setup0_Line.[180] = 'InputStem.Application.FIN.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[181] = 'InputStem.Application.FIN.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[182] = 'InputStem.Application.FIN.NName.0 = 0'
	Setup0_Line.[183] = '/*Section 8: End establishing the financial program data file - only one (1) application allowed*/'
	Setup0_Line.[184] = ''
	Setup0_Line.[185] = ''
	Setup0_Line.[186] = ''
	Setup0_Line.[187] = '/*Section 9: Begin establishing the web brower data files - up to two (2) applications allowed*/'
	Setup0_Line.[188] = 'WEB_BROWERS:'
	Setup0_Line.[189] = 'InputStem.Application.WB.NName.1 = "Mozilla"'
	Setup0_Line.[190] = 'InputStem.Application.WB.PPath.1 = "C:\NETWORK\MOZILLA\MOZILLA_1.76\MOZILLA.EXE"'
	Setup0_Line.[191] = 'InputStem.Application.WB.NName.2 = "Netscape"'
	Setup0_Line.[192] = 'InputStem.Application.WB.PPath.2 = "C:\Network\Netscape\PROGRAM\NETSCAPE.EXE"'
	Setup0_Line.[193] = 'InputStem.Application.WB.AAssociation_File_Type.1 = ""'
	Setup0_Line.[194] = 'InputStem.Application.WB.AAssociation_File_Filter.1.1 = "*.HTM"'
	Setup0_Line.[195] = 'InputStem.Application.WB.AAssociation_File_Filter.1.2 = "*.HTML"'
	Setup0_Line.[196] = 'InputStem.Application.WB.AAssociation_File_Filter.1.3 = "*.XMTL"'
	Setup0_Line.[197] = 'InputStem.Application.WB.AAssociation_File_Type.2 = ""'
	Setup0_Line.[198] = 'InputStem.Application.WB.AAssociation_File_Filter.2.1 = "*.HTM"'
	Setup0_Line.[199] = 'InputStem.Application.WB.AAssociation_File_Filter.2.2 = "*.HTML"'
	Setup0_Line.[200] = 'InputStem.Application.WB.AAssociation_File_Filter.2.3 = "*.XMTL"'
	Setup0_Line.[201] = 'InputStem.Application.WB.NName.0 = 2'
	Setup0_Line.[202] = '/*Section 9: End establishing the web brower data files - up to two (2) applications allowed*/'
	Setup0_Line.[203] = ''
	Setup0_Line.[204] = ''
	Setup0_Line.[205] = ''
	Setup0_Line.[206] = '/*Section 10: Begin establishing the data files for the *.PDF file reader -  up to three (3) applications allowed*/'
	Setup0_Line.[207] = 'PDF_READERS:'
	Setup0_Line.[208] = 'InputStem.Application.PDF.NName.1 = "Acrobat 5"'
	Setup0_Line.[209] = 'InputStem.Application.PDF.PPath.1 = "C:\Acrobat\AcrobatReader51Pre1\ar5os2.exe"'
	Setup0_Line.[210] = 'InputStem.Application.PDF.NName.2 = "Acrobat 4.05"'
	Setup0_Line.[211] = 'InputStem.Application.PDF.PPath.2 = "C:\Acrobat\AcrobatReader405\aros2.exe"'
	Setup0_Line.[212] = 'InputStem.Application.PDF.NName.3 = "Acrobat 3"'
	Setup0_Line.[213] = 'InputStem.Application.PDF.PPath.3 = "C:\Acrobat\Acrobat3\ReadOS2\acroread.exe"'
	Setup0_Line.[214] = 'InputStem.Application.PDF.AAssociation_File_Type.1 = "Acrobat Document"'
	Setup0_Line.[215] = 'InputStem.Application.PDF.AAssociation_File_Filter.1.1 = "*.PDF"'
	Setup0_Line.[216] = 'InputStem.Application.PDF.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[217] = 'InputStem.Application.PDF.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[218] = 'InputStem.Application.PDF.AAssociation_File_Type.2 = ""'
	Setup0_Line.[219] = 'InputStem.Application.PDF.AAssociation_File_Filter.2.1 = "Acrobat Document"'
	Setup0_Line.[220] = 'InputStem.Application.PDF.AAssociation_File_Filter.2.2 = "*.PDF"'
	Setup0_Line.[221] = 'InputStem.Application.PDF.AAssociation_File_Filter.2.3 = ""'
	Setup0_Line.[222] = 'InputStem.Application.PDF.AAssociation_File_Type.3 = ""'
	Setup0_Line.[223] = 'InputStem.Application.PDF.AAssociation_File_Filter.3.1 = "Acrobat Document"'
	Setup0_Line.[224] = 'InputStem.Application.PDF.AAssociation_File_Filter.3.2 = "*.PDF"'
	Setup0_Line.[225] = 'InputStem.Application.PDF.AAssociation_File_Filter.3.3 = ""'
	Setup0_Line.[226] = 'InputStem.Application.PDF.NName.0 = 1'
	Setup0_Line.[227] = '/*Section 10: End establishing the data files for the *.PDF file reader -  up to three (3) application allowed*/'
	Setup0_Line.[228] = ''
	Setup0_Line.[229] = ''
	Setup0_Line.[230] = ''
	Setup0_Line.[231] = '/*Section 11: Begin establishing the data files for the *.PS and *.EPS file reader - only one (1) application allowed*/'
	Setup0_Line.[232] = 'PS_EPS_READER:'
	Setup0_Line.[233] = 'InputStem.Application.PS.NName.1 = "GSView"'
	Setup0_Line.[234] = 'InputStem.Application.PS.PPath.1 = "C:\GhstView\gsview2\gvpm.exe"'
	Setup0_Line.[235] = 'InputStem.Application.PS.AAssociation_File_Type.1 = ""'
	Setup0_Line.[236] = 'InputStem.Application.PS.AAssociation_File_Filter.1.1 = "*.PS"'
	Setup0_Line.[237] = 'InputStem.Application.PS.AAssociation_File_Filter.1.2 = "*.EPS"'
	Setup0_Line.[238] = 'InputStem.Application.PS.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[239] = 'InputStem.Application.PS.NName.0 = 1'
	Setup0_Line.[240] = '/*Section 11: End establishing the data files for the *.PS and *.EPS file reader - only one (1) application allowed*/'
	Setup0_Line.[241] = ''
	Setup0_Line.[242] = ''
	Setup0_Line.[243] = '/*Section 12: Begin establishing the data files for the graphics file reader - only one (1) application allowed*/'
	Setup0_Line.[244] = 'GRAPHICS:'
	Setup0_Line.[245] = 'InputStem.Application.GRAPHICS.NName.1 = "PM View Pro"'
	Setup0_Line.[246] = 'InputStem.Application.GRAPHICS.PPath.1 = "C:\Graphics\PMVIEW\pmview.exe"'
	Setup0_Line.[247] = 'InputStem.Application.GRAPHICS.AAssociation_File_Type.1 = ""'
	Setup0_Line.[248] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.1 = "*.BMP"'
	Setup0_Line.[249] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.2 = "*.CUR"'
	Setup0_Line.[250] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.3 = "*.DCX"'
	Setup0_Line.[251] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.4 = "*.EPS"'
	Setup0_Line.[252] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.5 = "*.FIT"'
	Setup0_Line.[253] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.6 = "*.G3"'
	Setup0_Line.[254] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.7 = "*.GIF"'
	Setup0_Line.[255] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.8 = "*.ICO"'
	Setup0_Line.[256] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.9 = "*.IFF"'
	Setup0_Line.[257] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.10 = "*.ILBM"'
	Setup0_Line.[258] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.11 = "*.IMG"'
	Setup0_Line.[259] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.12 = "*.JPG"'
	Setup0_Line.[260] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.13 = "*.JPEG"'
	Setup0_Line.[261] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.14 = "*.JIF"'
	Setup0_Line.[262] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.15 = "*.JFIF"'
	Setup0_Line.[263] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.16 = "*.LGO"'
	Setup0_Line.[264] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.17 = "*.MAC"'
	Setup0_Line.[265] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.18 = "*.MSP"'
	Setup0_Line.[266] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.19 = "*.PCD"'
	Setup0_Line.[267] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.20 = "*.PCX"'
	Setup0_Line.[268] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.21 = "*.PIC"'
	Setup0_Line.[269] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.22 = "*.PBM"'
	Setup0_Line.[270] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.23 = "*.PGM"'
	Setup0_Line.[271] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.24 = "*.PPM"'
	Setup0_Line.[272] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.25 = "*.PNM"'
	Setup0_Line.[273] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.26 = "*.PNG"'
	Setup0_Line.[274] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.27 = "*.PSD"'
	Setup0_Line.[275] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.28 = "*.PTR"'
	Setup0_Line.[276] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.29 = "*.RAS"'
	Setup0_Line.[277] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.30 = "*.RLE"'
	Setup0_Line.[278] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.31 = "*.SFF"'
	Setup0_Line.[279] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.32 = "*.SFW"'
	Setup0_Line.[280] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.33 = "*.SGI"'
	Setup0_Line.[281] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.34 = "*.SHW"'
	Setup0_Line.[282] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.35 = "*.TGA"'
	Setup0_Line.[283] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.36 = "*.TIF"'
	Setup0_Line.[284] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.37 = "*.TIFF"'
	Setup0_Line.[285] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.38 = "*.WBMP"'
	Setup0_Line.[286] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.39 = "*.WPG"'
	Setup0_Line.[287] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.40 = "*.XBM"'
	Setup0_Line.[288] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.41 = "*.XPM"'
	Setup0_Line.[289] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.42 = "*.XWD"'
	Setup0_Line.[290] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.43 = ""'
	Setup0_Line.[291] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.44 = ""'
	Setup0_Line.[292] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.45 = ""'
	Setup0_Line.[293] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.46 = ""'
	Setup0_Line.[294] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.47 = ""'
	Setup0_Line.[295] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.48 = ""'
	Setup0_Line.[296] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.49 = ""'
	Setup0_Line.[297] = 'InputStem.Application.GRAPHICS.AAssociation_File_Filter.1.50 = ""'
	Setup0_Line.[298] = 'InputStem.Application.GRAPHICS.NName.0 = 1'
	Setup0_Line.[299] = '/*Section 12: End establishing the  data files for the graphics file reader - only one (1) application allowed*/'
	Setup0_Line.[300] = ''
	Setup0_Line.[301] = ''
	Setup0_Line.[302] = ''
	Setup0_Line.[303] = '/*Section 13: Begin establishing the drafting, or CAD, data file - only one (1) application allowed*/'
	Setup0_Line.[304] = 'CAD:'
	Setup0_Line.[305] = 'InputStem.Application.DRAFTING.NName.1 = "BlueCAD"'
	Setup0_Line.[306] = 'InputStem.Application.DRAFTING.PPath.1 = "C:\Graphics\BLUECAD\PRGM\BlueCAD.exe"'
	Setup0_Line.[307] = 'InputStem.Application.DRAFTING.AAssociation_File_Type.1 = ""'
	Setup0_Line.[308] = 'InputStem.Application.DRAFTING.AAssociation_File_Filter.1.1 = "*.DIS"'
	Setup0_Line.[309] = 'InputStem.Application.DRAFTING.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[310] = 'InputStem.Application.DRAFTING.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[311] = 'InputStem.Application.DRAFTING.NName.0 = 1'
	Setup0_Line.[312] = '/*Section 13: End establishing the drafting, or CAD, data file - only one (1) application allowed*/'
	Setup0_Line.[313] = ''
	Setup0_Line.[314] = ''
	Setup0_Line.[315] = ''
	Setup0_Line.[316] = '/*Section 14: Begin establishing data files for user defined file associations N 1 - up to twenty (20) applications allowed*/'
	Setup0_Line.[317] = 'USER_DEFINED:'
	Setup0_Line.[318] = 'InputStem.Application.USER_DEFINED.NName.1 = ""'
	Setup0_Line.[319] = 'InputStem.Application.USER_DEFINED.PPath.1 = ""'
	Setup0_Line.[320] = 'InputStem.Application.USER_DEFINED.NName.2 = ""'
	Setup0_Line.[321] = 'InputStem.Application.USER_DEFINED.PPath.2 = ""'
	Setup0_Line.[322] = 'InputStem.Application.USER_DEFINED.NName.3 = ""'
	Setup0_Line.[323] = 'InputStem.Application.USER_DEFINED.PPath.3 = ""'
	Setup0_Line.[324] = 'InputStem.Application.USER_DEFINED.NName.4 = ""'
	Setup0_Line.[325] = 'InputStem.Application.USER_DEFINED.PPath.4 = ""'
	Setup0_Line.[326] = 'InputStem.Application.USER_DEFINED.NName.5 = ""'
	Setup0_Line.[327] = 'InputStem.Application.USER_DEFINED.PPath.5 = ""'
	Setup0_Line.[328] = 'InputStem.Application.USER_DEFINED.NName.6 = ""'
	Setup0_Line.[329] = 'InputStem.Application.USER_DEFINED.PPath.6 = ""'
	Setup0_Line.[330] = 'InputStem.Application.USER_DEFINED.NName.7 = ""'
	Setup0_Line.[331] = 'InputStem.Application.USER_DEFINED.PPath.7 = ""'
	Setup0_Line.[332] = 'InputStem.Application.USER_DEFINED.NName.8 = ""'
	Setup0_Line.[333] = 'InputStem.Application.USER_DEFINED.PPath.8 = ""'
	Setup0_Line.[334] = 'InputStem.Application.USER_DEFINED.NName.9 = ""'
	Setup0_Line.[335] = 'InputStem.Application.USER_DEFINED.PPath.9 = ""'
	Setup0_Line.[336] = 'InputStem.Application.USER_DEFINED.NName.10 = ""'
	Setup0_Line.[337] = 'InputStem.Application.USER_DEFINED.PPath.10 = ""'
	Setup0_Line.[338] = 'InputStem.Application.USER_DEFINED.NName.11 = ""'
	Setup0_Line.[339] = 'InputStem.Application.USER_DEFINED.PPath.11 = ""'
	Setup0_Line.[340] = 'InputStem.Application.USER_DEFINED.NName.12 = ""'
	Setup0_Line.[341] = 'InputStem.Application.USER_DEFINED.PPath.12 = ""'
	Setup0_Line.[342] = 'InputStem.Application.USER_DEFINED.NName.13 = ""'
	Setup0_Line.[343] = 'InputStem.Application.USER_DEFINED.PPath.13 = ""'
	Setup0_Line.[344] = 'InputStem.Application.USER_DEFINED.NName.14 = ""'
	Setup0_Line.[345] = 'InputStem.Application.USER_DEFINED.PPath.14 = ""'
	Setup0_Line.[346] = 'InputStem.Application.USER_DEFINED.NName.15 = ""'
	Setup0_Line.[347] = 'InputStem.Application.USER_DEFINED.PPath.15 = ""'
	Setup0_Line.[348] = 'InputStem.Application.USER_DEFINED.NName.16 = ""'
	Setup0_Line.[349] = 'InputStem.Application.USER_DEFINED.PPath.16 = ""'
	Setup0_Line.[350] = 'InputStem.Application.USER_DEFINED.NName.17 = ""'
	Setup0_Line.[351] = 'InputStem.Application.USER_DEFINED.PPath.17 = ""'
	Setup0_Line.[352] = 'InputStem.Application.USER_DEFINED.NName.18 = ""'
	Setup0_Line.[353] = 'InputStem.Application.USER_DEFINED.PPath.18 = ""'
	Setup0_Line.[354] = 'InputStem.Application.USER_DEFINED.NName.19 = ""'
	Setup0_Line.[355] = 'InputStem.Application.USER_DEFINED.PPath.19 = ""'
	Setup0_Line.[356] = 'InputStem.Application.USER_DEFINED.NName.20 = ""'
	Setup0_Line.[357] = 'InputStem.Application.USER_DEFINED.PPath.20 = ""'
	Setup0_Line.[358] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.1 = ""'
	Setup0_Line.[359] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.1.1 = ""'
	Setup0_Line.[360] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.1.2 = ""'
	Setup0_Line.[361] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.1.3 = ""'
	Setup0_Line.[362] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.2 = ""'
	Setup0_Line.[363] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.2.1 = ""'
	Setup0_Line.[364] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.2.2 = ""'
	Setup0_Line.[365] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.2.3 = ""'
	Setup0_Line.[366] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.3 = ""'
	Setup0_Line.[367] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.3.1 = ""'
	Setup0_Line.[368] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.3.2 = ""'
	Setup0_Line.[369] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.3.3 = ""'
	Setup0_Line.[370] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.4 = ""'
	Setup0_Line.[371] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.4.1 = ""'
	Setup0_Line.[372] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.4.2 = ""'
	Setup0_Line.[373] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.4.3 = ""'
	Setup0_Line.[374] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.5 = ""'
	Setup0_Line.[375] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.5.1 = ""'
	Setup0_Line.[376] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.5.2 = ""'
	Setup0_Line.[377] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.5.3 = ""'
	Setup0_Line.[378] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.6 = ""'
	Setup0_Line.[379] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.6.1 = ""'
	Setup0_Line.[380] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.6.2 = ""'
	Setup0_Line.[381] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.6.3 = ""'
	Setup0_Line.[382] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.7 = ""'
	Setup0_Line.[383] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.7.1 = ""'
	Setup0_Line.[384] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.7.2 = ""'
	Setup0_Line.[385] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.7.3 = ""'
	Setup0_Line.[386] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.8 = ""'
	Setup0_Line.[387] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.8.1 = ""'
	Setup0_Line.[388] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.8.2 = ""'
	Setup0_Line.[389] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.8.3 = ""'
	Setup0_Line.[390] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.9 = ""'
	Setup0_Line.[391] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.3.1 = ""'
	Setup0_Line.[392] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.9.2 = ""'
	Setup0_Line.[393] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.9.3 = ""'
	Setup0_Line.[394] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.10 = ""'
	Setup0_Line.[395] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.10.1 = ""'
	Setup0_Line.[396] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.10.2 = ""'
	Setup0_Line.[397] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.10.3 = ""'
	Setup0_Line.[398] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.11 = ""'
	Setup0_Line.[399] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.11.1 = ""'
	Setup0_Line.[400] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.11.2 = ""'
	Setup0_Line.[401] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.11.3 = ""'
	Setup0_Line.[402] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.12 = ""'
	Setup0_Line.[403] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.12.1 = ""'
	Setup0_Line.[404] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.12.2 = ""'
	Setup0_Line.[405] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.12.3 = ""'
	Setup0_Line.[406] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.13 = ""'
	Setup0_Line.[407] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.13.1 = ""'
	Setup0_Line.[408] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.13.2 = ""'
	Setup0_Line.[409] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.13.3 = ""'
	Setup0_Line.[410] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.14 = ""'
	Setup0_Line.[411] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.14.1 = ""'
	Setup0_Line.[412] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.14.2 = ""'
	Setup0_Line.[413] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.14.3 = ""'
	Setup0_Line.[414] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.15 = ""'
	Setup0_Line.[415] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.15.1 = ""'
	Setup0_Line.[416] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.15.2 = ""'
	Setup0_Line.[417] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.15.3 = ""'
	Setup0_Line.[418] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.16 = ""'
	Setup0_Line.[419] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.16.1 = ""'
	Setup0_Line.[420] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.16.2 = ""'
	Setup0_Line.[421] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.16.3 = ""'
	Setup0_Line.[422] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.17 = ""'
	Setup0_Line.[423] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.17.1 = ""'
	Setup0_Line.[424] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.17.2 = ""'
	Setup0_Line.[425] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.17.3 = ""'
	Setup0_Line.[426] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.18 = ""'
	Setup0_Line.[427] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.18.1 = ""'
	Setup0_Line.[428] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.18.2 = ""'
	Setup0_Line.[429] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.18.3 = ""'
	Setup0_Line.[430] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.19 = ""'
	Setup0_Line.[431] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.13.1 = ""'
	Setup0_Line.[432] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.19.2 = ""'
	Setup0_Line.[433] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.19.3 = ""'
	Setup0_Line.[434] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Type.20 = ""'
	Setup0_Line.[435] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.20.1 = ""'
	Setup0_Line.[436] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.20.2 = ""'
	Setup0_Line.[437] = 'InputStem.Application.USER_DEFINED.AAssociation_File_Filter.20.3 = ""'
	Setup0_Line.[438] = 'InputStem.Application.USER_DEFINED.NName.0 = 0'
	Setup0_Line.[439] = '/*Section 14: End establishing data files for user defined file associations  - up to twenty (20) applications allowed*/'
	Setup0_Line.[440] = '/*Sections 2 through 14: End setting up and the user file associations for applications (programs) used on this computer*/'
	Setup0_Line.[441] = ''
	Setup0_Line.[442] = ''
	Setup0_Line.[443] = ''
	Setup0_Line.[444] = '/*Section 15: Begin setting the two (2) variables for using, or not using the REXX Library (REXXLIB) and REXXEA)*/'
	Setup0_Line.[445] = 'SEEK uses the following three (3) facilities to provide extended attributes (EA) search capabilities:'
	Setup0_Line.[446] = ''
	Setup0_Line.[447] = '	1.	The SYSGETEA funtion within the REXX Utilities (the REXX Utilities are part of the REXX package included in OS/2 or ECS).'
	Setup0_Line.[448] = '	2.	The DOSEALIST() function from the REXX Library (REXXLIB) by Quercus Systems.'
	Setup0_Line.[449] = '	3.	The FETCHEA() function from REXXEA, Ammonoosuc Technology, Inc., 131 Ridge Road, Franconia, New Hampshire 03580.'
	Setup0_Line.[450] = ''
	Setup0_Line.[451] = 'No one facility by itself provides a complete source for finding the EA. Nevertheless, if you do not have one or both of the REXXLIB and REXXEA'
	Setup0_Line.[452] = 'installed on your system, you can have SEEK use the REXX Utilities and which ever other facility, REXXLIB or REXXEA, if any, installed. I recommend that SEEK use REXXLIB and/or REXXEA, if'
	Setup0_Line.[453] = 'one or both is installed on your system.'
	Setup0_Line.[454] = ''
	Setup0_Line.[455] = 'Please set the the two (2) variables for using, or not using REXXLIB and REXXEA, below. Replace the "?" with an "equal sign" (ASCII control sequence 61) on the "YES" or "NO" selection of choice.'
	Setup0_Line.[456] = 'InputStem.Use_REXXLIB?"YES"'
	Setup0_Line.[457] = 'InputStem.Use_REXXLIB?"NO"'
	Setup0_Line.[458] = 'InputStem.Use_REXXEA?"YES"'
	Setup0_Line.[459] = 'InputStem.Use_REXXEA?"NO"'
	Setup0_Line.[460] = ''
	Setup0_Line.[461] = 'InputStem.Use_REXXLIB = "YES"'
	Setup0_Line.[462] = 'InputStem.Use_REXXEA = "YES"'
	Setup0_Line.[463] = '/*Section 15: End setting the two (2) variables for using, or not using the REXX Library (REXXLIB) and REXXEA)*/'
	Setup0_Line.[0] = 463
	RETURN O

::METHOD FIND_STREAM CLASS
	USE ARG File, Location, Msg.
	Flag = 0
	Path = Location"\"File
	StreamName = .STREAM~NEW(Path)
	RC = StreamName~QUERY("EXISTS")
	IF RC = .NIL | RC = "" THEN DO
		Flag = 1
		Msg.[1] = 'Sorry, the "'File'" ASCII file does not exist, or does not reside, in the following folder:'
		Msg.[2] = '     '
		Msg.[3] = '    'Location
		Msg.[4] = '     '
		Msg.[5] = 'This file is necessary for the execution of this VisProREXX program. It lists the setup infor-'
		Msg.[6] = 'mation for the program.'
		Msg.[7] = '     '
		Msg.[8] = 'A template, called "'File'0", has now been created for you and placed in the'
		Msg.[9] = '     '
		Msg.[10] = '     'Location
		Msg.[11] = '     '
		Msg.[12] = 'folder. It contains sample information, which should enable you to properly reconstruct the'
		Msg.[13] = '"'File'" file for this REXX program.'
		Msg.[14] = '     '
		Msg.[15] = 'Please consult "'File'0". Then, reconstruct the "'File'" ASCII file  and save it in the'
		Msg.[16] = '     '
		Msg.[17] = '     'Location
		Msg.[18] = '     '
		Msg.[19] = 'folder.'
		Msg.[20] = '     '
		Msg.[21] = 'Finally, restart this program.'
		Msg.[22] = '     '
		Msg.[23] ='Press the '"CANCEL"' button now (below) to end the program and begin the reconstruction.'
		Msg.[0] = 23
	END	/*Ends "WHEN RC = .NIL | RC = "" THEN DO" Section*/
	RETURN Flag

::METHOD FIND_FILE_ASSOCIATIONS CLASS
	USE ARG InputStem., OtherServicesFilePath., ScanFilePathResults., ScanLineResults., Command_Processor_Path
	OutputStem. = .STEM~NEW
	Start = 1
	DO I = 1 TO OtherServicesFilePath.0 BY 1
		OutputStem.I.1 = ""
		OutputStem.I.2 = ""
		DO J = Start TO ScanFilePathResults.0 BY 1
			IF TRANSLATE(ScanFilePathResults.J) = TRANSLATE(OtherServicesFilePath.I) THEN DO
				DO K = 1 TO InputStem.File_Type.0.0 BY 1
					IF InputStem.File_Type.K.1 = "" THEN ITERATE
					DO L = 1 TO ScanLineResults.J.0 BY 1
						IF POS(TRANSLATE(InputStem.File_Type.K.1), TRANSLATE(ScanLineResults.J.L), 1) > 0 THEN DO
							IF InputStem.File_Type.K.2 = Command_Processor_Path THEN OutputStem.I.1 = OtherServicesFilePath.I	/*Different way to start OS/2 command processor and use it for running REXX programs*/
							ELSE OutputStem.I.1 = InputStem.File_Type.K.2
							CALL FIND_FILE_ASSOCIATIONS_2
							ITERATE I
						END	/*Ends "IF POS(TRANSLATE(InputStem.File_Type.K.1), TRANSLATE(ScanLineResults.J.L), 1) > 0 THEN DO" Section*/
					END L	/*Ends "DO L = 1 TO ScanLineResults.J.0 BY 1" Section*/
				END K	/*Ends "DO K = 1 TO InputStem.File_Type.0.0 BY 1" Section*/
				Start = J + 1
			END	/*Ends "IF TRANSLATE(ScanFilePathResults.J) = TRANSLATE(OtherServicesFilePath.I) THEN DO" Section*/
		END J	/*Ends "DO J = Start TO ScanFilePathResults.0 BY 1" Section*/
		IF OutputStem.I.1 = "" THEN DO
			Question = "FALSE"
			Test_Start = 1
			Prior_Test_Start = 1
			Prior_Test_Result = 0
			DO UNTIL Question = "TRUE"
				Test_Result = POS(".", OtherServicesFilePath.I, Test_Start)
				SELECT
					WHEN Test_Result = 0 THEN Question = "TRUE"

					WHEN Test_Result > 0 THEN DO
						IF Test_Result < LENGTH(OtherServicesFilePath.I) THEN DO
							Prior_Test_Result = Test_Result
							Test_Start = Test_Result + 1
						END	/*Ends "IF Test_Result < LENGTH(OtherServicesFilePath.I) THEN DO" Section*/
						ELSE DO
							Question = "TRUE"
							Prior_Test_Start = 1
						END	/*Ends "ELSE DO" Section*/
					END	/*Ends "WHEN Test_Result > 0 THEN DO" Section*/

					OTHERWISE NOP
				END	/*Ends "SELECT" Section*/
			END	/*Ends "DO UNTIL Question = "TRUE"" Section*/
			IF Prior_Test_Result > 1 THEN DO
				Test_Start = Prior_Test_Result + 1
				Desired_Length = LENGTH(OtherServicesFilePath.I) - Test_Start + 1
				File_Extension = SUBSTR(OtherServicesFilePath.I, Test_Start,Desired_Length)
				DO M = 1 TO InputStem.File_Filter.0.0 BY 1
					IF InputStem.File_Filter.M.1 = "" THEN ITERATE
					IF POS(TRANSLATE(File_Extension), TRANSLATE(InputStem.File_Filter.M.1), 1) > 0 THEN DO
						IF InputStem.File_Type.K.2 = Command_Processor_Path THEN OutputStem.I.1 = OtherServicesFilePath.I	/*Different way to start OS/2 command processor and use it for running REXX programs*/
						ELSE OutputStem.I.1 = InputStem.File_Filter.M.2
						CALL FIND_FILE_ASSOCIATIONS_2
						LEAVE M
					END	/*Ends "IF POS(TRANSLATE(File_Extension), TRANSLATE(InputStem.File_Filter.M.1), 1) > 0 THEN DO" Section*/
				END	/*Ends "DO M = 1 TO InputStem.File_Filter.0.0 BY 1" Section*/
			END	/*Ends "IF Prior_Test_Result > 1 THEN DO" Section*/
		END	/*Ends "IF OutputStem.I.1 = "" THEN DO" Section*/
	END I	/*Ends "DO I = 1 TO OtherServicesFilePath.0 BY 1" Section*/
	OutputStem.0.0 = OtherServicesFilePath.0
	RETURN OutputStem.

	FIND_FILE_ASSOCIATIONS_2:
	Test_Position = 1
	Test_Start = 1
	DO UNTIL Test_Position = 0
		Test_Position = POS("\", OutputStem.I.1, Test_Start)
		IF Test_Position > 0 THEN DO
			Prior_Test_Position = Test_Position
			Test_Start = Test_Position + 1
			OutputStem.I.2 = SUBSTR(OutputStem.I.1, 1, (Test_Position - 1))
		END	/*Ends "IF Test_Position > 0 THEN DO" Section*/
	END	/*Ends "DO UNTIL Test_Position = 0" Section*/
	DesiredLength = LENGTH(OutputStem.I.1) - Prior_Test_Position
	OutputStem.I.1 = SUBSTR(OutputStem.I.1, (Prior_Test_Position + 1), DesiredLength)
	RETURN

::METHOD FIND_MANUAL_ASSOCIATION CLASS
	USE ARG InputStem., App_Path, IIndex
	Test_Position = 1
	Test_Start = 1
	DO UNTIL Test_Position = 0
		Test_Position = POS("\", App_Path, Test_Start)
		IF Test_Position > 0 THEN DO
			Prior_Test_Position = Test_Position
			Test_Start = Test_Position + 1
			InputStem.IIndex.2 = SUBSTR(App_Path, 1, (Test_Position - 1))
		END	/*Ends "IF Test_Position > 0 THEN DO" Section*/
	END	/*Ends "DO UNTIL Test_Position = 0" Section*/
	DesiredLength = LENGTH(App_Path) - Prior_Test_Position
	InputStem.IIndex.1 = SUBSTR(App_Path, (Prior_Test_Position + 1), DesiredLength)
	RETURN 0





::CLASS IO
::METHOD READ_DATA CLASS	/*Reads the lines in an ASCII file, supplied by the path information in the variable, ReadFile. Outputs that result to a stem variable, ReadFile_Lines.*/
	USE ARG ReadFile
	ReadFile_Lines. = .DTTOOLS~STEM_INIT("")
	I = 0
	DO WHILE LINES(ReadFile)
		I = I + 1
		ReadFile_Lines.I = LINEIN(ReadFile)
	END	/*Ends "DO WHILE LINES(ReadFile)" Section*/
	ReadFile_Lines.0 = I
	RC = LINEOUT(ReadFile)
	RETURN ReadFile_Lines.

::METHOD READ_DATA_1 CLASS	/*Reads the lines in an ASCII file, supplied by the path information in the variable, ReadFile. Removes any blank lines and outputs that result to a stem variable, ReadFile_Lines.*/
	USE ARG ReadFile
	ReadFile_Lines. = .DTTOOLS~STEM_INIT("")
	I = 0
	DO WHILE LINES(ReadFile)
		TestReadLine = LINEIN(ReadFile)
		IF TestReadLine \= "" THEN DO
			I = I + 1
			ReadFile_Lines.I = TestReadLine
		END	/*Ends "IF TestReadLine \= "" THEN DO" Section*/
	END	/*Ends "DO WHILE LINES(ReadFile)" Section*/
	ReadFile_Lines.0 = I
	RC = LINEOUT(ReadFile)
	RETURN ReadFile_Lines.

::METHOD READ_DATA_2 CLASS	/*Reads the lines in an ASCII file, supplied by the path information in the variable, ReadFile. Removes any lines that do not contain the desired "Needle1" or "Needle2" within the "Haystack" and outputs the result to a stem variable, ReadFile_Lines.*/
	USE ARG ReadFile, Needle1, Needle2
	ReadFile_Lines. = .DTTOOLS~STEM_INIT("")
	I = 0
	DO WHILE LINES(ReadFile)
		Haystack = LINEIN(ReadFile)
		IF POS(Needle1, Haystack) > 0 | POS(Needle2, Haystack) > 0 THEN DO
			I = I + 1
			ReadFile_Lines.I = Haystack
		END	/*Ends "IF POS(Needle1, Haystack) > 0 | POS(Needle2, Haystack) > 0 THEN DO" Section*/
	END	/*Ends "DO WHILE LINES(ReadFile)" Section*/
	ReadFile_Lines.0 = I
	RC = LINEOUT(ReadFile)
	RETURN ReadFile_Lines.

::METHOD WRITE_DATA CLASS	/*Writes the data, supplied by a stem variable, OutputStem., to a given file, supplied path information in the variable, WriteFilePath*/
	USE ARG OutputStem., WriteFilePath
	RC = SYSFILEDELETE(WriteFilePath)
	DO I = 1 TO OutputStem.[0] BY 1
		RC = LINEOUT(WriteFilePath, OutputStem.I)
	END I	/*Ends "DO I = 1 TO OutputStem.[0] BY 1" Section*/
	RC = LINEOUT(WriteFilePath)
	RETURN 0

::METHOD DIRECTORY_LIST_SIZE CLASS
	USE ARG SSize
	Title = "DIRECTORY LIST TOO LARGE!"
	Message1 = "You are attempting to list "SSize" directories. The maximum allowable list size is 32,000. "
	Message2 = 'Please use the "Presort" facility, or some other method, to reduce the size of the directory list. '
	Message3 = 'Press the "OK" button to reset and start another search. Or, press the "Cancel" button to close out the SEEK program.'
	Message = Message1||Message2||Message3
	RC = VpMessageBox(window,Title,Message,'OKCNCL')
	RETURN RC

::METHOD FILE_LIST_SIZE CLASS
	USE ARG SSize
	Title = "FILE LIST TOO LARGE!"
	Message1 = "You are attempting to list "SSize" files. The maximum allowable list size is 32,000. "
	Message2 = 'Please use the "Presort" facility, or some other method, to reduce the size of the files list. '
	Message3 = 'Press the "OK" button to reset and start another search. Or, press the "Cancel" button to close out the SEEK program.'
	Message = Message1||Message2||Message3
	RC = VpMessageBox(window,Title,Message,'OKCNCL')
	RETURN RC

::METHOD APPLICATION_NOT_FOUND CLASS
	USE ARG InputStem., File_Category, Maximum_Allowable, SearchPath, Count
	Title = "APPLICATION NOT FOUND!"
	SELECT
		WHEN File_Category = "WP" THEN File_Category = "word processor"
		WHEN File_Category = "N_ED" THEN File_Category = "text editor"
		WHEN File_Category = "R_ED" THEN File_Category = "REXX code editor"
		WHEN File_Category = "L_ED" THEN File_Category = "Latex text editor"
		WHEN File_Category = "R_R" THEN File_Category = "REXX script execution"
		WHEN File_Category = "SS" THEN File_Category = "spreadsheet"
		WHEN File_Category = "FIN" THEN File_Category = "financial"
		WHEN File_Category = "WB" THEN File_Category = "web browser"
		WHEN File_Category = "PDF" THEN File_Category = "PDF file reader"
		WHEN File_Category = "PS" THEN File_Category = "PS and EPS file reader"
		WHEN File_Category = "GRAPHICS" THEN File_Category = "graphics"
		WHEN File_Category = "DRAFTING" THEN File_Category = "drafting/CAD"
		WHEN File_Category = "USER_DEFINED" THEN File_Category = "user defined"
		OTHERWISE NOP
	END	/*Ends "SELECT" Section*/
	Message1 = "Sorry, SEEK cannot find your desired "File_Category" application, which you specified at the following path:"D2C(13)||D2C(13)
	Message2 = "	"SearchPath||D2C(13)||D2C(13)
	IF File_Category = "REXX script execution" | File_Category = "financial" | File_Category = "graphics" | File_Category = "drafting/CAD" File_Category = "user defined" THEN File_Category = File_Category" application"
	Message3 = "Therefore, SEEK will stop searching for any more "File_Category"s, having found "Count". Please fix the specified path "
	Message4 = "for this application in the SETUP file. After doing so, rerun SEEK. SEEK will then process any remaining "
	Message5 = File_Category"s, specified by you, up to the maximum allowable of "Maximum_Allowable"."
	Message = Message1||Message2||Message3||Message4||Message5
	RC = VpMessageBox(window,Title,Message)
	RETURN RC





::CLASS Timing
::METHOD Delay CLASS
	use arg DelayTime
	ElapsedTime = SYSELAPSEDTIME("R")
	DO UNTIL ElapsedTime >= DelayTime
		x = (DelayTime - ElapsedTime)%2
		SELECT
			WHEN x >= 1 THEN RC = SYSSLEEP(x)
			OTHERWISE NOP
		END	/*Ends "SELECT" Section*/
		ElapsedTime = SYSELAPSEDTIME("E")
	END	/*Ends "DO UNTIL ElapsedTime >= DelayTime" Section*/
	RETURN .Timing~New









/*Begin methods required to run a LBS Radix sort routine in REXX*/
::CLASS SORT PUBLIC
::CLASS SORTTOOLS SUBCLASS SORT PUBLIC
::CLASS MISCELLANEOUS SUBCLASS SORTTOOLS PUBLIC
::METHOD CREATE_ARRAY_FROM_STEM CLASS
	USE ARG InputStem., FirstStemNumber, StemSize
	Array = .ARRAY~NEW(StemSize)
	J = 0
	DO I = FirstStemNumber TO (FirstStemNumber + StemSize - 1) BY 1
		J = J + 1
   		Array[J] = InputStem.I
	END I	/*Ends "DO I = FirstStemNumber TO (FirstStemNumber + StemSize - 1) BY 1" Section*/
	RETURN Array

::METHOD STEM_FROM_ARRAY CLASS
	USE ARG Array, ArraySize
	DO I = 1 TO ArraySize BY 1
   		StemFromArray.I = Array[I]
	END I	/*Ends "DO I = 1 TO StemSize BY 1" Section*/
	StemFromArray.0 = ArraySize
	RETURN StemFromArray.





::CLASS BUCKET SUBCLASS SORTTOOLS PUBLIC
::CLASS ASCIIBUCKET SUBCLASS BUCKET PUBLIC
::CLASS ASCII256QUEUE SUBCLASS ASCIIBUCKET PUBLIC
::METHOD NEW CLASS
	USE ARG BucketName.
	DO I = 1 TO 256 BY 1
		BucketName.I = .QUEUE~NEW
	END I	/*Ends "DO I = 1 TO 256 BY 1" Section*/
	RETURN BucketName.

::CLASS NUMBUCKET SUBCLASS BUCKET PUBLIC
::METHOD SIZEBUCKET CLASS
	USE ARG NumLength
	Remainder = NumLength//2
	Constant1 = 1
	Constant2 = 3.1622776601684	/*(= 10**0.5)*/
	Exponent1 = NumLength/2
	Exponent2 = (NumLength - 1)/2
	SELECT
		WHEN Remainder = 0 THEN NumberOfBuckets = Constant1*10**Exponent1
		OTHERWISE NumberOfBuckets = (Constant2*10**Exponent2%1 + 1)
	END	/*Ends "SELECT" Section*/
	RETURN NumberOfBuckets

::CLASS NUMBUCKETQUEUE SUBCLASS NUMBUCKET PUBLIC
::METHOD NEW CLASS
	USE ARG BucketName., NumberOfBuckets
	DO I = 0 TO NumberOfBuckets BY 1
		BucketName.I = .QUEUE~NEW
	END I	/*Ends "DO I = 0 TO NumberOfBuckets BY 1" Section*/
	RETURN BucketName.





::CLASS RADIX SUBCLASS SORTTOOLS PUBLIC
::METHOD QUEUEBUCKET_C_DISTRIBUTE CLASS
	USE ARG BucketName., SortArray, SortArraySize, Position
	DO I = 1 TO SortArraySize BY 1
		ASCII = C2D(SUBSTR(SortArray[I], Position, 1))
		BucketName.ASCII~QUEUE(SortArray[I])
	END I		/*Ends "DO I = 1 TO SortArraySize BY 1" Section*/
	RETURN BucketName.

::METHOD QUEUEBUCKET_I_DISTRIBUTE CLASS
	USE ARG BucketName., SortArray, SortArraySize, Position
	DO I = 1 TO SortArraySize BY 1
		ASCII = C2D(TRANSLATE(SUBSTR(SortArray[I], Position, 1)))
		BucketName.ASCII~QUEUE(SortArray[I])
	END I		/*Ends "DO I = 1 TO SortArraySize BY 1" Section*/
	RETURN BucketName.

::METHOD QUEUEBUCKET_N_DISTRIBUTE CLASS
	USE ARG BucketName., NumberOfBuckets, SortArray, SortArraySize, Start, MaxLength, Count
	DO I = 1 TO SortArraySize BY 1
		NNumber = STRIP(SUBSTR(SortArray[I], Start, MaxLength), "B")
		SELECT
			WHEN Count = 1 THEN NUM = NNumber//NumberOfBuckets
			OTHERWISE NUM = NNumber%NumberOfBuckets
		END	/*Ends "SELECT" Section*/
		BucketName.NUM~QUEUE(SortArray[I])
	END I		/*Ends "DO I = 1 TO SortArraySize BY 1" Section*/
	RETURN BucketName.

::METHOD QUEUEBUCKET_D_DISTRIBUTE CLASS
	USE ARG BucketName., NumberOfBuckets, SortArray, SortArraySize, Start, MaxLength, Count
	DO I = 1 TO SortArraySize BY 1
		IF SUBSTR(STRIP(SUBSTR(SortArray[I], Start, MaxLength), "B"), 2, 1) = "/" THEN DNumber = DATE("B", "0"STRIP(SUBSTR(SortArray[I], Start, MaxLength), "B"), "U")
		ELSE DNumber = DATE("B", STRIP(SUBSTR(SortArray[I], Start, MaxLength), "B"), "U")
		SELECT
			WHEN Count = 1 THEN NUM = DNumber//NumberOfBuckets
			OTHERWISE NUM = DNumber%NumberOfBuckets
		END	/*Ends "SELECT" Section*/
		BucketName.NUM~QUEUE(SortArray[I])
	END I		/*Ends "DO I = 1 TO SortArraySize BY 1" Section*/
	RETURN BucketName.

::METHOD QUEUEBUCKET_T_DISTRIBUTE CLASS
	USE ARG BucketName., NumberOfBuckets, SortArray, SortArraySize, Start, MaxLength, Count
	DO I = 1 TO SortArraySize BY 1
		Data = STRIP(SUBSTR(SortArray[I], Start, MaxLength), "B")
		SELECT
			WHEN TRANSLATE(RIGHT(Data, 1)) = "A" | TRANSLATE(RIGHT(Data, 1)) = "P" THEN TNumber = TIME("M", Data"m", "C")
			OTHERWISE TNumber = TIME("M", Data, "C")
		END	/*Ends "SELECT" Section*/
		SELECT
			WHEN Count = 1 THEN NUM = TNumber//NumberOfBuckets
			OTHERWISE NUM = TNumber%NumberOfBuckets
		END	/*Ends "SELECT" Section*/
		BucketName.NUM~QUEUE(SortArray[I])
	END I		/*Ends "DO I = 1 TO SortArraySize BY 1" Section*/
	RETURN BucketName.

::METHOD PULL_QUEUE_DATA CLASS
	USE ARG BucketName., Start, NumberOfBuckets, SortArray
	J = 0
	DO I = Start TO NumberOfBuckets BY 1
		BucketSupplier = BucketName.I~SUPPLIER
		DO WHILE BucketSupplier~AVAILABLE
			J = J + 1
	    		SortArray[J] = BucketName.I~PULL
	  		BucketSupplier~NEXT
		END	/*Ends "DO WHILE BucketSupplier~AVAILABLE" Section*/
	END I	/*Ends "DO I = Start TO NumberOfBuckets BY 1" Section*/
	RETURN SortArray





::CLASS SORT_PROCEDURES SUBCLASS SORT PUBLIC
::CLASS RADIXSORT SUBCLASS SORT_PROCEDURES PUBLIC
::CLASS LSB SUBCLASS RADIXSORT PUBLIC
::METHOD STEMSORT CLASS
	USE ARG Stem., FirstStemNumber, StemSize, S.1, L.1, O.1, T.1, S.2, L.2, O.2, T.2, S.3, L.3, O.3, T.3, S.4, L.4, O.4, T.4, S.5, L.5, O.5, T.5, S.6, L.6, O.6, T.6, S.7, L.7, O.7, T.7, S.8, L.8, O.8, T.8, S.9, L.9, O.9, T.9, S.10, L.10, O.10, T.10
/*"Stem" is the name of the stem variable that has the data to be sorted*/
/*"FirstStemNumber" is the number of the first stem variable upon which to start the sort (usually = 1)*/
/*"StemSize" equals the total number of stem variables (usually = Stem.[0], or similar)*/
/*S.I (I = 1, 2 ..., 10) is the starting character position of the data assignments of the stem variables to be sorted*/
/*L.I (I = 1, 2 ..., 10) is the data length (number of characters) to be sorted within the data assignments of the stem variables*/
/*O.I (I = 1, 2 ..., 10) is the order of the sort: "A" for ascending order ("A" then "B" then "C", etc.); "D" for descending order ("Z" then "Y" then "W", etc.)*/
/*T.I (I = 1, 2 ..., 10) is the type of sort: "C" for case sensitive; "I" for case insensitive; "N" for numerical; "D" for date; and "T" for a time sort*/
	SELECT
		WHEN TRANSLATE(LEFT(T.1, 1)) = "C" | TRANSLATE(LEFT(T.1, 1)) = "I" THEN Stem. = .LSB~CHAR_STEMSORT(Stem., FirstStemNumber, StemSize, S.1, L.1, O.1, T.1)
		WHEN TRANSLATE(LEFT(T.1, 1)) = "N" THEN Stem. = .LSB~NUM_STEMSORT(Stem., FirstStemNumber, StemSize, S.1, L.1, O.1, T.1)
		WHEN TRANSLATE(LEFT(T.1, 1)) = "D" THEN Stem. = .LSB~DATE_STEMSORT(Stem., FirstStemNumber, StemSize, S.1, L.1, O.1, T.1)
		WHEN TRANSLATE(LEFT(T.1, 1)) = "T" THEN Stem. = .LSB~TIME_STEMSORT(Stem., FirstStemNumber, StemSize, S.1, L.1, O.1, T.1)
		OTHERWISE NOP
	END	/*Ends "SELECT" Section*/
	OriginalStemSize = StemSize
	Question = "FALSE"
	DO I = 2 TO 10 BY 1
		SELECT
			WHEN S.I = "S."I THEN LEAVE I
			WHEN Question = "TRUE" THEN LEAVE I

			OTHERWISE DO
				Question = "TRUE"
				J = 0
				DO UNTIL J >= (OriginalStemSize - 1)
					TwinFlag = 1
					J = J + 1
					K = J + 1
					DO L = 1 TO (I - 1) BY 1
						IF SUBSTR(Stem.J, S.L, L.L) = SUBSTR(Stem.K, S.L, L.L) THEN TwinFlag = TwinFlag*1
						ELSE TwinFlag = TwinFlag*0
					END L	/*End "DO L = 1 TO (I - 1) BY 1" Section*/
					IF TwinFlag = 1 THEN DO
						Question = "FALSE"
						FFirstStemNumber = J
						DO UNTIL TwinFlag = 0 | K = OriginalStemSize
							K = K + 1
							DO L = 1 TO (I - 1) BY 1
								IF SUBSTR(Stem.J, S.L, L.L) = SUBSTR(Stem.K, S.L, L.L) THEN TwinFlag = TwinFlag*1
								ELSE TwinFlag = TwinFlag*0
							END L	/*End "DO L = 1 T	O (I - 1) BY 1" Section*/
						END	/*Ends "DO UNTIL TwinFlag = 0 | K = OriginalStemSize" Section*/
						IF TwinFlag = 0 THEN SStemSize = (K - J)
						ELSE SStemSize = (K - J + 1)
						SecondarySortStart = S.I
						SecondarySortLength = L.I
						SecondarySortOrder = O.I
						SecondarySortType = T.I
						SELECT
							WHEN TRANSLATE(LEFT(SecondarySortType, 1)) = "C" | TRANSLATE(LEFT(SecondarySortType, 1)) = "I" THEN MiniStem. = .LSB~CHAR_STEMSORT(Stem., FFirstStemNumber, SStemSize, SecondarySortStart, SecondarySortLength, SecondarySortOrder, SecondarySortType)
							WHEN TRANSLATE(LEFT(SecondarySortType, 1)) = "N" THEN MiniStem. = .LSB~NUM_STEMSORT(Stem., FFirstStemNumber, SStemSize, SecondarySortStart, SecondarySortLength, SecondarySortOrder, SecondarySortType)
							WHEN TRANSLATE(LEFT(SecondarySortType, 1)) = "D" THEN MiniStem. = .LSB~DATE_STEMSORT(Stem., FFirstStemNumber, SStemSize, SecondarySortStart, SecondarySortLength, SecondarySortOrder, SecondarySortType)
							WHEN TRANSLATE(LEFT(SecondarySortType, 1)) = "T" THEN MiniStem. = .LSB~TIME_STEMSORT(Stem., FFirstStemNumber, SStemSize, SecondarySortStart, SecondarySortLength, SecondarySortOrder, SecondarySortType)
							OTHERWISE NOP
						END	/*Ends "SELECT" Section*/
						N = (J - 1)
						DO M = 1 TO MiniStem.0 BY 1
							N = N + 1
							Stem.N = MiniStem.M
						END M	/*Ends "DO M = 1 TO MiniStem.0 BY 1" Section*/
						J = (J + SStemSize - 1)
					END	/*Ends "IF TwinFlag = 1 THEN DO" Section*/
				END	/*Ends "DO UNTIL J >= (OriginalStemSize - 1)" Section*/
			END	/*Ends "OTHERWISE DO" Section*/
		END	/*Ends "SELECT" Section*/
	END I	/*Ends "DO I = 2 TO 10 BY 1" Section*/
	Stem.0 = OriginalStemSize
	RETURN Stem.

::METHOD CHAR_STEMSORT CLASS
	USE ARG InputStem., FirstStemNumber, StemSize, Start, LLength, Order, Type
	DataArray = .MISCELLANEOUS~CREATE_ARRAY_FROM_STEM(InputStem., FirstStemNumber, StemSize)
	SortBucket. = .ASCII256QUEUE~NEW(SortBucket.)
	KeyPosition = Start + LLength
	DO UNTIL KeyPosition = Start
		KeyPosition = KeyPosition - 1
		SELECT
			WHEN TRANSLATE(LEFT(Type, 1)) = "C" THEN RC = .RADIX~QUEUEBUCKET_C_DISTRIBUTE(SortBucket., DataArray, StemSize, KeyPosition)
			WHEN TRANSLATE(LEFT(Type, 1)) = "I" THEN RC = .RADIX~QUEUEBUCKET_I_DISTRIBUTE(SortBucket., DataArray, StemSize, KeyPosition)
			OTHERWISE NOP
		END	/*Ends "SELECT" Section*/
		DataArray = .RADIX~PULL_QUEUE_DATA(SortBucket., 1, 256, DataArray)
	END	/*Ends "DO UNTIL KeyPosition = Start" Section*/
	SortedStem. = .MISCELLANEOUS~STEM_FROM_ARRAY(DataArray, StemSize)
	IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO
		FlippedStem. = .STEM~FLIP(SortedStem., StemSize)
		RETURN FlippedStem.
	END	/*Ends "IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO" Section*/
	ELSE RETURN SortedStem.

::METHOD NUM_STEMSORT CLASS
	USE ARG InputStem., FirstStemNumber, StemSize, Start, LLength, Order, Type
	DataArray = .MISCELLANEOUS~CREATE_ARRAY_FROM_STEM(InputStem., FirstStemNumber, StemSize)
	BucketSize = .NUMBUCKET~SIZEBUCKET(LLength)
	SortBucket. = .NUMBUCKETQUEUE~NEW(SortBucket., BucketSize)
	DO Kount = 1 TO 2 BY 1
		RC = .RADIX~QUEUEBUCKET_N_DISTRIBUTE(SortBucket., BucketSize, DataArray, StemSize, Start, LLength, Kount)
		RC = .RADIX~PULL_QUEUE_DATA(SortBucket., 0, BucketSize, DataArray)
	END	/*Ends "DO Kount = 1 TO 2 BY 1" Section*/
	SortedStem. = .MISCELLANEOUS~STEM_FROM_ARRAY(DataArray, StemSize)
	IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO
		FlippedStem. = .STEM~FLIP(SortedStem., StemSize)
		RETURN FlippedStem.
	END	/*Ends "IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO" Section*/
	ELSE RETURN SortedStem.

::METHOD DATE_STEMSORT CLASS
	USE ARG InputStem., FirstStemNumber, StemSize, Start, LLength, Order, Type
	DataArray = .MISCELLANEOUS~CREATE_ARRAY_FROM_STEM(InputStem., FirstStemNumber, StemSize)
	BucketSize = 1000	/*Based on REXX DATE function returning upto six (6) digits in base format*/
	SortBucket. = .NUMBUCKETQUEUE~NEW(SortBucket., BucketSize)
	DO Kount = 1 TO 2 BY 1
		RC = .RADIX~QUEUEBUCKET_D_DISTRIBUTE(SortBucket., BucketSize, DataArray, StemSize, Start, LLength, Kount)
		RC = .RADIX~PULL_QUEUE_DATA(SortBucket., 0, BucketSize, DataArray)
	END	/*Ends "DO Kount = 1 TO 2 BY 1" Section*/
	SortedStem. = .MISCELLANEOUS~STEM_FROM_ARRAY(DataArray, StemSize)
	IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO
		FlippedStem. = .STEM~FLIP(SortedStem., StemSize)
		RETURN FlippedStem.
	END	/*Ends "IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO" Section*/
	ELSE RETURN SortedStem.

::METHOD TIME_STEMSORT CLASS
	USE ARG InputStem., FirstStemNumber, StemSize, Start, LLength, Order, Type
	DataArray = .MISCELLANEOUS~CREATE_ARRAY_FROM_STEM(InputStem., FirstStemNumber, StemSize)
	BucketSize = 100	/*Based on REXX TIME function returning upto four (4) digits in minute format*/
	SortBucket. = .NUMBUCKETQUEUE~NEW(SortBucket., BucketSize)
	DO Kount = 1 TO 2 BY 1
		RC = .RADIX~QUEUEBUCKET_T_DISTRIBUTE(SortBucket., BucketSize, DataArray, StemSize, Start, LLength, Kount)
		RC = .RADIX~PULL_QUEUE_DATA(SortBucket., 0, BucketSize, DataArray)
	END	/*Ends "DO Kount = 1 TO 2 BY 1" Section*/
	SortedStem. = .MISCELLANEOUS~STEM_FROM_ARRAY(DataArray, StemSize)
	IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO
		FlippedStem. = .STEM~FLIP(SortedStem., StemSize)
		RETURN FlippedStem.
	END	/*Ends "IF TRANSLATE(LEFT(Order, 1)) = "D" THEN DO" Section*/
	ELSE RETURN SortedStem.





::CLASS STEM  PUBLIC
::METHOD FLIP CLASS
	USE ARG InputStem., InputStemSize
	OutputStem. = .STEM~NEW
	DO I = 1 TO InputStemSize BY 1
		J = (InputStemSize + 1 - I)
		OutputStem.J = InputStem.I
	END I	/*Ends "DO I = 1 TO InputStemSize BY 1" Section*/
	OutputStem.0 = InputStemSize
	RETURN OutputStem.
/*End methods required to run a LBS Radix sort routine in REXX*/









::CLASS DUMMY
::METHOD DUMMY CLASS