You can subscribe to this list here.
2003 |
Jan
|
Feb
(160) |
Mar
(119) |
Apr
(111) |
May
(118) |
Jun
(101) |
Jul
(304) |
Aug
(113) |
Sep
(140) |
Oct
(137) |
Nov
(87) |
Dec
(122) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(78) |
Feb
(125) |
Mar
(131) |
Apr
(59) |
May
(121) |
Jun
(166) |
Jul
(150) |
Aug
(137) |
Sep
(73) |
Oct
(58) |
Nov
(27) |
Dec
(60) |
2005 |
Jan
(131) |
Feb
(84) |
Mar
(36) |
Apr
(8) |
May
(28) |
Jun
(20) |
Jul
(10) |
Aug
(72) |
Sep
(76) |
Oct
(34) |
Nov
(3) |
Dec
(29) |
2006 |
Jan
(13) |
Feb
(92) |
Mar
(7) |
Apr
(1) |
May
(1) |
Jun
(2) |
Jul
(4) |
Aug
(17) |
Sep
(5) |
Oct
(2) |
Nov
(8) |
Dec
(12) |
2007 |
Jan
(28) |
Feb
(15) |
Mar
|
Apr
|
May
(8) |
Jun
(4) |
Jul
(5) |
Aug
(8) |
Sep
(20) |
Oct
(38) |
Nov
(65) |
Dec
(92) |
2008 |
Jan
(21) |
Feb
(56) |
Mar
(27) |
Apr
(174) |
May
(25) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <jgr...@us...> - 2003-06-09 18:31:58
|
Update of /cvsroot/popfile/engine/POPFile In directory sc8-pr-cvs1:/tmp/cvs-serv20671/POPFile Modified Files: Logger.pm Log Message: Add code to track last ten items placed in the top level log and a getter so that the UI can display them Index: Logger.pm =================================================================== RCS file: /cvsroot/popfile/engine/POPFile/Logger.pm,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** Logger.pm 30 Apr 2003 20:28:30 -0000 1.16 --- Logger.pm 9 Jun 2003 18:31:55 -0000 1.17 *************** *** 33,38 **** --- 33,43 ---- # The name of the debug file + $self->{debug_filename__} = ''; + # The last ten lines sent to the logger + + $self->{last_ten__} = (); + bless($self, $class); *************** *** 158,161 **** --- 163,176 ---- print $msg if ( $self->global_config_( 'debug' ) & 2 ); + + # Add the line to the in memory collection of the last ten + # logger entries and then remove the first one if we now have + # more than 10 + + push @{$self->{last_ten__}}, ($msg); + + if ( $#{$self->{last_ten__}} > 9 ) { + shift @{$self->{last_ten__}}; + } } } *************** *** 168,171 **** --- 183,193 ---- return $self->{debug_filename__}; + } + + sub last_ten + { + my ( $self ) = @_; + + return $self->{last_ten__}; } |
From: <jgr...@us...> - 2003-06-09 18:31:17
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv20343/UI Modified Files: HTML.pm Log Message: Comment updates, make jump_to_message and password_page play nice together, add the last ten lines of the log output to the configuration page, change the way that session keys are generated Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.166 retrieving revision 1.167 diff -C2 -d -r1.166 -r1.167 *** HTML.pm 7 Jun 2003 03:13:13 -0000 1.166 --- HTML.pm 9 Jun 2003 18:31:12 -0000 1.167 *************** *** 56,60 **** # folder (by default messages/) and is updated by the load_history_cache__ method # ! # Access to the history cache is formatted $self->{history}{file}{subkey} where # the file is the name of the file that is related to this history entry. # --- 56,60 ---- # folder (by default messages/) and is updated by the load_history_cache__ method # ! # Access to the history cache is formatted $self->{history__}{file}{subkey} where # the file is the name of the file that is related to this history entry. # *************** *** 71,75 **** # # The history_keys array stores the list of keys in the history hash and are a ! # (perhaps strict) subset of the keys of $self->{history} set by calls to # sory_filter_history. history_keys references the elements on history that are # in the current filter, sort or search set. --- 71,75 ---- # # The history_keys array stores the list of keys in the history hash and are a ! # (perhaps strict) subset of the keys of $self->{history__} set by calls to # sory_filter_history. history_keys references the elements on history that are # in the current filter, sort or search set. *************** *** 117,158 **** --- 117,171 ---- # Checking for updates if off by default + $self->config_( 'update_check', 0 ); # Sending of statistics is off + $self->config_( 'send_stats', 0 ); # The size of a history page + $self->config_( 'page_size', 20 ); # Only accept connections from the local machine for the UI + $self->config_( 'local', 1 ); # Use the default skin + $self->config_( 'skin', 'SimplyBlue' ); # Keep the history for two days + $self->config_( 'history_days', 2 ); # The last time we checked for an update using the local epoch + $self->config_( 'last_update_check', 0 ); # The user interface password + $self->config_( 'password', '' ); # The last time (textual) that the statistics were reset + $self->config_( 'last_reset', localtime ); # We start by assuming that the user speaks English like the # perfidious Anglo-Saxons that we are... :-) + $self->config_( 'language', 'English' ); # If this is 1 then when the language is loaded we will use the language string identifier as the # string shown in the UI. This is used to test whether which identifiers are used where. + $self->config_( 'test_language', 0 ); # If 1, Messages are saved to an archive when they are removed or expired from the history cache + $self->config_( 'archive', 0, 1 ); # The directory where messages will be archived to, in sub-directories for each bucket + $self->config_( 'archive_dir', 'archive' ); *************** *** 161,176 **** --- 174,194 ---- # bucket directory # 0 <= directory name < archive_classes + $self->config_( 'archive_classes', 0 ); # Load skins + load_skins($self); # Load the list of available user interface languages + load_languages($self); # Calculate a session key + change_session_key($self); # The parent needs a reference to the url handler function + $self->{url_handler_} = \&url_handler__; *************** *** 304,307 **** --- 322,328 ---- if ( defined( $self->{form_}{redirect} ) ) { $url = $self->{form_}{redirect}; + if ( $url =~ s/\?(.*)// ) { + $self->parse_form__( $1 ); + } } else { $url = '/'; *************** *** 317,321 **** if ( ( (!defined($self->{form_}{session})) || ($self->{form_}{session} eq '' ) || ( $self->{form_}{session} ne $self->{session_key__} ) ) && ( $self->config_( 'password' ) ne '' ) ) { ! password_page( $self, $client, 0, $url ); return 1; } --- 338,376 ---- if ( ( (!defined($self->{form_}{session})) || ($self->{form_}{session} eq '' ) || ( $self->{form_}{session} ne $self->{session_key__} ) ) && ( $self->config_( 'password' ) ne '' ) ) { ! ! # Since the URL that has caused us to hit the password page might have information stored in the ! # form hash we need to extract it out (except for the session key) and package it up so that ! # the password page can redirect to the right place if the correct password is entered. This ! # is especially important for the XPL functionality. ! ! my $redirect_url = $url . '?'; ! ! foreach my $k (keys %{$self->{form_}}) { ! ! # Skip the session key since we are in the process of ! # assigning a new one through the password page ! ! if ( $k ne 'session' ) { ! ! # If we are dealing with an array of values (see parse_form__ ! # for details) then we need to unpack it into separate entries), ! # we ignore non-array values since all values have an array equivalent ! ! if ( $k =~ /^(.+)_array$/ ) { ! my $field = $1; ! ! foreach my $v (@{$self->{form_}{$k}}) { ! $redirect_url .= "$field=$v&" ! } ! } ! } ! } ! ! $redirect_url =~ s/&$//; ! ! $self->log_( "Correct password will redirect to $redirect_url" ); ! ! password_page( $self, $client, 0, $redirect_url ); ! return 1; } *************** *** 962,965 **** --- 1017,1038 ---- } + if ( $self->global_config_( 'debug' ) != 0 ) { + my @log_entries = @{$self->last_ten_log_entries()}; + + if ( $#log_entries >= -1 ) { + $body .= '<p><tt>'; + foreach my $line (@log_entries) { + $line =~ s/[\"\r\n]//g; + my $full_line = $line; + $line =~ /^(.{0,80})/; + $line = "$1..."; + + $body .= "<a title=\"$full_line\">$line</a><br>"; + } + + $body .= '</tt>'; + } + } + $body .= "</td>\n</tr>\n</table>\n"; *************** *** 2550,2554 **** $bucket =~ s/[\r\n]//g; } else { ! print "Error: " . $self->global_config_( 'msgdir' ) . "$filename: $!\n"; } return ( $reclassified, $bucket, $usedtobe, $magnet ); --- 2623,2627 ---- $bucket =~ s/[\r\n]//g; } else { ! $self->log_( "Error: " . $self->global_config_( 'msgdir' ) . "$filename: $!" ); } return ( $reclassified, $bucket, $usedtobe, $magnet ); *************** *** 3344,3348 **** # change_session_key # ! # Changes the session key # # --------------------------------------------------------------------------------------------- --- 3417,3428 ---- # change_session_key # ! # Changes the session key, the session key is a randomly chosen 6 to 10 character key that ! # protects and identifies sessions with the POPFile user interface. At the current time ! # it is primarily used for two purposes: to prevent a malicious user telling the browser to ! # hit a specific URL causing POPFile to do something undesirable (like shutdown) and to ! # handle the password mechanism: if the session key is wrong the password challenge is ! # made. ! # ! # The characters valid in the session key are A-Z, a-z and 0-9 # # --------------------------------------------------------------------------------------------- *************** *** 3351,3357 **** my ( $self ) = @_; $self->{session_key__} = ''; ! for my $i (0 .. 7) { ! $self->{session_key__} .= chr(rand(1)*26+65); } } --- 3431,3452 ---- my ( $self ) = @_; + my @chars = ( 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', + 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'U', 'V', 'W', 'X', 'Y', + 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A' ); + $self->{session_key__} = ''; ! ! my $length = int( 6 + rand(4) ); ! ! for my $i (0 .. $length) { ! my $random = $chars[int( rand(36) )]; ! ! # Just to add spice to things we sometimes lowercase the value ! ! if ( rand(1) < rand(1) ) { ! $random = lc($random); ! } ! ! $self->{session_key__} .= $random; } } *************** *** 3374,3378 **** next if ( /[ \t]*#/ ); ! if ( /([^ ]+)[ \t]+(.+)/ ) { my $id = $1; my $msg = ($self->config_( 'test_language' ))?$1:$2; --- 3469,3473 ---- next if ( /[ \t]*#/ ); ! if ( /([^\t ]+)[ \t]+(.+)/ ) { my $id = $1; my $msg = ($self->config_( 'test_language' ))?$1:$2; |
From: <jgr...@us...> - 2003-06-09 18:29:25
|
Update of /cvsroot/popfile/engine/languages In directory sc8-pr-cvs1:/tmp/cvs-serv19536 Modified Files: Chinese-Simplified.msg Chinese-Traditional.msg Added Files: English-UK.msg Log Message: Added UK English translation --- NEW FILE: English-UK.msg --- # Copyright (c) 2001-2003 John Graham-Cumming # Identify the language and character set used for the interface LanguageCode en LanguageCharset ISO-8859-1 # This is used to get the appropriate subdirectory for the manual ManualLanguage en # Common words that are used on their own all over the interface Apply Apply On On Off Off TurnOn Turn On TurnOff Turn Off Add Add Remove Remove Previous Previous Next Next From From Subject Subject Cc Cc Classification Classification Reclassify Reclassify Probability Probability Scores Scores QuickMagnets QuickMagnets Undo Undo Close Close Find Find Filter Filter Yes Yes No No ChangeToYes Change to Yes ChangeToNo Change to No Bucket Bucket Magnet Magnet Delete Delete Create Create To To Total Total Rename Rename Frequency Frequency Probability Probability Score Score Lookup Lookup Word Word Count Count Update Update Refresh Refresh # The header and footer that appear on every UI page Header_Title POPFile Control Centre Header_Shutdown Shutdown POPFile Header_History History Header_Buckets Buckets Header_Configuration Configuration Header_Advanced Advanced Header_Security Security Header_Magnets Magnets Footer_HomePage POPFile Home Page Footer_Manual Manual Footer_Forums Forums Footer_FeedMe Donate Footer_RequestFeature Request Feature Footer_MailingList Mailing List Configuration_Error1 The separator character must be a single character Configuration_Error2 The user interface port must be a number between 1 and 65535 Configuration_Error3 The POP3 listen port must be a number between 1 and 65535 Configuration_Error4 The page size must be a number between 1 and 1000 Configuration_Error5 The number of days in the history must be a number between 1 and 366 Configuration_Error6 The TCP timeout must be a number between 10 and 300 Configuration_Error7 The XML RPC listen port must be a number between 1 and 65535 Configuration_POP3Port POP3 listen port Configuration_POP3Update Updated POP3 port to %s; this change will not take affect until you restart POPFile Configuration_XMLRPCUpdate Updated XML-RPC port to %s; this change will not take affect until you restart POPFile Configuration_XMLRPCPort XML-RPC listen port Configuration_SMTPPort SMTP listen port Configuration_SMTPUpdate Updated SMTP port to %s; this change will not take affect until you restart POPFile Configuration_NNTPPort NNTP listen port Configuration_NNTPUpdate Updated NNTP port to %s; this change will not take affect until you restart POPFile Configuration_POP3Separator POP3 host:port:user separator character Configuration_NNTPSeparator NNTP host:port:user separator character Configuration_POP3SepUpdate Updated POP3 separator to %s Configuration_NNTPSepUpdate Updated NNTP separator to %s Configuration_UI User interface web port Configuration_UIUpdate Updated user interface web port to %s; this change will not take affect until you restart POPFile Configuration_History Number of messages per page Configuration_HistoryUpdate Updated number of messages per page to %s Configuration_Days Number of days of history to keep Configuration_DaysUpdate Updated number of days of history to %s Configuration_UserInterface User Interface Configuration_Skins Skins Configuration_SkinsChoose Choose skin Configuration_Language Language Configuration_LanguageChoose Choose language Configuration_ListenPorts Module Options Configuration_HistoryView History View Configuration_TCPTimeout Connection Timeout Configuration_TCPTimeoutSecs Connection timeout in seconds Configuration_TCPTimeoutUpdate Updated connection timeout to %s Configuration_ClassificationInsertion Message Text Insertion Configuration_SubjectLine Subject line modification Configuration_XTCInsertion X-Text-Classification Header Configuration_XPLInsertion X-POPFile-Link Header Configuration_Logging Logging Configuration_None None Configuration_ToScreen To Screen Configuration_ToFile To File Configuration_ToScreenFile To Screen and File Configuration_LoggerOutput Logger output Configuration_GeneralSkins Skins Configuration_SmallSkins Small Skins Configuration_TinySkins Tiny Skins Configuration_CurrentLogFile <current log file> Advanced_Error1 '%s' already in the Ignored Words list Advanced_Error2 Ignored words can only contain alphanumeric, ., _, -, or @ characters Advanced_Error3 '%s' added to the Ignored Words list Advanced_Error4 '%s' is not in the Ignored Words list Advanced_Error5 '%s' removed from the Ignored Words list Advanced_StopWords Ignored Words Advanced_Message1 POPFile ignores the following frequently-used words: Advanced_AddWord Add word Advanced_RemoveWord Remove word History_Filter (just showing bucket <font color="%s">%s</font>) History_FilterBy Filter By History_Search (searched for from/subject %s) History_Title Recent Messages History_Jump Jump to message History_ShowAll Show All History_ShouldBe Should be History_NoFrom no from line History_NoSubject no subject line History_ClassifyAs Classify as History_MagnetUsed Magnet used History_MagnetBecause <b>Magnet Used</b><p>Classified to <font color="%s">%s</font> because of magnet %s </p> History_ChangedTo Changed to <font color="%s">%s History_Already Already reclassified as <font color="%s">%s</font> History_RemoveAll Remove All History_RemovePage Remove Page History_Remove To remove entries in the history click History_SearchMessage Search From/Subject History_NoMessages No messages History_ShowMagnet magnetized History_ShowNoMagnet unmagnetized History_Magnet (just showing magnet classified messages) History_NoMagnet (just showing non-magnet classified messages) History_ResetSearch Reset Password_Title Password Password_Enter Enter password Password_Go Go! Password_Error1 Incorrect password Security_Error1 The port must be a number between 1 and 65535 Security_Stealth Stealth Mode/Server Operation Security_NoStealthMode No (Stealth Mode) Security_ExplainStats (With this turned on POPFile sends once per day the following three values to a script on www.usethesource.com: bc (the total number of buckets that you have), mc (the total number of messages that POPFile has classified) and ec (the total number of classification errors). These get stored in a file and I will use this to publish some statistics about how people use POPFile and how well it works. My web server keeps its log files for about 5 days and then they get deleted; I am not storing any connection between the statistics and individual IP addresses.) Security_ExplainUpdate (With this turned on POPFile sends once per day the following three values to a script on www.usethesource.com: ma (the major version number of your installed POPFile), mi (the minor version number of your installed POPFile) and bn (the build number of your installed POPFile). POPFile receives a response in the form of a graphic that appears at the top of the page if a new version is available. My web server keeps its log files for about 5 days and then they get deleted; I am not storing any connection between the update checks and individual IP addresses.) Security_PasswordTitle User Interface Password Security_Password Password Security_PasswordUpdate Updated password to %s Security_AUTHTitle Remote Servers Security_SecureServer POP3 SPA/AUTH server Security_SecureServerUpdate Updated POP3 SPA/AUTH secure server to %s; this change will not take affect until you restart POPFile Security_SecurePort POP3 SPA/AUTH port Security_SecurePortUpdate Updated POP3 SPA/AUTH port to %s; this change will not take affect until you restart POPFile Security_SMTPServer SMTP chain server Security_SMTPServerUpdate Updated SMTP chain server to %s; this change will not take affect until you restart POPFile Security_SMTPPort SMTP chain port Security_SMTPPortUpdate Updated SMTP chain port to %s; this change will not take affect until you restart POPFile Security_POP3 Accept POP3 connections from remote machines (requires POPFile restart) Security_SMTP Accept SMTP connections from remote machines (requires POPFile restart) Security_NNTP Accept NNTP connections from remote machines (requires POPFile restart) Security_UI Accept HTTP (User Interface) connections from remote machines (requires POPFile restart) Security_XMLRPC Accept XML-RPC connections from remote machines (requires POPFile restart) Security_UpdateTitle Automatic Update Checking Security_Update Check daily for updates to POPFile Security_StatsTitle Reporting Statistics Security_Stats Send statistics daily Magnet_Error1 Magnet '%s' already exists in bucket '%s' Magnet_Error2 New magnet '%s' clashes with magnet '%s' in bucket '%s' and could cause ambiguous results. New magnet was not added. Magnet_Error3 Create new magnet '%s' in bucket '%s' Magnet_CurrentMagnets Current Magnets Magnet_Message1 The following magnets cause mail to always be classified into the specified bucket. Magnet_CreateNew Create New Magnet Magnet_Explanation These types of magnets are available:</b> <ul><li><b>From address or name:</b> For example: jo...@co... to match a specific address, <br />company.com to match everyone who sends from company.com, <br />John Doe to match a specific person, John to match all Johns</li><li><b>To/Cc address or name:</b> Like a From: magnet but for the To:/Cc: address in a message</li> <li><b>Subject words:</b> For example: hello to match all messages with hello in the subject</li></ul> Magnet_MagnetType Magnet type Magnet_Value Value Magnet_Always Always goes to bucket Magnet_Jump Jump to magnet page Bucket_Error1 Bucket names can only contain the letters a to z in lower case, numbers 0 to 9, plus - and _ Bucket_Error2 Bucket named %s already exists Bucket_Error3 Created bucket named %s Bucket_Error4 Please enter a non-blank word Bucket_Error5 Renamed bucket %s to %s Bucket_Error6 Deleted bucket %s Bucket_Title Summary Bucket_BucketName Bucket Name Bucket_WordCount Word Count Bucket_WordCounts Word Counts Bucket_UniqueWords Unique Words Bucket_SubjectModification Subject Modification Bucket_ChangeColor Change Colour Bucket_NotEnoughData Not enough data Bucket_ClassificationAccuracy Classification Accuracy Bucket_EmailsClassified Messages classified Bucket_EmailsClassifiedUpper Messages Classified Bucket_ClassificationErrors Classification errors Bucket_Accuracy Accuracy Bucket_ClassificationCount Classification Count Bucket_ClassificationFP False Positives Bucket_ClassificationFN False Negatives Bucket_ResetStatistics Reset Statistics Bucket_LastReset Last Reset Bucket_CurrentColor %s current colour is %s Bucket_SetColorTo Set %s colour to %s Bucket_Maintenance Maintenance Bucket_CreateBucket Create bucket with name Bucket_DeleteBucket Delete bucket named Bucket_RenameBucket Rename bucket named Bucket_Lookup Lookup Bucket_LookupMessage Lookup word in buckets Bucket_LookupMessage2 Lookup result for Bucket_LookupMostLikely <b>%s</b> is most likely to appear in <font color="%s">%s</font> Bucket_DoesNotAppear <p><b>%s</b> does not appear in any of the buckets Bucket_DisabledGlobally Disabled globally Bucket_To to Bucket_Quarantine Quarantine SingleBucket_Title Detail for %s SingleBucket_WordCount Bucket word count SingleBucket_TotalWordCount Total word count SingleBucket_Percentage Percentage of total SingleBucket_WordTable Word Table for %s SingleBucket_Message1 Click a letter in the index to see the list of words that start with that letter. Click any word to lookup its probability for all buckets. SingleBucket_Unique %s unique SingleBucket_ClearBucket Remove All Words Session_Title POPFile Session Expired Session_Error Your POPFile session has expired. This could have been caused by starting and stopping POPFile but leaving your web browser open. Please click one of the links above to continue using POPFile. View_Title Single Message View Header_MenuSummary This table is the navigation menu which allows access to each of the different pages of the control centre. History_MainTableSummary This table shows the sender and subject of recently received messages and allows them to be reviewed and reclassified. Clicking on the subject line will show the full message text, along with information about why it was classified as it was. The 'Should be' column allows you to specify which bucket the message belongs in, or to undo that change. The 'Delete' column allows you to delete specific messages from the history if you don't need them anymore. History_OpenMessageSummary This table contains the full text of a message message, with the words that are used for classification highlighted according to the bucket that was most relevant for each. Bucket_MainTableSummary This table provides an overview of the classification buckets. Each row shows the bucket name, the word count total for that bucket, the actual number of individual words in each bucket, whether the message's subject line will be modified when it gets classified to that bucket, whether to quarantine the messages received in that bucket, and a table to pick the colour used in displaying anything related to that bucket in the control centre. Bucket_StatisticsTableSummary This table provides three sets of statistics on the overall performance of POPFile. The first is how accurate its classification is, the second is how many messages have been classified, and to which buckets, and the third is how many words are in each bucket, and what their relative percentages are. Bucket_MaintenanceTableSummary This table contains forms that allow you to create, delete or rename buckets, and to lookup a word in all of the buckets to see its relative probabilities. Bucket_AccuracyChartSummary This table graphically represents the accuracy of the message classification. Bucket_BarChartSummary This table graphically represents a percentage allocation for each of the different buckets. It is used for both number of messages classified, and total word counts. Bucket_LookupResultsSummary This table shows the probabilities associated with any given word of the corpus. For each bucket, it shows the frequency that that word occurs, the probability that it will occur in that bucket, and the overall effect on the score of the bucket if that word exists in a message. Bucket_WordListTableSummary This table provides a listing of all the words for a particular bucket, organized by common first letter for each row. Magnet_MainTableSummary This table shows the list of magnets that are used to automatically classify message according to fixed rules. Each row shows how the magnet is defined, what bucket it is intended for, and a button to delete the magnet. Configuration_MainTableSummary This table contains a number of forms to allow you to control the configuration of POPFile. Configuration_InsertionTableSummary This table contains buttons that determine whether or not certain modifications are made to the headers or subject line of the message before it is passed on to the message client. Security_MainTableSummary This table provides sets of controls that affect the security of the overall configuration of POPFile, whether it should automatically check for updates to the program, and whether statistics about POPFile's performance should be sent to the central datastore of the program's author for general information. Advanced_MainTableSummary This table provides a list of words that POPFile ignores when classifying message due to their relative frequency in message in general. They are organized per row according to the first letter of the words. Index: Chinese-Simplified.msg =================================================================== RCS file: /cvsroot/popfile/engine/languages/Chinese-Simplified.msg,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Chinese-Simplified.msg 4 Mar 2003 01:17:37 -0000 1.1 --- Chinese-Simplified.msg 9 Jun 2003 18:29:22 -0000 1.2 *************** *** 1,234 **** ! # Copyright (c) 2001-2003 John Graham-Cumming ! # Simple Chinese Translated By Mark Wu, 2003/03/04 ! ! # Identify the language and character set used for the interface ! LanguageCode cn ! LanguageCharset GB2312 ! ! # This is used to get the appropriate subdirectory for the manual ! ManualLanguage en ! ! # Common words that are used on their own all over the interface ! Apply Ì×Óà ! On ¿ª ! Off ¹Ø ! TurnOn ¿ªÆô ! TurnOff ¹Ø±Õ ! Add ¼ÓÈë ! Remove ÒÆ³ý ! Previous ÉÏÒ»Ò³ ! Next ÏÂÒ»Ò³ ! From ¼Ä¼þÕß ! Subject Ö÷Ö¼ ! Classification ·ÖÀà ! Reclassify ÖØÐ·ÖÀà ! Undo ¸´Ô ! Close ¹Ø±Õ ! Find ËÑѰ ! Filter ¹ýÂË ! Yes ÊÇ ! No ·ñ ! ChangeToYes ÊÇ ! ChangeToNo ·ñ ! Bucket ·ÖÀà ! Magnet ¹æÔò ! Delete ɾ³ý ! Create ½¨Á¢ ! To ÊÕ¼þÕß ! Total È«²¿ ! Rename ÖØÐÂÃüÃû ! Frequency ƵÂÊ ! Probability »úÂÊ ! Score ·ÖÊý ! Lookup ²é¿´ ! ! # The header and footer that appear on every UI page ! Header_Title POPFile ¿ØÖÆÌ¨ ! Header_Shutdown Í£Ö¹ POPFile ! Header_History ÀúÊ· ! Header_Buckets ·ÖÀà ! Header_Configuration É趨 ! Header_Advanced ½ø½× ! Header_Security °²È« ! Header_Magnets ¹æÔò ! ! Footer_HomePage POPFile Ê×Ò³ ! Footer_Manual ʹÓÃÊÖ²á ! Footer_Forums ÂÛ̳ ! Footer_FeedMe ÔÞÖú ! Footer_RequestFeature ¹¦Äܽ¨Òé ! Footer_MailingList ÓʼþȺ×é ! ! Configuration_Error1 ·Ö¸ô×ÖÔª±ØÐëΪµ¥Ò»×ÖÔª ! Configuration_Error2 ʹÓÃÕß½éÃæÁ¬½Ó²º±ØÐë½éÓÚ 1 µ½ 65535 Ö®¼ä ! Configuration_Error3 ÄÚ¼ÄËÅ·þÆ÷Á¬½Ó²º±ØÐë½éÓÚ 1 µ½ 65535 Ö®¼ä ! Configuration_Error4 ÿһҳÏÔʾÐżþÊý±ØÐë½éÓÚ 1 µ½ 1000 Ö®¼ä ! Configuration_Error5 ÀúÊ·¼Í¼ÌìÊý±ØÐë½éÓÚ 1 µ½ 366 Ö®¼ä ! Configuration_Error6 TCP Á¬½ÓÓâʱÃëÊý½éÓÚ 10 µ½ 300 Ö®¼ä ! Configuration_POP3Port ÄÚ¼ÄËÅ·þÆ÷Á¬½Ó²º ! Configuration_POP3Update ¸ü¸ÄÄÚ¼ÄËÅ·þÆ÷Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Configuration_Separator ·Ö¸ô×ÖÔª ! Configuration_SepUpdate ¸ü¸Ä·Ö¸ô×ÖԪΪ %s ! Configuration_UI ʹÓÃÕß½éÃæÁ¬½Ó²º ! Configuration_UIUpdate ¸ü¸ÄʹÓÃÕß½éÃæÁ¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Configuration_History ÿһҳÏÔʾÐżþÊý ! Configuration_HistoryUpdate ¸ü¸ÄÿһҳÏÔʾÐżþÊýΪ to %s ! Configuration_Days ÀúÊ·¼Í¼ÌìÊý ! Configuration_DaysUpdate ¸ü¸ÄÀúÊ·¼Í¼ÌìÊýΪ %s ! Configuration_UserInterface ʹÓÃÕß½éÃæ ! Configuration_Skins Ãæ°æ ! Configuration_SkinsChoose Ñ¡ÔñÃæ°æ ! Configuration_Language ÓïÑÔ ! Configuration_LanguageChoose Ñ¡ÔñÓïÑÔ ! Configuration_ListenPorts Á¬½Ó²º ! Configuration_HistoryView ÀúÊ·¼ìÊÓ ! Configuration_TCPTimeout TCP Á¬½ÓÓâʱ ! Configuration_TCPTimeoutSecs TCP Á¬½ÓÓâʱÃëÊý ! Configuration_TCPTimeoutUpdate ¸ü¸Ä TCP Á¬½ÓÓâʱΪ %s Ãë ! Configuration_ClassificationInsertion E-Mail ÄÚÈÝÐÞ¸Ä ! Configuration_SubjectLine Ö÷Ö¼¼ÓÈë[·ÖÀàÃû³Æ] ! Configuration_XTCInsertion ¼ÓÈë X-Text-Classification µ½Ðżþ±êÌâÖÐ ! Configuration_XPLInsertion ¼ÓÈë X-POPFile-Link µ½Ðżþ±êÌâÖÐ ! Configuration_Logging ¼Í¼ ! Configuration_None ÎÞ ! Configuration_ToScreen Êä³öµ½Ó©Ä» ! Configuration_ToFile Êä³öµ½µµ°¸ ! Configuration_ToScreenFile Êä³öµ½Ó©Ä»Óëµµ°¸ ! Configuration_LoggerOutput ¼Ç¼Êä³ö·½Ê½ ! Configuration_GeneralSkins Ãæ°æ ! Configuration_SmallSkins Ãæ°æ(С×ÖÐÎ) ! Configuration_TinySkins Ãæ°æ(ÃÔÄã×ÖÐÎ) ! ! Advanced_Error1 '%s' ÒѾ´æÔÚºöÂÔµ¥×Ö×Ö±íÖÐ ! Advanced_Error2 ºöÂÔµ¥×ÖÖ»¿É°üº¬Ó¢ÎÄ,Êý×Ö, ., _, -, »ò @ µÈ×ÖÔª ! Advanced_Error3 '%s' ÒѾ¼ÓÈëºöÂÔµ¥×Ö×Ö±íÖÐ ! Advanced_Error4 '%s' ²»´æÔÚºöÂÔµ¥×Ö×Ö±íÖÐ ! Advanced_Error5 '%s' ÒѾ´ÓºöÂÔµ¥×Ö×Ö±íÖÐÒÆ³ý ! Advanced_StopWords ºöÂÔµ¥×Ö×Ö±í ! Advanced_Message1 POPFile »áºöÂÔÒÔϳöÏÖÆµÂʽϸߵĵ¥×Ö: ! Advanced_AddWord ¼ÓÈëµ¥×Ö ! Advanced_RemoveWord ÒÆ³ýµ¥×Ö ! ! History_Filter (ÏÔʾ·ÖÀà <font color="%s">%s</font>) ! History_FilterBy ¹ýÂËÌõ¼þ ! History_Search (ËÑѰ¼Ä¼þÕß/Ö÷Ö¼ %s) ! History_Title ×î½üÐżþ ! History_Jump ÒÆÖÁÐżþ ! History_ShowAll È«²¿ÏÔʾ ! History_ShouldBe Ó¦¸ÃÊÇ ! History_NoFrom ûÓмļþÕß ! History_NoSubject ûÓÐÖ÷Ö¼ ! History_ClassifyAs ·ÖÀàΪ ! History_MagnetUsed ʹÓùæÔò ! History_ChangedTo ¸Ä±äΪ <font color="%s">%s ! History_Already ÒÑ¾ÖØÐ·ÖÀàΪ <font color="%s">%s</font> ! History_RemoveAll È«²¿ÒƳý ! History_RemovePage ÒÆ³ýÕâÒ»Ò³ ! History_Remove ÒÆ³ýÀúÊ·Ðżþ ! History_SearchMessage ËÑѰ¼Ä¼þÕß/Ö÷Ö¼ ! History_NoMessages ûÓÐÈκÎѶϢ ! History_ShowMagnet ʹÓùæÔò ! History_Magnet (Ö»ÏÔʾʹÓùæÔò·ÖÀàµÄÐżþ) ! History_ResetSearch ÖØÉè ! ! Password_Title ÃÜÂë ! Password_Enter ÊäÈëÃÜÂë ! Password_Go ½øÈë ! Password_Error1 ÃÜÂë´íÎó ! ! Security_Error1 ÑéÖ¤ËÅ·þÆ÷Á¬½Ó²º±ØÐë½éÓÚ 1 µ½ 65535 Ö®¼ä ! Security_Stealth µ¥»ú/Ö÷»úģʽÉ趨 ! Security_NoStealthMode ·ñ (µ¥»úģʽ) ! Security_ExplainStats (¿ªÆôÕâ¸ö¹¦ÄÜ, »áʹ POPFile ÿÌì´«ËÍÈý¸öÌØ¶¨µÄ×ÊÁϵ½ www.usethesource.com: °üº¬ bc (ËùÓзÖÀàµÄ¸öÊý), mc (ËùÓÐ POPFile ·ÖÀà¹ýµÄÐżþÊý) and ec (ËùÓеķÖÀà´íÎó´ÎÊý). ÎÒ»áÀûÓÃÕâЩ×ÊÁÏÀ´Í³¼Æ²¢·ÖÎöʹÓÃÕßÈçºÎÀ´Ó¦Óà POPFile. ÎÒµÄÍøÕ¾»á½«ÕâЩ×ÊÁϱ£ÁôÎåÌì, ÎåÌìºó»á×Ô¶¯½«ÕâЩ×ÊÁÏ´Ó×ÊÁÏ¿âÖÐÒÆ³ý; ÎÒûÓб£ÁôÈκÎÄãµÄIPλַÔÚÕâЩ´«ÊäµÄ×ÊÁÏÖÐ.) ! Security_ExplainUpdate (¿ªÆôÕâ¸ö¹¦ÄÜ, »áʹ POPFile ÿÌì´«ËÍÈý¸öÌØ¶¨µÄ×ÊÁϵ½ www.usethesource.com: °üº¬ ma (Äã°²×°µÄ POPFile µÄÖ÷Òª°æ±¾), mi (Äã°²×°µÄ POPFile µÄ´ÎÒª°æ±¾) and bn (Äã°²×°µÄ POPFile µÄ½¨Á¢´úÂë). Èç¹û POPFile µÄÐÂ°æ´æÔÚ, »áÔÚ POPFile ¿ØÖÆÖÐÐÄÊ×Ò³ÏÔʾ¸üÐÂ×ÊѶ. ÎÒµÄÍøÕ¾»á½«ÕâЩ×ÊÁϱ£ÁôÎåÌì, ÎåÌìºó»á×Ô¶¯½«ÕâЩ×ÊÁÏ´Ó×ÊÁÏ¿âÖÐÒÆ³ý; ÎÒûÓб£ÁôÈκÎÄãµÄIPλַÔÚÕâЩ´«ÊäµÄ×ÊÁÏÖÐ.) ! Security_PasswordTitle ʹÓÃÕß½éÃæÃÜÂëÉ趨 ! Security_Password ÃÜÂë ! Security_PasswordUpdate ¸ü¸ÄÃÜÂëΪ %s ! Security_AUTHTitle °²È«ÃÜÂëÑéÖ¤ ! Security_SecureServer ÑéÖ¤ËÅ·þÆ÷ ! Security_SecureServerUpdate ¸ü¸Ä°²È«ÃÜÂëÑéÖ¤ËÅ·þÆ÷Ϊ %s; ÐèÖØÐÂÆô¶¯ POPFile ! Security_SecurePort ÑéÖ¤ËÅ·þÆ÷Á¬½Ó²º ! Security_SecurePortUpdate ¸ü¸ÄÑéÖ¤ËÅ·þÆ÷Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Security_POP3 ÔÊÐíÔ¶¶Ë¿ªÆô POP3 Á¬Ïß; ÐèÖØÐÂÆô¶¯ POPFile ! Security_UI ÔÊÐíÔ¶¶Ë¿ªÆô HTTP Á¬Ïßµ½Ê¹ÓÃÕß½éÃæ; ÐèÖØÐÂÆô¶¯ POPFile ! Security_UpdateTitle ×Ô¶¯¸üмì²é ! Security_Update ÿÌì¼ì²é POPFile ÊÇ·ñÓиüа汾 ! Security_StatsTitle ±¨¸æÍ³¼Æ×ÊÁÏ ! Security_Stats ÿÌì´«ËÍͳ¼Æ×ÊÁÏ ! ! Magnet_Error1 ¹æÔò '%s' ÒѾ´æÔÚ·ÖÀà '%s' ÖÐ ! Magnet_Error2 йæÔò '%s' Óë¹æÔò '%s' ÔÚ·ÖÀà '%s' ÖÐÖØ¸´£¬¿ÉÄܻᵼÖÂÎóÅÐ. йæÔòδ¼ÓÈë. ! Magnet_Error3 ½¨Á¢Ð¹æÔò '%s' ÔÚ·ÖÀà '%s' ÖÐ ! Magnet_CurrentMagnets ÏÖÓйæÔò ! Magnet_Message1 ÒÔÏµĹæÔò»áʹµÄÐżþ×ÜÊǹéÀàµ½ÌØ¶¨µÄ·ÖÀàÖÐ. ! Magnet_CreateNew ½¨Á¢Ð¹æÔò ! Magnet_Explanation ÏÖÓÐÈý¸ö¹æÔòÀà±ð:</b> <ul><li><b>¼Ä¼þÕߵĵç×ÓÓʼþÐÅÏä»òÐÕÃû:</b> ÀýÈç: jo...@co... ¶ÔÓ¦µ½Ò»¸öÌØ¶¨µÄµç×ÓÓʼþÐÅÏä, <br />company.com ¶ÔÓ¦µ½Ã¿Ò»¸öÀ´×ÔÓÚ company.com µÄ¼Ä¼þÕß, <br />John Doe ¶ÔÓ¦µ½Ò»¸öÌØ¶¨µÄÐÕÃû, John ¶ÔÓ¦µ½Ã¿Ò»¸öÃû×ÖÖÐÓÐ John µÄÈË</li><li><b>ÊÕ¼þÕߵĵç×ÓÓʼþÐÅÏä»òÐÕÃû:</b> Èçͬ¼Ä¼þÕߵĹæÔòÀà±ðÒ»Ñù£¬Ö»ÊÇÕâ¸ö¹æÔòÀà±ðÊÇÕë¶ÔÊÕ¼þÕß</li> <li><b>ÐżþÖ÷Ö¼ÖеÄÌØ¶¨µ¥×Ö</b> ÀýÈç: hello »á¶ÔÓ¦µ½ËùÓÐÐżþÖ÷Ö¼ÖÐÓÐ hello µÄÐżþ</li></ul> ! Magnet_MagnetType ¹æÔòÀà±ð ! Magnet_Value Öµ ! Magnet_Always ×ÜÊǹéÀൽ·ÖÀà ! ! Bucket_Error1 ·ÖÀàÖ»¿É°üº¬Ð¡Ð´µÄÓ¢ÎÄ a µ½ z ÒÔ¼° - Óë _ ! Bucket_Error2 ·ÖÀà %s ÒѾ´æÔÚ ! Bucket_Error3 ÒѾ½¨Á¢·ÖÀà %s ! Bucket_Error4 ÇëÊäÈë맪¿Õ°×µÄ×ÖÔª ! Bucket_Error5 ÖØÐÂÃüÃû·ÖÀà %s Ϊ %s ! Bucket_Error6 ÒѾɾ³ý·ÖÀà %s ! Bucket_Title ×ܽá ! Bucket_BucketName ·ÖÀàÃû³Æ ! Bucket_WordCount È«²¿µ¥×Ö×ÖÊý ! Bucket_WordCounts ³öÏÖ×ÖÊýͳ¼Æ ! Bucket_UniqueWords ·ÇÖØ¸´µ¥×Ö×ÖÊý ! Bucket_SubjectModification Ö÷Ö¼¼ÓÈë[·ÖÀàÃû³Æ] ! Bucket_ChangeColor ¸ü¸ÄÑÕÉ« ! Bucket_NotEnoughData ûÓÐ×ã¹»×ÊÁÏ ! Bucket_ClassificationAccuracy ·ÖÀà׼ȷÂÊ ! Bucket_EmailsClassified ÒÑ·ÖÀàµÄÐżþÊý ! Bucket_EmailsClassifiedUpper Ðżþ·ÖÀà½á¹û ! Bucket_ClassificationErrors ·ÖÀà´íÎó´ÎÊý ! Bucket_Accuracy ׼ȷÂÊ ! Bucket_ClassificationCount Ðżþ·ÖÀàͳ¼Æ ! Bucket_ResetStatistics ÖØÉèͳ¼Æ¼Ç¼ ! Bucket_LastReset ÉÏ´ÎÖØÉèʱ¼äΪ ! Bucket_CurrentColor %s ÏÖÔÚÑÕÉ«ÊÇ %s ! Bucket_SetColorTo ¸ü¸ÄÑÕÉ« %s Ϊ %s ! Bucket_Maintenance ά»¤ ! Bucket_CreateBucket ½¨Á¢·ÖÀà ! Bucket_DeleteBucket ɾ³ý·ÖÀà ! Bucket_RenameBucket ÖØÐÂÃüÃû·ÖÀà ! Bucket_Lookup ²é¿´ ! Bucket_LookupMessage ²é¿´·ÖÀàÖеĵ¥×Ö ! Bucket_LookupMessage2 ²é¿´½á¹û ! Bucket_LookupMostLikely <b>%s</b> ×î³£³öÏÖÔÚ·ÖÀà <font color="%s">%s</font> ! Bucket_DoesNotAppear <p><b>%s</b> ûÓгöÏÖÔÚÈκηÖÀàÖÐ ! Bucket_DisabledGlobally È«²¿Í£Ö¹ ! Bucket_To Ϊ ! Bucket_Quarantine ¸ôÀë ! ! SingleBucket_Title Ïêϸ×ÊÁÏ %s ! SingleBucket_WordCount ·ÖÀà×ÖÊýͳ¼Æ ! SingleBucket_TotalWordCount È«²¿×ÖÊýͳ¼Æ ! SingleBucket_Percentage Õ¼°Ù·Ö±È ! SingleBucket_WordTable ×Ö±í %s ! SingleBucket_Message1 ±êʾ (*) µÄµ¥×Ö´ú±íÒѱ»Ê¹ÓÃÔÚ POPFile ÕâÒ»´Î Session µÄ·ÖÀàÖÐ. °´ÈκÎÒ»¸öµ¥×ÖÈ¥²é¿´ËûÔÚÿһ¸ö·ÖÀàÖгöÏߵĻúÂÊ. ! SingleBucket_Unique %s ·ÇÖØ¸´ ! ! Session_Title POPFile Session ÒѾ¹ýÆÚ ! Session_Error ÄãµÄ POPFile session ÒѾ¹ýÆÚ. This could have been caused by starting and stopping POPFile but leaving your web browser open. Please click one of the links above to continue using POPFile. ! ! ! Header_MenuSummary This table is the navigation menu which allows access to each of the different pages of the control center. ! History_MainTableSummary This table shows the sender and subject of recently received messages and allows them to be reviewed and reclassified. Clicking on the subject line will show the full message text, along with information about why it was classified as it was. The 'Should be' column allows you to specify which bucket the message belongs in, or to undo that change. The 'Delete' column allows you to delete specific messages from the history if you don't need them anymore. ! History_OpenMessageSummary This table contains the full text of an email message, with the words that are used for classification highlighted according to the bucket that was most relevant for each. ! Bucket_MainTableSummary This table provides an overview of the classification buckets. Each row shows the bucket name, the word count total for that bucket, the actual number of individual words in each bucket, whether the email's subject line will be modified when it gets classified to that bucket, whether to quarantine the messages received in that bucket, and a table to pick the color used in displaying anything related to that bucket in the control center. ! Bucket_StatisticsTableSummary This table provides three sets of statistics on the overall performance of POPFile. The first is how accurate its classification is, the second is how many emails have been classified, and to which buckets, and the third is how many words are in each bucket, and what their relative percentages are. ! Bucket_MaintenanceTableSummary This table contains forms that allow you to create, delete or rename buckets, and to lookup a word in all of the buckets to see its relative probabilities. ! Bucket_AccuracyChartSummary This table graphically represents the accuracy of the email classification. ! Bucket_BarChartSummary This table graphically represents a percentage allocation for each of the different buckets. It is used for both number of emails classified, and total word counts. ! Bucket_LookupResultsSummary This table shows the probabilities associated with any given word of the corpus. For each bucket, it shows the frequency that that word occurs, the probability that it will occur in that bucket, and the overall effect on the score of the bucket if that word exists in an email. ! Bucket_WordListTableSummary This table provides a listing of all the words for a particular bucket, organized by common first letter for each row. ! Magnet_MainTableSummary This table shows the list of magnets that are used to automatically classify email according to fixed rules. Each row shows how the magnet is defined, what bucket it is intended for, and a button to delete the magnet. ! Configuration_MainTableSummary This table contains a number of forms to allow you to control the configuration of POPFile. ! Configuration_InsertionTableSummary This table contains buttons that determine whether or not certain modifications are made to the headers or subject line of the email before it is passed on to the email client. ! Security_MainTableSummary This table provides sets of controls that affect the security of the overall configuration of POPFile, whether it should automatically check for updates to the program, and whether statistics about POPFile's performance should be sent to the central datastore of the program's author for general information. ! Advanced_MainTableSummary This table provides a list of words that POPFile ignores when classifying email due to their relative frequency in email in general. They are organized per row according to the first letter of the words. ! --- 1,267 ---- ! # Copyright (c) 2001-2003 John Graham-Cumming ! # POPFile 0.18.1 Simplified Chinese Translation, Created By Mark Wu, 2003/03/04 ! # POPFile 0.19.0 Simplified Chinese Translation, Modified By Mark Wu, 2003/06/02 ! ! # Identify the language and character set used for the interface ! LanguageCode cn ! LanguageCharset GB2312 ! ! # This is used to get the appropriate subdirectory for the manual ! ManualLanguage en ! ! # Common words that are used on their own all over the interface ! Apply Ì×Óà ! On ¿ª ! Off ¹Ø ! TurnOn ¿ªÆô ! TurnOff ¹Ø±Õ ! Add ¼ÓÈë ! Remove ÒÆ³ý ! Previous ÉÏÒ»Ò³ ! Next ÏÂÒ»Ò³ ! From ¼Ä¼þÕß ! Subject Ö÷Ö¼ ! Cc ¸±±¾ ! Classification ·ÖÀà ! Reclassify ÖØÐ·ÖÀà ! Probability »úÂÊ ! Scores ·ÖÊý ! QuickMagnets ¿ìËÙ¹æÔò¾«Áé ! Undo ¸´Ô ! Close ¹Ø±Õ ! Find ËÑѰ ! Filter ¹ýÂË ! Yes ÊÇ ! No ·ñ ! ChangeToYes ÊÇ ! ChangeToNo ·ñ ! Bucket ·ÖÀà ! Magnet ¹æÔò ! Delete ɾ³ý ! Create ½¨Á¢ ! To ÊÕ¼þÕß ! Total È«²¿ ! Rename ÖØÐÂÃüÃû ! Frequency ƵÂÊ ! Probability »úÂÊ ! Score ·ÖÊý ! Lookup ²é¿´ ! Word µ¥×Ö ! Count ¼ÆÊý ! Update ¸üР! Refresh ÖØÐÂÕûÀí ! ! # The header and footer that appear on every UI page ! Header_Title POPFile ¿ØÖÆÌ¨ ! Header_Shutdown Í£Ö¹ POPFile ! Header_History ÀúÊ· ! Header_Buckets ·ÖÀà ! Header_Configuration É趨 ! Header_Advanced ½ø½× ! Header_Security °²È« ! Header_Magnets ¹æÔò ! ! Footer_HomePage POPFile Ê×Ò³ ! Footer_Manual ʹÓÃÊÖ²á ! Footer_Forums ÂÛ̳ ! Footer_FeedMe ÔÞÖú ! Footer_RequestFeature ¹¦Äܽ¨Òé ! Footer_MailingList ÓʼþȺ×é ! ! Configuration_Error1 ·Ö¸ô×ÖÔª±ØÐëΪµ¥Ò»×ÖÔª ! Configuration_Error2 ʹÓÃÕß½éÃæÁ¬½Ó²º±ØÐë½éÓÚ 1 µ½ 65535 Ö®¼ä ! Configuration_Error3 POP3 ËÅ·þÆ÷Á¬½Ó²º±ØÐë½éÓÚ 1 µ½ 65535 Ö®¼ä ! Configuration_Error4 ÿһҳÏÔʾÐżþÊý±ØÐë½éÓÚ 1 µ½ 1000 Ö®¼ä ! Configuration_Error5 ÀúÊ·¼Í¼ÌìÊý±ØÐë½éÓÚ 1 µ½ 366 Ö®¼ä ! Configuration_Error6 Á¬½ÓÓâʱÃëÊý½éÓÚ 10 µ½ 300 Ö®¼ä ! Configuration_Error7 XML-RPC ½ÓÊÕ²º±ØÐë½éÓÚ 1 µ½ 65535 Ö®¼ä ! Configuration_POP3Port POP3 ËÅ·þÆ÷Á¬½Ó²º ! Configuration_POP3Update ¸üРPOP3 ËÅ·þÆ÷Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Configuration_XMLRPCUpdate ¸üРXML-RPC Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Configuration_XMLRPCPort XML-RPC Á¬½Ó²º ! Configuration_SMTPPort SMTP ËÅ·þÆ÷Á¬½Ó²º ! Configuration_SMTPUpdate ¸üРSMTP ËÅ·þÆ÷Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Configuration_NNTPPort NNTP ËÅ·þÆ÷Á¬½Ó²º ! Configuration_NNTPUpdate ¸üРNNTP ËÅ·þÆ÷Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Configuration_POP3Separator SMTP ËÅ·þÆ÷ host:port:user ·Ö¸ô×ÖÔª ! Configuration_NNTPSeparator NNTP ËÅ·þÆ÷ host:port:user ·Ö¸ô×ÖÔª ! Configuration_POP3SepUpdate ¸üРPOP3 ËÅ·þÆ÷·Ö¸ô×ÖԪΪ %s ! Configuration_NNTPSepUpdate ¸üРNNTP ËÅ·þÆ÷·Ö¸ô×ÖԪΪ %s ! Configuration_UI ʹÓÃÕß½éÃæÁ¬½Ó²º ! Configuration_UIUpdate ¸ü¸ÄʹÓÃÕß½éÃæÁ¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Configuration_History ÿһҳÏÔʾÐżþÊý ! Configuration_HistoryUpdate ¸ü¸ÄÿһҳÏÔʾÐżþÊýΪ to %s ! Configuration_Days ÀúÊ·¼Í¼ÌìÊý ! Configuration_DaysUpdate ¸ü¸ÄÀúÊ·¼Í¼ÌìÊýΪ %s ! Configuration_UserInterface ʹÓÃÕß½éÃæ ! Configuration_Skins Ãæ°æ ! Configuration_SkinsChoose Ñ¡ÔñÃæ°æ ! Configuration_Language ÓïÑÔ ! Configuration_LanguageChoose Ñ¡ÔñÓïÑÔ ! Configuration_ListenPorts Ä£×éÑ¡Ïî ! Configuration_HistoryView ÀúÊ·¼ìÊÓ ! Configuration_TCPTimeout Á¬½ÓÓâʱ ! Configuration_TCPTimeoutSecs Á¬½ÓÓâʱÃëÊý ! Configuration_TCPTimeoutUpdate ¸üÐÂÁ¬½ÓÓâʱÃëÊýΪ %s Ãë ! Configuration_ClassificationInsertion E-Mail ÄÚÈÝÐÞ¸Ä ! Configuration_SubjectLine ÐżþÖ÷Ö¼ÐÞ¸Ä ! Configuration_XTCInsertion ¼ÓÈë X-Text-Classification µ½Ðżþ±êÌâÖÐ ! Configuration_XPLInsertion ¼ÓÈë X-POPFile-Link µ½Ðżþ±êÌâÖÐ ! Configuration_Logging ¼Í¼ ! Configuration_None ÎÞ ! Configuration_ToScreen Êä³öµ½Ó©Ä» ! Configuration_ToFile Êä³öµ½µµ°¸ ! Configuration_ToScreenFile Êä³öµ½Ó©Ä»Óëµµ°¸ ! Configuration_LoggerOutput ¼Ç¼Êä³ö·½Ê½ ! Configuration_GeneralSkins Ãæ°æ ! Configuration_SmallSkins Ãæ°æ(С×ÖÐÎ) ! Configuration_TinySkins Ãæ°æ(ÃÔÄã×ÖÐÎ) ! Configuration_CurrentLogFile <ÏÖÔÚÔË×÷Öеļͼµµ> ! ! Advanced_Error1 '%s' ÒѾ´æÔÚºöÂÔµ¥×Ö×Ö±íÖÐ ! Advanced_Error2 ºöÂÔµ¥×ÖÖ»¿É°üº¬Ó¢ÎÄ,Êý×Ö, ., _, -, »ò @ µÈ×ÖÔª ! Advanced_Error3 '%s' ÒѾ¼ÓÈëºöÂÔµ¥×Ö×Ö±íÖÐ ! Advanced_Error4 '%s' ²»´æÔÚºöÂÔµ¥×Ö×Ö±íÖÐ ! Advanced_Error5 '%s' ÒѾ´ÓºöÂÔµ¥×Ö×Ö±íÖÐÒÆ³ý ! Advanced_StopWords ºöÂÔµ¥×Ö×Ö±í ! Advanced_Message1 POPFile »áºöÂÔÒÔϳöÏÖÆµÂʽϸߵĵ¥×Ö: ! Advanced_AddWord ¼ÓÈëµ¥×Ö ! Advanced_RemoveWord ÒÆ³ýµ¥×Ö ! ! History_Filter (ÏÔʾ·ÖÀà <font color="%s">%s</font>) ! History_FilterBy ¹ýÂËÌõ¼þ ! History_Search (ËÑѰ¼Ä¼þÕß/Ö÷Ö¼ %s) ! History_Title ×î½üÐżþ ! History_Jump ÒÆÖÁÐżþ ! History_ShowAll È«²¿ÏÔʾ ! History_ShouldBe Ó¦¸ÃÊÇ ! History_NoFrom ûÓмļþÕß ! History_NoSubject ûÓÐÖ÷Ö¼ ! History_ClassifyAs ·ÖÀàΪ ! History_MagnetUsed ʹÓùæÔò ! History_MagnetBecause <b>ʹÓùæÔò</b><p>·ÖÀàΪ <font color="%s">%s</font> ÒòΪ¹æÔò %s </p> ! History_ChangedTo ¸Ä±äΪ <font color="%s">%s ! History_Already ÒÑ¾ÖØÐ·ÖÀàΪ <font color="%s">%s</font> ! History_RemoveAll È«²¿ÒƳý ! History_RemovePage ÒÆ³ýÕâÒ»Ò³ ! History_Remove ÒÆ³ýÀúÊ·Ðżþ ! History_SearchMessage ËÑѰ¼Ä¼þÕß/Ö÷Ö¼ ! History_NoMessages ûÓÐÈκÎѶϢ ! History_ShowMagnet ʹÓùæÔò ! History_ShowNoMagnet δʹÓùæÔò ! History_Magnet (Ö»ÏÔʾʹÓùæÔò·ÖÀàµÄÐżþ) ! History_NoMagnet (Ö»ÏÔʾδʹÓùæÔò·ÖÀàµÄÐżþ) ! History_ResetSearch ÖØÉè ! ! Password_Title ÃÜÂë ! Password_Enter ÊäÈëÃÜÂë ! Password_Go ½øÈë ! Password_Error1 ÃÜÂë´íÎó ! ! Security_Error1 POP3 SPA/AUTH ·þÆ÷Á¬½Ó²º±ØÐë½éÓÚ 1 µ½ 65535 Ö®¼ä ! Security_Stealth µ¥»ú/Ö÷»úģʽÉ趨 ! Security_NoStealthMode ·ñ (µ¥»úģʽ) ! Security_ExplainStats (¿ªÆôÕâÏÄÜ, »áʹ POPFile ÿÌì´«ËÍÈýÏîÌØ¶¨µÄ×ÊÁϵ½ www.usethesource.com: °üº¬ bc (ËùÓзÖÀàµÄ¸öÊý), mc (ËùÓÐ POPFile ·ÖÀà¹ýµÄÐżþÊý) and ec (ËùÓеķÖÀà´íÎó´ÎÊý). POPFile ÍøÕ¾»áÀûÓÃÕâЩ×ÊÁÏÀ´Í³¼Æ²¢·ÖÎöʹÓÃÕßÈçºÎÀ´Ó¦Óà POPFile. POPFile ÍøÕ¾»á½«ÕâЩ×ÊÁϱ£ÁôÎåÌì, ÎåÌìºó»á×Ô¶¯½«ÕâЩ×ÊÁÏ´Ó×ÊÁÏ¿âÖÐÒÆ³ý; POPFile ÍøÕ¾Ã»Óб£ÁôÈκÎÄãµÄIPλַÔÚÕâЩ´«ÊäµÄ×ÊÁÏÖÐ.) ! Security_ExplainUpdate (¿ªÆôÕâÏÄÜ, »áʹ POPFile ÿÌì´«ËÍÈýÏîÌØ¶¨µÄ×ÊÁϵ½ www.usethesource.com: °üº¬ ma (Äã°²×°µÄ POPFile µÄÖ÷Òª°æ±¾), mi (Äã°²×°µÄ POPFile µÄ´ÎÒª°æ±¾) and bn (Äã°²×°µÄ POPFile µÄ½¨Á¢´úÂë). Èç¹û POPFile µÄÐÂ°æ´æÔÚ, »áÔÚ POPFile ¿ØÖÆÖÐÐÄÊ×Ò³ÏÔʾ¸üÐÂ×ÊѶ. POPFile ÍøÕ¾»á½«ÕâЩ×ÊÁϱ£ÁôÎåÌì, ÎåÌìºó»á×Ô¶¯½«ÕâЩ×ÊÁÏ´Ó×ÊÁÏ¿âÖÐÒÆ³ý; POPFile ÍøÕ¾Ã»Óб£ÁôÈκÎÄãµÄIPλַÔÚÕâЩ´«ÊäµÄ×ÊÁÏÖÐ.) ! Security_PasswordTitle ʹÓÃÕß½éÃæÃÜÂëÉ趨 ! Security_Password ÃÜÂë ! Security_PasswordUpdate ¸ü¸ÄÃÜÂëΪ %s ! Security_AUTHTitle Ô¶¶ËËÅ·þÆ÷ ! Security_SecureServer POP3 SPA/AUTH ËÅ·þÆ÷ ! Security_SecureServerUpdate ¸üРPOP3 SPA/AUTH ËÅ·þÆ÷Ϊ %s; ÐèÖØÐÂÆô¶¯ POPFile ! Security_SecurePort POP3 SPA/AUTH ËÅ·þÆ÷Á¬½Ó²º ! Security_SecurePortUpdate ¸üРPOP3 SPA/AUTH ËÅ·þÆ÷Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ POPFile ! Security_SMTPServer SMTP ËÅ·þÆ÷ ! Security_SMTPServerUpdate ¸üРSMTP ËÅ·þÆ÷Ϊ %s; ÐèÖØÐÂÆô¶¯ POPFile ! Security_SMTPPort SMTP ËÅ·þÆ÷Á¬½Ó²º ! Security_SMTPPortUpdate ¸üРSMTP ËÅ·þÆ÷Á¬½Ó²ºÎª %s; ÐèÖØÐÂÆô¶¯ ! Security_POP3 ÔÊÐíÔ¶¶Ë¿ªÆô POP3 Á¬Ïß; ÐèÖØÐÂÆô¶¯ POPFile ! Security_SMTP ÔÊÐíÔ¶¶Ë¿ªÆô SMTP Á¬Ïß; ÐèÖØÐÂÆô¶¯ POPFile ! Security_NNTP ÔÊÐíÔ¶¶Ë¿ªÆô NNTP Á¬Ïß; ÐèÖØÐÂÆô¶¯ POPFile ! Security_UI ÔÊÐíÔ¶¶Ë¿ªÆô HTTP Á¬Ïßµ½Ê¹ÓÃÕß½éÃæ; ÐèÖØÐÂÆô¶¯ POPFile ! Security_XMLRPC ÔÊÐíÔ¶¶Ë¿ªÆô XML-RPC Á¬Ïß; ÐèÖØÐÂÆô¶¯ POPFile ! Security_UpdateTitle ×Ô¶¯¸üмì²é ! Security_Update ÿÌì¼ì²é POPFile ÊÇ·ñÓиüа汾 ! Security_StatsTitle ±¨¸æÍ³¼Æ×ÊÁÏ ! Security_Stats ÿÌì´«ËÍͳ¼Æ×ÊÁÏ ! ! Magnet_Error1 ¹æÔò '%s' ÒѾ´æÔÚ·ÖÀà '%s' ÖÐ ! Magnet_Error2 йæÔò '%s' Óë¹æÔò '%s' ÔÚ·ÖÀà '%s' ÖÐÖØ¸´£¬¿ÉÄܻᵼÖÂÎóÅÐ. йæÔòδ¼ÓÈë. ! Magnet_Error3 ½¨Á¢Ð¹æÔò '%s' ÔÚ·ÖÀà '%s' ÖÐ ! Magnet_CurrentMagnets ÏÖÓйæÔò ! Magnet_Message1 ÒÔÏµĹæÔò»áʹµÄÐżþ×ÜÊǹéÀàµ½ÌØ¶¨µÄ·ÖÀàÖÐ. ! Magnet_CreateNew ½¨Á¢Ð¹æÔò ! Magnet_Explanation ÏÖÓйæÔòÀà±ð:</b> <ul><li><b>¼Ä¼þÕߵĵç×ÓÓʼþÐÅÏä»òÐÕÃû:</b> ÀýÈç: jo...@co... ¶ÔÓ¦µ½Ò»¸öÌØ¶¨µÄµç×ÓÓʼþÐÅÏä, <br />company.com ¶ÔÓ¦µ½Ã¿Ò»¸öÀ´×ÔÓÚ company.com µÄ¼Ä¼þÕß, <br />John Doe ¶ÔÓ¦µ½Ò»¸öÌØ¶¨µÄÐÕÃû, John ¶ÔÓ¦µ½Ã¿Ò»¸öÃû×ÖÖÐÓÐ John µÄÈË</li><li><b>ÊÕ¼þÕß/¸±±¾µÄµç×ÓÓʼþÐÅÏä»òÐÕÃû:</b> Èçͬ¼Ä¼þÕߵĹæÔòÀà±ðÒ»Ñù£¬Ö»ÊÇÕâÏî¹æÔòÀà±ðÊÇÕë¶ÔÊÕ¼þÕß/¸±±¾</li> <li><b>ÐżþÖ÷Ö¼ÖеÄÌØ¶¨µ¥×Ö</b> ÀýÈç: hello »á¶ÔÓ¦µ½ËùÓÐÐżþÖ÷Ö¼ÖÐÓÐ hello µÄÐżþ</li></ul> ! Magnet_MagnetType ¹æÔòÀà±ð ! Magnet_Value Öµ ! Magnet_Always ×ÜÊǹéÀൽ·ÖÀà ! Magnet_Jump ÒÆÖÁ¹æÔò(Ò³) ! ! Bucket_Error1 ·ÖÀàÖ»¿É°üº¬Ð¡Ð´µÄÓ¢ÎÄ a µ½ z ÒÔ¼° - Óë _ ! Bucket_Error2 ·ÖÀà %s ÒѾ´æÔÚ ! Bucket_Error3 ÒѾ½¨Á¢·ÖÀà %s ! Bucket_Error4 ÇëÊäÈë맪¿Õ°×µÄ×ÖÔª ! Bucket_Error5 ÖØÐÂÃüÃû·ÖÀà %s Ϊ %s ! Bucket_Error6 ÒѾɾ³ý·ÖÀà %s ! Bucket_Title ×ܽá ! Bucket_BucketName ·ÖÀàÃû³Æ ! Bucket_WordCount È«²¿µ¥×Ö×ÖÊý ! Bucket_WordCounts ³öÏÖ×ÖÊýͳ¼Æ ! Bucket_UniqueWords ·ÇÖØ¸´µ¥×Ö×ÖÊý ! Bucket_SubjectModification ÐżþÖ÷Ö¼ÐÞ¸Ä ! Bucket_ChangeColor ¸ü¸ÄÑÕÉ« ! Bucket_NotEnoughData ûÓÐ×ã¹»×ÊÁÏ ! Bucket_ClassificationAccuracy ·ÖÀà׼ȷÂÊ ! Bucket_EmailsClassified ÒÑ·ÖÀàµÄÐżþÊý ! Bucket_EmailsClassifiedUpper Ðżþ·ÖÀà½á¹û ! Bucket_ClassificationErrors ·ÖÀà´íÎó´ÎÊý ! Bucket_Accuracy ׼ȷÂÊ ! Bucket_ClassificationCount Ðżþ·ÖÀàͳ¼Æ ! Bucket_ClassificationFP ´íÎó·ÖÀà ! Bucket_ClassificationFN ÎÞ·¨·ÖÀà ! Bucket_ResetStatistics ÖØÉèͳ¼Æ¼Ç¼ ! Bucket_LastReset ÉÏ´ÎÖØÉèʱ¼äΪ ! Bucket_CurrentColor %s ÏÖÔÚÑÕÉ«ÊÇ %s ! Bucket_SetColorTo ¸ü¸ÄÑÕÉ« %s Ϊ %s ! Bucket_Maintenance ά»¤ ! Bucket_CreateBucket ½¨Á¢·ÖÀà ! Bucket_DeleteBucket ɾ³ý·ÖÀà ! Bucket_RenameBucket ÖØÐÂÃüÃû·ÖÀà ! Bucket_Lookup ²é¿´ ! Bucket_LookupMessage ²é¿´·ÖÀàÖеĵ¥×Ö ! Bucket_LookupMessage2 ²é¿´½á¹û ! Bucket_LookupMostLikely <b>%s</b> ×î³£³öÏÖÔÚ·ÖÀà <font color="%s">%s</font> ! Bucket_DoesNotAppear <p><b>%s</b> ûÓгöÏÖÔÚÈκηÖÀàÖÐ ! Bucket_DisabledGlobally È«²¿Í£Ö¹ ! Bucket_To Ϊ ! Bucket_Quarantine ¸ôÀë ! ! SingleBucket_Title Ïêϸ×ÊÁÏ %s ! SingleBucket_WordCount ·ÖÀà×ÖÊýͳ¼Æ ! SingleBucket_TotalWordCount È«²¿×ÖÊýͳ¼Æ ! SingleBucket_Percentage Õ¼°Ù·Ö±È ! SingleBucket_WordTable ×Ö±í %s ! SingleBucket_Message1 ±êʾ (*) µÄµ¥×Ö´ú±íÒѱ»Ê¹ÓÃÔÚ POPFile ÕâÒ»´Î Session µÄ·ÖÀàÖÐ. °´ÈκÎÒ»¸öµ¥×ÖÈ¥²é¿´ËûÔÚÿһ¸ö·ÖÀàÖгöÏߵĻúÂÊ. ! SingleBucket_Unique %s ·ÇÖØ¸´ ! SingleBucket_ClearBucket ÒÆ³ýËùÓе¥×Ö ! ! Session_Title POPFile Session ÒѾ¹ýÆÚ ! Session_Error ÄãµÄ POPFile session ÒѾ¹ýÆÚ. This could have been caused by starting and stopping POPFile but leaving your web browser open. Please click one of the links above to continue using POPFile. ! ! View_Title µ¥Ò»Ñ¶Ï¢¼ìÊÓ ! ! Header_MenuSummary This table is the navigation menu which allows access to each of the different pages of the control center. ! History_MainTableSummary This table shows the sender and subject of recently received messages and allows them to be reviewed and reclassified. Clicking on the subject line will show the full message text, along with information about why it was classified as it was. The 'Should be' column allows you to specify which bucket the message belongs in, or to undo that change. The 'Delete' column allows you to delete specific messages from the history if you don't need them anymore. ! History_OpenMessageSummary This table contains the full text of an email message, with the words that are used for classification highlighted according to the bucket that was most relevant for each. ! Bucket_MainTableSummary This table provides an overview of the classification buckets. Each row shows the bucket name, the word count total for that bucket, the actual number of individual words in each bucket, whether the email's subject line will be modified when it gets classified to that bucket, whether to quarantine the messages received in that bucket, and a table to pick the color used in displaying anything related to that bucket in the control center. ! Bucket_StatisticsTableSummary This table provides three sets of statistics on the overall performance of POPFile. The first is how accurate its classification is, the second is how many emails have been classified, and to which buckets, and the third is how many words are in each bucket, and what their relative percentages are. ! Bucket_MaintenanceTableSummary This table contains forms that allow you to create, delete or rename buckets, and to lookup a word in all of the buckets to see its relative probabilities. ! Bucket_AccuracyChartSummary This table graphically represents the accuracy of the email classification. ! Bucket_BarChartSummary This table graphically represents a percentage allocation for each of the different buckets. It is used for both number of emails classified, and total word counts. ! Bucket_LookupResultsSummary This table shows the probabilities associated with any given word of the corpus. For each bucket, it shows the frequency that that word occurs, the probability that it will occur in that bucket, and the overall effect on the score of the bucket if that word exists in an email. ! Bucket_WordListTableSummary This table provides a listing of all the words for a particular bucket, organized by common first letter for each row. ! Magnet_MainTableSummary This table shows the list of magnets that are used to automatically classify email according to fixed rules. Each row shows how the magnet is defined, what bucket it is intended for, and a button to delete the magnet. ! Configuration_MainTableSummary This table contains a number of forms to allow you to control the configuration of POPFile. ! Configuration_InsertionTableSummary This table contains buttons that determine whether or not certain modifications are made to the headers or subject line of the email before it is passed on to the email client. ! Security_MainTableSummary This table provides sets of controls that affect the security of the overall configuration of POPFile, whether it should automatically check for updates to the program, and whether statistics about POPFile's performance should be sent to the central datastore of the program's author for general information. ! Advanced_MainTableSummary This table provides a list of words that POPFile ignores when classifying email due to their relative frequency in email in general. They are organized per row according to the first letter of the words. \ No newline at end of file Index: Chinese-Traditional.msg =================================================================== RCS file: /cvsroot/popfile/engine/languages/Chinese-Traditional.msg,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Chinese-Traditional.msg 4 Mar 2003 01:17:37 -0000 1.1 --- Chinese-Traditional.msg 9 Jun 2003 18:29:22 -0000 1.2 *************** *** 1,4 **** # Copyright (c) 2001-2003 John Graham-Cumming ! # Traditional Chinese Translated By Mark Wu, 2003/03/04 # Identify the language and character set used for the interface --- 1,5 ---- # Copyright (c) 2001-2003 John Graham-Cumming ! # POPFile 0.18.1 Traditional Chinese Translation, Created By Mark Wu, 2003/03/04 ! # POPFile 0.19.0 Traditional Chinese Translation, Modified By Mark Wu, 2003/06/02 # Identify the language and character set used for the interface *************** *** 21,26 **** --- 22,31 ---- From ±H¥óªÌ Subject ¥D¦® + Cc °Æ¥» Classification ¤ÀÃþ Reclassify «·s¤ÀÃþ + Probability ¾÷²v + Scores ¤À¼Æ + QuickMagnets §Ö³t³W«hºëÆF Undo ´_ì Close Ãö³¬ *************** *** 42,45 **** --- 47,54 ---- Score ¤À¼Æ Lookup ¬d¬Ý + Word ³æ¦r + Count p¼Æ + Update §ó·s + Refresh «·s¾ã²z # The header and footer that appear on every UI page *************** *** 62,73 **** Configuration_Error1 ¤À¹j¦r¤¸¥²¶·¬°³æ¤@¦r¤¸ Configuration_Error2 ¨Ï¥ÎªÌ¤¶±³s±µ°ð¥²¶·¤¶©ó 1 ¨ì 65535 ¤§¶¡ ! Configuration_Error3 ¤º±H¦øªA¾¹³s±µ°ð¥²¶·¤¶©ó 1 ¨ì 65535 ¤§¶¡ Configuration_Error4 ¨C¤@¶Åã¥Ü«H¥ó¼Æ¥²¶·¤¶©ó 1 ¨ì 1000 ¤§¶¡ Configuration_Error5 ¾ú¥v¬ö¿ý¤Ñ¼Æ¥²¶·¤¶©ó 1 ¨ì 366 ¤§¶¡ ! Configuration_Error6 TCP ³s±µ¹O®É¬í¼Æ¤¶©ó 10 ¨ì 300 ¤§¶¡ ! Configuration_POP3Port ¤º±H¦øªA¾¹³s±µ°ð ! Configuration_POP3Update §ó§ï¤º±H¦øªA¾¹³s±µ°ð¬° %s; »Ý«·s±Ò°Ê POPFile ! Configuration_Separator ¤À¹j¦r¤¸ ! Configuration_SepUpdate §ó§ï¤À¹j¦r¤¸¬° %s Configuration_UI ¨Ï¥ÎªÌ¤¶±³s±µ°ð Configuration_UIUpdate §ó§ï¨Ï¥ÎªÌ¤¶±³s±µ°ð¬° %s; »Ý«·s±Ò°Ê POPFile --- 71,91 ---- Configuration_Error1 ¤À¹j¦r¤¸¥²¶·¬°³æ¤@¦r¤¸ Configuration_Error2 ¨Ï¥ÎªÌ¤¶±³s±µ°ð¥²¶·¤¶©ó 1 ¨ì 65535 ¤§¶¡ ! Configuration_Error3 POP3 ¦øªA¾¹³s±µ°ð¥²¶·¤¶©ó 1 ¨ì 65535 ¤§¶¡ Configuration_Error4 ¨C¤@¶Åã¥Ü«H¥ó¼Æ¥²¶·¤¶©ó 1 ¨ì 1000 ¤§¶¡ Configuration_Error5 ... [truncated message content] |
From: <xue...@us...> - 2003-06-08 12:55:09
|
Update of /cvsroot/popfile/windows In directory sc8-pr-cvs1:/tmp/cvs-serv18953 Modified Files: installer.nsi Log Message: Use the icon in POPFileIcon.DLL for the POPFile shortcuts. Index: installer.nsi =================================================================== RCS file: /cvsroot/popfile/windows/installer.nsi,v retrieving revision 1.56 retrieving revision 1.57 diff -C2 -d -r1.56 -r1.57 *** installer.nsi 31 May 2003 19:55:21 -0000 1.56 --- installer.nsi 8 Jun 2003 12:55:05 -0000 1.57 *************** *** 409,415 **** SetOutPath $INSTDIR CreateShortCut "$SMPROGRAMS\POPFile\Run POPFile.lnk" \ ! "$INSTDIR\perl.exe" popfile.pl CreateShortCut "$SMPROGRAMS\POPFile\Run POPFile in background.lnk" \ ! "$INSTDIR\wperl.exe" popfile.pl CreateShortCut "$SMPROGRAMS\POPFile\Uninstall POPFile.lnk" \ "$INSTDIR\uninstall.exe" --- 409,417 ---- SetOutPath $INSTDIR CreateShortCut "$SMPROGRAMS\POPFile\Run POPFile.lnk" \ ! "$INSTDIR\perl.exe" popfile.pl \ ! "$INSTDIR\Platform\POPFileIcon.dll" CreateShortCut "$SMPROGRAMS\POPFile\Run POPFile in background.lnk" \ ! "$INSTDIR\wperl.exe" popfile.pl \ ! "$INSTDIR\Platform\POPFileIcon.dll" CreateShortCut "$SMPROGRAMS\POPFile\Uninstall POPFile.lnk" \ "$INSTDIR\uninstall.exe" *************** *** 432,436 **** SetOutPath $INSTDIR CreateShortCut "$SMSTARTUP\Run POPFile in background.lnk" \ ! "$INSTDIR\wperl.exe" popfile.pl skip_autostart_set: --- 434,439 ---- SetOutPath $INSTDIR CreateShortCut "$SMSTARTUP\Run POPFile in background.lnk" \ ! "$INSTDIR\wperl.exe" popfile.pl \ ! "$INSTDIR\Platform\POPFileIcon.dll" skip_autostart_set: |
From: <ssc...@us...> - 2003-06-07 03:13:16
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv29943 Modified Files: HTML.pm Log Message: magnets table now uses POST Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.165 retrieving revision 1.166 diff -C2 -d -r1.165 -r1.166 *** HTML.pm 2 Jun 2003 19:51:00 -0000 1.165 --- HTML.pm 7 Jun 2003 03:13:13 -0000 1.166 *************** *** 1358,1362 **** # magnet listing headings ! $body .= "<form action=\"/magnets\">\n"; $body .= "<table width=\"75%\" class=\"magnetsTable\" summary=\"$self->{language__}{Magnet_MainTableSummary}\">\n"; $body .= "<caption>$self->{language__}{Magnet_Message1}</caption>\n"; --- 1358,1362 ---- # magnet listing headings ! $body .= "<form action=\"/magnets\" method=\"POST\">\n"; $body .= "<table width=\"75%\" class=\"magnetsTable\" summary=\"$self->{language__}{Magnet_MainTableSummary}\">\n"; $body .= "<caption>$self->{language__}{Magnet_Message1}</caption>\n"; |
From: <ssc...@us...> - 2003-06-03 08:59:00
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv2783 Modified Files: Bayes.pm Log Message: consume long messages when toptoo is enabled Index: Bayes.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/Bayes.pm,v retrieving revision 1.147 retrieving revision 1.148 diff -C2 -d -r1.147 -r1.148 *** Bayes.pm 23 May 2003 14:58:12 -0000 1.147 --- Bayes.pm 3 Jun 2003 08:27:10 -0000 1.148 *************** *** 1020,1024 **** if ( $got_full_body == 0 ) { ! $self->echo_to_dot_( $mail, $client ) if ( $echo ); } else { if ( $classification ne 'unclassified' ) { --- 1020,1028 ---- if ( $got_full_body == 0 ) { ! if ( $echo ) { ! $self->echo_to_dot_( $mail, $client ); ! } else { ! $self->echo_to_dot_( $mail, undef ); ! } } else { if ( $classification ne 'unclassified' ) { *************** *** 1457,1462 **** # Check for an abort last if ( $self->{alive_} == 0 ); ! ! print $client $_; # The termination has to be a single line with exactly a dot on it and nothing --- 1461,1466 ---- # Check for an abort last if ( $self->{alive_} == 0 ); ! ! print $client $_ if ( defined( $client ) ); # The termination has to be a single line with exactly a dot on it and nothing |
From: <ssc...@us...> - 2003-06-03 08:39:21
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv9032 Modified Files: Tag: v0/18/1 Bayes.pm Log Message: consume long messages when toptoo is enabled Index: Bayes.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/Bayes.pm,v retrieving revision 1.107.2.6 retrieving revision 1.107.2.7 diff -C2 -d -r1.107.2.6 -r1.107.2.7 *** Bayes.pm 25 May 2003 04:32:48 -0000 1.107.2.6 --- Bayes.pm 3 Jun 2003 08:39:18 -0000 1.107.2.7 *************** *** 963,970 **** print $client $msg_body; ! if ( $got_full_body == 0 ) { ! echo_to_dot( $self, $mail, $client ); ! } else { ! print $client ".$eol"; } } --- 963,975 ---- print $client $msg_body; ! ! print $client ".$eol"; ! } ! ! if ( $got_full_body == 0 ) { ! if ($echo) { ! $self->echo_to_dot( $mail, $client ); ! } else { ! $self->echo_to_dot( $mail, undef); } } *************** *** 1001,1005 **** last if ( $self->{alive} == 0 ); ! print $client $_; # The termination has to be a single line with exactly a dot on it and nothing --- 1006,1010 ---- last if ( $self->{alive} == 0 ); ! print $client $_ if ( defined($client) ); # The termination has to be a single line with exactly a dot on it and nothing |
From: <jgr...@us...> - 2003-06-02 19:51:05
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv23571/UI Modified Files: HTML.pm Log Message: Fix problem where an empty stopword list would crash the Advanced tab Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.164 retrieving revision 1.165 diff -C2 -d -r1.164 -r1.165 *** HTML.pm 30 May 2003 20:57:40 -0000 1.164 --- HTML.pm 2 Jun 2003 19:51:00 -0000 1.165 *************** *** 1177,1181 **** my $groupSize = 5; my $firstRow = 1; ! for my $word (sort keys %{$self->{classifier__}->get_stopword_list()}) { $word =~ /^(.)/; if ( $1 ne $last ) { --- 1177,1183 ---- my $groupSize = 5; my $firstRow = 1; ! my @words = $self->{classifier__}->get_stopword_list(); ! ! for my $word (sort @words) { $word =~ /^(.)/; if ( $1 ne $last ) { *************** *** 1209,1212 **** --- 1211,1215 ---- } } + $body .= "</td></tr>\n</table>\n"; |
From: <jgr...@us...> - 2003-06-02 19:51:04
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv23571/Classifier Modified Files: WordMangle.pm Log Message: Fix problem where an empty stopword list would crash the Advanced tab Index: WordMangle.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/WordMangle.pm,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** WordMangle.pm 20 May 2003 20:20:33 -0000 1.23 --- WordMangle.pm 2 Jun 2003 19:51:00 -0000 1.24 *************** *** 170,174 **** } ! return $self->{stop__}; } --- 170,174 ---- } ! return keys %{$self->{stop__}}; } |
From: <xue...@us...> - 2003-05-31 19:55:25
|
Update of /cvsroot/popfile/windows In directory sc8-pr-cvs1:/tmp/cvs-serv19770 Modified Files: installer.nsi Log Message: Updated to match the new CBP 'page' macro name, removed null leave function from custom page. Index: installer.nsi =================================================================== RCS file: /cvsroot/popfile/windows/installer.nsi,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** installer.nsi 27 May 2003 12:34:40 -0000 1.55 --- installer.nsi 31 May 2003 19:55:21 -0000 1.56 *************** *** 59,64 **** Page custom SetOptionsPage "CheckPortOptions" !insertmacro MUI_PAGE_INSTFILES ! !insertmacro CBP_PAGECOMMAND_SELECTBUCKETS "" ! Page custom SetOutlookOrOutlookExpressPage "" !insertmacro MUI_PAGE_FINISH --- 59,64 ---- Page custom SetOptionsPage "CheckPortOptions" !insertmacro MUI_PAGE_INSTFILES ! !insertmacro CBP_PAGE_SELECTBUCKETS ! Page custom SetOutlookOrOutlookExpressPage !insertmacro MUI_PAGE_FINISH |
From: <xue...@us...> - 2003-05-31 19:52:49
|
Update of /cvsroot/popfile/windows In directory sc8-pr-cvs1:/tmp/cvs-serv18905 Modified Files: CBP.nsh Log Message: Updated the 'page' macro to use the new MUI style, removed redundant code from CBP_HandleUserInput, corrected many defines. Index: CBP.nsh =================================================================== RCS file: /cvsroot/popfile/windows/CBP.nsh,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** CBP.nsh 27 May 2003 20:11:27 -0000 1.6 --- CBP.nsh 31 May 2003 19:52:43 -0000 1.7 *************** *** 26,30 **** ; ; #---------------------------------------------------------------------------------------- ! ; # CBP Configuration Data (to change the default settings, un-comment appropriate lines) ; #---------------------------------------------------------------------------------------- ; # ; Maximum number of buckets handled (in range 2 to 8) --- 26,30 ---- ; ; #---------------------------------------------------------------------------------------- ! ; # CBP Configuration Data (to override defaults, un-comment lines below and modify them) ; #---------------------------------------------------------------------------------------- ; # ; Maximum number of buckets handled (in range 2 to 8) *************** *** 102,105 **** --- 102,129 ---- #////////////////////////////////////////////////////////////////////////////////////////////// + ;============================================================================================ + ; (Informal) Coding standard for the CBP Package + ;============================================================================================ + + ; (1) All functions, macros and define statements use the 'CBP_' prefix + ; + ; (2) With the exception of some small library functions, 'defines' are used to give registers + ; 'meaningful' names and make maintenance easier. + ; + ; (3) Similarly, 'defines' are used for constants + ; + ; (4) Naming conventions: local registers are give names starting with 'CBP_L_' and + ; constants are given names starting with 'CBP_C_'. If global registers are introduced, + ; they should use names beginning with 'CBP_G_'. + ; + ; (5) All functions preserve register values using the stack (with the sole exception of the + ; 'leave' function for the custom page - it shares the same registers as the custom page + ; creator function in order to simplify the input validation process) + ; + ; (6) Parameters are passed on the stack (the sole exception is the custom page's + ; 'leave' function) + + ;============================================================================================ + ; Name of the INI file used to create the custom page for this package. Normally the ; 'CBP_CreateBucketsPage' function will call 'CBP_CreateINIfile' to create this INI file *************** *** 181,187 **** Push ${CBP_L_FILE_HANDLE} Push ${CBP_L_TEMP} ! StrCpy ${CBP_L_CORPUS} "" ! IfFileExists ${CBP_L_SOURCE}\popfile.cfg 0 check_default_corpus_locn --- 205,211 ---- Push ${CBP_L_FILE_HANDLE} Push ${CBP_L_TEMP} ! StrCpy ${CBP_L_CORPUS} "" ! IfFileExists ${CBP_L_SOURCE}\popfile.cfg 0 check_default_corpus_locn *************** *** 197,201 **** StrCmp ${CBP_L_RESULT} "bayes_corpus " got_new_corpus Goto loop ! got_old_corpus: StrCpy ${CBP_L_CORPUS} ${CBP_L_TEMP} "" 7 --- 221,225 ---- StrCmp ${CBP_L_RESULT} "bayes_corpus " got_new_corpus Goto loop ! got_old_corpus: StrCpy ${CBP_L_CORPUS} ${CBP_L_TEMP} "" 7 *************** *** 213,217 **** Pop ${CBP_L_CORPUS} StrCmp ${CBP_L_CORPUS} "" check_default_corpus_locn ! ; A non-null corpus parameter has been found in 'popfile.cfg' ; Strip leading/trailing quotes, if any --- 237,241 ---- Pop ${CBP_L_CORPUS} StrCmp ${CBP_L_CORPUS} "" check_default_corpus_locn ! ; A non-null corpus parameter has been found in 'popfile.cfg' ; Strip leading/trailing quotes, if any *************** *** 238,258 **** StrCpy ${CBP_L_TEMP} ${CBP_L_CORPUS} 1 StrCmp ${CBP_L_TEMP} "\" instdir_drive ! StrCpy ${CBP_L_TEMP} ${CBP_L_CORPUS} 1 1 StrCmp ${CBP_L_TEMP} ":" look_for_corpus_files ! ; Assume path can be safely added to $INSTDIR ! StrCpy ${CBP_L_CORPUS} $INSTDIR\${CBP_L_CORPUS} Goto look_for_corpus_files ! sub_folder: StrCpy ${CBP_L_CORPUS} ${CBP_L_CORPUS} "" 2 StrCpy ${CBP_L_CORPUS} $INSTDIR\${CBP_L_CORPUS} Goto look_for_corpus_files ! relative_folder: StrCpy ${CBP_L_RESULT} $INSTDIR ! relative_again: StrCpy ${CBP_L_CORPUS} ${CBP_L_CORPUS} "" 3 --- 262,282 ---- StrCpy ${CBP_L_TEMP} ${CBP_L_CORPUS} 1 StrCmp ${CBP_L_TEMP} "\" instdir_drive ! StrCpy ${CBP_L_TEMP} ${CBP_L_CORPUS} 1 1 StrCmp ${CBP_L_TEMP} ":" look_for_corpus_files ! ; Assume path can be safely added to $INSTDIR ! StrCpy ${CBP_L_CORPUS} $INSTDIR\${CBP_L_CORPUS} Goto look_for_corpus_files ! sub_folder: StrCpy ${CBP_L_CORPUS} ${CBP_L_CORPUS} "" 2 StrCpy ${CBP_L_CORPUS} $INSTDIR\${CBP_L_CORPUS} Goto look_for_corpus_files ! relative_folder: StrCpy ${CBP_L_RESULT} $INSTDIR ! relative_again: StrCpy ${CBP_L_CORPUS} ${CBP_L_CORPUS} "" 3 *************** *** 264,279 **** StrCpy ${CBP_L_CORPUS} ${CBP_L_RESULT}\${CBP_L_CORPUS} Goto look_for_corpus_files ! instdir_drive: StrCpy ${CBP_L_TEMP} $INSTDIR 2 StrCpy ${CBP_L_CORPUS} ${CBP_L_TEMP}${CBP_L_CORPUS} Goto look_for_corpus_files ! check_default_corpus_locn: StrCpy ${CBP_L_CORPUS} ${CBP_L_SOURCE}\corpus ! look_for_corpus_files: ; Save path in INI file for later use by 'CBP_MakePOPFileBucket' ! !insertmacro MUI_INSTALLOPTIONS_WRITE "${CBP_C_INIFILE}" \ "CBP Data" "CorpusPath" "${CBP_L_CORPUS}" --- 288,303 ---- StrCpy ${CBP_L_CORPUS} ${CBP_L_RESULT}\${CBP_L_CORPUS} Goto look_for_corpus_files ! instdir_drive: StrCpy ${CBP_L_TEMP} $INSTDIR 2 StrCpy ${CBP_L_CORPUS} ${CBP_L_TEMP}${CBP_L_CORPUS} Goto look_for_corpus_files ! check_default_corpus_locn: StrCpy ${CBP_L_CORPUS} ${CBP_L_SOURCE}\corpus ! look_for_corpus_files: ; Save path in INI file for later use by 'CBP_MakePOPFileBucket' ! !insertmacro MUI_INSTALLOPTIONS_WRITE "${CBP_C_INIFILE}" \ "CBP Data" "CorpusPath" "${CBP_L_CORPUS}" *************** *** 401,405 **** !insertmacro MUI_INSTALLOPTIONS_READ ${CBP_L_CORPUS} "${CBP_C_INIFILE}" \ "CBP Data" "CorpusPath" ! StrCpy ${CBP_L_UNC} ${CBP_L_CORPUS} 2 ; will be "\\" for UNC-format paths --- 425,429 ---- !insertmacro MUI_INSTALLOPTIONS_READ ${CBP_L_CORPUS} "${CBP_C_INIFILE}" \ "CBP Data" "CorpusPath" ! StrCpy ${CBP_L_UNC} ${CBP_L_CORPUS} 2 ; will be "\\" for UNC-format paths *************** *** 452,456 **** Pop ${CBP_L_CORPUS} Pop ${CBP_L_FIRST_FIELD} ! Exch ${CBP_L_COUNT} ; top of stack now has number of buckets we were unable to create --- 476,480 ---- Pop ${CBP_L_CORPUS} Pop ${CBP_L_FIRST_FIELD} ! Exch ${CBP_L_COUNT} ; top of stack now has number of buckets we were unable to create *************** *** 521,526 **** #============================================================================================== ! !macro CBP_PAGECOMMAND_SELECTBUCKETS CAPTION ! Page custom CBP_CreateBucketsPage "CBP_HandleUserInput" "${CAPTION}" !macroend --- 545,550 ---- #============================================================================================== ! !macro CBP_PAGE_SELECTBUCKETS ! Page custom CBP_CreateBucketsPage "CBP_HandleUserInput" !macroend *************** *** 671,712 **** ; Constants used to position information on the left-half of the page ! !define INFO_LEFT_MARGIN 0 ! !define INFO_RIGHT_MARGIN 131 ; Constants used to position the bucket names ! !define BN_NAME_LEFT 157 ! !define BN_NAME_RIGHT -44 ; Constants used to position the "Remove" boxes ! !define BN_REMOVE_LEFT -42 ! !define BN_REMOVE_RIGHT -1 ; Constants used to define the position of the 8 rows in the bucket list ! !define BN_ROW_1_TOP 12 ! !define BN_ROW_1_BOTTOM 22 ! !define BN_ROW_2_TOP 27 ! !define BN_ROW_2_BOTTOM 37 ! !define BN_ROW_3_TOP 42 ! !define BN_ROW_3_BOTTOM 52 ! !define BN_ROW_4_TOP 57 ! !define BN_ROW_4_BOTTOM 67 ! !define BN_ROW_5_TOP 72 ! !define BN_ROW_5_BOTTOM 82 ! !define BN_ROW_6_TOP 87 ! !define BN_ROW_6_BOTTOM 97 ! !define BN_ROW_7_TOP 102 ! !define BN_ROW_7_BOTTOM 112 ! !define BN_ROW_8_TOP 117 ! !define BN_ROW_8_BOTTOM 127 ; Basic macro used to create the INI file --- 695,736 ---- ; Constants used to position information on the left-half of the page ! !define CBP_INFO_LEFT_MARGIN 0 ! !define CBP_INFO_RIGHT_MARGIN 131 ; Constants used to position the bucket names ! !define CBP_BN_NAME_LEFT 157 ! !define CBP_BN_NAME_RIGHT -44 ; Constants used to position the "Remove" boxes ! !define CBP_BN_REMOVE_LEFT -42 ! !define CBP_BN_REMOVE_RIGHT -1 ; Constants used to define the position of the 8 rows in the bucket list ! !define CBP_BN_ROW_1_TOP 12 ! !define CBP_BN_ROW_1_BOTTOM 22 ! !define CBP_BN_ROW_2_TOP 27 ! !define CBP_BN_ROW_2_BOTTOM 37 ! !define CBP_BN_ROW_3_TOP 42 ! !define CBP_BN_ROW_3_BOTTOM 52 ! !define CBP_BN_ROW_4_TOP 57 ! !define CBP_BN_ROW_4_BOTTOM 67 ! !define CBP_BN_ROW_5_TOP 72 ! !define CBP_BN_ROW_5_BOTTOM 82 ! !define CBP_BN_ROW_6_TOP 87 ! !define CBP_BN_ROW_6_BOTTOM 97 ! !define CBP_BN_ROW_7_TOP 102 ! !define CBP_BN_ROW_7_BOTTOM 112 ! !define CBP_BN_ROW_8_TOP 117 ! !define CBP_BN_ROW_8_BOTTOM 127 ; Basic macro used to create the INI file *************** *** 743,747 **** "Label" \ "${TEXT}" \ ! "${BN_NAME_LEFT}" "${BN_NAME_RIGHT}" "${BN_${ROW}_TOP}" "${BN_${ROW}_BOTTOM}" !macroend --- 767,772 ---- "Label" \ "${TEXT}" \ ! "${CBP_BN_NAME_LEFT}" "${CBP_BN_NAME_RIGHT}" \ ! "${CBP_BN_${ROW}_TOP}" "${CBP_BN_${ROW}_BOTTOM}" !macroend *************** *** 752,756 **** "CheckBox" \ "Remove" \ ! "${BN_REMOVE_LEFT}" "${BN_REMOVE_RIGHT}" "${BN_${ROW}_TOP}" "${BN_${ROW}_BOTTOM}" !macroend --- 777,782 ---- "CheckBox" \ "Remove" \ ! "${CBP_BN_REMOVE_LEFT}" "${CBP_BN_REMOVE_RIGHT}" \ ! "${CBP_BN_${ROW}_TOP}" "${CBP_BN_${ROW}_BOTTOM}" !macroend *************** *** 773,777 **** (and their names) to suit your needs.\r\n\r\nBucket names must be single words, \ using lowercase letters, digits 0 to 9, hyphens and underscores." \ ! "${INFO_LEFT_MARGIN}" "${INFO_RIGHT_MARGIN}" "0" "60" ; Label for the "Create Bucket" ComboBox --- 799,803 ---- (and their names) to suit your needs.\r\n\r\nBucket names must be single words, \ using lowercase letters, digits 0 to 9, hyphens and underscores." \ ! "${CBP_INFO_LEFT_MARGIN}" "${CBP_INFO_RIGHT_MARGIN}" "0" "60" ; Label for the "Create Bucket" ComboBox *************** *** 781,785 **** "Create a new bucket by either selecting a name from the list below or \ typing a name of your own choice in the box below." \ ! "${INFO_LEFT_MARGIN}" "${INFO_RIGHT_MARGIN}" "63" "87" ; ComboBox used to create a new bucket --- 807,811 ---- "Create a new bucket by either selecting a name from the list below or \ typing a name of your own choice in the box below." \ ! "${CBP_INFO_LEFT_MARGIN}" "${CBP_INFO_RIGHT_MARGIN}" "63" "87" ; ComboBox used to create a new bucket *************** *** 788,792 **** "ComboBox" \ "A|B" \ ! "${INFO_LEFT_MARGIN}" "${INFO_RIGHT_MARGIN}" "90" "170" ; Instruction for deleting bucket names from the list --- 814,818 ---- "ComboBox" \ "A|B" \ ! "${CBP_INFO_LEFT_MARGIN}" "${CBP_INFO_RIGHT_MARGIN}" "90" "170" ; Instruction for deleting bucket names from the list *************** *** 796,800 **** "To delete one or more buckets from the list, tick the relevant 'Remove' box(es) \ then click the 'Continue' button." \ ! "${INFO_LEFT_MARGIN}" "${INFO_RIGHT_MARGIN}" "110" "190" ; Label used to display progress reports --- 822,826 ---- "To delete one or more buckets from the list, tick the relevant 'Remove' box(es) \ then click the 'Continue' button." \ ! "${CBP_INFO_LEFT_MARGIN}" "${CBP_INFO_RIGHT_MARGIN}" "110" "190" ; Label used to display progress reports *************** *** 836,861 **** FlushINI "$PLUGINSDIR\${CBP_C_INIFILE}" ! !undef INFO_LEFT_MARGIN ! !undef INFO_RIGHT_MARGIN ! !undef BN_NAME_LEFT ! !undef BN_NAME_RIGHT ! !undef BN_REMOVE_LEFT ! !undef BN_REMOVE_RIGHT ! !undef BN_ROW_1_TOP ! !undef BN_ROW_1_BOTTOM ! !undef BN_ROW_2_TOP ! !undef BN_ROW_2_BOTTOM ! !undef BN_ROW_3_TOP ! !undef BN_ROW_3_BOTTOM ! !undef BN_ROW_4_TOP ! !undef BN_ROW_4_BOTTOM ! !undef BN_ROW_5_TOP ! !undef BN_ROW_5_BOTTOM ! !undef BN_ROW_6_TOP ! !undef BN_ROW_6_BOTTOM ! !undef BN_ROW_7_TOP ! !undef BN_ROW_7_BOTTOM ! !undef BN_ROW_8_TOP ! !undef BN_ROW_8_BOTTOM FunctionEnd --- 862,887 ---- FlushINI "$PLUGINSDIR\${CBP_C_INIFILE}" ! !undef CBP_INFO_LEFT_MARGIN ! !undef CBP_INFO_RIGHT_MARGIN ! !undef CBP_BN_NAME_LEFT ! !undef CBP_BN_NAME_RIGHT ! !undef CBP_BN_REMOVE_LEFT ! !undef CBP_BN_REMOVE_RIGHT ! !undef CBP_BN_ROW_1_TOP ! !undef CBP_BN_ROW_1_BOTTOM ! !undef CBP_BN_ROW_2_TOP ! !undef CBP_BN_ROW_2_BOTTOM ! !undef CBP_BN_ROW_3_TOP ! !undef CBP_BN_ROW_3_BOTTOM ! !undef CBP_BN_ROW_4_TOP ! !undef CBP_BN_ROW_4_BOTTOM ! !undef CBP_BN_ROW_5_TOP ! !undef CBP_BN_ROW_5_BOTTOM ! !undef CBP_BN_ROW_6_TOP ! !undef CBP_BN_ROW_6_BOTTOM ! !undef CBP_BN_ROW_7_TOP ! !undef CBP_BN_ROW_7_BOTTOM ! !undef CBP_BN_ROW_8_TOP ! !undef CBP_BN_ROW_8_BOTTOM FunctionEnd *************** *** 877,883 **** # has been entered to create a new bucket and no buckets have been marked for deletion, it is # assumed that the user is happy with the current list therefore if at least two buckets are ! # in the list the function creates those buckets and exits. # ! # This function enters a display loop, repeatedly displaying the custom page until the "leave" # function (CBP_HandleUserInput) indicates that the user has selected enough buckets. #---------------------------------------------------------------------------------------------- --- 903,909 ---- # has been entered to create a new bucket and no buckets have been marked for deletion, it is # assumed that the user is happy with the current list therefore if at least two buckets are ! # in the list, the 'leave' function creates those buckets and then this function exits. # ! # This function enters a display loop, repeatedly displaying the custom page until the 'leave' # function (CBP_HandleUserInput) indicates that the user has selected enough buckets. #---------------------------------------------------------------------------------------------- *************** *** 897,903 **** # CBP_C_CREATE_BN - field number of the "Create Bucket" combobox # CBP_C_DEFAULT_BUCKETS - defines the default bucket selection # CBP_C_FIRST_BN_CBOX_MINUS_ONE - used when determining how many "remove" boxes to show - # CBP_C_LAST_BN_CBOX_PLUS_ONE - used when clearing all of the "Remove" ticks # CBP_C_INIFILE - name of the INI file used to create the custom page # CBP_C_MAX_BNCOUNT - maximum number of buckets installer can handle # CBP_C_MESSAGE - field number for the progress report message --- 923,930 ---- # CBP_C_CREATE_BN - field number of the "Create Bucket" combobox # CBP_C_DEFAULT_BUCKETS - defines the default bucket selection + # CBP_C_FIRST_BN_CBOX - field holding the first "Remove" check box # CBP_C_FIRST_BN_CBOX_MINUS_ONE - used when determining how many "remove" boxes to show # CBP_C_INIFILE - name of the INI file used to create the custom page + # CBP_MAX_BN_CBOX_PLUS_ONE - used in loop which clears the ticks in the 'Remove' boxes # CBP_C_MAX_BNCOUNT - maximum number of buckets installer can handle # CBP_C_MESSAGE - field number for the progress report message *************** *** 922,926 **** ; of CBP_CreateBucketsPage so they share the same registers. To simplify maintenance, a pair ; of macros are used to specify the shared registers. ! !macro CBP_HUI_SharedDefs !define CBP_L_COUNT $R9 ; counts number of buckets selected --- 949,953 ---- ; of CBP_CreateBucketsPage so they share the same registers. To simplify maintenance, a pair ; of macros are used to specify the shared registers. ! !macro CBP_HUI_SharedDefs !define CBP_L_COUNT $R9 ; counts number of buckets selected *************** *** 942,946 **** !undef CBP_L_TEMP !macroend ! !insertmacro CBP_HUI_SharedDefs --- 969,973 ---- !undef CBP_L_TEMP !macroend ! !insertmacro CBP_HUI_SharedDefs *************** *** 978,982 **** Pop ${CBP_L_COUNT} ! get_more_input: ; Update the status message under the list of bucket names --- 1005,1010 ---- Pop ${CBP_L_COUNT} ! input_loop: ! ; Update the status message under the list of bucket names *************** *** 1008,1012 **** !insertmacro MUI_INSTALLOPTIONS_WRITE "${CBP_C_INIFILE}" "Field ${CBP_C_CREATE_BN}" "State" "" ! ; Ensure no buckets are marked for deletion --- 1036,1040 ---- !insertmacro MUI_INSTALLOPTIONS_WRITE "${CBP_C_INIFILE}" "Field ${CBP_C_CREATE_BN}" "State" "" ! ; Ensure no buckets are marked for deletion *************** *** 1017,1021 **** "Field ${CBP_L_PTR}" "State" "0" IntOp ${CBP_L_PTR} ${CBP_L_PTR} + 1 ! IntCmp ${CBP_L_PTR} ${CBP_C_LAST_BN_CBOX_PLUS_ONE} clear_finished Goto clear_loop --- 1045,1049 ---- "Field ${CBP_L_PTR}" "State" "0" IntOp ${CBP_L_PTR} ${CBP_L_PTR} + 1 ! IntCmp ${CBP_L_PTR} ${CBP_MAX_BN_CBOX_PLUS_ONE} clear_finished Goto clear_loop *************** *** 1031,1038 **** Call CBP_UpdateAddBucketList ! ; Display the "Bucket Selection Page" and wait for user to enter data and click "Continue" !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${CBP_C_INIFILE}" ! StrCmp ${CBP_L_RESULT} "wait" get_more_input finished_now: --- 1059,1067 ---- Call CBP_UpdateAddBucketList ! ; Display the "Bucket Selection Page" and wait for user to enter data and click "Continue". ! ; The 'leave' function (CBP_HandleUserInput) updates ${CBP_L_RESULT} after checking user input !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${CBP_C_INIFILE}" ! StrCmp ${CBP_L_RESULT} "wait" input_loop finished_now: *************** *** 1086,1090 **** # CBP_C_FIRST_BN_CBOX - field holding the first "Remove" check box # CBP_C_FIRST_BN_TEXT - field number of first entry in list of names - # CBP_C_FIRST_BN_CBOX_MINUS_ONE - used when determining how many "remove" boxes to show # CBP_C_INIFILE - name of the INI file used to create the custom page # CBP_C_MAX_BNCOUNT - maximum number of buckets installer can handle --- 1115,1118 ---- *************** *** 1128,1139 **** ; Work through the current entries in the bucket list, removing any entries for which the ! ; "Remove" checkbox has been ticked (and clearing the tick). The end result will be a list ! ; of bucket names without any gaps in the list. If all names are removed then an empty list ! ; will be shown. pd_loop: - !insertmacro MUI_INSTALLOPTIONS_WRITE "${CBP_C_INIFILE}" "Field ${CBP_L_PTR}" "State" "0" - - pd_loop2: IntOp ${CBP_L_NAME} ${CBP_L_NAME} + 1 IntOp ${CBP_L_PTR} ${CBP_L_PTR} + 1 --- 1156,1164 ---- ; Work through the current entries in the bucket list, removing any entries for which the ! ; "Remove" checkbox has been ticked. The end result will be a list of bucket names without ! ; any gaps in the list. If all names are removed then an empty list will be shown. ! ; NB: The ticks in the 'Remove' boxes are cleared by the 'CBP_CreateBucketsPage' function. pd_loop: IntOp ${CBP_L_NAME} ${CBP_L_NAME} + 1 IntOp ${CBP_L_PTR} ${CBP_L_PTR} + 1 *************** *** 1149,1153 **** IntOp ${CBP_L_NAME} ${CBP_L_NAME} + 1 Exch ${CBP_L_NAME} ! goto pd_loop2 tidy_up: --- 1174,1178 ---- IntOp ${CBP_L_NAME} ${CBP_L_NAME} + 1 Exch ${CBP_L_NAME} ! goto pd_loop tidy_up: *************** *** 1227,1231 **** StrCpy ${CBP_L_RESULT} "wait" Return ! finished_buckets: Push ${CBP_C_FIRST_BN_TEXT} --- 1252,1256 ---- StrCpy ${CBP_L_RESULT} "wait" Return ! finished_buckets: Push ${CBP_C_FIRST_BN_TEXT} *************** *** 1466,1470 **** !define CBP_VALIDCHARS "abcdefghijklmnopqrstuvwxyz_-0123456789" ! Exch $0 ; The input string Push $1 ; Number of characters in ${CBP_VALIDCHARS} --- 1491,1495 ---- !define CBP_VALIDCHARS "abcdefghijklmnopqrstuvwxyz_-0123456789" ! Exch $0 ; The input string Push $1 ; Number of characters in ${CBP_VALIDCHARS} *************** *** 1477,1481 **** StrLen $1 "${CBP_VALIDCHARS}" StrCpy $2 "" ! next_input_char: StrCpy $3 $0 1 ; Get next character from the input string --- 1502,1506 ---- StrLen $1 "${CBP_VALIDCHARS}" StrCpy $2 "" ! next_input_char: StrCpy $3 $0 1 ; Get next character from the input string *************** *** 1484,1488 **** StrCpy $0 $0 "" 1 StrCpy $4 -1 ! next_valid_char: IntOp $4 $4 + 1 --- 1509,1513 ---- StrCpy $0 $0 "" 1 StrCpy $4 -1 ! next_valid_char: IntOp $4 $4 + 1 *************** *** 1492,1499 **** StrCpy $2 $2$5 ; Use "valid" character to ensure we store lowercase letters in the result goto next_input_char ! invalid_name: StrCpy $2 "" ! done: StrCpy $0 $2 ; Result is either a valid bucket name or "" --- 1517,1524 ---- StrCpy $2 $2$5 ; Use "valid" character to ensure we store lowercase letters in the result goto next_input_char ! invalid_name: StrCpy $2 "" ! done: StrCpy $0 $2 ; Result is either a valid bucket name or "" *************** *** 1505,1509 **** Pop $1 Exch $0 ; place result on top of the stack ! !undef CBP_VALIDCHARS --- 1530,1534 ---- Pop $1 Exch $0 ; place result on top of the stack ! !undef CBP_VALIDCHARS *************** *** 1571,1577 **** Push $1 Push $2 ! ; If the list of names starts with "|" character, ignore the "|" ! StrCpy $2 $0 1 StrCmp $2 "|" 0 start_now --- 1596,1602 ---- Push $1 Push $2 ! ; If the list of names starts with "|" character, ignore the "|" ! StrCpy $2 $0 1 StrCmp $2 "|" 0 start_now *************** *** 1924,1928 **** IntCmp $R1 0 no_trim_needed StrCpy $R0 $R0 $R1 ! no_trim_needed: Pop $R2 --- 1949,1953 ---- IntCmp $R1 0 no_trim_needed StrCpy $R0 $R0 $R1 ! no_trim_needed: Pop $R2 *************** *** 1988,1992 **** done: StrCpy $R0 $R1 ! nothing_to_do: Pop $R2 --- 2013,2017 ---- done: StrCpy $R0 $R1 ! nothing_to_do: Pop $R2 *************** *** 2037,2043 **** Push $R1 Push $R2 ! StrCpy $R1 -1 ! loop: StrCpy $R2 $R0 1 $R1 --- 2062,2068 ---- Push $R1 Push $R2 ! StrCpy $R1 -1 ! loop: StrCpy $R2 $R0 1 $R1 *************** *** 2046,2050 **** IntOp $R1 $R1 - 1 Goto loop ! exit: StrCpy $R0 $R0 $R1 --- 2071,2075 ---- IntOp $R1 $R1 - 1 Goto loop ! exit: StrCpy $R0 $R0 $R1 *************** *** 2073,2076 **** --- 2098,2102 ---- !undef CBP_C_FIRST_BN_CBOX_MINUS_ONE !undef CBP_C_FIRST_BN_TEXT + !undef CBP_C_LAST_BN_CBOX_PLUS_ONE !undef CBP_C_LAST_BN_TEXT_PLUS_ONE |
From: <jgr...@us...> - 2003-05-30 21:25:39
|
Update of /cvsroot/popfile/engine In directory sc8-pr-cvs1:/tmp/cvs-serv18380 Modified Files: otto.gif Log Message: Changed the otto.gif to a small and rectangular gif Index: otto.gif =================================================================== RCS file: /cvsroot/popfile/engine/otto.gif,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvstAFcAf and /tmp/cvsKZaJNk differ |
From: <jgr...@us...> - 2003-05-30 21:02:41
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv20270/UI Modified Files: HTML.pm Log Message: URL encode lookup and bucket URLs to handle characters like # Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.163 retrieving revision 1.164 diff -C2 -d -r1.163 -r1.164 *** HTML.pm 30 May 2003 19:39:18 -0000 1.163 --- HTML.pm 30 May 2003 20:57:40 -0000 1.164 *************** *** 1550,1554 **** for my $word (sort { $temp{$b} <=> $temp{$a} } keys %temp) { $body .= "</tr><tr valign=\"top\">" if ( ( $count % 6 ) == 0 ); ! $body .= "<td><a class=\"wordListLink\" href=\"\/buckets\?session=$self->{session_key__}\&lookup=Lookup\&word=$word#Lookup\"><b>$word</b><\/a></td><td>$temp{$word}</td><td> </td>"; $count += 1; } --- 1550,1554 ---- for my $word (sort { $temp{$b} <=> $temp{$a} } keys %temp) { $body .= "</tr><tr valign=\"top\">" if ( ( $count % 6 ) == 0 ); ! $body .= "<td><a class=\"wordListLink\" href=\"\/buckets\?session=$self->{session_key__}\&lookup=Lookup\&word=". $self->url_encode_( $word ) . "#Lookup\"><b>$word</b><\/a></td><td>$temp{$word}</td><td> </td>"; $count += 1; } *************** *** 1559,1563 **** $j = ''; ! $body .= "<a href=/buckets?session=$self->{session_key__}\&showbucket=$self->{form_}{showbucket}\&showletter=$first><b>$first</b></a>\n"; } } --- 1559,1563 ---- $j = ''; ! $body .= "<a href=/buckets?session=$self->{session_key__}\&showbucket=$self->{form_}{showbucket}\&showletter=" . $self->url_encode_($first) . "><b>$first</b></a>\n"; } } |
From: <jgr...@us...> - 2003-05-30 20:52:36
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv17686 Modified Files: HTTP.pm Log Message: Calculate and send a 1 hour expire header for files returned through http_file_ Index: HTTP.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTTP.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** HTTP.pm 30 May 2003 19:39:19 -0000 1.4 --- HTTP.pm 30 May 2003 20:52:32 -0000 1.5 *************** *** 311,315 **** --- 311,317 ---- my ( $self, $client, $file, $type ) = @_; my $contents = ''; + if ( open FILE, "<$file" ) { + binmode FILE; while (<FILE>) { *************** *** 318,322 **** close FILE; ! my $header = "HTTP/1.0 200 OK\r\nContent-Type: $type\r\nContent-Length: "; $header .= length($contents); $header .= "$eol$eol"; --- 320,338 ---- close FILE; ! # To prevent the browser for continuously asking for file handled in this way ! # we calculate the current date and time plus 1 hour to give the browser ! # cache 1 hour to keep things like graphics and style sheets in cache. ! ! my @day = ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ); ! my @month = ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ); ! my $zulu = time; ! $zulu += 60 * 60; # 1 hour ! my ( $sec, $min, $hour, $mday, $mon, $year, $wday ) = gmtime( $zulu ); ! ! my $expires = sprintf( "%s, %02d %s %04d %02d:%02d:%02d GMT", ! $day[$wday], $mday, $month[$mon], $year+1900, ! $hour, $min, $sec); ! ! my $header = "HTTP/1.0 200 OK\r\nContent-Type: $type\r\nExpires: $expires\r\nContent-Length: "; $header .= length($contents); $header .= "$eol$eol"; |
From: <jgr...@us...> - 2003-05-30 20:03:29
|
Update of /cvsroot/popfile/engine/languages In directory sc8-pr-cvs1:/tmp/cvs-serv21391/languages Added Files: Ukrainian.msg Log Message: Added Ukrainian translation --- NEW FILE: Ukrainian.msg --- (This appears to be a binary file; contents omitted.) |
From: <jgr...@us...> - 2003-05-30 19:39:23
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv16802/UI Modified Files: HTML.pm HTTP.pm Log Message: Comment and copyright updates Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.162 retrieving revision 1.163 diff -C2 -d -r1.162 -r1.163 *** HTML.pm 29 May 2003 04:40:09 -0000 1.162 --- HTML.pm 30 May 2003 19:39:18 -0000 1.163 *************** *** 2285,2290 **** $subject =~ s/\"(.*)\"/$1/g; ! # TODO $from = $self->{classifier__}->{parser}->decode_string( $from ); ! # TODO $subject = $self->{classifier__}->{parser}->decode_string( $subject ); my ( $short_from, $short_subject ) = ( $from, $subject ); --- 2285,2292 ---- $subject =~ s/\"(.*)\"/$1/g; ! # TODO Interface violation here, need to clean up ! ! $from = $self->{classifier__}->{parser__}->decode_string( $from ); ! $subject = $self->{classifier__}->{parser__}->decode_string( $subject ); my ( $short_from, $short_subject ) = ( $from, $subject ); Index: HTTP.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTTP.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** HTTP.pm 22 May 2003 17:00:20 -0000 1.3 --- HTTP.pm 30 May 2003 19:39:19 -0000 1.4 *************** *** 16,20 **** use locale; ! use IO::Socket; use IO::Select; --- 16,20 ---- use locale; ! use IO::Socket::INET qw(:DEFAULT :crlf); use IO::Select; *************** *** 130,133 **** --- 130,135 ---- # it to read any form POST content into $content + $client->autoflush(1); + if ( ( defined( $client ) ) && ( my $request = <$client> ) ) { my $content_length = 0; *************** *** 149,153 **** if ( $request =~ /^(GET|POST) (.*) HTTP\/1\./i ) { - $client->autoflush(1); $code = $self->handle_url( $client, $2, $1, $content ); } else { --- 151,154 ---- |
From: <jgr...@us...> - 2003-05-30 19:39:22
|
Update of /cvsroot/popfile/engine/POPFile In directory sc8-pr-cvs1:/tmp/cvs-serv16802/POPFile Modified Files: Module.pm Log Message: Comment and copyright updates Index: Module.pm =================================================================== RCS file: /cvsroot/popfile/engine/POPFile/Module.pm,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Module.pm 5 May 2003 17:50:11 -0000 1.7 --- Module.pm 30 May 2003 19:39:18 -0000 1.8 *************** *** 1,2 **** --- 1,10 ---- + #---------------------------------------------------------------------------- + # + # This is POPFile's top level Module object. + # + # Copyright (c) 2001-2003 John Graham-Cumming + # + #---------------------------------------------------------------------------- + package POPFile::Module; |
From: <jgr...@us...> - 2003-05-30 19:39:21
|
Update of /cvsroot/popfile/engine In directory sc8-pr-cvs1:/tmp/cvs-serv16802 Modified Files: popfile.pl Log Message: Comment and copyright updates Index: popfile.pl =================================================================== RCS file: /cvsroot/popfile/engine/popfile.pl,v retrieving revision 1.209 retrieving revision 1.210 diff -C2 -d -r1.209 -r1.210 *** popfile.pl 5 May 2003 17:50:09 -0000 1.209 --- popfile.pl 30 May 2003 19:39:17 -0000 1.210 *************** *** 2,10 **** # --------------------------------------------------------------------------------------------- # ! # popfile.pl --- POP3 mail analyzer and sorter # ! # Acts as a POP3 server and client designed to sit between a real mail client and a real mail ! # server using POP3. Inserts an extra header X-Text-Classification: into the mail header to ! # tell the client whether the mail is spam or not based on a text classification algorithm # # Copyright (c) 2001-2003 John Graham-Cumming --- 2,10 ---- # --------------------------------------------------------------------------------------------- # ! # popfile.pl --- Message analyzer and sorter # ! # Acts as a server and client designed to sit between a real mail/news client and a real mail ! # news server using POP3. Inserts an extra header X-Text-Classification: into the header to ! # tell the client which category the message belongs in. # # Copyright (c) 2001-2003 John Graham-Cumming |
From: <ssc...@us...> - 2003-05-29 11:17:59
|
Update of /cvsroot/popfile/engine In directory sc8-pr-cvs1:/tmp/cvs-serv10601 Modified Files: xval.pl Log Message: actual update to allow training on fewer groupings Index: xval.pl =================================================================== RCS file: /cvsroot/popfile/engine/xval.pl,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** xval.pl 28 May 2003 21:25:42 -0000 1.2 --- xval.pl 29 May 2003 11:00:56 -0000 1.3 *************** *** 324,328 **** if ($abucket ne 'unclassified') { ! foreach my $current_fraction ( sort keys( %{ $self->{messages}->{buckets}{$abucket}{subdirs}} )) { # Do the hippy-hippy corpus-building shake --- 324,328 ---- if ($abucket ne 'unclassified') { ! foreach my $current_fraction ( 0 .. ( $c->parameter("xcnt") -1 ) ) { # Do the hippy-hippy corpus-building shake |
From: <ssc...@us...> - 2003-05-29 10:49:09
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv6926 Modified Files: MailParse.pm Log Message: remove multiple authorization parts from parsed URL's me@yo...@si... -> site.com Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.130 retrieving revision 1.131 diff -C2 -d -r1.130 -r1.131 *** MailParse.pm 22 May 2003 17:00:19 -0000 1.130 --- MailParse.pm 29 May 2003 10:49:06 -0000 1.131 *************** *** 619,623 **** # Extract authorization information from the URL (e.g. http://fo...@ba...) ! $authinfo = $1 if ( $url =~ s/^([[:alpha:]0-9\-_\.\;\:\&\=\+\$\,]+)(\@|\%40)// ); if ( $url =~ s/^(([[:alpha:]0-9\-_]+\.)+)(com|edu|gov|int|mil|net|org|aero|biz|coop|info|museum|name|pro|[[:alpha:]]{2})([^[:alpha:]0-9\-_\.]|$)/$4/i ) { --- 619,623 ---- # Extract authorization information from the URL (e.g. http://fo...@ba...) ! $authinfo = $1 if ( $url =~ s/^(([[:alpha:]0-9\-_\.\;\:\&\=\+\$\,]+)(\@|\%40))+// ); if ( $url =~ s/^(([[:alpha:]0-9\-_]+\.)+)(com|edu|gov|int|mil|net|org|aero|biz|coop|info|museum|name|pro|[[:alpha:]]{2})([^[:alpha:]0-9\-_\.]|$)/$4/i ) { |
From: <ssc...@us...> - 2003-05-29 05:49:46
|
Update of /cvsroot/popfile/engine In directory sc8-pr-cvs1:/tmp/cvs-serv12198 Modified Files: traintest.pl Log Message: update to allow training on fewer groupings Index: traintest.pl =================================================================== RCS file: /cvsroot/popfile/engine/traintest.pl,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** traintest.pl 12 Apr 2003 07:20:50 -0000 1.4 --- traintest.pl 29 May 2003 05:49:42 -0000 1.5 *************** *** 358,361 **** --- 358,363 ---- $bucket_class = $b->classify_file( $self->{messages}->{messages}{ @sorted_messages[$index] }{long}); $bucket_true = $self->{messages}->{messages}{ @sorted_messages[$index] }{bucket}; + + $b->{parser__}->{subject__} =~ s/(\r\n|\n|\r)[ \t]+//gm; if ($bucket_class ne $bucket_true) { |
From: <ssc...@us...> - 2003-05-29 04:40:13
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv29366 Modified Files: HTML.pm Log Message: make start_message handling resulting from jump_to_message more precise Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.161 retrieving revision 1.162 diff -C2 -d -r1.161 -r1.162 *** HTML.pm 23 May 2003 16:05:53 -0000 1.161 --- HTML.pm 29 May 2003 04:40:09 -0000 1.162 *************** *** 3071,3074 **** --- 3071,3076 ---- my $bucket = $self->{history__}{$mail_file}{bucket}; my $color = $self->{classifier__}->get_bucket_color($bucket); + + my $page_size = $self->config_( 'page_size' ); $self->{form_}{sort} = '' if ( !defined( $self->{form_}{sort} ) ); *************** *** 3077,3081 **** my $index = -1; ! foreach my $i ( $start_message .. $start_message + $self->config_( 'page_size' ) - 1) { if ( $self->{history_keys__}[$i] eq $mail_file ) { $index = $i; --- 3079,3083 ---- my $index = -1; ! foreach my $i ( $start_message .. $start_message + $page_size - 1) { if ( $self->{history_keys__}[$i] eq $mail_file ) { $index = $i; *************** *** 3090,3095 **** foreach my $i ( 0 .. $self->history_size()-1 ) { if ( $self->{history_keys__}[$i] eq $mail_file ) { $index = $i; ! $start_message = $i; last; } --- 3092,3099 ---- foreach my $i ( 0 .. $self->history_size()-1 ) { if ( $self->{history_keys__}[$i] eq $mail_file ) { + use integer; $index = $i; ! $start_message = ($i / $page_size ) * $page_size; ! $self->{form_}{start_message} = $start_message; last; } *************** *** 3113,3117 **** if ( $index > 0 ) { $body .= "<a href=\"/view?view=" . $self->{history_keys__}[ $index - 1 ]; ! $body .= "&start_message=". ((( $index - 1 ) >= $start_message )?$start_message:($start_message - $self->config_( 'page_size' ))); $body .= $self->print_form_fields_(0,1,('filter','session','search','sort')) . "\">< "; $body .= $self->{language__}{Previous}; --- 3117,3121 ---- if ( $index > 0 ) { $body .= "<a href=\"/view?view=" . $self->{history_keys__}[ $index - 1 ]; ! $body .= "&start_message=". ((( $index - 1 ) >= $start_message )?$start_message:($start_message - $page_size)); $body .= $self->print_form_fields_(0,1,('filter','session','search','sort')) . "\">< "; $body .= $self->{language__}{Previous}; *************** *** 3121,3125 **** if ( $index < ( $self->history_size() - 1 ) ) { $body .= "<a href=\"/view?view=" . $self->{history_keys__}[ $index + 1 ]; ! $body .= "&start_message=". ((( $index + 1 ) < ( $start_message + $self->config_( 'page_size' ) ) )?$start_message:($start_message + $self->config_( 'page_size' ))); $body .= $self->print_form_fields_(0,1,('filter','session','search','sort')) . "\"> "; $body .= $self->{language__}{Next}; --- 3125,3129 ---- if ( $index < ( $self->history_size() - 1 ) ) { $body .= "<a href=\"/view?view=" . $self->{history_keys__}[ $index + 1 ]; ! $body .= "&start_message=". ((( $index + 1 ) < ( $start_message + $page_size ) )?$start_message:($start_message + $page_size)); $body .= $self->print_form_fields_(0,1,('filter','session','search','sort')) . "\"> "; $body .= $self->{language__}{Next}; |
From: <ssc...@us...> - 2003-05-28 21:52:15
|
Update of /cvsroot/popfile/engine In directory sc8-pr-cvs1:/tmp/cvs-serv27556 Modified Files: xval.pl Log Message: document xcnt parameter Index: xval.pl =================================================================== RCS file: /cvsroot/popfile/engine/xval.pl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** xval.pl 27 May 2003 21:21:35 -0000 1.1 --- xval.pl 28 May 2003 21:25:42 -0000 1.2 *************** *** 298,302 **** #load the messages ! $self->{messages} = find_messages($archive); foreach my $exclude_fraction (0 .. ( $c->parameter("xcnt") - 1) ) { --- 298,304 ---- #load the messages ! $self->{messages} = find_messages($archive); ! ! my @error_array; foreach my $exclude_fraction (0 .. ( $c->parameter("xcnt") - 1) ) { *************** *** 352,356 **** foreach my $abucket ( keys %{ $self->{messages}->{buckets} } ) { print "classifying messages in $abucket/$exclude_fraction\n" if $debug; ! foreach my $amessage ( keys %{$self->{messages}->{buckets}{$abucket}{subdirs}{$exclude_fraction}} ) { $class = $b->classify_file($self->{messages}->{messages}{$amessage}{long}); --- 354,358 ---- foreach my $abucket ( keys %{ $self->{messages}->{buckets} } ) { print "classifying messages in $abucket/$exclude_fraction\n" if $debug; ! foreach my $amessage ( keys %{$self->{messages}->{buckets}{$abucket}{subdirs}{$exclude_fraction}} ) { $class = $b->classify_file($self->{messages}->{messages}{$amessage}{long}); *************** *** 358,361 **** --- 360,364 ---- $errors++; print "$class ne $abucket\n" if $debug; + push( @error_array, $self->{messages}->{messages}{$amessage}{long}); } $total++; *************** *** 368,371 **** --- 371,378 ---- $exclude_fraction++; } + + print "errors:\n"; + print @error_array; + } else { *************** *** 374,381 **** print " -usage: Displays this screen\n"; print " Other Parameters Use\n"; print " -archive_dir: Location to seek an archive\n"; print " -stopwords: Use stop-words, defaults to $DEFAULT_STOP\n"; print " -dump: Outputs accumulated corpus, defaults to $DEFAULT_DUMP\n"; ! print " -corpus_out: Location to save output corpus, defaults to $DEFAULT_CORPUS\n"; } --- 381,389 ---- print " -usage: Displays this screen\n"; print " Other Parameters Use\n"; + print " -xcnt: The number of bins to use\n"; print " -archive_dir: Location to seek an archive\n"; print " -stopwords: Use stop-words, defaults to $DEFAULT_STOP\n"; print " -dump: Outputs accumulated corpus, defaults to $DEFAULT_DUMP\n"; ! print " -corpus_out: Location to save output corpus, defaults to $DEFAULT_CORPUS\n"; } |
From: <ssc...@us...> - 2003-05-28 20:33:25
|
Update of /cvsroot/popfile/engine/Proxy In directory sc8-pr-cvs1:/tmp/cvs-serv2686 Modified Files: NNTP.pm Log Message: replace "NEWSGROUPS" command with "NEWGROUPS" command that actually exists Index: NNTP.pm =================================================================== RCS file: /cvsroot/popfile/engine/Proxy/NNTP.pm,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** NNTP.pm 15 Apr 2003 14:48:09 -0000 1.9 --- NNTP.pm 28 May 2003 20:33:20 -0000 1.10 *************** *** 236,240 **** # Commands expecting a code + text response ! if ( $command =~ /^ *(LIST|HEAD|BODY|NEWSGROUPS|NEWNEWS|LISTGROUP|XGTITLE|XINDEX|XHDR|XOVER|XPAT|XROVER|XTHREAD)/i ) { my $response = $self->get_response_( $news, $client, $command); --- 236,240 ---- # Commands expecting a code + text response ! if ( $command =~ /^ *(LIST|HEAD|BODY|NEWGROUPS|NEWNEWS|LISTGROUP|XGTITLE|XINDEX|XHDR|XOVER|XPAT|XROVER|XTHREAD)/i ) { my $response = $self->get_response_( $news, $client, $command); |
From: <ssc...@us...> - 2003-05-27 21:21:39
|
Update of /cvsroot/popfile/engine In directory sc8-pr-cvs1:/tmp/cvs-serv12573 Added Files: xval.pl Log Message: add rudimentary cross-validation script works with archived messages from -archive 1 -archive_classes 10 --- NEW FILE: xval.pl --- #!/usr/bin/perl # --------------------------------------------------------------------------------------------- # # traintest.pl - Simulate training on errors using a saved archive. # # Copyright (c) 2001-2003 John Graham-Cumming # # --------------------------------------------------------------------------------------------- use strict; use Classifier::Bayes; use POPFile::Configuration; my $debug = 0; my $DEFAULT_XCNT = '10'; my $DEFAULT_CSV = 'auto'; my $DEFAULT_STOP = 1; my $DEFAULT_CLASSIFIER = "bayes"; my $DEFAULT_ARCHIVE = "archive"; my $DEFAULT_DUMP = "0"; my $DEFAULT_CORPUS = "archive_corpus"; $| = 1; $, = ", "; my %wordtab; sub initialize { my ($config) = @_; $config->parameter("xcnt",$DEFAULT_XCNT); $config->parameter("csv",$DEFAULT_CSV); $config->parameter("stopwords",$DEFAULT_STOP); $config->parameter("classifier",$DEFAULT_CLASSIFIER); $config->parameter("archive_dir",$DEFAULT_ARCHIVE); $config->parameter("dump",$DEFAULT_DUMP); $config->parameter("corpus_out",$DEFAULT_CORPUS); } sub cvs_out { my ($config, $file, @log) = @_; if ($file eq 'auto') { $file = "x_validate"; if ( $config->parameter('stopwords') ne $DEFAULT_STOP ) { $file .= "_"; if ($config->parameter('stopwords') != 1) { $file .= "no"; } $file .= "stop"; } $file .= ".csv"; } print STDERR "Printing data to $file\n"; open CSV, ">$file"; $, = ","; print CSV sort keys %{ @log[1] }; foreach my $message (0 .. $#log) { $message = @log[$message]; foreach my $item (sort keys %{$message}) { my $value = $message->{$item}; $value =~ s/\"/'/g; print CSV "\"$value\","; } print CSV "\n"; } print STDERR "Data saved to $file\n"; $, = ""; } sub reclassify_file { my ($b,$bucket) = @_; foreach my $word (keys %{ $b->{parser__}->{words__} }) { my $wordvalue = $wordtab{$bucket."|".$word}; $wordtab{$bucket."|".$word} += $b->{parser__}->{words__}{$word}; $b->set_value_($bucket,$word, $wordtab{$bucket."|".$word}); $b->{total__}{$bucket} += $b->{parser__}->{words__}{$word}; $b->{unique__}{$bucket} += 1 if ($wordvalue == 0); } $b->{full_total__} += $b->{parser__}{msg_total__}; $b->update_constants_(); } sub reclassify_folder { my ($b,$folder,$bucket) = @_; my @file_array = glob "$folder/*"; foreach my $amessage (@file_array) { } } sub dump_corpus { my ($self) = @_; my $dir = $self->{configuration__}->parameter('corpus_out'); mkdir($dir); foreach my $abucket ( keys %{$self->{total__}} ) { print "saving $abucket corpus.\n"; my $subdir = $dir; $subdir .= "/$abucket"; mkdir($subdir); open CORPUS, ">$dir/$abucket/table"; print CORPUS "__CORPUS__ __VERSION__ 1\n"; for my $ord ( @{$self->get_bucket_word_list($abucket)} ) { if ( defined($ord) ) { while ($ord =~ s/\|([^ ]+) (\d+)\|//) { print CORPUS "$1 $2\n"; } } } } } sub find_messages { my ( $archive ) = @_; my $messages = {}; my @buckets_array = glob "$archive/*"; foreach my $abucket (@buckets_array) { $abucket =~ s/.*\/(.*)$/$1/; print "saved bucket $abucket opening\n" if ($debug); my @dir_messages; my $subdirs = 1; my $locations = 0; #$messages->{messages}{$abucket} = {}; my @subdirectories = glob "$archive/$abucket/*"; foreach my $dir (@subdirectories) { $dir =~ s/.*\/(.*)$/$1/; print "$abucket subdirectory $dir opening..." if ($debug); if ( opendir(DIR,"$archive/$abucket/$dir") ) { print "(open):\n" if ($debug); $messages->{buckets}{$abucket}{subdirs}{$dir} = {}; $messages->{locations}[$locations] = "$archive/$abucket/$dir"; $locations++; $subdirs = 1; closedir(DIR); foreach my $message ( glob( "$archive/$abucket/$dir/*.msg" ) ) { my $shortname = $message; $shortname =~ s/.*\/(.*)$/$1/; $messages->{messages}{$shortname}{bucket} = $abucket; $messages->{messages}{$shortname}{long} = $message; $messages->{buckets}{$abucket}{messages}{$shortname} = $abucket; $messages->{buckets}{$abucket}{subdirs}{$dir}{$shortname} = $abucket; } } else { print ":" if ($debug); $subdirs = 0; last; } } if ($subdirs == 0) { print "$abucket root dir opening messages:\n" if $debug; foreach my $message ( glob( "$archive/$abucket/*.msg") ) { my $shortname = $message; $shortname =~ s/.*\/(.*)$/$1/; $messages->{messages}{$shortname}{bucket} = $abucket; $messages->{messages}{$shortname}{long} = $message; $messages->{buckets}{$abucket}{messages}{$shortname} = $abucket; } $messages->{locations}[$locations] = "$archive/$abucket"; $locations++; } } return $messages; } sub flush_bayes { my ($self) = @_; # Set this to 1 to get scores for individual words in message detail $self->{wordscores__} = 0; # Just our hostname $self->{hostname__} = ''; # Matrix of buckets, words and the word counts $self->{matrix__} = {}; # Total number of words in each bucket $self->{total__} = {}; # Total number of unique words in each bucket $self->{unique__} = {}; # Total number of words in all buckets $self->{full_total__} = 0; # Used to mangle the corpus when loaded $self->{mangler__} = new Classifier::WordMangle; # Used to parse mail messages $self->{parser__} = new Classifier::MailParse; # Colors assigned to each bucket $self->{colors__} = {}; # The possible colors for buckets $self->{possible_colors__} = [ 'red', 'green', 'blue', 'brown', 'orange', 'purple', 'magenta', 'gray', 'plum', 'silver', 'pink', 'lightgreen', 'lightblue', 'lightcyan', 'lightcoral', 'lightsalmon', 'lightgrey', 'darkorange', 'darkcyan', 'feldspar' ]; # Precomputed per bucket probabilities $self->{bucket_start__} = {}; # A very unlikely word $self->{not_likely__} = 0; # The expected corpus version $self->{corpus_version__} = 1; # Per bucket parameters $self->{parameters__} = {}; # The magnets that cause attraction to certain buckets $self->{magnets__} = {}; $self->{magnet_count__} = 0; # The unclassified cutoff probability $self->{unclassified__} = 0.5; # Used to tell the caller whether a magnet was used in the last # mail classification $self->{magnet_used__} = 0; $self->{magnet_detail__} = ''; } my $self = {}; # main if ( @ARGV[0] ne "-usage") { my $b = new Classifier::Bayes; my $c = new POPFile::Configuration; $b->configuration( $c ); $c->configuration( $c ); $c->initialize(); $b->initialize(); initialize( $c ); $c->load_configuration(); $c->parse_command_line(); $b->{debug} = 0; $b->{parser__}->{debug} = 0; my $archive = $c->parameter("html_archive_dir"); #load the messages $self->{messages} = find_messages($archive); foreach my $exclude_fraction (0 .. ( $c->parameter("xcnt") - 1) ) { print "excluding grouping $exclude_fraction\n" if $debug; # Clean up our bayes object flush_bayes($b); $b->{unclassified__} = log($c->parameter("bayes_unclassified_probability") || 0.5); # test with or without stop-words if ( $c->parameter("stopwords") eq 0 ) { $b->{parser__}->{mangle__}->{stop__} = {}; $b->{mangler__}->{stop__} = {}; } # build a bucket skeleton foreach my $abucket ( keys %{ $self->{messages}->{buckets} } ) { $b->{total__}{$abucket} = 0; $b->{colors__}{$abucket} = "black"; if ($abucket ne 'unclassified') { foreach my $current_fraction ( sort keys( %{ $self->{messages}->{buckets}{$abucket}{subdirs}} )) { # Do the hippy-hippy corpus-building shake if ($current_fraction ne $exclude_fraction) { print "training on $abucket/$current_fraction\n" if ($debug); #my $dir = $self->{messages}->{messages}{each( $self->{messages}->{buckets}{$abucket}{subdirs}{$current_fraction}) }{long}; #$dir =~ s/(.*)\/[^/]*$/$1/; #print "$dir:\n"; #reclassify_folder($b,$dir,$abucket); foreach my $amessage ( keys %{$self->{messages}->{buckets}{$abucket}{subdirs}{$current_fraction}} ) { $b->{parser__}->parse_stream($self->{messages}->{messages}{$amessage}{long}); reclassify_file($b,$abucket); } } } } } # classify all messages in the selected bunch my $class; my $total = 0; my $errors = 0; foreach my $abucket ( keys %{ $self->{messages}->{buckets} } ) { print "classifying messages in $abucket/$exclude_fraction\n" if $debug; foreach my $amessage ( keys %{$self->{messages}->{buckets}{$abucket}{subdirs}{$exclude_fraction}} ) { $class = $b->classify_file($self->{messages}->{messages}{$amessage}{long}); if ($class ne $abucket) { $errors++; print "$class ne $abucket\n" if $debug; } $total++; } } my $accuracy = (($total - $errors) / $total) * 100; print "batch $exclude_fraction: $errors out of $total wrong. $accuracy% accurate\n"; $exclude_fraction++; } } else { print "xval.pl - perform cross-validation tests on archived messages\n\n"; print "Usage: traintest.pl [-usage] [-parameter value [-parameter value] ...]\n"; print " -usage: Displays this screen\n"; print " Other Parameters Use\n"; print " -archive_dir: Location to seek an archive\n"; print " -stopwords: Use stop-words, defaults to $DEFAULT_STOP\n"; print " -dump: Outputs accumulated corpus, defaults to $DEFAULT_DUMP\n"; print " -corpus_out: Location to save output corpus, defaults to $DEFAULT_CORPUS\n"; } |