17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 1 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 c====================================================================== 0002 c Search Dictionary(s) for A Word 0003 c 0004 LOGICAL*4 FUNCTION SPELL_CHECK_WORD (WORD_STR, 0005 x COMMON_FLAG, 0006 x PROJECT_FLAG, 0007 x USER_FLAG) 0008 c 0009 c This routine look in one or more dictionaries for a word. 0010 c It return TRUE if it finds it and FALSE if not. 0011 c 0012 c Parameter Description 0013 c 0014 c WORD_STR word to be checked 0015 c COMMON_FLAG flag indicating use the common dictionary 0016 c PROJECT_FLAG flag indicating use the project dictionary 0017 c USER_FLAG flag indicating use the user dictionary 0018 c 0019 c====================================================================== 0020 0021 implicit none 0022 0023 include 'spell_include' 0074 0075 character*(*) word_str 0076 integer*4 i,l 0077 logical*4 common_flag 0078 logical*4 project_flag 0079 logical*4 user_flag 0080 logical*4 search_common_dictionary 0081 logical*4 search_project_dictionary 0082 logical*4 search_user_dictionary 0083 byte word(word_size) 0084 0085 0086 c test word length for dictionary maximum 0087 0088 l = len(word_str) 0089 0090 if (l.gt.word_size-1) then 0091 spell_check_word = .FALSE. 0092 return 0093 end if 0094 0095 c convert word to internal string format and to lowercase 0096 0097 word(1) = l 0098 0099 do i = 2,l+1 0100 word(i) = ichar(word_str(i-1:1)) 0101 if ((word(i).ge.'A').and.(word(i).le.'Z')) 0102 x word(i) = word(i) + 32 0103 end do 0104 0105 c lookup word in dictionary(s) 0106 0107 spell_check_word = .TRUE. SPELL_CHECK_WORD 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 2 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0108 0109 if (user_flag) then 0110 if (search_user_dictionary(word)) return 0111 end if 0112 0113 if (project_flag) then 0114 if (search_project_dictionary(word)) return 0115 end if 0116 0117 if (common_flag) then 0118 if (search_common_dictionary(word)) return 0119 end if 0120 0121 spell_check_word = .FALSE. 0122 0123 return 0124 end PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 155 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 68 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100651 ENTRY POINTS Address Type Name 0-00000000 L*4 SPELL_CHECK_WORD VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT AP-00000008@ L*4 COMMON_FLAG 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 I ** I*4 L 3-00000B00 I*4 PROJECT_BUF_LIMIT AP-0000000C@ L*4 PROJECT_FLAG 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT AP-00000010@ L*4 USER_FLAG 3-00000004 I*4 USER_PTR_LIMIT AP-00000004@ CHAR WORD_STR SPELL_CHECK_WORD 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 3 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) 2-00000000 L*1 WORD 32 (32) FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name Type Name L*4 SEARCH_COMMON_DICTIONARY L*4 SEARCH_PROJECT_DICTIONARY L*4 SEARCH_USER_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 4 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c====================================================================== 0004 c LOAD THE COMMON DICTIONARY 0005 c 0006 INTEGER*4 FUNCTION LOAD_COMMON_DICTIONARY 0007 c 0008 c This routine loads internal data structure(s) with the 0009 c the common dictionary index and opens the common dictionary 0010 c file for read. An error status code is returned. 0011 c 0012 c Returned Description 0013 c Status 0014 c 0015 c 0 Error opening common dictionary 0016 c 1 Common dictionary available 0017 c 0018 c====================================================================== 0019 0020 implicit none 0021 0022 include 'spell_include' 0073 0074 0075 c set error return value 0076 0077 load_common_dictionary = 0 0078 0079 c read common dictionary index 0080 0081 c open (unit=8,file='COMMON_DICTIONARY:COMMON.INDEX',err=10, 0082 c x READONLY,form='UNFORMATTED',recordtype='SEGMENTED', 0083 c x status='OLD') 0084 open (unit=8, file='COMMON$DICTIONARY:COMMON.INDEX', err=10, 0085 x READONLY, form='UNFORMATTED', recordtype='SEGMENTED', 0086 x status='OLD') 0087 read (unit=8,err=10) common_ptr_limit,common_buf_limit, 0088 x file_ptr,common_ptr,common_buf 0089 close(unit=8) 0090 0091 c open common dictionary file 0092 0093 c open (unit=8,file='COMMON_DICTIONARY:COMMON.DICT',err=10, 0094 c x READONLY,access='DIRECT',organization='RELATIVE', 0095 c x form='UNFORMATTED',status='OLD') 0096 open (unit=8, file='COMMON$DICTIONARY:COMMON.DICT', err=10, 0097 x READONLY, access='DIRECT', organization='RELATIVE', 0098 x form='UNFORMATTED', status='OLD') 0099 0100 load_common_dictionary = 1 0101 0102 return 0103 0104 10 close (unit=8) 0105 return 0106 end LOAD_COMMON_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 5 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 132 PIC CON REL LCL SHR EXE RD NOWRT QUAD 1 $PDATA 61 PIC CON REL LCL SHR NOEXE RD NOWRT QUAD 2 $LOCAL 168 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100789 ENTRY POINTS Address Type Name 0-00000000 I*4 LOAD_COMMON_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) LABELS Address Label 0-00000078 10 FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name FOR$CLOSE FOR$OPEN 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 6 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c====================================================================== 0004 c LOAD PROJECT DICTIONARY 0005 c 0006 INTEGER*4 FUNCTION LOAD_PROJECT_DICTIONARY 0007 c 0008 c This routine loads internal data structure(s) with the project 0009 c dictionary. An error status code is returned. 0010 c 0011 c Returned Description 0012 c Status 0013 c 0014 c 0 Error opening project dictionary 0015 c 1 Project dictionaries available 0016 c 0017 c====================================================================== 0018 0019 implicit none 0020 0021 include 'spell_include' 0072 0073 0074 c set error return value 0075 0076 load_project_dictionary = 0 0077 0078 c load project dictionary 0079 0080 c open (unit=9,file='PROJECT_DICTIONARY:PROJECT.DICT',err=10, 0081 c x READONLY,form='UNFORMATTED',recordtype='SEGMENTED', 0082 c x status='OLD') 0083 open (unit=9, file='PROJECT$DICTIONARY:PROJECT.DICT', err=10, 0084 x READONLY, form='UNFORMATTED', recordtype='SEGMENTED', 0085 x status='OLD') 0086 read (unit=9,err=10) project_ptr_limit,project_buf_limit, 0087 x project_ptr,project_buf 0088 0089 load_project_dictionary = 1 0090 close (unit=9) 0091 return 0092 0093 10 close (unit=9) 0094 return 0095 end LOAD_PROJECT_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 7 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 115 PIC CON REL LCL SHR EXE RD NOWRT QUAD 1 $PDATA 32 PIC CON REL LCL SHR NOEXE RD NOWRT QUAD 2 $LOCAL 100 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100675 ENTRY POINTS Address Type Name 0-00000000 I*4 LOAD_PROJECT_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) LABELS Address Label 0-00000068 10 FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name FOR$CLOSE FOR$OPEN 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 8 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c====================================================================== 0004 c LOAD USER DICTIONARY 0005 c 0006 INTEGER*4 FUNCTION LOAD_USER_DICTIONARY 0007 c 0008 c This routine loads internal data structure(s) with the user 0009 c dictionary. An error status code is returned. 0010 c 0011 c Returned Description 0012 c Status 0013 c 0014 c 0 Error opening user dictionary 0015 c 1 User dictionaries available 0016 c 0017 c====================================================================== 0018 0019 implicit none 0020 0021 include 'spell_include' 0072 0073 0074 c set error return value 0075 0076 load_user_dictionary = 0 0077 0078 c load user dictionary 0079 0080 c open (unit=9,file='USER_DICTIONARY:USER.DICT',err=10, 0081 c x READONLY,form='UNFORMATTED',recordtype='SEGMENTED', 0082 c x status='OLD') 0083 open (unit=9, file='USER$DICTIONARY:USER.DICT', err=10, 0084 x READONLY, form='UNFORMATTED', recordtype='SEGMENTED', 0085 x status='UNKNOWN') 0086 read (unit=9,err=10) user_ptr_limit,user_buf_limit, 0087 x user_ptr,user_buf 0088 0089 load_user_dictionary = 1 0090 close (unit=9) 0091 return 0092 0093 10 close (unit=9) 0094 return 0095 end LOAD_USER_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 9 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 115 PIC CON REL LCL SHR EXE RD NOWRT QUAD 1 $PDATA 26 PIC CON REL LCL SHR NOEXE RD NOWRT QUAD 2 $LOCAL 100 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100669 ENTRY POINTS Address Type Name 0-00000000 I*4 LOAD_USER_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) LABELS Address Label 0-00000068 10 FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name FOR$CLOSE FOR$OPEN 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 10 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Search The Common Dictionary Index For A Words Dictionary File 0005 c Pointer 0006 c 0007 INTEGER*4 FUNCTION SEARCH_COMMON_DICT_INDEX (WORD,START,END) 0008 c 0009 c Description 0010 c 0011 c Using a binary search locate a word in the common dictionary 0012 c index data structure(s). If it is equal to the index word return 0013 c zero (0) otherwise return the (non-zero) record pointer of the 0014 c index word immediately less than the word being tested. The test 0015 c word is assumed to be in uppercase. 0016 c 0017 c Parameter Description 0018 c 0019 c WORD Word to look up in common dictionary index 0020 c START Start of index search area 0021 c END End of index search area 0022 c 0023 c======================================================================== 0024 0025 implicit none 0026 0027 include 'spell_include' 0078 0079 byte word(1) 0080 integer*4 i,j,first,last,start,end 0081 logical compare_words 0082 0083 0084 search_common_dict_index = 0 0085 0086 if (word(1).le.0) return 0087 0088 i = compare_words(word,common_buf(common_ptr(start))) 0089 if (i.le.0) then 0090 if (i.lt.0) search_common_dict_index = start 0091 return 0092 endif 0093 0094 i = compare_words(word,common_buf(common_ptr(end))) 0095 if (i.ge.0) then 0096 if (i.eq.0) search_common_dict_index = end 0097 return 0098 end if 0099 0100 first = start 0101 last = end 0102 0103 do while (last-first.gt.1) 0104 0105 i = (last+first)/2 0106 0107 j = compare_words(word,common_buf(common_ptr(i))) SEARCH_COMMON_DICT_INDEX 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 11 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0108 0109 if (j.eq.0) then 0110 return 0111 else if (j.gt.0) then 0112 first = i 0113 else 0114 last = i 0115 end if 0116 0117 end do 0118 0119 search_common_dict_index = file_ptr(first) 0120 0121 return 0122 end PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 233 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 60 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100721 ENTRY POINTS Address Type Name 0-00000000 I*4 SEARCH_COMMON_DICT_INDEX VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG AP-0000000C@ I*4 END ** I*4 FIRST ** I*4 I ** I*4 J ** I*4 LAST 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT AP-00000008@ I*4 START 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) SEARCH_COMMON_DICT_INDEX 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 12 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) AP-00000004@ L*1 WORD 1 (1) FUNCTIONS AND SUBROUTINES REFERENCED Type Name L*4 COMPARE_WORDS 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 13 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Search The Common Dictionary For A Word 0005 c 0006 LOGICAL FUNCTION SEARCH_COMMON_DICTIONARY (WORD) 0007 c 0008 c Description 0009 c 0010 c Search the common dictionary for a word. Look in the index for 0011 c the word or the file record number of the index word less than 0012 c the specified word. If the word is not in the index, search the 0013 c dictionary file starting with the index word plus one. Return 0014 c TRUE if the word is found and FALSE if not. 0015 c 0016 c Parameter Description 0017 c 0018 c WORD Word to look up in the common dictionary 0019 c 0020 c======================================================================== 0021 0022 implicit none 0023 0024 include 'spell_include' 0075 0076 byte word(1),dict_word(word_size) 0077 integer*4 idx,status,compare_words 0078 logical search_common_dict_index 0079 0080 0081 c set initial value 0082 0083 search_common_dictionary = .TRUE. 0084 0085 c do binary search of dictionary index 0086 0087 idx = search_common_dict_index(word,1,common_ptr_limit) 0088 0089 if (idx.eq.0) return 0090 0091 c do sequential search of dictionary file starting at idx + 1 0092 0093 10 idx = idx + 1 0094 0095 read(unit=8,rec=idx,err=20) dict_word 0096 0097 status = compare_words(word,dict_word) 0098 0099 if (status.eq.0) return 0100 0101 if (status.gt.0) goto 10 0102 0103 20 search_common_dictionary = .FALSE. 0104 0105 return 0106 end SEARCH_COMMON_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 14 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 111 PIC CON REL LCL SHR EXE RD NOWRT QUAD 1 $PDATA 4 PIC CON REL LCL SHR NOEXE RD NOWRT QUAD 2 $LOCAL 100 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100643 ENTRY POINTS Address Type Name 0-00000000 L*4 SEARCH_COMMON_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 IDX 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT ** I*4 STATUS 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 2-00000000 L*1 DICT_WORD 32 (32) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) AP-00000004@ L*1 WORD 1 (1) LABELS Address Label Address Label 0-00000030 10 0-0000006C 20 SEARCH_COMMON_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 15 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name I*4 COMPARE_WORDS L*4 SEARCH_COMMON_DICT_INDEX 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 16 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Search Project Dictionary For A Word 0005 c 0006 LOGICAL FUNCTION SEARCH_PROJECT_DICTIONARY (WORD) 0007 c 0008 c Description 0009 c 0010 c Search the project dictionary for a word. If the word is in the 0011 c project dictionary return TRUE. Return FALSE if it is not. 0012 c 0013 c Parameter Description 0014 c 0015 c WORD Word to look up in the users dictionary 0016 c 0017 c======================================================================== 0018 0019 implicit none 0020 0021 include 'spell_include' 0072 0073 byte word(1),dict_word(word_size) 0074 integer*4 compare_words 0075 integer*4 i,j,first,last 0076 0077 0078 c initilize and test 0079 0080 search_project_dictionary = .FALSE. 0081 0082 if (word(1).le.0) return 0083 0084 if (project_ptr_limit.le.0) return 0085 0086 i = compare_words(word,project_buf(project_ptr(1))) 0087 if (i.le.0) then 0088 if (i.eq.0) search_project_dictionary = .TRUE. 0089 return 0090 end if 0091 0092 if (project_ptr_limit.eq.1) return 0093 0094 i = compare_words(word, 0095 x project_buf(project_ptr(project_ptr_limit))) 0096 if (i.ge.0) then 0097 if (i.eq.0) search_project_dictionary = .TRUE. 0098 return 0099 end if 0100 0101 if (project_ptr_limit.lt.3) return 0102 0103 first = 1 0104 last = project_ptr_limit 0105 0106 do while (last-first.gt.1) 0107 SEARCH_PROJECT_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 17 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0108 i = (last+first)/2 0109 0110 j = compare_words(word,project_buf(project_ptr(i))) 0111 0112 if (j.eq.0) then 0113 search_project_dictionary = .TRUE. 0114 return 0115 else if (j.gt.0) then 0116 first = i 0117 else 0118 last = i 0119 end if 0120 0121 end do 0122 0123 return 0124 end PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 247 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 92 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100767 ENTRY POINTS Address Type Name 0-00000000 L*4 SEARCH_PROJECT_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 FIRST ** I*4 I ** I*4 J ** I*4 LAST 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT SEARCH_PROJECT_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 18 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 2-00000000 L*1 DICT_WORD 32 (32) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) AP-00000004@ L*1 WORD 1 (1) FUNCTIONS AND SUBROUTINES REFERENCED Type Name I*4 COMPARE_WORDS 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 19 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 0004 0005 c======================================================================== 0006 c Search User Dictionary For A Word 0007 c 0008 LOGICAL FUNCTION SEARCH_USER_DICTIONARY (WORD) 0009 c 0010 c Description 0011 c 0012 c Search the users dictionary for a word. If the word is in the 0013 c user dictionary return TRUE. Return FALSE if it is not. 0014 c 0015 c Parameter Description 0016 c 0017 c WORD Word to look up in the users dictionary 0018 c 0019 c======================================================================== 0020 0021 implicit none 0022 0023 include 'spell_include' 0074 0075 byte word(1),dict_word(word_size) 0076 integer*4 compare_words 0077 integer*4 i,j,first,last 0078 0079 0080 c initilize and test 0081 0082 search_user_dictionary = .FALSE. 0083 0084 if (word(1).le.0) return 0085 0086 if (user_ptr_limit.le.0) return 0087 0088 i= compare_words(word,user_buf(user_ptr(1))) 0089 if (i.le.0) then 0090 if (i.eq.0) search_user_dictionary = .TRUE. 0091 return 0092 end if 0093 0094 if (user_ptr_limit.eq.1) return 0095 0096 i = compare_words(word,user_buf(user_ptr(user_ptr_limit))) 0097 if (i.ge.0) then 0098 if (i.eq.0) search_user_dictionary = .TRUE. 0099 return 0100 end if 0101 0102 if (user_ptr_limit.lt.3) return 0103 0104 first = 1 0105 last = user_ptr_limit 0106 0107 do while (last-first.gt.1) SEARCH_USER_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 20 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0108 0109 i = (last+first)/2 0110 0111 j = compare_words(word,user_buf(user_ptr(i))) 0112 0113 if (j.eq.0) then 0114 search_user_dictionary = .TRUE. 0115 return 0116 else if (j.gt.0) then 0117 first = i 0118 else 0119 last = i 0120 end if 0121 0122 end do 0123 0124 return 0125 end PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 243 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 92 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100763 ENTRY POINTS Address Type Name 0-00000000 L*4 SEARCH_USER_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 FIRST ** I*4 I ** I*4 J ** I*4 LAST 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT SEARCH_USER_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 21 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 2-00000000 L*1 DICT_WORD 32 (32) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) AP-00000004@ L*1 WORD 1 (1) FUNCTIONS AND SUBROUTINES REFERENCED Type Name I*4 COMPARE_WORDS 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 22 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Compare Two Words and Return The Results 0005 c 0006 INTEGER*4 FUNCTION COMPARE_WORDS (WORD1,WORD2) 0007 c 0008 c Description 0009 c 0010 c Compare a two words words. Return zero (0) if the words match. 0011 c Return minus one (-1) if WORD1 is less than (lexical comparison) 0012 c WORD2 and plus one (+1) if it is greated. The words are assumed 0013 c to be the same case. 0014 c 0015 c Parameter Description 0016 c 0017 c WORD1 Word to test 0018 c WORD2 Word to be tested against 0019 c 0020 c======================================================================== 0021 0022 implicit none 0023 0024 include 'spell_include' 0075 0076 byte word1(1),word2(2) 0077 integer*4 i,j,k,lword1,lword2 0078 0079 c get word lengths 0080 0081 lword1 = word1(1) 0082 lword2 = word2(1) 0083 0084 0085 c lexically compare the words 0086 0087 do i = 2,min(lword1,lword2)+1 0088 if (word1(i).ne.word2(i)) then 0089 if (word1(i).gt.word2(i)) then 0090 COMPARE_WORDS = 1 0091 else 0092 COMPARE_WORDS = -1 0093 end if 0094 return 0095 end if 0096 end do 0097 0098 if (lword1.eq.lword2) then 0099 COMPARE_WORDS = 0 0100 else if (lword1.gt.lword2) then 0101 COMPARE_WORDS = 1 0102 else 0103 COMPARE_WORDS = -1 0104 end if 0105 0106 return 0107 end COMPARE_WORDS 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 23 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 157 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 48 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100633 ENTRY POINTS Address Type Name 0-00000000 I*4 COMPARE_WORDS VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 I ** I*4 J ** I*4 K ** I*4 LWORD1 ** I*4 LWORD2 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) AP-00000004@ L*1 WORD1 1 (1) AP-00000008@ L*1 WORD2 2 (2) 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 24 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================= 0004 c INITILIZE USER DICTIONARY DATA STRUCTURE(S) 0005 c 0006 INTEGER*4 FUNCTION INIT_USER_DICTIONARY 0007 c 0008 c This routine initializes the internal data strucuture(s) that 0009 c hold the user defined dictionary. It empties the data 0010 c structure(s). An error status is returned. 0011 c 0012 c Returned 0013 c Status Descriton 0014 c 0015 c 1 Sucessful completion 0016 c 0017 c======================================================================= 0018 0019 implicit none 0020 0021 include 'spell_include' 0072 0073 integer*4 i 0074 0075 0076 c initilize things 0077 0078 do i = 1,user_buf_array_size 0079 user_buf(i) = ' ' 0080 end do 0081 0082 do i = 1,user_ptr_array_size 0083 user_ptr(i) = 0 0084 end do 0085 0086 user_ptr_limit = 0 0087 user_buf_limit = 0 0088 0089 init_user_dictionary = 1 0090 0091 return 0092 end INIT_USER_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 25 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 59 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 4 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100491 ENTRY POINTS Address Type Name 0-00000000 I*4 INIT_USER_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 I 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 26 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================= 0004 c WRITE USER DICTIONARY DATA STRUCTURES(S) TO A DISK FILE 0005 c 0006 INTEGER*4 FUNCTION SAVE_USER_DICTIONARY 0007 c 0008 c This routine write the user dictionary stored in internal data 0009 c structure(s) to a disk file. An error status code is 0010 c returned. 0011 c 0012 c Returned 0013 c Status Descriton 0014 c 0015 c 1 Sucessful completion 0016 c 2 Error opening disk file 0017 c 3 Error writing disk file 0018 c 0019 c======================================================================= 0020 0021 implicit none 0022 0023 include 'spell_include' 0074 0075 c open (unit=10,file='USER_DICTIONARY:USER.DICT', 0076 c x form='UNFORMATTED',recordtype='SEGMENTED', 0077 c x status='UNKNOWN',err=100) 0078 open (unit=10, file='USER$DICTIONARY:USER.DICT', 0079 x form='UNFORMATTED', recordtype='SEGMENTED', 0080 x status='UNKNOWN', err=100) 0081 write (unit=10,err=110) user_ptr_limit,user_buf_limit, 0082 x user_ptr,user_buf 0083 close (unit=10) 0084 0085 save_user_dictionary = 1 0086 return 0087 0088 100 save_user_dictionary = 2 0089 return 0090 0091 110 close (unit=10) 0092 save_user_dictionary = 3 0093 return 0094 0095 end SAVE_USER_DICTIONARY 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 27 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 112 PIC CON REL LCL SHR EXE RD NOWRT QUAD 1 $PDATA 26 PIC CON REL LCL SHR NOEXE RD NOWRT QUAD 2 $LOCAL 96 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100662 ENTRY POINTS Address Type Name 0-00000000 I*4 SAVE_USER_DICTIONARY VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) LABELS Address Label Address Label 0-0000006C 100 0-00000060 110 FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name FOR$CLOSE FOR$OPEN 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 28 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================= 0004 c INSERT WORD INTO USER DICTIONARY DATA STRUCTURE(S) 0005 c 0006 INTEGER*4 FUNCTION INSERT_WORD_INTO_USER_DICT (STRING) 0007 c 0008 c This routine inserts a word into the user dictionary stored in 0009 c internal data structure(s). An error status code is returned. 0010 c 0011 c Parameter Description 0012 c 0013 c STRING Word to be inserted into user dictionary 0014 c 0015 c Returned 0016 c Status Descriton 0017 c 0018 c 1 Sucessful completion 0019 c 2 Word exceeds dictionary word size 0020 c 3 Word buffer overflow 0021 c 4 Maximum word count exceeded 0022 c 0023 c======================================================================= 0024 0025 implicit none 0026 0027 include 'spell_include' 0078 0079 character*(*) string 0080 integer*4 i,j,k,str_len 0081 integer*4 compare_words 0082 byte word(word_size) 0083 0084 0085 c test minimum word length 0086 0087 str_len = len(string) 0088 0089 if (str_len.eq.0) then 0090 insert_word_into_user_dict = 1 0091 return 0092 end if 0093 0094 c test maximum word length 0095 0096 if (str_len.ge.word_size) then 0097 insert_word_into_user_dict = 2 0098 return 0099 end if 0100 0101 c test for word buffer overflow 0102 0103 if ((user_buf_limit+str_len+1).gt.user_buf_array_size) then 0104 insert_word_into_user_dict = 3 0105 return 0106 end if 0107 INSERT_WORD_INTO_USER_DICT 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 29 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0108 c test maximum word count 0109 0110 if (user_ptr_limit.ge.user_ptr_array_size) then 0111 insert_word_into_user_dict = 4 0112 return 0113 end if 0114 0115 c copy string into word byte buffer and convert it to lowercase 0116 0117 word(1) = str_len 0118 0119 i = 2 0120 do j = 1,str_len 0121 word(i) = ichar(string(j:j)) 0122 if ((word(i).ge.'A').and.(word(i).le.'Z')) 0123 x word(i) = word(i) + 32 0124 i = i + 1 0125 end do 0126 0127 c insert word pointer into uesr dictionary word pointer buffer 0128 c in sort order 0129 0130 if (user_ptr_limit.eq.0) then ! first word 0131 user_ptr_limit = user_ptr_limit + 1 0132 user_ptr(user_ptr_limit) = user_buf_limit + 1 0133 else 0134 do i = 1,user_ptr_limit 0135 j = compare_words(word,user_buf(user_ptr(i))) 0136 if (j.eq.0) then 0137 insert_word_into_user_dict = 1 0138 return 0139 else if (j.lt.0) then 0140 do k = user_ptr_limit,i,-1 0141 user_ptr(k+1) = user_ptr(k) 0142 end do 0143 user_ptr_limit = user_ptr_limit + 1 ! in middle 0144 user_ptr(i) = user_buf_limit + 1 0145 goto 10 0146 endif 0147 end do 0148 user_ptr_limit = user_ptr_limit + 1 ! last word 0149 user_ptr(user_ptr_limit) = user_buf_limit + 1 0150 end if 0151 0152 c insert word into dictionary word buffer 0153 0154 10 do i = 1,str_len+1 0155 user_buf_limit = user_buf_limit + 1 0156 user_buf(user_buf_limit) = word(i) 0157 end do 0158 0159 20 insert_word_into_user_dict = 1 0160 0161 return 0162 end INSERT_WORD_INTO_USER_DICT 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 30 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 317 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 64 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100809 ENTRY POINTS Address Type Name 0-00000000 I*4 INSERT_WORD_INTO_USER_DICT VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 I ** I*4 J ** I*4 K 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT AP-00000004@ CHAR STRING ** I*4 STR_LEN 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) 2-00000000 L*1 WORD 32 (32) LABELS Address Label Address Label 0-0000011A 10 ** 20 INSERT_WORD_INTO_USER_DICT 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 31 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 FUNCTIONS AND SUBROUTINES REFERENCED Type Name I*4 COMPARE_WORDS 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 32 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================= 0004 c RETURN A WORD FROM THE USER DICTIONARY 0005 c 0006 INTEGER*4 FUNCTION RETURN_USER_DICT_WORD (INDEX,DESC) 0007 c 0008 c This routine returns a word from the user dictionary. A 0009 c VAX/VMS dynamic string descriptor is used and the word 0010 c returned through it. An index value determines which word is 0011 c returned. An error status code is returned. 0012 c 0013 c Parameter Description 0014 c 0015 c INDEX index of the word to be returned 0016 c DESC VAX/VMS dynamic string descriptor of returned word 0017 c 0018 c Returned 0019 c Status Descriton 0020 c 0021 c 0 No word to return 0022 c 1 Sucessful completion 0023 c 0024 c======================================================================= 0025 0026 implicit none 0027 0028 include 'spell_include' 0079 0080 integer*4 i,index,desc,len,status,str$copy_r 0081 0082 c test if the word exists 0083 0084 return_user_dict_word = 0 0085 0086 if ((index.ge.1).and.(index.le.user_ptr_limit)) then 0087 0088 len = user_buf(user_ptr(index)) 0089 0090 status = str$copy_r(desc,len,user_buf(user_ptr(index)+1)) 0091 0092 if (status) return_user_dict_word = 1 0093 0094 end if 0095 0096 return 0097 end RETURN_USER_DICT_WORD 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 33 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 81 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 24 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100533 ENTRY POINTS Address Type Name 0-00000000 I*4 RETURN_USER_DICT_WORD VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG AP-00000008@ I*4 DESC ** I*4 I AP-00000004@ I*4 INDEX 2-00000004 I*4 LEN 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT ** I*4 STATUS 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) FUNCTIONS AND SUBROUTINES REFERENCED Type Name I*4 STR$COPY_R 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 34 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================= 0004 c INSERT WORD INTO PROJECT DICTIONARY DATA STRUCTURE(S) 0005 c 0006 INTEGER*4 FUNCTION INSERT_WORD_INTO_PROJECT_DICT (STRING) 0007 c 0008 c This routine inserts a word into the project dictionary 0009 c stored in internal data structure(s). An error status code is 0010 c returned. 0011 c 0012 c Parameter Description 0013 c 0014 c STRING Word to be inserted into user dictionary 0015 c 0016 c Returned 0017 c Status Descriton 0018 c 0019 c 1 Sucessful completion 0020 c 2 Word exceeds dictionary word size 0021 c 3 Word buffer overflow 0022 c 4 Maximum word count exceeded 0023 c 0024 c======================================================================= 0025 0026 implicit none 0027 0028 include 'spell_include' 0079 0080 character*(*) string 0081 integer*4 i,j,k,str_len 0082 integer*4 compare_words 0083 byte word(word_size) 0084 0085 0086 c test minimum word length 0087 0088 str_len = len(string) 0089 0090 if (str_len.eq.0) then 0091 insert_word_into_project_dict = 1 0092 return 0093 end if 0094 0095 c test maximum word length 0096 0097 if (str_len.ge.word_size) then 0098 insert_word_into_project_dict = 2 0099 return 0100 end if 0101 0102 c test for word buffer overflow 0103 0104 if ((project_buf_limit+str_len+1).gt. 0105 x project_buf_array_size) then 0106 insert_word_into_project_dict = 3 0107 return INSERT_WORD_INTO_PROJECT_DICT 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 35 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0108 end if 0109 0110 c test maximum word count 0111 0112 if (project_ptr_limit.ge.project_ptr_array_size) then 0113 insert_word_into_project_dict = 4 0114 return 0115 end if 0116 0117 c copy string into word byte buffer and convert it to lowercase 0118 0119 word(1) = str_len 0120 0121 i = 2 0122 do j = 1,str_len 0123 word(i) = ichar(string(j:j)) 0124 if ((word(i).ge.'A').and.(word(i).le.'Z')) 0125 x word(i) = word(i) + 32 0126 i = i + 1 0127 end do 0128 0129 c insert word pointer into uesr dictionary word pointer buffer 0130 c in sort order 0131 0132 if (project_ptr_limit.eq.0) then ! first word 0133 project_ptr_limit = project_ptr_limit + 1 0134 project_ptr(project_ptr_limit) = project_buf_limit + 1 0135 else 0136 do i = 1,project_ptr_limit 0137 j = compare_words(word,project_buf(project_ptr(i))) 0138 if (j.eq.0) then 0139 insert_word_into_project_dict = 1 0140 return 0141 else if (j.lt.0) then 0142 do k = project_ptr_limit,i,-1 0143 project_ptr(k+1) = project_ptr(k) 0144 end do 0145 project_ptr_limit = project_ptr_limit + 1 ! in middle 0146 project_ptr(i) = project_buf_limit + 1 0147 goto 10 0148 endif 0149 end do 0150 project_ptr_limit = project_ptr_limit + 1 ! last word 0151 project_ptr(project_ptr_limit) = project_buf_limit + 1 0152 end if 0153 0154 c insert word into dictionary word buffer 0155 0156 10 do i = 1,str_len+1 0157 project_buf_limit = project_buf_limit + 1 0158 project_buf(project_buf_limit) = word(i) 0159 end do 0160 0161 20 insert_word_into_project_dict = 1 0162 0163 return 0164 end INSERT_WORD_INTO_PROJECT_DICT 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 36 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 335 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 64 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 100827 ENTRY POINTS Address Type Name 0-00000000 I*4 INSERT_WORD_INTO_PROJECT_DICT VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** I*4 I ** I*4 J ** I*4 K 3-00000B00 I*4 PROJECT_BUF_LIMIT 3-00000AFC I*4 PROJECT_PTR_LIMIT AP-00000004@ CHAR STRING ** I*4 STR_LEN 3-00000008 I*4 USER_BUF_LIMIT 3-00000004 I*4 USER_PTR_LIMIT ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) 2-00000000 L*1 WORD 32 (32) LABELS Address Label Address Label 0-0000012A 10 ** 20 INSERT_WORD_INTO_PROJECT_DICT 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 37 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 FUNCTIONS AND SUBROUTINES REFERENCED Type Name I*4 COMPARE_WORDS 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 38 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Get The Command Line Parameter 0005 c 0006 LOGICAL FUNCTION GET_COMMAND_LINE_PARAMETER (LENGTH,PARAM) 0007 c 0008 c Description 0009 c 0010 c If the program is a VMS foreign command, extract the parameter(s) 0011 c (if any) and return the parameter as a string. A status of TRUE 0012 c is returned if a parameter was found. A status of FALSE is 0013 c returned if none was found. 0014 c 0015 c Parameter Description 0016 c 0017 c LENGTH length of returned string 0018 c PARAM Returned parameter string 0019 c 0020 c======================================================================== 0021 0022 implicit none 0023 0024 character*80 cmdline 0025 character*(*) param 0026 integer*4 length,first,last 0027 integer*4 sys_status,cmdlength,lib$get_foreign 0028 logical locate_parameter 0029 0030 0031 c initilize things 0032 0033 length = 0 0034 0035 get_command_line_parameter = .FALSE. 0036 0037 c get command line (if any) 0038 0039 sys_status = lib$get_foreign(cmdline,,cmdlength,) 0040 0041 if (.NOT. sys_status) return 0042 0043 c get first parameter (if any) 0044 0045 first = 1 0046 0047 if (.NOT. locate_parameter(cmdline,first,last)) return 0048 0049 get_command_line_parameter = .TRUE. 0050 0051 length = last - first + 1 0052 0053 param = cmdline(first:last) 0054 0055 return 0056 end GET_COMMAND_LINE_PARAMETER 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 39 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 101 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 148 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD Total Space Allocated 249 ENTRY POINTS Address Type Name 0-00000000 L*4 GET_COMMAND_LINE_PARAMETER VARIABLES Address Type Name Address Type Name Address Type Name Address Type Name 2-0000005C I*4 CMDLENGTH 2-00000000 CHAR CMDLINE 2-00000054 I*4 FIRST 2-00000058 I*4 LAST AP-00000004@ I*4 LENGTH AP-00000008@ CHAR PARAM ** I*4 SYS_STATUS FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name I*4 LIB$GET_FOREIGN L*4 LOCATE_PARAMETER 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 40 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Locate A Parameter Within A String 0005 c 0006 LOGICAL FUNCTION LOCATE_PARAMETER (STRING,FIRST,LAST) 0007 c 0008 c Description 0009 c 0010 c This function returns TRUE if a parameter is found and FALSE if 0011 c not. The location within the string of the first and last 0012 c A parameter is a series of contiguous non-blank characters 0013 c demimited by blank(s). 0014 c 0015 c Parameter Description 0016 c 0017 c STRING String to be searched 0018 c FIRST Starting location for search and the location of the 0019 c first nonblank character of parameter 0020 c LAST Location of the last nonblank character of parameter 0021 c 0022 c======================================================================== 0023 0024 implicit none 0025 0026 character*(*) string 0027 integer*4 first,last 0028 integer*4 i,j,l 0029 0030 0031 locate_parameter = .FALSE. ! set initial return value 0032 0033 l = len(string) ! get string length 0034 0035 if (first.gt.l) return ! test end of string 0036 0037 do i = first,l ! locate first non-blank char 0038 if (string(i:i).ne.' ') goto 10 0039 end do 0040 first = i 0041 return 0042 0043 10 do j = i,l ! locate last non-blank char 0044 if (string(j:j).eq.' ') goto 20 0045 end do 0046 0047 20 first = i ! set return value(s) 0048 last = j - 1 0049 locate_parameter = .TRUE. 0050 0051 return 0052 end LOCATE_PARAMETER 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 41 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 119 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 20 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD Total Space Allocated 139 ENTRY POINTS Address Type Name 0-00000000 L*4 LOCATE_PARAMETER VARIABLES Address Type Name Address Type Name Address Type Name Address Type Name AP-00000008@ I*4 FIRST ** I*4 I ** I*4 J ** I*4 L AP-0000000C@ I*4 LAST AP-00000004@ CHAR STRING LABELS Address Label Address Label 0-0000004C 10 0-00000063 20 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 42 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Locate A Word of Alpha Characters Within A String 0005 c 0006 LOGICAL FUNCTION LOCATE_ALPHA_WORD (STRING,LENGTH,FIRST,LAST) 0007 c 0008 c Description 0009 c 0010 c This function returns TRUE if a word (a series of contiguous 0011 c alpha characters) is found. FALSE is returned if not. The 0012 c location within the string of the first and last characters of 0013 c the word is returned. 0014 c 0015 c Parameter Description 0016 c 0017 c STRING String to be searched 0018 c LENGTH Length of good data in the string 0019 c FIRST Starting location for search and the location of the 0020 c first nonblank character of parameter 0021 c LAST Location of the last nonblank character of parameter 0022 c 0023 c======================================================================== 0024 0025 implicit none 0026 0027 character*(*) string 0028 integer*4 length,first,last 0029 integer*4 i,j 0030 0031 0032 locate_alpha_word = .FALSE. ! set initial return value 0033 0034 if (first.gt.length) return ! test end of string 0035 0036 do i = first,length ! locate first alpha char 0037 if (((string(i:i).ge.'a').and. 0038 x (string(i:i).le.'z')).or. 0039 x ((string(i:i).ge.'A').and. 0040 x (string(i:i).le.'Z'))) goto 10 0041 end do 0042 0043 return 0044 0045 10 do j = i,length ! locate last alpha char 0046 if (.NOT.(((string(j:j).ge.'a').and. 0047 x (string(j:j).le.'z')).or. 0048 x ((string(j:j).ge.'A').and. 0049 x (string(j:j).le.'Z')))) goto 20 0050 end do 0051 0052 20 first = i ! set return value(s) 0053 last = j - 1 0054 locate_alpha_word = .TRUE. 0055 0056 return 0057 end LOCATE_ALPHA_WORD 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 43 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 171 PIC CON REL LCL SHR EXE RD NOWRT QUAD 2 $LOCAL 20 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD Total Space Allocated 191 ENTRY POINTS Address Type Name 0-00000000 L*4 LOCATE_ALPHA_WORD VARIABLES Address Type Name Address Type Name Address Type Name Address Type Name AP-0000000C@ I*4 FIRST ** I*4 I ** I*4 J AP-00000010@ I*4 LAST AP-00000008@ I*4 LENGTH AP-00000004@ CHAR STRING LABELS Address Label Address Label 0-00000060 10 0-00000098 20 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 44 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0001 0002 0003 c======================================================================== 0004 c Check The Spelling Of All Of The Words In A Text File 0005 c 0006 SUBROUTINE SPELL_CHECK_FILE (UNITNUMBER, 0007 x COMMON_FLAG, 0008 x PROJECT_FLAG, 0009 x USER_FLAG) 0010 c 0011 c Description 0012 c 0013 c Spell check a text file. Each word found in the text file will 0014 c tested to see if it is in the dictionary. Each line if the text 0015 c file will be displayed and words not found in the dictionary will 0016 c will be indicated. A word is a contiguous set of alpha 0017 c characters surrounded by delimeters. 0018 c 0019 c Parameter Description 0020 c 0021 c UNITNUMBER FORTRAN I/O unit number 0022 c COMMON_FLAG use common dictionary flag 0023 c PROJECT_FLAG use project dictionary flag 0024 c USER_FLAG use user dictionary flag 0025 c 0026 c======================================================================== 0027 0028 implicit none 0029 0030 include 'spell_include.for' 0081 0082 character*512 textbuf 0083 integer*4 unitnumber 0084 integer*4 i,j,textlen,first,last 0085 logical*4 common_flag,project_flag,user_flag 0086 logical*4 errflag,word_error 0087 logical*4 locate_alpha_word 0088 logical*4 spell_check_word 0089 byte errbuf(512),word(word_size) 0090 0091 0092 c read record from text file 0093 0094 10 read (unit=unitnumber,end=100,fmt=1000) textlen,textbuf 0095 0096 c blank fill error display buffer, put tabs where they are needed 0097 0098 do i = 1,textlen 0099 if (textbuf(i:i) .eq. char(9)) then 0100 errbuf(i) = 9 ! tab 0101 else 0102 errbuf(i) = ' ' ! blank 0103 end if 0104 end do 0105 0106 c turn off error display 0107 SPELL_CHECK_FILE 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 45 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 0108 errflag = .FALSE. 0109 0110 c spell check all the words in the text record 0111 0112 first = 1 0113 0114 do while (locate_alpha_word(textbuf,textlen,first,last)) 0115 word_error = .TRUE. 0116 if (last-first+1.lt.word_size-1) then 0117 if (spell_check_word(textbuf(first:last), 0118 x common_flag, 0119 x project_flag, 0120 x user_flag)) 0121 x word_error = .FALSE. 0122 end if 0123 0124 c fill error buffer if appropriate 0125 0126 if (word_error) then 0127 errflag = .TRUE. 0128 do i = first,last 0129 errbuf(i) = '*' 0130 end do 0131 end if 0132 first = last + 1 0133 end do 0134 0135 write(*,1010) textbuf(1:textlen) 0136 0137 if (errflag) write (*,1020) (errbuf(i),i=1,textlen) 0138 0139 goto 10 0140 0141 100 return 0142 0143 1000 format (q,a) 0144 1010 format (1x,a) 0145 1020 format (1x,a) 0146 end SPELL_CHECK_FILE 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 46 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 PROGRAM SECTIONS Name Bytes Attributes 0 $CODE 339 PIC CON REL LCL SHR EXE RD NOWRT QUAD 1 $PDATA 16 PIC CON REL LCL SHR NOEXE RD NOWRT QUAD 2 $LOCAL 1132 PIC CON REL LCL NOSHR NOEXE RD WRT QUAD 3 SPELLER_COMMON 100428 PIC OVR REL GBL SHR NOEXE RD WRT QUAD Total Space Allocated 101915 ENTRY POINTS Address Type Name 0-00000000 SPELL_CHECK_FILE VARIABLES Address Type Name Address Type Name 3-000041B8 I*4 COMMON_BUF_LIMIT AP-00000008@ L*4 COMMON_FLAG 3-000041B4 I*4 COMMON_PTR_LIMIT 3-00000000 L*4 DEBUG ** L*4 ERRFLAG 2-00000424 I*4 FIRST ** I*4 I ** I*4 J 2-00000428 I*4 LAST 3-00000B00 I*4 PROJECT_BUF_LIMIT AP-0000000C@ L*4 PROJECT_FLAG 3-00000AFC I*4 PROJECT_PTR_LIMIT 2-00000220 CHAR TEXTBUF 2-00000420 I*4 TEXTLEN AP-00000004@ I*4 UNITNUMBER 3-00000008 I*4 USER_BUF_LIMIT AP-00000010@ L*4 USER_FLAG 3-00000004 I*4 USER_PTR_LIMIT ** L*4 WORD_ERROR ARRAYS Address Type Name Bytes Dimensions 3-0000D49C L*1 COMMON_BUF 46000 (46000) 3-000041BC I*4 COMMON_PTR 18800 (4700) 2-00000000 L*1 ERRBUF 512 (512) 3-00008B2C I*4 FILE_PTR 18800 (4700) 3-00001AA4 L*1 PROJECT_BUF 10000 (10000) 3-00000B04 I*4 PROJECT_PTR 4000 (1000) 3-0000032C L*1 USER_BUF 2000 (2000) 3-0000000C I*4 USER_PTR 800 (200) 2-00000200 L*1 WORD 32 (32) LABELS Address Label Address Label Address Label Address Label Address Label 0-0000000C 10 0-00000148 100 1-00000000 1000' 1-00000003 1010' 1-00000007 1020' SPELL_CHECK_FILE 17-Jun-1991 15:18:20 VAX FORTRAN V5.5-98 Page 47 01 17-Jun-1991 15:16:20 RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.FOR;7 FUNCTIONS AND SUBROUTINES REFERENCED Type Name Type Name L*4 LOCATE_ALPHA_WORD L*4 SPELL_CHECK_WORD COMMAND QUALIFIERS FORTRAN/EXTEND/CONT=30/LIS SPELLIB /CHECK=(NOBOUNDS,OVERFLOW,NOUNDERFLOW) /DEBUG=(NOSYMBOLS,TRACEBACK) /DESIGN=(NOCOMMENTS,NOPLACEHOLDERS) /SHOW=(NODICTIONARY,NOINCLUDE,MAP,NOPREPROCESSOR,SINGLE) /STANDARD=(NOSEMANTIC,NOSOURCE_FORM,NOSYNTAX) /WARNINGS=(NODECLARATIONS,GENERAL,NOULTRIX,NOVAXELN) /CONTINUATIONS=30 /NOCROSS_REFERENCE /NOD_LINES /EXTEND_SOURCE /F77 /NOG_FLOATING /I4 /NOMACHINE_CODE /OPTIMIZE /NOPARALLEL /NOANALYSIS_DATA /NODIAGNOSTICS /LIST=RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.LIS;1 /OBJECT=RX1$DIA1:[RICKSYS.EVE.SPELL]SPELLIB.OBJ;1 COMPILATION STATISTICS Run Time: 11.14 seconds Elapsed Time: 54.39 seconds Page Faults: 334 Dynamic Memory: 524 pages