Initial Commit

This commit is contained in:
Riley Schneider
2025-12-03 16:38:10 +01:00
parent c5e26bf594
commit b732d8d4b5
17680 changed files with 5977495 additions and 2 deletions

View File

@@ -0,0 +1,843 @@
# V4.0: Pegasus Mail Autoreplacement storage file
1, "abbout" "about"
1, "abotu" "about"
1, "abouta" "about a"
1, "aboutit" "about it"
1, "aboutthe" "about the"
1, "abscence" "absence"
1, "accesories" "accessories"
1, "accidant" "accident"
1, "accomodate" "accommodate"
1, "accordingto" "according to"
1, "accross" "across"
1, "acheive" "achieve"
1, "acheived" "achieved"
1, "acheiving" "achieving"
1, "acn" "can"
1, "acommodate" "accommodate"
1, "acomodate" "accommodate"
1, "actualyl" "actually"
1, "additinal" "additional"
1, "addtional" "additional"
1, "adequit" "adequate"
1, "adequite" "adequate"
1, "adn" "and"
1, "advanage" "advantage"
1, "affraid" "afraid"
1, "afterthe" "after the"
1, "aganist" "against"
1, "aggresive" "aggressive"
1, "agian" "again"
1, "agreemeent" "agreement"
1, "agreemeents" "agreements"
1, "agreemnet" "agreement"
1, "agreemnets" "agreements"
1, "agressive" "aggressive"
1, "ahppen" "happen"
1, "ahve" "have"
1, "allwasy" "always"
1, "allwyas" "always"
1, "almots" "almost"
1, "almsot" "almost"
1, "alomst" "almost"
1, "alot" "a lot"
1, "alraedy" "already"
1, "alreayd" "already"
1, "alreday" "already"
1, "alwasy" "always"
1, "alwats" "always"
1, "alway" "always"
1, "alwyas" "always"
1, "amde" "made"
1, "Ameria" "America"
1, "amke" "make"
1, "amkes" "makes"
1, "anbd" "and"
1, "andone" "and one"
1, "andteh" "and the"
1, "andthe" "and the"
1, "anothe" "another"
1, "anual" "annual"
1, "apparant" "apparent"
1, "apparrent" "apparent"
1, "appearence" "appearance"
1, "appeares" "appears"
1, "applicaiton" "application"
1, "applicaitons" "applications"
1, "applyed" "applied"
1, "appointiment" "appointment"
1, "approrpiate" "appropriate"
1, "approrpriate" "appropriate"
1, "aquisition" "acquisition"
1, "aquisitions" "acquisitions"
1, "aren;t" "aren't"
1, "arguement" "argument"
1, "arguements" "arguments"
1, "arn't" "aren't"
1, "arond" "around"
1, "artical" "article"
1, "articel" "article"
1, "asdvertising" "advertising"
1, "assistent" "assistant"
1, "asthe" "as the"
1, "atention" "attention"
1, "atmospher" "atmosphere"
1, "attentioin" "attention"
1, "atthe" "at the"
1, "audeince" "audience"
1, "audiance" "audience"
1, "availalbe" "available"
1, "awya" "away"
1, "aywa" "away"
1, "bakc" "back"
1, "balence" "balance"
1, "ballance" "balance"
1, "baout" "about"
1, "bcak" "back"
1, "beacuse" "because"
1, "becasue" "because"
1, "becaus" "because"
1, "becausea" "because a"
1, "becauseof" "because of"
1, "becausethe" "because the"
1, "becauseyou" "because you"
1, "becomeing" "becoming"
1, "becomming" "becoming"
1, "becuase" "because"
1, "becuse" "because"
1, "befoer" "before"
1, "beggining" "beginning"
1, "begining" "beginning"
1, "beginining" "beginning"
1, "beleiev" "believe"
1, "beleieve" "believe"
1, "beleif" "belief"
1, "beleive" "believe"
1, "beleived" "believed"
1, "beleives" "believes"
1, "benifit" "benefit"
1, "benifits" "benefits"
1, "betwen" "between"
1, "beutiful" "beautiful"
1, "boxs" "boxes"
1, "brodcast" "broadcast"
1, "butthe" "but the"
1, "bve" "be"
1, "caharcter" "character"
1, "calcullated" "calculated"
1, "calulated" "calculated"
1, "can;t" "can't"
1, "candidtae" "candidate"
1, "candidtaes" "candidates"
1, "catagory" "category"
1, "categiory" "category"
1, "certian" "certain"
1, "challange" "challenge"
1, "challanges" "challenges"
1, "chaneg" "change"
1, "chanegs" "changes"
1, "changable" "changeable"
1, "changeing" "changing"
1, "changng" "changing"
1, "charachter" "character"
1, "charachters" "characters"
1, "charactor" "character"
1, "charecter" "character"
1, "charector" "character"
1, "cheif" "chief"
1, "chekc" "check"
1, "chnage" "change"
1, "cieling" "ceiling"
1, "circut" "circuit"
1, "claer" "clear"
1, "claered" "cleared"
1, "claerly" "clearly"
1, "cliant" "client"
1, "cna" "can"
1, "colection" "collection"
1, "comanies" "companies"
1, "comany" "company"
1, "comapnies" "companies"
1, "comapny" "company"
1, "combintation" "combination"
1, "comited" "committed"
1, "comittee" "committee"
1, "commadn" "command"
1, "comming" "coming"
1, "commitee" "committee"
1, "committe" "committee"
1, "committment" "commitment"
1, "committments" "commitments"
1, "committy" "committee"
1, "comntain" "contain"
1, "comntains" "contains"
1, "compair" "compare"
1, "company;s" "company's"
1, "compleated" "completed"
1, "compleatly" "completely"
1, "compleatness" "completeness"
1, "completly" "completely"
1, "completness" "completeness"
1, "composate" "composite"
1, "comtain" "contain"
1, "comtains" "contains"
1, "comunicate" "communicate"
1, "comunity" "community"
1, "condolances" "condolences"
1, "conected" "connected"
1, "conferance" "conference"
1, "confirmmation" "confirmation"
1, "considerit" "considerate"
1, "considerite" "considerate"
1, "consonent" "consonant"
1, "conspiricy" "conspiracy"
1, "consultent" "consultant"
1, "convertable" "convertible"
1, "cooparate" "cooperate"
1, "cooporate" "cooperate"
1, "corproation" "corporation"
1, "corproations" "corporations"
1, "corruptable" "corruptible"
1, "cotten" "cotton"
1, "coudl" "could"
1, "coudln't" "couldn't"
1, "coudn't" "couldn't"
1, "couldn;t" "couldn't"
1, "couldnt" "couldn't"
1, "couldthe" "could the"
1, "cpoy" "copy"
1, "ctaegory" "category"
1, "cusotmer" "customer"
1, "cusotmers" "customers"
1, "cutsomer" "customer"
1, "cutsomers" "customers"
1, "cxan" "can"
1, "danceing" "dancing"
1, "dcument" "document"
1, "deatils" "details"
1, "decison" "decision"
1, "decisons" "decisions"
1, "decor" "d<>cor"
1, "defendent" "defendant"
1, "definately" "definitely"
1, "deptartment" "department"
1, "desicion" "decision"
1, "desicions" "decisions"
1, "desision" "decision"
1, "desisions" "decisions"
1, "develeoprs" "developers"
1, "devellop" "develop"
1, "develloped" "developed"
1, "develloper" "developer"
1, "devellopers" "developers"
1, "develloping" "developing"
1, "devellopment" "development"
1, "devellopments" "developments"
1, "devellops" "develop"
1, "develope" "develop"
1, "developement" "development"
1, "developements" "developments"
1, "developor" "developer"
1, "developors" "developers"
1, "develpment" "development"
1, "diaplay" "display"
1, "didint" "didn't"
1, "didn;t" "didn't"
1, "didnot" "did not"
1, "didnt" "didn't"
1, "difefrent" "different"
1, "diferences" "differences"
1, "differance" "difference"
1, "differances" "differences"
1, "differant" "different"
1, "differemt" "different"
1, "differnt" "different"
1, "diffrent" "different"
1, "directer" "director"
1, "directers" "directors"
1, "directiosn" "direction"
1, "disatisfied" "dissatisfied"
1, "discoverd" "discovered"
1, "disign" "design"
1, "dispaly" "display"
1, "dissonent" "dissonant"
1, "distribusion" "distribution"
1, "divsion" "division"
1, "do'nt" "don't"
1, "docuement" "documents"
1, "docuemnt" "document"
1, "documetn" "document"
1, "documnet" "document"
1, "documnets" "documents"
1, "doens't" "doesn't"
1, "doese" "does"
1, "doesn;t" "doesn't"
1, "doesnt" "doesn't"
1, "doign" "doing"
1, "doimg" "doing"
1, "doind" "doing"
1, "dollers" "dollars"
1, "don;t" "don't"
1, "donig" "doing"
1, "dont" "don't"
1, "dosn't" "doesn't"
1, "driveing" "driving"
1, "drnik" "drink"
1, "efel" "feel"
1, "effecient" "efficient"
1, "efort" "effort"
1, "eforts" "efforts"
1, "ehr" "her"
1, "eligable" "eligible"
1, "embarass" "embarrass"
1, "enought" "enough"
1, "equippment" "equipment"
1, "equivalant" "equivalent"
1, "esle" "else"
1, "especally" "especially"
1, "especialyl" "especially"
1, "espesially" "especially"
1, "excellant" "excellent"
1, "excercise" "exercise"
1, "exchagne" "exchange"
1, "exchagnes" "exchanges"
1, "excitment" "excitement"
1, "exhcange" "exchange"
1, "exhcanges" "exchanges"
1, "experiance" "experience"
1, "experienc" "experience"
1, "exprience" "experience"
1, "exprienced" "experienced"
1, "eyt" "yet"
1, "faeture" "feature"
1, "faetures" "features"
1, "familair" "familiar"
1, "familar" "familiar"
1, "familliar" "familiar"
1, "fammiliar" "familiar"
1, "feild" "field"
1, "feilds" "fields"
1, "fianlly" "finally"
1, "fidn" "find"
1, "finalyl" "finally"
1, "firends" "friends"
1, "firts" "first"
1, "follwo" "follow"
1, "follwoing" "following"
1, "fora" "for a"
1, "foriegn" "foreign"
1, "forthe" "for the"
1, "forwrd" "forward"
1, "forwrds" "forwards"
1, "foudn" "found"
1, "foward" "forward"
1, "fowards" "forwards"
1, "freind" "friend"
1, "freindly" "friendly"
1, "freinds" "friends"
1, "frmo" "from"
1, "fromthe" "from the"
1, "furneral" "funeral"
1, "fwe" "few"
1, "garantee" "guarantee"
1, "gaurd" "guard"
1, "gemeral" "general"
1, "gerat" "great"
1, "geting" "getting"
1, "gettin" "getting"
1, "gievn" "given"
1, "giveing" "giving"
1, "gloabl" "global"
1, "goign" "going"
1, "gonig" "going"
1, "govenment" "government"
1, "goverment" "government"
1, "gruop" "group"
1, "gruops" "groups"
1, "grwo" "grow"
1, "guidlines" "guidelines"
1, "hadbeen" "had been"
1, "hadn;t" "hadn't"
1, "haev" "have"
1, "hapen" "happen"
1, "hapened" "happened"
1, "hapening" "happening"
1, "hapens" "happens"
1, "happend" "happened"
1, "hasbeen" "has been"
1, "hasn;t" "hasn't"
1, "hasnt" "hasn't"
1, "havebeen" "have been"
1, "haveing" "having"
1, "haven;t" "haven't"
1, "hda" "had"
1, "he;ll" "he'll"
1, "hearign" "hearing"
1, "helpfull" "helpful"
1, "herat" "heart"
1, "here;s" "here's"
1, "hesaid" "he said"
1, "hewas" "he was"
1, "hge" "he"
1, "hismelf" "himself"
1, "hlep" "help"
1, "hsa" "has"
1, "hsi" "his"
1, "hte" "the"
1, "htere" "there"
1, "htese" "these"
1, "htey" "they"
1, "hting" "thing"
1, "htink" "think"
1, "htis" "this"
1, "hvae" "have"
1, "hvaing" "having"
1, "hwich" "which"
1, "I\"m" "I'm"
1, "I;d" "I'd"
1, "I;ll" "I'll"
1, "idae" "idea"
1, "idaes" "ideas"
1, "identofy" "identify"
1, "ihs" "his"
1, "imediate" "immediate"
1, "imediatly" "immediately"
1, "immediatly" "immediately"
1, "importent" "important"
1, "importnat" "important"
1, "impossable" "impossible"
1, "improvemnt" "improvement"
1, "improvment" "improvement"
1, "includ" "include"
1, "indecate" "indicate"
1, "indenpendence" "independence"
1, "indenpendent" "independent"
1, "indepedent" "independent"
1, "independance" "independence"
1, "independant" "independent"
1, "influance" "influence"
1, "infomation" "information"
1, "informatoin" "information"
1, "inital" "initial"
1, "instaleld" "installed"
1, "insted" "instead"
1, "insurence" "insurance"
1, "inteh" "in the"
1, "interum" "interim"
1, "inthe" "in the"
1, "inwhich" "in which"
1, "isn;t" "isn't"
1, "isthe" "is the"
1, "it;ll" "it'll"
1, "it;s" "it's"
1, "itis" "it is"
1, "ititial" "initial"
1, "itnerest" "interest"
1, "itnerested" "interested"
1, "itneresting" "interesting"
1, "itnerests" "interests"
1, "itwas" "it was"
1, "iwll" "will"
1, "iwth" "with"
1, "jsut" "just"
1, "jugment" "judgment"
1, "knowldge" "knowledge"
1, "knowlege" "knowledge"
1, "knwo" "know"
1, "knwon" "known"
1, "knwos" "knows"
1, "konw" "know"
1, "konwn" "known"
1, "konws" "knows"
1, "lable" "label"
1, "lables" "labels"
1, "labratory" "laboratory"
1, "lastyear" "last year"
1, "learnign" "learning"
1, "lenght" "length"
1, "let;s" "let's"
1, "levle" "level"
1, "libary" "library"
1, "librarry" "library"
1, "librery" "library"
1, "liek" "like"
1, "liekd" "liked"
1, "lieutenent" "lieutenant"
1, "liev" "live"
1, "likly" "likely"
1, "lisense" "license"
1, "littel" "little"
1, "litttle" "little"
1, "liuke" "like"
1, "liveing" "living"
1, "loev" "love"
1, "lonly" "lonely"
1, "lookign" "looking"
1, "maintenence" "maintenance"
1, "makeing" "making"
1, "managment" "management"
1, "mantain" "maintain"
1, "marraige" "marriage"
1, "memeber" "member"
1, "merchent" "merchant"
1, "mesage" "message"
1, "mesages" "messages"
1, "mispell" "misspell"
1, "mispelling" "misspelling"
1, "mispellings" "misspellings"
1, "mkae" "make"
1, "mkaes" "makes"
1, "mkaing" "making"
1, "moeny" "money"
1, "morgage" "mortgage"
1, "mroe" "more"
1, "mysefl" "myself"
1, "myu" "my"
1, "naive" "na<6E>ve"
1, "necassarily" "necessarily"
1, "necassary" "necessary"
1, "neccessarily" "necessarily"
1, "neccessary" "necessary"
1, "necesarily" "necessarily"
1, "necesary" "necessary"
1, "negotiaing" "negotiating"
1, "nkow" "know"
1, "nothign" "nothing"
1, "nver" "never"
1, "nwe" "new"
1, "nwo" "now"
1, "obediant" "obedient"
1, "ocasion" "occasion"
1, "occassion" "occasion"
1, "occured" "occurred"
1, "occurence" "occurrence"
1, "occurrance" "occurrence"
1, "ocur" "occur"
1, "oeprator" "operator"
1, "ofits" "of its"
1, "ofthe" "of the"
1, "oging" "going"
1, "ohter" "other"
1, "omre" "more"
1, "oneof" "one of"
1, "onepoint" "one point"
1, "onthe" "on the"
1, "onyl" "only"
1, "oppasite" "opposite"
1, "opperation" "operation"
1, "oppertunity" "opportunity"
1, "opposate" "opposite"
1, "opposible" "opposable"
1, "opposit" "opposite"
1, "oppotunities" "opportunities"
1, "oppotunity" "opportunity"
1, "orginization" "organization"
1, "orginized" "organized"
1, "otehr" "other"
1, "otu" "out"
1, "outof" "out of"
1, "overthe" "over the"
1, "owrk" "work"
1, "owuld" "would"
1, "oxident" "oxidant"
1, "papaer" "paper"
1, "parliment" "parliament"
1, "partof" "part of"
1, "paymetn" "payment"
1, "paymetns" "payments"
1, "pciture" "picture"
1, "Pegassu" "Pegasus"
1, "Pegasys" "Pegasus"
1, "Pegauss" "Pegasus"
1, "peice" "piece"
1, "peices" "pieces"
1, "peolpe" "people"
1, "peopel" "people"
1, "percentof" "percent of"
1, "percentto" "percent to"
1, "performence" "performance"
1, "perhasp" "perhaps"
1, "perhpas" "perhaps"
1, "permanant" "permanent"
1, "perminent" "permanent"
1, "personalyl" "personally"
1, "pleasent" "pleasant"
1, "poeple" "people"
1, "porblem" "problem"
1, "porblems" "problems"
1, "porvide" "provide"
1, "possable" "possible"
1, "postition" "position"
1, "potentialy" "potentially"
1, "pregnent" "pregnant"
1, "presance" "presence"
1, "probelm" "problem"
1, "probelms" "problems"
1, "prominant" "prominent"
1, "psoition" "position"
1, "ptogress" "progress"
1, "puting" "putting"
1, "pwoer" "power"
1, "quater" "quarter"
1, "quaters" "quarters"
1, "quesion" "question"
1, "quesions" "questions"
1, "questioms" "questions"
1, "questiosn" "questions"
1, "questoin" "question"
1, "quetion" "question"
1, "quetions" "questions"
1, "realyl" "really"
1, "reccomend" "recommend"
1, "reccommend" "recommend"
1, "receieve" "receive"
1, "recieve" "receive"
1, "recieved" "received"
1, "recieving" "receiving"
1, "recomend" "recommend"
1, "recomendation" "recommendation"
1, "recomendations" "recommendations"
1, "recomended" "recommended"
1, "reconize" "recognize"
1, "recrod" "record"
1, "religous" "religious"
1, "reluctent" "reluctant"
1, "remeber" "remember"
1, "reommend" "recommend"
1, "representativs" "representatives"
1, "representives" "representatives"
1, "represetned" "represented"
1, "represnt" "represent"
1, "reserach" "research"
1, "resollution" "resolution"
1, "resorces" "resources"
1, "respomd" "respond"
1, "respomse" "response"
1, "responce" "response"
1, "responsability" "responsibility"
1, "responsable" "responsible"
1, "responsibile" "responsible"
1, "responsiblity" "responsibility"
1, "restaraunt" "restaurant"
1, "restuarant" "restaurant"
1, "reult" "result"
1, "reveiw" "review"
1, "reveiwing" "reviewing"
1, "rumers" "rumors"
1, "rwite" "write"
1, "rythm" "rhythm"
1, "saidhe" "said he"
1, "saidit" "said it"
1, "saidthat" "said that"
1, "saidthe" "said the"
1, "scedule" "schedule"
1, "sceduled" "scheduled"
1, "seance" "s<>ance"
1, "secratary" "secretary"
1, "sectino" "section"
1, "seh" "she"
1, "selectoin" "selection"
1, "sentance" "sentence"
1, "separeate" "separate"
1, "seperate" "separate"
1, "sercumstances" "circumstances"
1, "shcool" "school"
1, "she;ll" "she'll"
1, "shesaid" "she said"
1, "shineing" "shining"
1, "shiped" "shipped"
1, "shoudl" "should"
1, "shoudln't" "shouldn't"
1, "shouldent" "shouldn't"
1, "shouldn;t" "shouldn't"
1, "shouldnt" "shouldn't"
1, "showinf" "showing"
1, "signifacnt" "significant"
1, "simalar" "similar"
1, "similiar" "similar"
1, "simpyl" "simply"
1, "sincerly" "sincerely"
1, "sitll" "still"
1, "smae" "same"
1, "smoe" "some"
1, "soem" "some"
1, "sohw" "show"
1, "soical" "social"
1, "somethign" "something"
1, "someting" "something"
1, "somewaht" "somewhat"
1, "somthing" "something"
1, "somtimes" "sometimes"
1, "soudn" "sound"
1, "soudns" "sounds"
1, "speach" "speech"
1, "specificaly" "specifically"
1, "specificalyl" "specifically"
1, "statment" "statement"
1, "statments" "statements"
1, "stnad" "stand"
1, "stopry" "story"
1, "stoyr" "story"
1, "stpo" "stop"
1, "strentgh" "strength"
1, "stroy" "story"
1, "struggel" "struggle"
1, "strugle" "struggle"
1, "studnet" "student"
1, "successfull" "successful"
1, "successfuly" "successfully"
1, "successfulyl" "successfully"
1, "sucess" "success"
1, "sucessfull" "successful"
1, "sufficiant" "sufficient"
1, "suposed" "supposed"
1, "suppossed" "supposed"
1, "suprise" "surprise"
1, "suprised" "surprised"
1, "swiming" "swimming"
1, "tahn" "than"
1, "taht" "that"
1, "talekd" "talked"
1, "talkign" "talking"
1, "tath" "that"
1, "tbale" "table"
1, "tecnical" "technical"
1, "teh" "the"
1, "tehy" "they"
1, "termoil" "turmoil"
1, "tghe" "the"
1, "tghis" "this"
1, "thansk" "thanks"
1, "thats" "that's"
1, "thatthe" "that the"
1, "thecompany" "the company"
1, "thefirst" "the first"
1, "thegovernment" "the government"
1, "themself" "themselves"
1, "themselfs" "themselves"
1, "thenew" "the new"
1, "theri" "their"
1, "thesame" "the same"
1, "thetwo" "the two"
1, "they;l" "they'll"
1, "they;ll" "they'll"
1, "they;r" "they're"
1, "they;re" "they're"
1, "they;v" "they've"
1, "they;ve" "they've"
1, "theyll" "they'll"
1, "theyve" "they've"
1, "thgat" "that"
1, "thge" "the"
1, "thier" "their"
1, "thigsn" "things"
1, "thisyear" "this year"
1, "thna" "than"
1, "thne" "then"
1, "thnig" "thing"
1, "thnigs" "things"
1, "threatend" "threatened"
1, "thsi" "this"
1, "thsoe" "those"
1, "thta" "that"
1, "tihs" "this"
1, "timne" "time"
1, "tiogether" "together"
1, "tje" "the"
1, "tjhe" "the"
1, "tkae" "take"
1, "tkaes" "takes"
1, "tkaing" "taking"
1, "tlaking" "talking"
1, "todya" "today"
1, "togehter" "together"
1, "tomorow" "tomorrow"
1, "tongiht" "tonight"
1, "tonihgt" "tonight"
1, "totaly" "totally"
1, "totalyl" "totally"
1, "tothe" "to the"
1, "towrad" "toward"
1, "traditionalyl" "traditionally"
1, "transfered" "transferred"
1, "truely" "truly"
1, "truley" "truly"
1, "tryed" "tried"
1, "tthe" "the"
1, "tyhat" "that"
1, "tyhe" "the"
1, "udnerstand" "understand"
1, "understnad" "understand"
1, "UnitedStates" "United States"
1, "unliek" "unlike"
1, "unpleasently" "unpleasantly"
1, "untilll" "until"
1, "useing" "using"
1, "usualyl" "usually"
1, "veyr" "very"
1, "virtualyl" "virtually"
1, "vrey" "very"
1, "vulnerible" "vulnerable"
1, "waht" "what"
1, "warrent" "warrant"
1, "wasnt" "wasn't"
1, "watn" "want"
1, "we;d" "we'd"
1, "we;ll" "we'll"
1, "we;re" "we're"
1, "we;ve" "we've"
1, "wehn" "when"
1, "wern't" "weren't"
1, "werre" "were"
1, "what;s" "what's"
1, "whcih" "which"
1, "where;s" "where's"
1, "wherre" "where"
1, "whic" "which"
1, "whihc" "which"
1, "who;s" "who's"
1, "who;ve" "who've"
1, "whta" "what"
1, "wief" "wife"
1, "wierd" "weird"
1, "wihch" "which"
1, "wiht" "with"
1, "willbe" "will be"
1, "windoes" "windows"
1, "witha" "with a"
1, "withe" "with"
1, "withthe" "with the"
1, "wiull" "will"
1, "wnat" "want"
1, "wnated" "wanted"
1, "wnats" "wants"
1, "wo'nt" "won't"
1, "woh" "who"
1, "wohle" "whole"
1, "wokr" "work"
1, "won;t" "won't"
1, "woudl" "would"
1, "woudln't" "wouldn't"
1, "wouldbe" "would be"
1, "wouldn;t" "wouldn't"
1, "wouldnt" "wouldn't"
1, "wriet" "write"
1, "writting" "writing"
1, "wrod" "word"
1, "wroet" "wrote"
1, "wroking" "working"
1, "wtih" "with"
1, "wuould" "would"
1, "wya" "way"
1, "yera" "year"
1, "yeras" "years"
1, "yersa" "years"
1, "yoiu" "you"
1, "you;d" "you'd"
1, "you;re" "you're"
1, "youare" "you are"
1, "youve" "you've"
1, "ytou" "you"
1, "yuo" "you"
1, "yuor" "your"

View File

@@ -0,0 +1,14 @@
Enabled = Y
ApplyTo = 2
SetName = Basic commercial/sex content check
Blacklist = black.lis
Whitelist = white.lis
TriggerWeight = 50
Action = 0
Parameter =
RuleFile = spambust.dat
LBL_Size = 0
Order = 0
Flags = 29
End

View File

@@ -0,0 +1,31 @@
This general-purpose definition is designed to catch a
wide range of spam, with particular emphasis on:
* Sexual content and penile enlargement ads
* Pharmacy and bogus health cures
* General unwanted commercial "services"
* Spam tools
* 419 scams (the "Nigerian funds transfer" scam)
This ruleset aggressively filters messages containing
Lazy HTML (HTML with references to remote graphics): if
you receive a lot of legitimate mail containing Lazy
HTML, you will either need to whitelist the sources of
that mail, or else remove the test.
This rulest also regards any message containing more
than 25% non-ASCII characters as spam, so if you receive
a lot of legitimate mail of this type you will need to
take steps to deal with that.
We recommend that you do not directly modify this rule
set, because subsequent versions of Mercury will usually
attempt to update it. Instead, create a copy of this set
and work on the copy, disabling this one.
This rule set is a standard part of the Mercury/32
distribution and is updated from time to time: you can
find updated rule sets on our web site, at -
http://www.pmail.com/patches.htm

View File

@@ -0,0 +1,340 @@
Pegasus Mail for Windows v3.0, configurable toolbar.
---------------------------------------------------------------------
Pegasus Mail System,
Copyright (c) 1990-98, David Harris, All Rights Reserved.
Under Pegasus Mail v3.0 and later, the button panel (toolbar) is
configurable via simple scripts. The use of scripts is not normally
intended to be exposed to end-users, and it is anticipated that a
GUI-based editor will be made available at some future time. In the
meantime, however, those willing to do a small amount of work with an
editor can customize the toolbar to suit their needs.
Pegasus Mail maintains internal definitions for the toolbar in its
resource file, WINPMAIL.DAT: these definitions are usually loaded and
parsed when the toolbar is created. The user can, however, create a text
file called TOOLBAR.PM in his home mailbox, containing the same scripting
commands. If TOOLBAR.PM is found, it is loaded in preference to the
internal resource script.
The format of the resource script in TOOLBAR.PM is simple: each line
defines a single toolbar element - a button, a separator, or a combobox.
Other elements may be added in future. Lines beginning with semicolon
characters are regarded as comments and ignored.
Command lines have the following general form:
<type> [other parameters]
"type" is an integer that determines the type of the toolbar item. The
following values are defined:
0 A standard 22x20 pixel bitmapped button
1 An 8-pixel separator gap
2 A combobox control
Each type of control has its own parameter list as follows:
Bitmapped buttons:
,<control_id>,<flags>,<bitmap_id>,<"tooltip">
"control_id" the internal activation code for this button
(see the list below for valid values)
"flags" an integer, currently unused but must be 0
"bitmap_id" the integer code for the internal bitmap for the
button (see the list below)
"tooltip" the tooltip text the button should display when the
mouse lingers over it for too long. This string
must appear in quotes.
Separators: No parameters
Combobox controls:
,<control_id>,<flags>
"control_id" the internal activation code for this button
(see the list below for valid values)
"flags" an integer, currently unused but must be 0
Note that for combobox and button controls, there must be a comma between
the "type" parameter and the control ID.
Control IDs:
Control IDs are internal tags used to tie a button to a given internal
function. The following control IDs are recognized:
Buttons:
801 Start a new mail message
802 Open or re-scan the new mail folder
803 Work with mail folders
804 Work with address books
805 Work with distribution lists
806 Get a list of local users on the system
807 Edit filters applied when the new mail folder is opened
808 Open noticeboards
820 Cut
821 Copy
822 Paste
823 Print the current window
824 Set a font for the current window
825 Save to disk
826 Read from disk
827 Get mail via the built-in POP3 transport
828 Send mail via the built-in SMTP transport
829 Get mail then send mail
835 Perform a selective download via the built-in POP3 transport
836 Start a new circulation message.
838 Switch to the folder manager window and add a mailbox
Comboboxes:
840 List of currently-defined identities on the system
You can create a button that triggers any standard menu item in the
Pegasus Mail menu hierarchy by adding 10000 to the menu item's code (see
Appendix A, below) then using that value as the button's control ID.
Bitmap IDs:
A number of bitmaps are built-in to Pegasus Mail and can be accessed in
buttons via special bitmap IDs. The following IDs are available: note
that the text describing each button is simple description - the control
ID is what decides what function is actually associated with a button.
1801 Start a new mail message
1802 Open or re-scan the new mail folder
1803 Work with mail folders
1804 Work with address books
1805 Work with distribution lists
1806 Get a list of local users on the system
1807 Edit filters applied when the new mail folder is opened
1808 Open noticeboards
1820 Cut
1821 Copy
1822 Paste
1823 Print the current window
1824 Set a font for the current window
1825 Save to disk
1826 Read from disk
1827 Get mail via the built-in POP3 transport
1828 Send mail via the built-in SMTP transport
1829 Get mail then send mail
1830 Connect/go online
1831 Disconnect/go offline
1835 Perform a selective download via the built-in POP3 transport
1836 Start a new circulation message.
1837 Open a saved message
1838 Mount a secondary mailbox
1839 Tools | Options
1840 Identities
1841 Review queued mail
1842 Find...
1843 Asterisk
1844 Yellow document icon
1845 Blue star
1846 Apply general rule set to folder
Example
The following fragment creates a simple toolbar
0,801,0,1801,"Compose a new mail message"
0,836,0,1836,"Create a new circulation message"
0,802,0,1802,"Open or re-scan your new mail folder"
0,803,0,1803,"Work with your mail folders"
0,804,0,1804,"Open or manage address books"
0,805,0,1805,"Edit or manage distribution (mailing) lists"
0,806,0,1806,"Open a list of local people on your system"
0,807,0,1807,"Create or manage rules for filtering your new mail"
0,808,0,1808,"Open or browse noticeboards"
1
2,840,0
1
0,823,0,1823,"Print the current window"
0,824,0,1824,"Select a font for the current window"
1
0,828,0,1828,"Send all queued mail"
0,827,0,1827,"Check your POP3 host for new mail"
0,829,0,1829,"Both check and send mail in one operation"
Appendix A: Menu codes for Pegasus Mail
The following integer values can be used to construct button panel
entries that trigger any menu entry in the program. Add 10000 to the
value shown, then use that value as the button's control ID.
------------------------------------------------------------------------
WinPMail Mnemonic ID Menu function (Which Menu)
------------------------------------------------------------------------
IDM_HELP 10 "Context-sensitive help" (HELP)
IDM_USING_HELP 11 "Using Help" (HELP)
IDM_HELPINDEX 12 "Help index" (HELP)
IDM_RMACRO 75 "Open glossary manager" (EDIT/GLOSSARY)
IDM_PMACRO 76 "Expand glossary entry" (EDIT/GLOSSARY)
IDM_NEWMESSAGE 101 "Start new message" (FILE)
IDM_READNEW 102 "Open new mail folder" (FILE)
IDM_OPENFOLDER 103 "Folders..." (FILE)
IDM_IMPORT 104 "Import into message" (MESSAGE)
IDM_SAVESESSION 105 "Save message as draft" (MESSAGE)
IDM_RESTORESESSION 106 "Open saved message" (FILE)
IDM_PRINT 107 "Print" (FILE)
IDM_PRINTSETUP 109 "Printer setup" (FILE)
IDM_FILTERS 110 "New mail filtering rules" (FILE)
IDM_EXIT 111 "Exit" (FILE)
IDM_PREF_GENERAL 121 "General settings" (FILE/PREFS)
IDM_PREF_SMF 122 "NetWare MHS settings" (FILE/PREFS)
IDM_PREF_SIGS 123 "Signatures..." (FILE/PREFS)
IDM_PREF_HOMEBOX 124 "Home mailbox location" (FILE/PREFS)
IDM_PREF_EXT 125 "Extended features" (FILE/PREFS)
IDM_UNDO 131 "Undo" (EDIT)
IDM_CUT 132 "Cut" (EDIT)
IDM_COPY 133 "Copy" (EDIT)
IDM_PASTE 134 "Paste" (EDIT)
IDM_CLEAR 135 "Clear" (EDIT)
IDM_SELECTALL 136 "Select all" (EDIT)
IDM_SPELLING 137 "Check spelling" (EDIT)
IDM_SERVER 138 "File servers..." (FILE)
IDM_LOCALUSERS 141 "Lookup local users" (ADDRESSES)
IDM_ADDRESSBOOKS 142 "Address books" (ADDRESSES)
IDM_MAILINGLISTS 143 "Distribution lists..." (ADDRESSES)
IDM_SORTBYKEY 144 "Sort by key" (ADDRESSBOOK)
IDM_SORTBYNAME 145 "Sort by name" (ADDRESSBOOK)
IDM_FIND 146 "Find text", (MESSAGE/FOLDER/READER/ADDRBK)
IDM_FINDAGAIN 147 "Find again", (MESSAGE/FOLDER/READER/ADDRBK)
IDM_PASTENAMES 148 "Paste names" (ADDRESSBOOK)
IDM_PASTEADDRESSES 149 "Paste addresses" (ADDRESSBOOK)
IDM_SAVESIZE 150 "Save window size" (Various)
IDM_OTHEROPTIONS 151 "Special message view" (MESSAGE)
IDM_SHOWHEADERS 153 "Show all headers" (READER)
IDM_EXTRACT 154 "Save messages to disk" (FOLDER/READER)
IDM_ATTACH 155 "Switch to attachments view" (MESSAGE)
IDM_MARKUNREAD 156 "Mark message as unread" (FOLDER and NB)
IDM_ALIASING 157 "Resolve aliases" (ADDRESSBOOK)
IDM_BPPREF 158 "Button panel preferences" (FILE/PREFS)
IDM_UUDECODE 160 "UUdecode message" (FOLDER/READER /SPECIAL)
IDM_UNBINHEX 161 "Un-BinHex message" (FOLDER/READER /SPECIAL)
IDM_LOCALSIG 162 "Signature for local mail" (FILE/PREFS)
IDM_INETSIG 163 "Signature for Internet mail" (FILE/PREFS)
IDM_MHSSIG 164 "Signature for MHS mail" (FILE/PREFS)
IDM_DELEXPIRED 165 "Delete expired messages" (FOLDER/SPECIAL)
IDM_EDMAIL 167 "Switch to message editor view" (MESSAGE)
IDM_QUICKLOOKUP 168 "Quick lookup" (ADDRESSES)
IDM_WORDWRAP 169 "Reformat long lines" (READER)
IDM_DELLINE 170 "Delete line" (MESSAGE)
IDM_REFORMAT 171 "Reformat paragraph" (MESSAGE)
IDM_INDENT 172 "Indent text" (MESSAGE)
IDM_REPLACE 173 "Search and replace" (MESSAGE)
IDM_DELWORD 174 "Delete word right" (MESSAGE)
IDM_APREFS 175 "Advanced settings" (FILE/PREFS)
IDM_ENLARGE 176 "Enlarge window" (WINDOW)
IDM_ABK_EXPORT 177 "Export addressbook" (ADDRESSBOOK)
IDM_ABK_IMPORT 178 "Import addressbook" (ADDRESSBOOK)
IDM_NOTICEBOARDS 179 "Noticeboards" (FILE)
IDM_ANN_EDIT 180 "Add/edit annotation" (FOLDER)
IDM_SRT_DATE 270 "Sort by date" (FOLDER)
IDM_SRT_REVDATE 271 "Sort by reverse date" (FOLDER)
IDM_SRT_SUBJECT 272 "Sort by subject" (FOLDER)
IDM_SRT_FROM 273 "Sort by sender's name" (FOLDER)
IDM_SRT_SUBJECT2 274 "Sort by subject/reverse date" (FOLDER)
IDM_SRT_COLOUR 275 "Sort by colour" (FOLDER)
IDM_FORMS 185 "Open Forms Manager" (FILE)
IDM_ANN_DELETE 186 "Delete annotation" (FOLDER)
IDM_REVIEWMAIL 187 "Review Queued Mail" (FILE)
IDM_TODISK 230 "Save to disk" (Various)
IDM_FROMDISK 231 "Read from disk" (Various)
IDM_EXTRACTFILE 240 "MHS directory service" (ADDRESSES)
IDM_LOGGED_IN 241 "Logged-in users" (ADDRESSES)
IDM_ADD_USER 242 "Add sender to list" (READER/SPECIAL)
IDM_REMOVE_USER 243 "Remove sender from list" (READER/SPECIAL)
IDM_FONT 299 "Font" (Various)
IDM_TILE 500 "Tile" (WINDOW)
IDM_CASCADE 501 "Cascade" (WINDOW)
IDM_ARRANGEICONS 502 "Arrange Icons" (WINDOW)
IDM_BUTTONPANEL 503 "Button panel" (WINDOW)
IDM_NETCONFIG 210 "Network Configuration" (FILE)
IDM_GETMAIL 211 "Check host for new mail" (FILE)
IDM_SENDMAIL 212 "Send all queued mail" (FILE)
IDM_GETANDSEND 189 "Check and send mail" (FILE)
IDM_MSGCOLOUR 260 "Set colour" (FOLDER)
IDM_UADMIN 322 "Manage users..." (ADDRESSES)
IDM_ONLINE 321 "Leave offline mode" (FILE)
IDM_OFFLINE 320 "Enter offline mode" (FILE)
IDM_QF_6 316 "Quick folder 6" (FILE/FOLDERS)
IDM_QF_5 315 "Quick folder 5" (FILE/FOLDERS)
IDM_QF_4 314 "Quick folder 4" (FILE/FOLDERS)
IDM_QF_3 313 "Quick folder 3" (FILE/FOLDERS)
IDM_QF_2 312 "Quick folder 2" (FILE/FOLDERS)
IDM_QF_1 311 "Quick folder 1" (FILE/FOLDERS)
IDM_QF_DEFINE 197 "Define quick folders" (FILE/FOLDERS)
IDM_EDIT_FLAGS 199 "Edit message flags" (FOLDER)
IDM_SRT_NEWTOTOP 198 "Sort unread before read" (FOLDER)
IDM_DLM_EXPORT 196 "Export to text file" (LISTS)
IDM_DLM_DUPLICATE 194 "Duplicate list" (LISTS)
IDM_DLM_EDIT 193 "Edit list" (LISTS)
IDM_DLM_DELETE 192 "Delete list" (LISTS)
IDM_DLM_ADD 191 "Add new list" (LISTS)
IDM_PREF_VIEW 190 "Attachment viewers" (FILE)
IDM_FULLSCREEN 188 "Enlarge message editor" (MESSAGE)
IDM_ADD_MAILBOX 330 "Add mailbox to list" (FOLDER)
IDM_CHANGE_USER 249 "Change user" (FILE, standalone only)
IDM_COPY_SPECIAL 360 "Copy special" (r-click in editor)
IDM_CSFILTERS 112 "Edit copy-self filtering rules" (TOOLS)
IDM_DISMOUNT_MBX 364 "Remove mailbox from list" (FOLDER)
IDM_EDITRULES 113 "Create/edit general filter rule set" (TOOLS)
IDM_EDIT_FLAGS 199 "Edit message flags" (FOLDER)
IDM_FILTERSA 115 "Edit rules applied when folder closed"
IDM_HELP_CMDLINE 17 "Commandline options" (HELP)
IDM_HELP_DRAGDROP 16 "Help on drag and drop" (HELP)
IDM_HELP_ETIQUETTE 18 "E-Mail etiquette guidelines" (HELP)
IDM_HELP_HISTORY 21 "History of Pegasus Mail" (HELP)
IDM_HELP_MANUALS 15 "Ordering manuals" (HELP)
IDM_HELP_TANDC 20 "Terms and conditions" (HELP)
IDM_HELP_TECHSUPP 14 "Technical support" (HELP)
IDM_HELP_TROUBLE 13 "Troubleshooting" (HELP)
IDM_HELP_WHATSNEW 22 "What's new in this version" (HELP)
IDM_IDENTITIES 120 "Identities..." (TOOLS)
IDM_IMAP 363 "IMAP Profiles" (TOOLS, v3.11 and later)
IDM_KEY_MANAGEMENT 182 "Digital key management" (READER)
IDM_LOGGING 377 "System Messages" (WINDOW, v3.12 and later)
IDM_MARKREAD 244 "Mark as read" (FOLDER, r-click)
IDM_MARKREADONLY 340 "Toggle read-only state" (FOLDER, r-click)
IDM_MONOFONT 245 "Switch to monospaced view" (READER/MESSAGE)
IDM_NB_NEW 370 "Create new topic" (NOTICEBOARD)
IDM_NB_PROPS 371 "Current topic properties" (NOTICEBOARD)
IDM_NB_RESYNCH 372 "Rescan this topic" (NOTICBOARD)
IDM_NOTEPAD 119 "Notepads..." (TOOLS)
IDM_QUICKLOOKUP2 166 "Lookup in recently-used addresses"
IDM_REDO 130 "Redo" (EDIT)
IDM_REPLY_TEMPLATE 366 "Reply using a template" (FOLDER, r-click)
IDM_RESEND 365 "Resend this message" (FOLDER, r-click)
IDM_RESET_STYLES 246 "Reset styles" (MESSAGE, r-click)
IDM_SELECT 376 "Select..." (FOLDER, v3.12 and later)
IDM_SET_COLOUR 247 "Set message colour" (FOLDER/READER)
IDM_SHOWHEADERS 153 "Show raw headers" (READER)
IDM_VERIFY_DSIG 181 "Check for digital signature" (READER)
IDM_WORDWRAP2 361 "Wrap long lines" (READER, v3.12 and later)

View File

@@ -0,0 +1,965 @@
//**
//** Mercury Mail Transport System - Daemon Interface Definitions
//** Copyright (c) 1997-99, David Harris, All Rights Reserved.
//**
//** Note: the structures defined in this file are all BYTE-ALIGNED.
//** This is very important - if you are using a Borland Compiler
//** and your project uses WORD or DWORD alignment, then you will
//** need to add "#pragma option -a1" before you include this file
//** to ensure that the compiler aligns the structures correctly.
//** Getting the byte alignment wrong will almost certainly result
//** in your Daemon crashing when you load it.
//**
#ifndef _DAEMON_H
#define _DAEMON_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef INTS_DEFINED
#define INTS_DEFINED
// INT_16 and UINT_16 must be 16-bit Integer types
typedef unsigned short UINT_16;
typedef short INT_16;
typedef unsigned long UINT_32;
typedef long INT_32;
#endif
//**
//** Section 1: Data type definitions and constants for lists
//**
#ifndef _LISTS_H
struct _l_node
{
unsigned int flags, number;
struct _l_node *next, *prev;
void *data;
};
typedef struct _l_node LNODE;
struct _lv_node
{
unsigned int flags, number;
struct _lv_node *next, *prev;
BYTE data [];
};
typedef struct _lv_node LVNODE;
typedef struct
{
LNODE *top, *end; /* pointers to start/end of list */
int icount; /* number of items in list */
unsigned isize; /* size of *data in LNODE */
int ilimit; /* maximum size of list - no limit if 0 */
int ialloc; /* whether or not to allocate space for items */
unsigned int last_acc; /* Last data accessed using get_list_data */
LNODE *last_data; /* " " " " " " " " " " */
} LIST;
#endif
//**
//** Section 2: Data type definitions and constants for
//** Job Management
//**
// Rewind flags - passed to ji_rewind_job
#define JR_CONTROL 1
#define JR_DATA 2
// Diagnostic flags - passed to ji_set/get_diagnostics
#define JD_ELEMENT 1
#define JD_JOB 2
typedef struct
{
int structlen;
char jobstatus;
long jobflags;
char status;
char *from;
char *to;
long dsize;
long rsize;
int total_rcpts;
int total_failures;
int total_retries;
char ip1 [16];
char ip2 [16];
char ip3 [16];
char ip4 [16];
char jobid [20];
} JOBINFO;
enum // Job types, for ji_scan_* and ji_create_job
{
JT_GENERAL, // Local and newly-submitted mail
JT_OUTGOING, // Only mail destined for the outside world
JT_ANY // Any type of job
};
enum // "mode" values for ji_set_element_status
{
JS_COMPLETED, // "date" is ignored
JS_FAILED, // "date" is ignored
JS_RETRY, // "date" is used for requeuing if non-NULL
JS_PENDING, // "date" is ignored
JS_TEMP_FAIL // "date" is ignored
};
enum // "type" values for ji_get_next_element
{
JE_ANY, // Any type of element is OK
JE_READY, // Only return elements ready to be sent
JE_FAILED, // Only return elements marked as failed
JE_COMPLETED, // Only return elements marked as completed
JE_PENDING, // Only return elements marked as "pending"
JE_TEMP_FAIL // Only return elements marked as temporarily failed
};
//**
//** Section 3: General Mercury data type and constant definitions
//** Many of these structures are not directly used by Daemons.
//**
#ifndef MAXFPATH
#define MAXFPATH 128
#endif
#ifndef size
#define size(x) (sizeof (x) / sizeof (x [0]))
#endif
#define MAXUIC 128
#define MAXHOST 128
// Statistics manager constants.
#define STC_INTEGER 0
#define STC_STRING 1
#define STC_DATE 2
#define STF_CUMULATIVE 1
#define STF_PEAK 2
#define STF_UNIQUE 4
// Logging console manager priority constants
#define LOG_DEBUG 25
#define LOG_INFO 20
#define LOG_NORMAL 15
#define LOG_SIGNIFICANT 10
#define LOG_URGENT 5
#define LOG_NONE 0
// Constants that can be passed to "create_object"
#define OBJ_USER 1
#define OBJ_ADMINISTRATOR 2
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned long ULONG;
// INT_16 and UINT_16 must be 16-bit Integer types
typedef unsigned short UINT_16;
typedef short INT_16;
typedef struct
{
char auto_forward [60];
char gw_auto_forward [60]; // Mercury uses this field for forwarding
char from_alias [60]; // Alternative From: field value
unsigned flags;
char security;
} PMPROP;
typedef struct
{
char *name;
char *domain;
char *login_name;
char *password;
} SERVER_ID;
typedef struct
{
char *name;
char *groupname;
char *hostname;
} GROUP_ID;
typedef struct
{
char *match;
char *rewrite;
} REWRITE;
typedef struct
{
char lname [48];
char fname [128]; // Name of container file for list
char moderator [80]; // Primary list moderator (if any)
char title [80]; // Title for list (used in "to" field
char welcome_file [128]; // File to send to new subscribers
char farewell_file [128]; // File to send to unsubscribers
char ispublic; // NZ if open subscription is available
char matched; // NZ if the address passed in is a moderator
char moderated; // NZ if mailing to the list is restricted
char allow_enumeration; // NZ if anyone may use ENUMERATE
char reply_to_list; // NZ if replies should go to the list
int limit; // Maximum allowable number of subscribers
char errors_to [80]; // Address to which errors should be referred
char restricted; // NZ if only list members may mail to the list
int fanout; // Number of jobs to "fan" the delivery to
char anonymous; // Whether this list is anonymous or not
char title_is_address; // If NZ, the 'title' field contains an address
char digest_name [14]; // Name of digest file
unsigned long digest_maxsize;
int digest_maxwait;
char archive_file [128]; // File into which to archive messages
char digest_default; // If NZ, new users are default to digest mode
char list_headers; // Use IETF draft helper headers
char list_help [80]; // Help URL
char list_signature [128]; // List's signature file
char concealed; // If NZ, do not publicize via the maiser LIST
long maximum_size; // Largest message that may be submitted to list
char password [128]; // Moderator password or password filename
char pwd_is_filename; // NZ if "password" is a filename
} DLIST;
#define FS_BOLD 1
#define FS_ITALIC 2
#define FS_FIXED 4
#define FS_OEMCHARS 8
typedef struct
{
char fontname [LF_FACESIZE];
INT_16 fontsize, style;
} FONTSPEC;
typedef struct
{
char alias [60];
char obj_name [48];
char server [48];
long flags; /* Unused at present - might be handy later */
} CHBIND;
typedef struct
{
char alias [180], name [180];
} ALIAS;
// IMESSAGE structure definition:
// The IMESSAGE structure is used internally to represent messages
// and pseudo-messages. This structure exactly parallels a structure
// used in Pegasus Mail v3.x and later for the same purpose, and is
// included in this way to allow maximum code portability between
// the two.
typedef struct
{
INT_16 dsize; // The size of this data structure
INT_16 mtype; // User-defined message type field
UINT_32 flags; // First bank of message-related flags
UINT_32 flags2; // Second bank of message-related flags
char fname [14]; // Recommended filename for message
char from [42]; // The sender of the message
char subject [50]; // Can you guess what this is?
UCHAR cdate [8]; // Timezone-corrected date from message
UCHAR date [8]; // Raw RFC822 time and date for message
UINT_32 fsize; // Raw size of this message
UINT_16 colour; // Display colour for this entry
UINT_16 charset; // Character set for message
char unique_id [34]; // Unique ID for the message
void *folder; // Currently unused in Mercury/32
char filename [128]; // The file containing the message data
} IMESSAGE;
// Explanation of fields:
// "dsize" The allocated size of this data structure
// "mtype" The user can define message types that can be used for sorting
// "flags" Can contain any of the flag values shown in Group 1 below
// "flags2" Can contain any of the flag values shown in Group 2 below
// "fname" Recommended filename for any storage to do with the message
// "from" Display version of sender's address
// "subject" Display version of message subject
// "date" The date as shown in the message's RFC822 "Date:" field
// "cdate" The date the message arrived at the local system.
// - See below for more on the date format
// "fsize" Raw size of the message, including headers and formatting
// Note - no allowance is made for CR/LF conversions.
// "colour" Index into colour table for message display colour
// "charset" Index into character set table for message charset format
// "unique_id" Guaranteed unique persistent global identifier for this message
// "folder" The folder in which this message is currently stored.
//
// Date format: dates in IMESSAGEs use the NetWare 7-byte date format plus an
// extra byte containing the offset in half-hour units from GMT. The date is
// always pre-corrected to GMT by WinPMail. Note that byte 0 (the year) is
// always the actual year - 1900, so the year 2000 is represented by 100.
// The NetWare date format is as shown:
//
// Byte 0 - Year - 1900 (i.e, 2005 = 105)
// Byte 1 - Month (ie, January == 1)
// Byte 2 - Day (1 .. 31)
// Byte 3 - Hour (0 - 24)
// Byte 4 - Minute (0 - 59)
// Byte 5 - Second (0 - 60)
// Byte 6 - Day of week (Sunday == 0) ("255" == "not calculated")
//
// Group 1 flag values - these can be used in an IMESSAGE "flags" field.
//
#define FILE_MAILED 1 // The message contains a mailed file
#define UUENCODED 2 // The message contains uuencoded data
#define FILE_ATTACHED 0x800003L // Use this as an attachment mask.
#define ENCRYPTED 4 // The message is encrypted
#define EXPIRED 16 // The message is past its expiry date
#define FILE_ASCII 32 // Flag in attachment to indicate ASCII file
#define HAS_BEEN_READ 128 // Hey, what do you know! It's been read!
#define ALTERNATIVE 0x100 // The message is Multipart/Alternative type
#define IS_HTML 0x200 // The message is Text/HTML type
#define IS_CIRCULAR 0x400 // The message is being circulated
#define CONFIRMATION 0x2000 // Sender wants confirmation of reading
#define FORWARD 0x8000L // The message is being forwarded
#define IS_RTF 0x10000L // Message contains MS-RTF data
#define COPYSELF 0x20000L // The message is a copy to self
#define DELETED 0x40000L // The message has been deleted.
#define MIME 0x80000L // The message is a MIME transmission
#define REPLIED 0x100000L // The message has been replied to.
#define FORWARDED 0x200000L // The message has been forwarded.
#define URGENT 0x400000L // The message is urgent/high priority.
#define BINHEX 0x800000L // The message is a BinHex file
#define IS_MHS 0x1000000L // The message originates from MHS
#define IS_SMTP 0x2000000L // The message originated via SMTP
#define IS_ANNOTATED 0x4000000L // The message has an annotation
#define ENCLOSURE 0x8000000L // The message has an enclosure
#define HIGHLIGHTED 0x10000000L // The message has transient significance
#define MIME_MULTI 0x20000000L // The message is in MIME Multipart format
#define TEXT_ENRICHED 0x40000000L // The message is in "text/enriched" format
#define READ_ONLY 0x80000000L // The message may not be deleted
//
// Group 2 flag values - these can be used in an IMESSAGE "flags2" field
//
#define IS_NEWMAIL 1 // The message is in the new mail folder
#define IS_NOTICE 2 // The message comes from a noticeboard
#define IS_TEMPORARY 4
// MIME parsing definitions and structures
enum // Content dispositions
{
MD_ATTACHMENT, MD_INLINE
};
enum // The primary types
{
MP_TEXT, MP_MULTIPART, MP_MESSAGE, MP_APPLICATION,
MP_IMAGE, MP_VIDEO, MP_AUDIO, MP_UNKNOWN
};
enum // TEXT subtypes
{
MPT_PLAIN, MPT_RICHTEXT, MPT_HTML, MPT_RTF, MPT_UNKNOWN
};
enum // MULTIPART subtypes
{
MPP_MIXED, MPP_ALTERNATIVE, MPP_DIGEST,
MPP_PARALLEL, MPP_UNKNOWN
};
enum // MESSAGE subtypes
{
MPM_RFC822, MPM_PARTIAL, MPM_EXTERNAL_BODY, MPM_UNKOWN
};
enum // APPLICATION subtypes
{
MPA_OCTET_STREAM, MPA_POSTSCRIPT, MPA_ODA, MPA_BINHEX, MPA_UNKNOWN
};
enum // IMAGE subtypes
{
MPI_GIF, MPI_JPEG, MPI_UNKNOWN
};
enum // VIDEO subtypes
{
MPV_MPEG, MPV_UNKNOWN
};
enum // AUDIO subtypes
{
MPU_BASIC, MPU_UNKNOWN
};
enum // MIME transfer-encodings
{
// Note that ME_BINHEX and ME_UUENCODE are handled as special
// cases and as such must always appear after ME_UNKNOWN.
ME_7BIT, ME_8BIT, ME_QUOTED_PRINTABLE, ME_BASE64, ME_UNKNOWN,
ME_BINHEX, ME_UUENCODE
};
typedef struct
{
char charset [20];
char *table;
} MPT;
typedef struct
{
char boundary [71];
LIST partlist;
} MPP;
typedef struct
{
char fname [96];
char type [20];
} MPA;
typedef struct
{
int primary, secondary, encoding, disposition;
char p_string [20], s_string [20];
char description [48];
char encryptor [16]; // For encrypted attachments, the encryptor
int encryptor_flags;
int section;
char fname [96];
union
{
MPT mpt;
MPP mpp;
MPA mpa;
IMESSAGE mpm;
} d;
} IMIME;
//**
//** Section 4: Constants for message composition functions
//**
#define OM_M_8BIT 1
#define OM_MT_PLAIN 0 // A simple, single-part text/plain message
#define OM_MT_MULTIPART 1 // A multipart/mixed message
#define OM_MT_ALTERNATIVE 2 // A multipart/alternative message
#define OM_MT_DIGEST 3 // A multipart/digest type
#define OM_MF_TO 1 // Set the master recipient of the message
#define OM_MF_SUBJECT 2 // Set the subject field for the message
#define OM_MF_CC 3 // Set the secondary recipients of the message
#define OM_MF_FROM 4 // Set the originator of the message.
#define OM_MF_BODY 5 // Set the filename containing the message body
#define OM_MF_RAW 6 // Add a raw header for the message.
#define OM_MF_FLAGS 7 // Set the message's "flags" field
#define OM_AE_DEFAULT 0 // Default encoding (MIME BASE64 encoding)
#define OM_AE_TEXT 1 // Simple textual data, unencoded
#define OM_AE_UUENCODE 2 // Uuencoding
#define OM_AE_BINHEX 3 // Macintosh Binhex format (data fork only)
#define OM_AF_INLINE 1 // Write the file as a simple textual section
#define OM_AF_MESSAGE 2 // Write the message as a Message/RFC822 part
//**
//** Section 5: Protocol Module parameter block definition;
//** Daemons are passed a Protocol Module parameter block.
//**
#define GV_QUEUENAME 1
#define GV_SMTPQUEUENAME 2
#define GV_MYNAME 3
#define GV_TTYFONT 4
#define GV_MAISERNAME 5
#define GV_FRAMEWINDOW 6
#define GV_SYSFONT 7
#define GV_BASEDIR 8
#define GV_SCRATCHDIR 9
#define SYSTEM_PASSWORD 1
#define APOP_SECRET 2
#define PASSWD_MUST_EXIST 256
// Messages that protocol modules can send using the
// "mercury_command" function in the protocol parameter block
// GET_MODULE_INTERFACE:
// - "parm1" - char * pointer to name of module to locate
// - Returns: the command interface function for the module, or NULL
#define GET_MODULE_INTERFACE 1
// ADD_ALIAS
// - "parm1" - char * pointer to alias to add
// "parm2" - char * pointer to real-world address string
// - Returns: NZ on success, 0 on failure
#define ADD_ALIAS 2
// DELETE_ALIAS
// - "parm1" - char * pointer to alias field of alias to delete
// Returns: NZ on success, 0 on failure
#define DELETE_ALIAS 3
// RESOLVE_ALIAS
// - "parm1" - char * pointer to buffer to receive address (180 char min)
// "parm2" - char * pointer to alias to resolve
// - Returns: NZ if a match was found, 0 if none was found.
#define RESOLVE_ALIAS 4
// RESOLVE_SYNONYM
// - "parm1" - char * pointer to buffer to receive address (180 char min)
// "parm2" - char * pointer to synonym to resolve
// - Returns: NZ if a match was found, 0 if none was found
#define RESOLVE_SYNONYM 5
// QUEUE_STATE - enable or disable queue processing
// - "parm1" - 0 to query current state, 1 to set state
// "parm2" - 1 to pause processing, 0 to enable it
// - Returns: The state of queue processing prior to the call
#define QUEUE_STATE 6
// DISPLAY_HELP
// - "parm1" - section number in MERCURY.HLP
// "parm2" - unused, must be 0
// - Returns: Nothing.
#define DISPLAY_HELP 512
#define NOT_IMPLEMENTED 0xF0000000L
#define RFC_822_TIME 0
#define RFC_821_TIME 1
typedef DWORD (*GET_VARIABLE) (int index);
typedef int (*IS_LOCAL_ADDRESS) (char *address, char *uic, char *server);
typedef int (*GET_DELIVERY_PATH) (char *path, char *username, char *host);
typedef int (*IS_GROUP) (char *address, char *host, char *groupname);
typedef int (*PARSE_ADDRESS) (char *target, char *source, int limit);
typedef int (*EXTRACT_ONE_ADDRESS) (char *dest, char *source, int offset);
typedef void (*EXTRACT_CQTEXT) (char *dest, char *source, int len);
typedef int (*DLIST_INFO) (DLIST *dlist, char *lname, int num, char *address,
char *errbuf, LIST *modlist);
typedef void (*SEND_NOTIFICATION) (char *username, char *host, char *message);
typedef int (*GET_DATE_AND_TIME) (BYTE *tm);
typedef INT_32 (*VERIFY_PASSWORD) (char *username, char *host,
char *password, INT_32 select);
typedef int (*WRITE_PROFILE) (char *section, char *fname);
typedef int (*MODULE_STATE) (char *modname, int set_value, int state);
// Job control functions
typedef void * (*JI_SCAN_FIRST_JOB) (int type, int mode, void **data);
typedef void * (*JI_SCAN_NEXT_JOB) (void **data);
typedef void (*JI_END_SCAN) (void **data);
typedef int (*JI_OPEN_JOB) (void *jobhandle);
typedef int (*JI_CLOSE_JOB) (void *jobhandle);
typedef void (*JI_REWIND_JOB) (void *jobhandle, int flags);
typedef int (*JI_DISPOSE_JOB) (void *jobhandle);
typedef int (*JI_PROCESS_JOB) (void *jobhandle);
typedef int (*JI_DELETE_JOB) (void *jobhandle);
typedef int (*JI_ABORT_JOB) (void *jobhandle, int fatal);
typedef int (*JI_GET_JOB_INFO) (void *jobhandle, JOBINFO *ji);
typedef void * (*JI_CREATE_JOB) (int type, char *from,
unsigned char *start_time);
typedef int (*JI_ADD_ELEMENT) (void *jobhandle, char *address);
typedef int (*JI_ADD_DATA) (void *jobhandle, char *data);
typedef char * (*JI_GET_DATA) (void *jobhandle, char *buffer, int buflen);
typedef char * (*JI_GET_NEXT_ELEMENT) (void *jobhandle, int type, JOBINFO *job);
typedef int (*JI_SET_JOB_FLAGS) (void *jobhandle, long flags);
typedef int (*JI_SET_ELEMENT_STATUS) (void *jobhandle, int mode,
unsigned char *date);
typedef int (*JI_SET_ELEMENT_RESOLVINFO) (void *jobhandle, char *ip1, char *ip2,
char *ip3, char *ip4);
typedef int (*JI_SET_DIAGNOSTICS) (void *jobhandle, int forwhat, char *text);
typedef int (*JI_GET_DIAGNOSTICS) (void *jobhandle, int forwhat, char *fname);
typedef void (*JI_INCREMENT_TIME) (unsigned char *tm, unsigned int secs);
typedef long (*JI_TELL) (void *jobhandle, int selector);
typedef int (*JI_SEEK) (void *jobhandle, long ofs, int selector);
typedef void * (*JI_GET_JOB_BY_ID) (char *id);
typedef int (*JI_GET_JOB_TIMES) (void *job, char *submitted, char *ready);
// MNICA functions
typedef int (*GET_FIRST_GROUP_MEMBER) (char *group, char *host, char *member,
int mlen, void **data);
typedef int (*GET_NEXT_GROUP_MEMBER) (char *member, int mlen, void **data);
typedef int (*END_GROUP_SCAN) (void **data);
typedef int (*IS_VALID_LOCAL_USER) (char *address, char *username, char *host);
typedef int (*IS_GROUP_MEMBER) (char *host, char *username, char *groupname);
typedef int (*GET_FIRST_USER_DETAILS) (char *host, char *match, char *username,
int ulen, char *address, int alen, char *fullname, int flen, void **data);
typedef int (*GET_NEXT_USER_DETAILS) (char *username, int ulen, char *address,
int alen, char *fullname, int flen, void **data);
typedef int (*GET_USER_DETAILS) (char *host, char *match, char *username, int ulen,
char *address, int alen, char *fullname, int flen);
typedef int (*END_USER_SCAN) (void **data);
typedef void (*READ_PMPROP) (char *userid, char *server, PMPROP *p);
typedef int (*CHANGE_OWNERSHIP) (char *fname, char *host, char *newowner);
typedef int (*BEGIN_SINGLE_DELIVERY) (char *uic, char *server, void **data);
typedef void (*END_SINGLE_DELIVERY) (void **data);
// Miscellaneous functions - Mercury 2.11 and later only
typedef DWORD (*MERCURY_COMMAND) (DWORD selector, DWORD parm1, DWORD parm2);
typedef char * (*GET_DATE_STRING) (int dtype, char *buf, BYTE *date);
typedef char * (*RFC822_TIME) (char *buffer);
typedef char * (*RFC821_TIME) (char *buffer);
// File I/O and parsing functions - Mercury 2.15 and later only
typedef INT_32 (*FM_OPEN_FILE) (char *path, UINT_32 flags);
typedef INT_32 (*FM_OPEN_MESSAGE) (IMESSAGE *im, UINT_32 flags);
typedef int (*FM_CLOSE_MESSAGE) (INT_32 id);
typedef char * (*FM_GETS) (char *buf, INT_32 max, INT_32 id);
typedef INT_16 (*FM_GETC) (INT_32 id);
typedef void (*FM_UNGETC) (INT_16 c, INT_32 id);
typedef INT_32 (*FM_READ) (INT_32 id, char *buffer, INT_32 bufsize);
typedef INT_32 (*FM_GETPOS) (INT_32 fil);
typedef INT_16 (*FM_SETPOS) (INT_32 fil, INT_32 offset);
typedef INT_32 (*FM_GET_FOLDED_LINE) (INT_32 fil, char *line, int limit);
typedef char * (*FM_FIND_HEADER) (INT_32 fil, char *name, char *buf, int len);
typedef int (*FM_EXTRACT_MESSAGE) (void *job, char *fname, int flags);
typedef int (*PARSE_HEADER) (INT_32 fil, IMESSAGE *m);
typedef int (*MIME_PREP_MESSAGE) (INT_32 fil, char *fname, int headers);
typedef int (*PARSE_MIME) (INT_32 fil, IMIME *m);
typedef void (*FREE_MIME) (IMIME *m);
typedef int (*FAKE_IMESSAGE) (IMESSAGE *im, char *dest, char *src,
IMIME *m, char *boundary);
typedef int (*DECODE_MIME_HEADER) (char *dest, char *src);
typedef int (*ENCODE_MIME_HEADER) (char *dest, char *src, int raw);
typedef void * (*OM_CREATE_MESSAGE) (UINT_32 mtype, UINT_32 flags);
typedef INT_32 (*OM_DISPOSE_MESSAGE) (void *mhandle);
typedef INT_32 (*OM_ADD_FIELD) (void *mhandle, UINT_32 selector, char *data);
typedef INT_32 (*OM_ADD_ATTACHMENT) (void *mhandle, char *fname, char *ftype,
char *description, UINT_32 encoding, UINT_32 flags, void *reserved);
typedef INT_32 (*OM_WRITE_MESSAGE) (void *mhandle, char *fname);
typedef void * (*OM_SEND_MESSAGE) (void *mhandle, char *envelope);
typedef int (*ENCODE_BASE64_STR) (char *dest, char *src, int srclen);
typedef int (*DECODE_BASE64_STR) (char *dest, char *src, char *table);
typedef INT_32 (*ST_REGISTER_MODULE) (char *module_name);
typedef INT_32 (*ST_UNREGISTER_MODULE) (INT_32 mhandle);
typedef INT_32 (*ST_CREATE_CATEGORY) (INT_32 mhandle, char *cname,
INT_32 ctag, INT_32 ctype, INT_32 dlen, UINT_32 flags);
typedef INT_32 (*ST_REMOVE_CATEGORY) (INT_32 mhandle, UINT_32 ctag);
typedef INT_32 (*ST_SET_HCATEGORY) (INT_32 chandle, UINT_32 data);
typedef INT_32 (*ST_SET_CATEGORY) (INT_32 mhandle, INT_32 ctag, UINT_32 data);
typedef void (*LOGSTRING) (INT_16 ltype, INT_16 priority, char *str);
typedef void (*LOGDATA) (INT_16 ltype, INT_16 priority, char *fmt, ...);
typedef INT_32 (*CREATE_OBJECT) (char *objectname, INT_32 objecttype,
char *id, INT_32 flags);
typedef INT_32 (*SET_PASSWORD) (char *username, char *host, char *newpassword,
char *oldpassword, INT_32 select);
typedef INT_32 (*ST_GET_NEXT_MODULE) (INT_32 mhandle, char *modname);
typedef INT_32 (*ST_GET_NEXT_CATEGORY) (INT_32 mhandle, INT_32 chandle,
char *cname, INT_32 *ctype, INT_32 *clen, INT_32 *cflags);
typedef INT_32 (*ST_GET_CATEGORY_DATA) (INT_32 chandle, void *data);
typedef INT_32 (*ST_EXPORT_STATS) (INT_32 mhandle, char *fname, UINT_32 flags);
typedef INT_32 (*SELECT_PRINTER) (char *devicename, int maxlen);
typedef INT_32 (* PRINT_FILE) (char *fname, char *printername, UINT_32 flags,
INT_32 lrmargin, INT_32 tbmargin, char *title, char *username, char *fontname,
INT_32 fontsize);
typedef struct
{
long dsize; // Size of this structure
char vmajor, vminor;
HWND hMDIParent;
GET_VARIABLE get_variable;
IS_LOCAL_ADDRESS is_local_address;
IS_GROUP is_group;
PARSE_ADDRESS parse_address;
EXTRACT_ONE_ADDRESS extract_one_address;
EXTRACT_CQTEXT extract_cqtext;
DLIST_INFO dlist_info;
SEND_NOTIFICATION send_notification;
GET_DELIVERY_PATH get_delivery_path;
GET_DATE_AND_TIME get_date_and_time;
VERIFY_PASSWORD verify_password;
WRITE_PROFILE write_profile;
MODULE_STATE module_state;
// Job control functions
JI_SCAN_FIRST_JOB ji_scan_first_job;
JI_SCAN_NEXT_JOB ji_scan_next_job;
JI_END_SCAN ji_end_scan;
JI_OPEN_JOB ji_open_job;
JI_CLOSE_JOB ji_close_job;
JI_REWIND_JOB ji_rewind_job;
JI_DISPOSE_JOB ji_dispose_job;
JI_PROCESS_JOB ji_process_job;
JI_DELETE_JOB ji_delete_job;
JI_ABORT_JOB ji_abort_job;
JI_GET_JOB_INFO ji_get_job_info;
JI_CREATE_JOB ji_create_job;
JI_ADD_ELEMENT ji_add_element;
JI_ADD_DATA ji_add_data;
JI_GET_DATA ji_get_data;
JI_GET_NEXT_ELEMENT ji_get_next_element;
JI_SET_ELEMENT_STATUS ji_set_element_status;
JI_SET_ELEMENT_RESOLVINFO ji_set_element_resolvinfo;
JI_SET_DIAGNOSTICS ji_set_diagnostics;
JI_GET_DIAGNOSTICS ji_get_diagnostics;
JI_INCREMENT_TIME ji_increment_time;
// MNICA (Network interface) functions
GET_FIRST_GROUP_MEMBER get_first_group_member;
GET_NEXT_GROUP_MEMBER get_next_group_member;
END_GROUP_SCAN end_group_scan;
IS_VALID_LOCAL_USER is_valid_local_user;
IS_GROUP_MEMBER is_group_member;
GET_FIRST_USER_DETAILS get_first_user_details;
GET_NEXT_USER_DETAILS get_next_user_details;
GET_USER_DETAILS get_user_details;
END_USER_SCAN end_user_scan;
READ_PMPROP read_pmprop;
CHANGE_OWNERSHIP change_ownership;
BEGIN_SINGLE_DELIVERY begin_single_delivery;
END_SINGLE_DELIVERY end_single_delivery;
// Miscellaneous functions
MERCURY_COMMAND mercury_command;
GET_DATE_STRING get_date_string;
RFC822_TIME rfc822_time;
RFC821_TIME rfc821_time;
// File parsing and I/O functions
FM_OPEN_FILE fm_open_file;
FM_OPEN_MESSAGE fm_open_message;
FM_CLOSE_MESSAGE fm_close_message;
FM_GETS fm_gets;
FM_GETC fm_getc;
FM_UNGETC fm_ungetc;
FM_READ fm_read;
FM_GETPOS fm_getpos;
FM_SETPOS fm_setpos;
FM_GET_FOLDED_LINE fm_get_folded_line;
FM_FIND_HEADER fm_find_header;
FM_EXTRACT_MESSAGE fm_extract_message;
PARSE_HEADER parse_header;
MIME_PREP_MESSAGE mime_prep_message;
PARSE_MIME parse_mime;
FREE_MIME free_mime;
FAKE_IMESSAGE fake_imessage;
DECODE_MIME_HEADER decode_mime_header;
ENCODE_MIME_HEADER encode_mime_header;
OM_CREATE_MESSAGE om_create_message;
OM_DISPOSE_MESSAGE om_dispose_message;
OM_ADD_FIELD om_add_field;
OM_ADD_ATTACHMENT om_add_attachment;
OM_WRITE_MESSAGE om_write_message;
OM_SEND_MESSAGE om_send_message;
ENCODE_BASE64_STR encode_base64_str;
DECODE_BASE64_STR decode_base64_str;
ST_REGISTER_MODULE st_register_module;
ST_UNREGISTER_MODULE st_unregister_module;
ST_CREATE_CATEGORY st_create_category;
ST_REMOVE_CATEGORY st_remove_category;
ST_SET_HCATEGORY st_set_hcategory;
ST_SET_CATEGORY st_set_category;
JI_TELL ji_tell;
JI_SEEK ji_seek;
JI_SET_JOB_FLAGS ji_set_job_flags;
LOGSTRING logstring;
LOGDATA logdata;
CREATE_OBJECT create_object;
SET_PASSWORD set_password;
ST_GET_NEXT_MODULE st_get_next_module;
ST_GET_NEXT_CATEGORY st_get_next_category;
ST_GET_CATEGORY_DATA st_get_category_data;
ST_EXPORT_STATS st_export_stats;
JI_GET_JOB_BY_ID ji_get_job_by_id;
JI_GET_JOB_TIMES ji_get_job_times;
SELECT_PRINTER select_printer;
PRINT_FILE print_file;
} M_INTERFACE;
#ifdef USES_M_INTERFACE
// Convenience macros: allow calls to internal Mercury functions to
// be made in the same way as they would be in the core code (good
// for portability).
// Values for the "flags" field of print_file
#define PRT_MESSAGE 1 // Print as an RFC822 message
#define PRT_REFORMAT 2 // Reformat long lines when printing
#define PRT_TIDY 4 // Print only "important" headers
#define PRT_FOOTER 8 // Print a footer on each page
#define PRT_NOHEADERS 16 // Print no message headers
#define PRT_FIRSTONLY 32 // Print only first line of headers
#define PRT_ITALICS 64 // Print quoted text in italics
extern M_INTERFACE *mi;
#define get_variable(x) (mi->get_variable (x))
#define is_local_address(a,u,s) (mi->is_local_address (a, u, s))
#define is_group(a,h,g) (mi->is_group (a, h, g))
#define parse_address(t,s,l) (mi->parse_address (t, s, l))
#define extract_one_address(d,s,o) (mi->extract_one_address (d, s, o))
#define extract_cqtext(d,s,l) (mi->extract_cqtext (d, s, l))
#define dlist_info(d,l,n,a,e,m) (mi->dlist_info(d, l, n, a, e, m))
#define send_notification(u,h,m) (mi->send_notification (u, h, m))
#define get_delivery_path(p,u,h) (mi->get_delivery_path (p, u, h))
#define get_date_and_time(b) (mi->get_date_and_time (b))
#define verify_password(u,s,p,e) (mi->verify_password (u, s, p, e))
#define write_profile(s,f) (mi->write_profile (s, f))
#define module_state(m,v,s) (mi->module_state (m, v, s))
#define ji_scan_first_job(t,m,d) (mi->ji_scan_first_job (t,m,d))
#define ji_scan_next_job(d) (mi->ji_scan_next_job (d))
#define ji_end_scan(d) (mi->ji_end_scan (d))
#define ji_open_job(j) (mi->ji_open_job (j))
#define ji_close_job(j) (mi->ji_close_job (j))
#define ji_rewind_job(j,f) (mi->ji_rewind_job (j,f))
#define ji_dispose_job(j) (mi->ji_dispose_job (j))
#define ji_process_job(j) (mi->ji_process_job (j))
#define ji_delete_job(j) (mi->ji_delete_job (j))
#define ji_abort_job(j,f) (mi->ji_abort_job (j, f))
#define ji_get_job_info(j,i) (mi->ji_get_job_info (j, i))
#define ji_create_job(t,f,s) (mi->ji_create_job (t,f,s))
#define ji_add_element(j,a) (mi->ji_add_element (j,a))
#define ji_add_data(j,d) (mi->ji_add_data (j,d))
#define ji_get_data(j,b,l) (mi->ji_get_data (j,b,l))
#define ji_get_next_element(j,t,i) (mi->ji_get_next_element (j,t,i))
#define ji_set_element_status(j,m,d) (mi->ji_set_element_status (j,m,d))
#define ji_set_element_resolvinfo(j,k,l,m,n) (mi->ji_set_element_resolvinfo (j,k,l,m,n))
#define ji_set_diagnostics(j,w,t) (mi->ji_set_diagnostics (j,w,t))
#define ji_get_diagnostics(j,w,f) (mi->ji_get_diagnostics (j,w,f))
#define ji_increment_time(t,s) (mi->ji_increment_time (t,s))
#define ji_tell(j,s) (mi->ji_tell (j,s))
#define ji_seek(j,o,s) (mi->ji_seek(j,o,s))
#define ji_set_job_flags(j,f) (mi->ji_set_job_flags(j,f))
#define ji_get_job_by_id(i) (mi->ji_get_job_by_id(i))
#define ji_get_job_times(j,s,r) (mi->ji_get_job_times(j,s,r))
#define get_first_group_member(g,h,m,l,d) (mi->get_first_group_member(g,h,m,l,d))
#define get_next_group_member(m,l,d) (mi->get_next_group_member(m,l,d))
#define end_group_scan(d) (mi->end_group_scan(d))
#define is_valid_local_user(a,u,h) (mi->is_valid_local_user(a,u,h))
#define is_group_member(h,u,g) (mi->is_group_member(h,u,g))
#define get_first_user_details(h,n,u,ul,a,al,f,fl,d) (mi->get_first_user_details(h,n,u,ul,a,al,f,fl,d))
#define get_next_user_details(u,ul,a,al,f,fl,d) (mi->get_next_user_details(u,ul,a,al,f,fl,d))
#define get_user_details(h,m,u,ul,a,al,f,fl) (mi->get_user_details(h,m,u,ul,a,al,f,fl))
#define end_user_scan(d) (mi->end_user_scan(d))
#define read_pmprop(u,s,p) (mi->read_pmprop(u,s,p))
#define change_ownership(f,h,n) (mi->change_ownership(f,h,n))
#define begin_single_delivery(u,s,d) (mi->begin_single_delivery(u,s,d))
#define end_single_delivery(d) (mi->end_single_delivery(d))
#define mercury_command(s,p1,p2) (mi->mercury_command(s,p1,p2))
#define get_date_string(s,b,d) (mi->get_date_string(s,b,d))
#define rfc822_time(s) (mi->rfc822_time(s))
#define rfc821_time(s) (mi->rfc821_time(s))
#define fm_open_file(p,f) (mi->fm_open_file(p,f))
#define fm_open_message(i,f) (mi->fm_open_message(i,f))
#define fm_close_message(i) (mi->fm_close_message(i))
#define fm_gets(b,m,i) (mi->fm_gets(b,m,i))
#define fm_getc(i) (mi->fm_getc(i))
#define fm_ungetc(c,i) (mi->fm_ungetc(c,i))
#define fm_read(i,b,s) (mi->fm_read(i,b,s))
#define fm_getpos(f) (mi->fm_getpos(f))
#define fm_setpos(f,o) (mi->fm_setpos(f,o))
#define fm_get_folded_line(f,l,x) (mi->fm_get_folded_line(f,l,x))
#define fm_find_header(i,n,b,l) (mi->fm_find_header(i,n,b,l))
#define fm_extract_message(j,n,f) (mi->fm_extract_message(j,n,f))
#define parse_header(f,m) (mi->parse_header(f,m))
#define mime_prep_message(i,f,h) (mi->mime_prep_message(i,f,h))
#define parse_mime(i,m) (mi->parse_mime(i,m))
#define free_mime(m) (mi->free_mime(m))
#define fake_imessage(i,s,m,e,b) (mi->fake_imessage(i,s,m,e,b))
#define decode_mime_header(d,s) (mi->decode_mime_header(d,s))
#define encode_mime_header(d,s,r) (mi->encode_mime_header(d,s,r))
#define om_create_message(m,f) (mi->om_create_message(m,f))
#define om_dispose_message(m) (mi->om_dispose_message(m))
#define om_add_field(m,s,d) (mi->om_add_field(m,s,d))
#define om_add_attachment(m,f,t,d,e,g,r) (mi->om_add_attachment(m,f,t,d,e,g,r))
#define om_write_message(m,f) (mi->om_write_message(m,f))
#define om_send_message(m,e) (mi->om_send_message(m,e))
#define encode_base64_str(d,s,l) (mi->encode_base64_str(d,s,l))
#define decode_base64_str(d,s,t) (mi->decode_base64_str(d,s,t))
#define st_register_module(m) (mi->st_register_module(m))
#define st_unregister_module(h) (mi->st_unregister_module(h))
#define st_create_category(m,c,t,y,l,f) (mi->st_create_category(m,c,t,y,l,f))
#define st_remove_category(m,c) (mi->st_remove_category(m,c))
#define st_set_hcategory(c,d) (mi->st_set_hcategory(c,d))
#define st_set_category(m,c,d) (mi->st_set_category(m,c,d))
#define logstring(l,p,s) (mi->logstring(l,p,s))
// "logdata" has variable parameters and cannot be accessed via a macro
#define create_object(n,t,i,f) (mi->create_object(n,t,i,f))
#define set_password(u,h,n,o,s) (mi->set_password(u,h,n,o,s))
#define st_get_next_module(m,n) (mi->st_get_next_module(m,n))
#define st_get_next_category(m,h,c,t,l,f) (mi->st_get_next_category(m,h,c,t,l,f))
#define st_get_category_data(c,d) (mi->st_get_category_data(c,d))
#define st_export_stats(m,f,l) (mi->st_export_stats(m,f,l))
#define select_printer(d,m) (mi->select_printer(d,m))
#define print_file(f,p,l,m,b,t,u,n,z) (mi->print_file(f,p,l,m,b,t,u,n,z))
#endif // USES_M_INTERFACE
#ifdef __cplusplus
};
#endif
#endif // _DAEMON_H

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,93 @@
;
; Pegasus Mail System,
; Copyright (c) 1990-97, David Harris, All Rights Reserved.
;
; File Typing Rules
;
; This file is used by Pegasus Mail to determine the "attachment type"
; information for files automatically. It consists of rules that can
; test a file's extension and any byte or strings in the first 512
; bytes of the file. Each line contains the complete set of rules for
; a single type of file, in the following format:
;
; <file type>,<match type>,<operation>[,<operation>...]
;
; "file type" is the WinPMail "attachment type" string that
; should be used if a file matches this rule.
;
; "match type" is one of the following values:
; 0 : Match is good if any operation succeeds
; 1 : Match is only good if all operations succeed
;
; "operation" is one or more groups of three parameters in
; the following format:
; <opcode>,<offset>,<string>
; "opcode" is one of the following characters:
; X : match the file's extension
; B : match the single byte contained in "string"
; at offset "offset" in the file
; S : match the string contained in "string" starting
; at offset "offset" in the file
; R : match the string contained in "string" anywhere
; in the first 512 bytes of the file
; "offset" is the offset to start matching in the file. When
; "operation" is either X or R, it should be set to 0
; "string" is the string or byte to match. It can be ASCII
; characters, or escapes in the form "\xxx", where "xxx"
; is exactly three decimal characters.
;
; Examples:
; MS-Word,0,X,0,.DOC
; - Returns "MS-Word" if the file's extension is ".DOC".
;
; PGP-Public-Key,0,R,0,BEGIN PGP PUBLIC
; - Returns "PGP-Public-Key" if the string "BEGIN PGP PUBLIC"
; appears anywhere in the first 512 bytes of the file.
;
; PCEXE,1,X,0,.EXE,S,0,MZ
; - Returns "PCEXE" if the file's extension is ".EXE"
; AND the first two characters in the file are "MZ".
;
; ZIP-Archive,0,X,0,.ZIP,S,0,PK\003
; - Returns "ZIP-Archive" if the file's extension is ".ZIP"
; OR the first three characters are "PK" and an ASCII 3.
;
; The matching process ends on the first viable match. Because of this,
; if you have both a specific set of rules and a general set of rules
; for any single file type, you should always place the general rules
; after the specific rules in the file to allow more reliable matching.
;
; The parser for this file is inflexible - you must get the format
; right. Note in particular that whitespace is not permitted, or if it
; is present, it is assumed to be significant. The only valid delimiter
; in this file is a comma; the only way you can match a comma in a
; string is by using the escape "\044".
;
; Blank lines and lines in this file starting with ';' or '#' are
; regarded as comments and are ignored.
;
MS-Word,1,S,0,\219\165\045
PCEXE,1,X,0,.EXE,S,0,MZ
PCEXE,1,X,0,.DLL,S,0,MZ
ZIP-archive,0,X,0,.ZIP,S,0,PK\003
MS-Richtext,0,X,0,.RTF,S,0,{\092rtf
Program-source,0,X,0,.C,X,0,.H,X,0,.PAS,X,0,.RC,X,0,.CPP,X,0,.BAS,X,0,.ASM
GIF-image,0,X,0,.GIF,S,0,GIF
JPEG-image,0,X,0,.JPG,S,6,JFIF
BMP-image,0,X,0,.BMP,X,0,.DIB,S,0,BM
WAV-sound-file,1,S,0,RIFF,S,8,WAVE
WAV-sound-file,0,X,0,.WAV
WordPerfect,0,S,1,WPC
Excel-sheet,0,X,0,.XLS
Excel-chart,0,X,0,.XLC
MS-Access,0,X,0,.MDB
AVI-Movie,1,S,0,RIFF,S,8,AVI
AVI-Movie,0,X,0,.AVI
Windows-help,1,X,0,.HLP,S,0,?_\003
HTML-text,0,X,0,.HTM
HTML-text,1,S,0,<HTML>
PGP-Public-Key,0,R,0,BEGIN PGP PUBLIC
PGP-encrypted,0,X,0,.PGP
Text,0,X,0,.TXT

View File

@@ -0,0 +1,52 @@
Changing the SMTP greeting issued by MercuryS
---------------------------------------------
When an incoming connection is received by the MercuryS SMTP server,
the first thing MercuryS does is issue a "greeting". This greeting
typically looks like this:
--------- cut here --------------
220 somehost.somedomain.com Mercury/32 v3.21 ESMTP server ready.
--------- cut here --------------
The server then waits for the client to introduce itself and start
a mail transaction.
Recent suggested law changes in the U.S.A. and other countries may
make it desirable to be able to change the "greeting" issued by
MercuryS on connection, typically to indicate that certain types of
mail may not be welcome.
To change the MercuryS greeting, create a text file called
GREETING.MER in the directory where MERCURY.EXE is installed. This
file should contain the text you want MercuryS to display, and must
be no longer than 512 characters.
We recommend the following text as a starting point:
--------- cut here --------------
Use of this server for unauthorised relaying of mail is forbidden.
Unsolicited Commercial E-mail ("spam") is NOT WELCOME HERE.
--------- cut here --------------
If you were to use this text in your GREETING.MER file, then the
opening message displayed by MercuryS would look like this:
--------- cut here --------------
220-somehost.somedomain.com Mercury/32 v3.21 ESMTP server ready.
220-Use of this server for unauthorised relaying of mail is forbidden.
220 Unsolicited Commercial E-mail ("spam") is NOT WELCOME HERE.
--------- cut here --------------
MercuryS automatically adds the SMTP response codes and continuation
characters correctly.
Using an "extended greeting" in this way *may* on rare occasions
create problems with some older mail clients that cannot handle
multi-line greetings. We recommend that you experiment with the
feature for a while to make sure no mail interruption is occurring
before you fix it in place.
Remember, you cannot have more than 512 characters of data in your
GREETING.MER file.

View File

@@ -0,0 +1,44 @@
Title Helpdesk Request Form
# A simple template showing how a helpdesk request form could be
# generated as a template. Note the use of a picture to help the
# form to stand out, and the use of informational text to assist
# the user in filling out the form.
#
# You will need to modify the value of the "Set to" line below so
# that it reflects the real address of your helpdesk staff.
picture 0 ~a\hdesk.bmp
text 0 Please fill in the information below, and provide a brief description
text 0 of your problem. Our helpdesk staff will get back to you promptly.
text 0
string v1 "~p" "What is your name?"
string v2 "" "What is your phone number?"
string v3 "" "Where are you located?"
string v4 ";Normal;Informational;Urgent" "Urgency of your problem?" 0 list
string v5 "" "(Optional) Response needed by?"
string v6 "" "What is your problem or request?" 512 multiline
set to = helpdesk
set subject = "Helpdesk Request"
set confirm-reading = "N"
set copyself = "Y"
insert "Helpdesk Request~z"
insert "----------------~z"
insert "~z"
insert "From: ~vv1~~z"
insert "Date and time: ~y~z"
insert "Phone: ~vv2~~z"
insert "Location: ~vv3~~z"
insert "Urgency: ~vv4~~z"
insert "Respond by: ~vv5~~z"
insert "~z"
insert "Problem description:~z"
insert "--------------------~z"
insert "~vv6~~z"
insert "--------------------~z"
insert "~z"
insert "End of helpdesk request.~z"

View File

@@ -0,0 +1,26 @@
Title Subscribe to a Pegasus Mail Mailing List
# This template allows the user to subscribe to any of the Pegasus
# Mail Mailing lists hosted a bama.ua.edu; it prompts the user for
# a little information, then sends the subscription request off
# formatted for the LISTSERV program.
text 0 Use this template to subscribe to any of the Pegasus Mail
text 0 mailing lists hosted by the University of Alabama at Tuscaloosa.
text 0
string pmlist ";General Pegasus Mail List;Pegasus Mail for Windows List;Mercury MTS List;Pegasus Mail for Mac List;Pegasus Mail for DOS List;Pegasus Mail Announcements List" "Which mailing list?" 0 list
string adlist ";PMAIL;PM-WIN;MERCURY;PM-MAC;PM-DOS;PM-NEWS" "" 0 list
string myname "~p" "Your name (as \"First/Last\"):"
string listname ""
lookup "~vpmlist~" pmlist adlist listname
set to = listserv@bama.ua.edu
set subject = "Subscription to ~vpmlist~"
set confirm-reading = "N"
set copyself = "N"
set signature = none
insert "subscribe ~vlistname~ ~vmyname~~z"

View File

@@ -0,0 +1,85 @@
<html>
<head>
<title>Mercury HTTP Services</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<p>&nbsp;</p>
<table align="center" cellpadding="0" cellspacing="0" width="540" bgcolor="white" bordercolordark="white" bordercolorlight="black">
<tr>
<td width="540" colspan="3">
<table cellpadding="0" cellspacing="0" bgcolor="#FFFF99" bordercolordark="white" bordercolorlight="black">
<tr>
<td width="540" bgcolor="#6666CC">
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td width="540" bgcolor="#6666CC">
<p align="center"><font face="Arial" size="3" color="white"><b>Welcome
to ~h</b></font></p>
</td>
</tr>
<tr>
<td width="540" bgcolor="#6666CC">
<p><font face="Arial">&nbsp;</font></p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="540" colspan="3" bgcolor="#FFFFCC">
<p><font size="2" face="Arial">&nbsp;</font></p>
</td>
</tr>
<tr>
<td width="540" colspan="3" bgcolor="#FFFFCC">
<p align="center"><font face="Arial" size="2">&nbsp;&nbsp;<b>Services
available on this server:</b></font></p>
</td>
</tr>
<tr>
<td width="540" colspan="3" bgcolor="#FFFFCC">
<p><font face="Arial" size="2">&nbsp;</font></p>
</td>
</tr>
<tr>
<td width="43" bgcolor="#FFFFCC">
<p><font face="Arial" size="2">&nbsp;</font></p>
</td>
<td width="464" bgcolor="#FFFFCC">
<p align="center"><font face="Arial" size="2"><a href="/mlss">Mailing
list subscription&nbsp;management services</a></font></p>
</td>
<td width="33" bgcolor="#FFFFCC">
<p><font face="Arial" size="2">&nbsp;</font></p>
</td>
</tr>
<tr>
<td width="540" colspan="3" bgcolor="#FFFFCC">
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td width="540" colspan="3" bgcolor="#FFFFCC">
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td width="540" colspan="3" bgcolor="#FFFFCC">
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td width="540" colspan="3" bgcolor="#FFFFCC">
<p align="center"><font face="Arial" size="1" color="gray">Powered
by Mercury/32, Copyright (c) 1993-2008, David Harris</font></p>
</td>
</tr>
</table>
<p><font face="Arial" size="2">&nbsp;</font></p>
</body>
</html>

View File

@@ -0,0 +1,24 @@
;
; Pegasus Mail MIME Mapping file.
; This file is used to add MIME content-type mappings into Pegasus Mail
;
; Each line in the file defines a bi-directional mapping between a MIME
; content type on the left and a Pegasus Mail attachment type on the
; right.
;
; When you add an attachment to a message, WinPMail will look through
; this file looking for an attachment type match; when it finds one, it
; will write the attachment using that MIME content type.
;
; When looking for viewers, Pegasus Mail performs the reverse of the
; same search, looking for a line containing a content type that matches
; the one used to send the file; if it finds one, it searches its list
; of attachment viewers for the attachment type defined on the same line.
;
; The format of this file is:
;
; content_type = attachment_type
;
Text/HTML = HTML-text

Binary file not shown.

View File

@@ -0,0 +1,72 @@
;
; Form Fact File for the Pegasus Mail 32-bit Manual Orders Extension
; Pegasus Mail System, Copyright 1990-98 David Harris, all rights reserved.
;
; FFFs are examined by Pegasus Mail at startup and are used to determine
; what forms resources are available to users. WinPMail scans the following
; locations when looking for FFFs -
;
; * The user's home mailbox
; * The base directory (ie, where WINPMAIL.EXE resides)
; * If present, the directory indicated by an FFF environment variable.
;
; An FFF may contain definitions for as many forms as you wish - in general
; terms, system-wide FFFs are best defined in a single file since this will
; speed the startup of the program, but the ability to have multiple FFFs
; can make for much simpler installation of new forms.
;
; -------------------------------------------------------------------------
; WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING
; -------------------------------------------------------------------------
; WinPMail forms are executable code! You should never load forms onto your
; system unless you are absolutely certain of their pedigree, because they
; are a perfect vehicle for trojan horses.
; -------------------------------------------------------------------------
;
; The following keywords are recognized in this file:
;
; "Form name" - The name which should appear in the form selector list
; "Form DLL" - Full path to the DLL containing the form's code
; "Form type" - Either COMPOSER or READER
; "Form flags" - A bitmap value - see below
; "Form tagname" - Form's registered tagname written into outgoing mail
; "Form data" - Any custom data required by the form
; "32-bit model" - Indicates that the extension is for WinPMail/32
; "End" - End of definition - add the form to the form list.
;
; "Form triggers" - only valid for READERS - what should activate the form
;
; "Form flags" is a bitmap composed of the following bits:
;
; Mnemonic Value Meaning
; ----------------------------------------------------------------
; WPM_STARTUP 1 Load the extension when WinPMail starts up
; WPM_NOLIST 2 Do not show in the "Extensions" window list
; WPM_HIDDEN 4 Hide the parent MDI window on loading
; WPM_LOGGING 8 Extension wants to receive logging events
; WPM_ONEONLY 16 Only allow one running instance at any time
; WPM_FIRSTRUN 32 Autoload extension on first-ever WinPMail run
; WPM_USES_TCP 64 Extension requires TCP/IP services to run
;
; Various flags can be combined by adding (or ORing) the values
; together - so to have a hidden extension which loads at startup,
; is interested in logging events, and does not appear in the
; "Extensions" window, you would use 1 + 2 + 4 + 8 = 15
;
; "Extended flags" is a bitmap containing extra options for the extension:
; WPMX_ASERVER 1 Add the extension to the "Addresses" menu
; WPMX_COMPOSER 2 Add the extension to the "New message" submenu
Form name = "Donate in Support"
32-bit model = 1
Form DLL = ~a\ORDER32.DLL
Form type = COMPOSER
Form flags = 0
Extended flags = 2
Form tagname = "PM-ORDER"
Bitmap file = ~a\order.bmp,Make a donation in support of Pegasus Mail
; The Order extension has no defaultable settings.
Form data = ""
End

Binary file not shown.

View File

@@ -0,0 +1,65 @@
;
; Form Fact File for the sample Pegasus Mail PopPass extension
; Pegasus Mail System, Copyright 1990-99 David Harris, all rights reserved.
;
; FFFs are examined by Pegasus Mail at startup and are used to determine
; what forms resources are available to users. WinPMail scans the following
; locations when looking for FFFs -
;
; * The user's home mailbox
; * The base directory (ie, where WINPMAIL.EXE resides)
; * If present, the directory indicated by an FFF environment variable.
;
; An FFF may contain definitions for as many forms as you wish - in general
; terms, system-wide FFFs are best defined in a single file since this will
; speed the startup of the program, but the ability to have multiple FFFs
; can make for much simpler installation of new forms.
;
; -------------------------------------------------------------------------
; WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING
; -------------------------------------------------------------------------
; WinPMail forms are executable code! You should never load forms onto your
; system unless you are absolutely certain of their pedigree, because they
; are a perfect vehicle for trojan horses.
; -------------------------------------------------------------------------
;
; The following keywords are recognized in this file:
;
; "Form name" - The name which should appear in the form selector list
; "Form DLL" - Full path to the DLL containing the form's code
; "Form type" - Either COMPOSER or READER
; "Form flags" - A bitmap value - see below
; "Form tagname" - Form's registered tagname written into outgoing mail
; "Form data" - Any custom data required by the form
; "End" - End of definition - add the form to the form list.
;
; "Form triggers" - only valid for READERS - what should activate the form
;
; "Form flags" is a bitmap composed of the following bits:
;
; Mnemonic Value Meaning
; ----------------------------------------------------------------
; WPM_STARTUP 1 Load the extension when WinPMail starts up
; WPM_NOLIST 2 Do not show in the "Extensions" window list
; WPM_HIDDEN 4 Hide the parent MDI window on loading
; WPM_LOGGING 8 Extension wants to receive logging events
; WPM_ONEONLY 16 Only allow one running instance at any time
; WPM_USES_TCP 64 Extension requires TCP/IP services to run
;
; Various flags can be combined by adding (or ORing) the values
; together - so to have a hidden extension which loads at startup,
; is interested in logging events, and does not appear in the
; "Extensions" window, you would use 1 + 2 + 4 + 8 = 15
;
Form name = "Change POP3 password"
Form DLL = ~a\POPPASS.DLL
Form type = COMPOSER
Form flags = 80
Form tagname = "PM-POPPASS"
; You can enter a default server port in the "Form Data" field
Form data = "106"
End

View File

@@ -0,0 +1,23 @@
PopPass Extensions for Pegasus Mail
-----------------------------------
PopPass is a Pegasus Mail Extension (or plugin module) that allows
users of Pegasus Mail v3.0 and later systems to change their POP3
passwords using the MercuryW "change password" server, or a compatible
server.
To install the extension, follow these easy steps:
1: Locate the directory where you have installed Pegasus Mail
2: Look for a file called WINPMAIL.EXE - if you can find this file,
then copy POPPASS.DLL and POPPASS.FFF into the directory.
3: Look for a file called WINPM-32.EXE - if you can find this file,
then copy PPASS32.DLL and PPASS32.FFF into the directory.
4: Restart your copy of Pegasus Mail.
To use the extension, choose "Change POP3 Password" from the
"Extensions" submenu of the "Tools" menu in Pegasus Mail.

Binary file not shown.

View File

@@ -0,0 +1,66 @@
;
; Form Fact File for the sample Pegasus Mail 32-bit PopPass extension
; Pegasus Mail System, Copyright 1990-99 David Harris, all rights reserved.
;
; FFFs are examined by Pegasus Mail at startup and are used to determine
; what forms resources are available to users. WinPMail scans the following
; locations when looking for FFFs -
;
; * The user's home mailbox
; * The base directory (ie, where WINPMAIL.EXE resides)
; * If present, the directory indicated by an FFF environment variable.
;
; An FFF may contain definitions for as many forms as you wish - in general
; terms, system-wide FFFs are best defined in a single file since this will
; speed the startup of the program, but the ability to have multiple FFFs
; can make for much simpler installation of new forms.
;
; -------------------------------------------------------------------------
; WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING
; -------------------------------------------------------------------------
; WinPMail forms are executable code! You should never load forms onto your
; system unless you are absolutely certain of their pedigree, because they
; are a perfect vehicle for trojan horses.
; -------------------------------------------------------------------------
;
; The following keywords are recognized in this file:
;
; "Form name" - The name which should appear in the form selector list
; "Form DLL" - Full path to the DLL containing the form's code
; "Form type" - Either COMPOSER or READER
; "Form flags" - A bitmap value - see below
; "Form tagname" - Form's registered tagname written into outgoing mail
; "Form data" - Any custom data required by the form
; "End" - End of definition - add the form to the form list.
;
; "Form triggers" - only valid for READERS - what should activate the form
;
; "Form flags" is a bitmap composed of the following bits:
;
; Mnemonic Value Meaning
; ----------------------------------------------------------------
; WPM_STARTUP 1 Load the extension when WinPMail starts up
; WPM_NOLIST 2 Do not show in the "Extensions" window list
; WPM_HIDDEN 4 Hide the parent MDI window on loading
; WPM_LOGGING 8 Extension wants to receive logging events
; WPM_ONEONLY 16 Only allow one running instance at any time
; WPM_USES_TCP 64 Extension requires TCP/IP services to run
;
; Various flags can be combined by adding (or ORing) the values
; together - so to have a hidden extension which loads at startup,
; is interested in logging events, and does not appear in the
; "Extensions" window, you would use 1 + 2 + 4 + 8 = 15
;
Form name = "Change POP3 password"
32-bit model = 1
Form DLL = ~a\PPASS32.DLL
Form type = COMPOSER
Form flags = 80
Form tagname = "PM-POPPASS"
; You can enter a default server port in the "Form Data" field
Form data = "106"
End

View File

@@ -0,0 +1,52 @@
;
; PREFIX.PM - user-defined subject prefix "ignore" list
; Use this file to create your own list of strings that
; Pegasus Mail should ignore at the start of the subject
; line when sorting by thread or sorting by subject.
;
; This file can be placed either in the user's mailbox
; directory (in which case it will be private to that user),
; or in the same directory as WINPM-32.EXE, in which case it
; will be system-wide and used by anyone who runs that copy
; of the program.
;
; Each line in this file should be an absolutely literal
; string that Pegasus Mail should check for: spaces are
; significant, both leading and trailing. Any line starting
; with ';' or '#' is regarded as a comment and is ignored,
; as are blank lines.
;
; You can enter more complex expressions by making the first
; character on the line a tilde (~). Everything that follows
; the tilde is regarded as an extended Pegasus Mail v4.1
; regular expression, and it *must* contain the special
; sequence /h to show Pegasus Mail the point in the string
; where the prefix ends. As an example, consider this
; expression:
;
; ~RE/w[[][0-9]+][ :]/h*
;
; This tells Pegasus Mail to look for any line starting with
; the letters "RE" followed by zero or more spaces, followed
; by a '[' character, followed by one or more digits, followed
; by a ']' character, followed by either a space or a colon.
; The /h indicates that this is where the prefix ends, while
; the '*' operator is used to match the remainder of the line.
;
; The items in this sample file are exactly the same as the
; default list built into Pegasus Mail itself (the list that
; it will use automatically if this file is not present). Note
; that Pegasus Mail will check for any combination that may be
; present of any item in this file - so, using this set of
; definitions, the subject lines "Re: (FWD) re FW: X" and
; "Re: X" will sort the same.
RE:
RE
FWD:
(FWD)
FW:
~RE/w[[][0-9]+][ :]/h*
AW:
WG:

Binary file not shown.

View File

@@ -0,0 +1,20 @@
The RESOURCE subdirectory
-------------------------------------------------------------------------
This directory, RESOURCE, contains unmodified, original versions of
various files from the most recent Mercury/32 installation: the files in
this directory are original versions of files found in the base Mercury
directory that are typically modified on a site-by-site basis.
You SHOULD NOT modify any files in this directory, primarily because any
changes you make will be overwritten without warning the next time you
install a Mercury update.
If you want to modify any of the files in this directory, you should copy
them somewhere else before working on them.
------
Mercury Mail Transport System,
Copyright (c) 1993-2008, David Harris, All rights reserved.
http://www.pmail.com

Binary file not shown.

View File

@@ -0,0 +1,88 @@
##
## Sample source for a suitable RQUOTES.PMS for use in
## Pegasus Mail v3.0/WinPmail variable signatures.
##
## Compile this source using ResCom.exe, by issuing the
## command "ResCom RQUOTES.R", then copy the resulting
## RQUOTES.RSC file into your home mailbox as RQUOTES.PMS.
##
## So, the sequence of commands looks like this:
##
## C:\PMAIL> rescom rquotes.r
## C:\PMAIL> copy rquotes.rsc f:\mail\9000001\rquotes.pms
##
## The general format of this file is a collection of text
## resources; each text resource is a multiline group of
## quoted strings, ending with \n wherever you want a line
## break.
##
## To activate your variable signature, place the characters
## ~! in your signature file at the point where you want the
## substitution to occur.
##
headers off # Ignore this command
symbols off # Ignore this command.
text x
{
"Thought for the day:\n",
" A penny saved is ridiculous.\n"
};
text x
{
"Thought for the day:\n",
" The only thing that hurts more than paying income tax\n",
" is not having to pay income tax.\n"
};
text x
{
"Thought for the day:\n",
" Intuition (n): an uncanny sixth sense which tells people \n",
" that they are right, whether they are or not.\n"
};
text x
{
"Thought for the day:\n",
" Dictatorship (n): a form of government under which everything \n",
" which is not prohibited is compulsory.\n"
};
text x
{
"Thought for the day:\n",
" Concerto (n): a fight between a piano and a pianist.\n"
};
text x
{
"Thought for the day:\n",
" Communist (n): one who has given up all hope\n",
" of becoming a Capitalist.\n"
};
text x
{
"Thought for the day:\n",
" Book (n): a utensil used to pass time while waiting\n",
" for the TV repairman.\n"
};
text x
{
"Thought for the day:\n",
" Bagpipes (n): an octopus wearing a kilt.\n"
};
text x
{
"Thought for the day:\n",
" Advertising (n): the science of arresting the human\n",
" intelligence for long enough to get money from it.\n",
" -- Stephen Leacock.\n"
};

View File

@@ -0,0 +1,619 @@
#
# Mercury/32 Basic Content Control rule file.
# Copyright (c) 2002-2003, David Harris; portions copyright (c) 2002 David Kocmoud.
# For information on the syntax and format of this file, please consult
# the "Content control" section of the Mercury/32 Help file.
#
# This set of rules is intended to catch a wide range of unwanted mail
# messages where the content is commercial or sexual in nature. It works
# quite well (at the time of writing anyway) but you will almost certainly
# want or need to adjust it over time to deal with the specific types of
# content you want to filter. This rule set is designed to be used with a
# definition where the trigger weight is set to 50.
#
# Note that many of the rules in this file have negative weights: this is
# a useful way of "promoting" a message that might otherwise be detected
# as having unacceptable content.
#
# Check for "Lazy HTML", almost always a sure sign of spam
if Test "LazyHTML strict" weight 51 tag "Message contains Lazy HTML"
# Check for iFrame tags
if Test "HasIFrame" weight 51 tag "Probable iFrame virus attack"
# Check for excessive numbers of HTML comments
if Test "HTMLComments 10" weight 51 tag "Too many HTML comments"
# Check for an unreasonable number of spaces in the subject
if Subject matches "* +*" weight 51
# Check for unreasonable numbers of high-bit characters - a fairly
# reliable sign of unreadable Asian spam.
if Test "Garbage 25" weight 51
# Give a small weight to messages containing URLs in the .BIZ TLD
if body matches "*http:*.biz*" weight 15
# Check for all variations of "viagra" and similar products in subject and body
# Note that the "obfuscated" keyword, which is used to trap doctored versions of
# trigger words like "vi@gra", can be abbreviated to "ob".
if subject contains "viagra" obfuscated weight 51
if subject contains "viapro" ob weight 51
if subject has "cialis" ob weight 51
if subject has "cialagen" ob weight 51
if subject has "climagel" ob weight 51
if subject has "VPRX" ob weight 51
if body contains "viagra" ob weight 40
if body contains "viapro" ob weight 40
if body has "cialis" ob weight 40
if body has "cialagen" ob weight 40
if body has "climagel" ob weight 40
if body has "VPRX" ob weight 40
# Check for other pharmacy and drug-related stuff
if subject contains "xanax" ob weight 51
if body contains "xanax" ob weight 40
if subject contains "vicodin" ob weight 51
if body contains "vicodin" ob weight 40
if subject contains "valium" ob weight 51
if body contains "valium" ob weight 30
if content contains "phentermine" ob weight 30
if content contains "finasteride" ob weight 40
if content has "ambien" ob weight 30
if Subject matches "*/spharmacy/s*" weight 40
if Subject hasall "online, pharmacy" weight 51
if Subject hasall "on-line, pharmacy" weight 51
if content has "prescription" ob weight 15
if content has "meds" weight 30
if content has "pharmacy" weight 20
if content hasall "diet, patch" ob weight 30
if content contains "medication" ob weight 15
# Check for penile enlargement
if Subject has "penis" ob weight 51 tag "Penis enlargement ad"
if Subject contains "enlargement"
and Subject has "Penis, Penile" ob weight 51 tag "Penis enlargement ad"
if Body has "penis" ob weight 35 tag "Penis enlargement ad"
if Body hasall "penis, enlargement" ob weight 21 tag "Penis enlargement ad"
if Content hasall "premature, ejaculation" ob weight 40 tag "Sex pills ad"
if Content contains "increasethelength" ob weight 25 tag "Penis enlargement ad"
if Body contains "penissize" ob weight 40
if Body hasall "penissize, largerpenis" ob weight 51
if Body hasall "penis, gain, inches" ob weight 51
if Body hasall "increase, size, penis" ob weight 51 tag "Penis enlargement ad"
if content contains "breastenlargement" ob weight 51 tag "Breast enlargement ad"
# Adjust for filtering of listserv messages
if Subject matches "Rejected posting to*" weight -9999
# Check for subject lines starting with "ADV:"
if Subject matches "/sADV/s:*" weight 51
# Check for subject lines ending with a date/time stamp. e.g. "3/10/02 8:14:07 PM"
if Subject matches "*[0-9]+/[0-9]+/[0-9]+ +[0-9]+:[0-9]+:[0-9]+ +[AP]M" weight 77
# Check for a "Comments: Authenticated sender..." header with no
# matching X-Mailer header (a common, although older spam signature).
if header "comments" contains "authenticated sender"
andnot exists "X-Mailer" weight 30
# Check for special headers that reek of spam
if exists "X-PMG-Recipient" weight 51
# Check for messages with no "Date" field - this is illegal under
# RFC2822 anyway, and is usually a pretty good indicator of spam
ifnot exists "Date" weight 51
# Check for content suggesting unwanted "commercial services"
if Content matches "*Access*IRA funds taxfree*penalty[- ]free*" weight 51
if Content matches "*Access*IRA*no*tax*penalty*" weight 51
if Subject contains "get out of debt" weight 50
if Subject contains "debt reduction" weight 50
if Subject contains "credit card debt" weight 50
if Subject matches "*accept credit car[td]s*" weight 51
if Content contains "no credit card required" weight 40
if Subject contains "get paid for " weight 50
if Subject contains "get paid while " weight 50
if Subject matches "*guaranteed*return*investment*" weight 50
if Subject contains "low interest loan" weight 50
if Subject contains "lowest mortgage rates" weight 50
if Subject contains "bad credit" weight 50
if Content contains "online casino" weight 50
if Content contains "on-line casino" weight 50
if Content contains "multilevel market" weight 30
if Subject contains "increase your net worth" weight 30
if Subject contains " pay you " weight 30
if Subject matches "*paycheck*paycheck*" weight 30
if Subject contains "take surveys" weight 30
if Subject contains "fire your boss" weight 50
if Subject contains " work from home" weight 40
if Subject contains " work at home" weight 40
if Subject matches "*mak* money at home*" weight 50
if Subject contains "make money on" weight 50
if Subject contains "make more money" weight 50
if Subject contains "want more money" weight 50
if Subject contains "pile of cash" weight 50
if Subject contains "save $" weight 50
if Subject contains "save money" weight 50
if Subject contains "stock pick" weight 40
if Subject contains "stock play" weight 40
if Subject contains "stockwatch" weight 40
if Subject contains "OTCBB:" weight 40
if Subject contains "watch this stock" weight 40
if Subject contains "win cash" weight 50
if Subject contains "win money" weight 50
if Subject contains "win $" weight 50
if Subject contains "venture"
and Subject contains "capital" weight 50
if Sender contains "investor insights" weight 50
if subject matches "*create*paycheck*home*" weight 51
# Check for content suggesting unwanted sexual "services"
if Subject contains "adult entertainment" weight 50
if Subject contains "adult web" weight 50
if Subject contains "adult site" weight 50
if Subject contains "adult video" weight 50
if Subject contains "barely legal" weight 50
if Subject contains "bondage" weight 40
if Subject contains "erotica" weight 40
if Subject contains "fetish" weight 40
if Subject contains "fisting" weight 40
if Subject contains "fuck" weight 40
if Subject contains "hardcore" weight 10
if Subject contains "horny" weight 20
if Subject contains "naughty" weight 10
if Subject contains "naked" weight 20
if Subject contains "porn " weight 40
if Subject contains "pussy" weight 25
if subject contains "pussies" weight 25
if Subject contains "nude celeb" weight 50
if Subject contains "sex" weight 10
if Subject contains "slut" weight 40
if Subject contains "sleaze" weight 20
if Subject contains "whore" weight 50
if Subject matches "*/cXXX*" weight 30
if subject has "f12ee" or subject has "fl2ee" weight 51
if subject has "seks" or subject has "secks" weight 51
if subject has "toon, toons" weight 30
# Bogus diet/health/vanity stuff
if Subject contains "fat blocker" weight 30
if Subject contains "Liposuction" weight 30
if Subject contains "Obesity" weight 30
if Subject contains "Weight Loss" weight 50
if Subject hasall "coral, calcium" weight 51
if Content contains "medically proven" weight 40
# Bulk e-mail Spam stuff
if Subject matches "*million*addresses*" weight 50
if Subject matches "*bulk*email*" weight 50
# Other sales stuff
if Subject contains "below wholesale price" weight 30
if Subject contains "buy wholesale" weight 30
if Subject matches "*cell*phone*" weight 30
if Subject contains "descrambler" weight 30
if Subject contains "dream vacation" weight 30
if Subject matches "*earn*bonus*points*" weight 60
if Subject contains "free gift" weight 30
if Subject contains "get more hits" weight 50
if Subject contains "increase sales" weight 30
if Subject contains "INCREDIBLE SOFTWARE BARGAIN" weight 30
if Subject contains "Internet Detective" weight 50
if Subject contains "Internet Spy" weight 50
if Subject contains "Life Insurance Quotes" weight 30
if Subject contains "limited time offer" weight 50
if Subject contains "mortgage rates" weight 30
if Subject contains "need Life Insurance" weight 50
if Subject contains "psychic reading" weight 50
if Subject contains "site need more traffic" weight 50
if Subject contains "stop smoking" weight 50
if Subject matches "*web*promotion service*" weight 50
if Subject matches "*save* on *" weight 30
if Subject contains "No Fee!" weight 40
if Subject contains "Paying Too Much" weight 40
if Subject contains "Or Your Money Back" weight 40
if Subject matches "*/cFREE[E!*, ]*" weight 50
if sender contains "vividnews" weight 50
if sender contains "vividinsid" weight 50
if sender contains "Bulkmail" weight 45
if subject hasall "cable, descrambler" ob weight 51
# Chinese Spam: note that users in China will almost certainly
# have to disable these tests - they are intended solely for
# Westerners who are inundated with rubbish originating from
# within Mainland China and Taiwan.
if header "Content-Type" contains "Big5" weight 45
if header "Content-Type" contains "GB2312" weight 45
# Check for URL using dotted-IP-address
if body matches "*tp:??[0-9]+.[0-9]+.[0-9]+.*" weight 20
# Match spam that claims not to be spam because it "adheres" to the
# ridiculous 105C 1618 section 301 legislation.
if body matches "*1618*section 301*" weight 51
if body matches "*section 301*1618*" weight 51
# Viral stuff - not intended to replace competent virus scanning,
# but easy to do for a few of the most common cases
if subject matches "*Snow*Seven*Dwar*REAL*story*" weight 51
# Body matches - all the rules below this point test the message
# body. This has more of an impact on the time it takes to process
# the rule set than header processing does.
# Check for body content suggesting unwanted "commercial services"
if body contains "credit card debt" weight 50
if body contains "credit card bills" weight 40
if body contains "credit rating" weight 20
if body contains "Accept Credit Car" weight 50
if body contains "Accept Major Credit Car" weight 50
if body contains "bad credit" weight 30
if body contains "damaged credit" weight 30
if body contains "your credit rating" weight 50
if body contains "consolidate your debt" weight 50
if body contains "entrepreneurial" weight 30
if body contains "earn good money" weight 30
if body contains "IRA Liberation Process" weight 70
if body contains "financial freedom" weight 50
if body contains "financial security" weight 40
if body contains "stockwatch" weight 40
if body contains "OTCBB:" weight 40
if body contains "(Stock Symbol: " weight 40
if body contains "refinance your home" weight 40
if body matches "*take control*your*financial future*" weight 40
if body contains "venture capital" weight 40
if body contains "investor insights" weight 50
if body contains "forward looking statements" weight 50
if body matches "*section 27a*securities act of 1933*" weight 50
if body matches "*section 21b*securities exchange act of 1934*" weight 50
if body contains "investment advice" weight 50
if body contains "future marketing messages" weight 50
if body contains "get out of debt" weight 50
if body contains "outstanding debt" weight 40
if body contains "low interest loan" weight 10
if body contains "high interest rates" weight 10
if body matches "*income*from home*" weight 10
if body matches "*need*additional income*" weight 10
if body contains "multilevel market" weight 10
if body contains " lottery " weight 20
if body contains " lotto " weight 20
if body contains " jackpot " weight 20
if body contains "pay you" weight 10
if body contains "reduce your debt" weight 50
if body contains "stop throwing your money away" weight 50
if body contains "fire your boss" weight 50
if body contains "work from home" weight 40
if body contains "work at home" weight 20
if body contains "you have nothing to lose" weight 30
if body contains "you have nothing to loose" weight 30
if body contains "should not be construed as an offer or solicitation to buy or sell any security" weight 88
if body contains "not a solicitation or recommendation to buy" weight 88
if body contains "not an offer to buy or sell securities" weight 88
if body matches "*highly speculative* risk*" weight 88
if body hasall "Stephan, Ducharme" weight 51
if body hasall "earning money, eBay" weight 51
if body hasall "earn, extra, income" weight 51
if body hasall "limited, time, only" weight 40
if body contains "independent marketing" weight 25
if body hasall "need, more, money, apply, grant"
weight 51 tag "Spurious Federal Grants guide"
if body contains "to learn more about" weight 30
if body matches "*must be*years*to*" weight 30
if body contains "clickhere" ob weight 30
if body matches "*/cGUARANTEED*" weight 20
if body hasall "offer, lowest, rates" weight 20
if body hasall "copy, dvd, movie" ob weight 40
if body contains "is banned from" or body contains "is banned in" weight 15
if body hasall "mortgage, dollars, loan" weight 25
if body contains "private chat room" weight 25
if body contains "video poker" weight 25
if body contains "chance to win" weight 15
if body matches "*/sbuy real estate*" weight 25
if body contains "money machine" weight 25
if body contains "government secur" weight 15
if body hasall "copy, DVD, download" weight 30
if body hasall "buy, sell, performing, debt" weight 30
if body contains "make a fortune" weight 30
if body contains "future mailings" weight 30
if body contains "100 percent" weight 15
if body contains "fuelsaverpro" ob weight 51 tag "Fuel saver spam"
if body matches "*boost*gas*mileage*" weight 40 tag "Fuel saver spam"
if body contains "youmustrespondby" ob
and body hasall "staff, students, computers" weight 51
if body hasall "fortune, ebay" ob weight 40
if body hasall "cable, descrambler" ob weight 51
if content hasall "digital, cable" weight 25
if content contains "digitalcablefilter" ob weight 30
if body hasall "mini, radiocontrolled" ob weight 40
if body hasall "refinance, mortgage" weight 40
# Check for body content suggesting unwanted sexual "services"
if body contains "adult entertainment" weight 20
if body contains "adult web" weight 20
if body contains "adult site" weight 20
if body contains "barely legal*teens" weight 50
if body contains " hardcore " weight 20
if body contains "prefer girls" weight 40
if body contains " naked " weight 10
if body contains " unclothed " weight 10
if body contains " nude " weight 20
if body contains " ass " weight 10
if body contains "improve sex" weight 30
if body contains "pussy" weight 15
if body contains "hugecock" ob weight 25
if body contains "sexual experience" weight 40
if body contains " erections" weight 10
if body contains " sexlover" weight 50
if body contains "sexual preferences" weight 20
if body contains "* sexx+ *" weight 50
if body contains " sexshows" weight 50
if body contains " sex shows" weight 40
if body contains " sleaze" weight 20
if body contains "gangbang" or body contains "gang-bang" weight 40
if body contains " titties" weight 20
if body contains "adult video" weight 30
if body hasall "adult, action, female" weight 40
if body has "anal" weight 20
if body contains "anal sex" weight 20
if body has "bondage" weight 20
if body has "horny" weight 20
if body contains " fetish" weight 20
if body has "fuck, fucked, fucking" weight 40 tag "The F word"
if body has "cunt, cunts" weight 40 tag "The C word"
if body contains " fisting" weight 40
if body contains " cock " weight 20
if body has "cum" weight 20
if body has "cumm" weight 20
if body contains " cummshot" weight 50
if body contains " cumshot" weight 50
if body has "rape, raped" weight 20
if body contains "hot puss" weight 25
if body contains "pussies" weight 25
if body has "bitch" weight 15
if body has "slut" weight 40
if body has "whore" weight 40
if body matches "*/smust be*18*old/s*" weight 40
if body contains "no minors allowed" weight 40
if body matches "*Hardcore/wPorno*" weight 111
if body has "Porno" weight 40
if body contains " sex software" weight 111
if body contains " sexsoftware" weight 50
if body contains "$$$$$$$$$$$$$" weight 51
if body hasall "probably don't remember me, website" weight 51
if body hasall "teen, cock, suck" weight 51
if body hasall "free, day, trial" weight 30
if body hasall "young, teen, video" weight 30
if body hasall "young, teenage, video" weight 30
if body hasall "porn, chick, pictures" weight 51
if body has "toon, toons" weight 30
if body hasall "XXX, free" weight 40
if body contains "adult movie" weight 40
if body matches "*found*your*profile*web*" weight 30
if body matches "*seen your profile on*picture*" weight 51
if body hasall "Paris, Hilton" ob and body contains "http:" weight 51
# Check for deliberate misspellings of common "trigger" words - the
# misspelling is a dead giveaway that the message is spam.
if content contains "p0rn" weight 51
if content contains "p@rn" weight 51
if content contains "pen<65>s" weight 51
if content contains "tenage" weight 30
if content has "medic@tion, medic@l" weight 51
if content matches "*/sph@rmacist*" weight 51
if content matches "*/spharm@cist*" weight 51
if content contains "rem0ve" weight 51
if content contains "6uarantee" weight 51
# Check for body content suggesting spurious diet/health stuff
if body contains "Liposuction" weight 20
if body has "Obesity" weight 10
if body contains "stop smoking" weight 20
if body contains "WeightLoss" ob weight 30
if body contains "loseweight" ob weight 30
if body contains "loose weight" weight 30
if body contains "burning fat" weight 30
if body contains "no hunger pains" weight 30
if body contains "lose weight while you sleep" weight 30
if body contains "health insurance" weight 25
if body contains "medical premium" weight 25
if body has "penile, ejaculation, sildenafil" weight 30
if body contains "no doctor visit" or body contains "no doctor's visit" weight 30
if body matches "/c*HGH*" weight 40
if body hasall "sexual, enhancer" weight 40
if body hasall "dietary, supplement" weight 15
if body contains "online" and body has "prescription, pharmacies, pharmacy" weight 40
if body contains "on-line" and body has "prescription, pharmacies, pharmacy" weight 40
if subject matches "/c*HGH*"
and body hasall "human, growth, hormone" weight 51
if body hasall "human, growth, hormone" weight 40
if body hasall "coral, calcium" weight 51
if body has "H?G?H" weight 51
if body contains "H G H" weight 51
if body contains "fat loss" weight 25
if body contains "wrinkle reduction" weight 25
if body contains "reverses aging" weight 25
if body matches "*/senhance your sex*" weight 30
if body has "colon" weight 20
if body hasall "colon, cleanser" ob weight 31
if body contains "productsworkbesttogether" ob weight 40
if body contains "herbalsupplements" ob weight 40
if body contains "enhancingoil" ob weight 40
# Check the body for evidence of scams - in particular the ludicrous
# "Nigerian funds transfer" scam.
if body hasall "Nigeria, million, dollars, transfer"
weight 51 tag "Nigerian 419 Scam"
if body hasall "Nigeria, million, dollars, invest"
weight 51 tag "Nigerian 419 Scam 2"
if body hasall "Liberia, million, dollars, transfer"
weight 51 tag "Liberian 419 Scam"
if body hasall "Angola, million, dollars, transfer"
weight 51 tag "Angolan 419 Scam"
if body hasall "Africa, million, dollars, transfer"
weight 51 tag "Generic 419 Scam"
if body hasall "Sese, Seko, million"
weight 51 tag "Sese Seko 419 Scam"
if body hasall "Sese-Seko, million"
or body hasall "Sese-Seko, billion"
or body hasall "Sese-Seko, billions"
weight 51 tag "Sese Seko 419 Scam"
if body hasall "Abacha, million"
weight 51 tag "Maryam Abacha 419 Scam"
if body hasall "Sierra Leone, Coleman, million"
weight 51 tag "Sierra Leone 419 Scam"
if body matches "*surprise*receive*know*personally*"
and body hasall "million, transfer"
weight 51 tag "Generic 419 Scam"
if body hasall "confidence, confidential, 000, US$, contract"
weight 51 tag "Generic 419 Scam"
if body hasall "million, US, confidential" ob
weight 40 tag "Possible 419 scam?"
if body hasall "feelsorryfor, everyone, diesomeday, million" ob
weight 51 tag "Silly 419 sympathy scam"
if body contains "endeavourtouseditfor" ob
weight 51 tag "Silly 419 sympathy scam #2"
if body contains "Nigeria" weight 30
if body contains "Federal Government of Nigeria" weight 999
if body contains "Nigeria National Petroleum Corporation" weight 999
if body contains "Bank of Nigeria" weight 40
if body contains "Bank in Africa" weight 40
if body contains "transfer to overseas" weight 40
if body contains "time machine" and body contains "vortex generator" weight 999
if body contains "promises for fear of facing a multimillion dollar class action suit" weight 999
if body contains "Intel and AOL are now discussing a merger" weight 999
if body contains "Microsoft will pay you" weight 999
if body matches "*(*Million United States Dollars)*" weight 999
if body contains "South Africa Foreign Exchange" weight 999
if body contains "arrangement and come to Johannesburg South Africa" weight 999
# Check the body for suggestions that the message might be peddling
# spam creation or distribution tools.
if body contains "bulk e-mail" weight 30
if body contains "bulk email" weight 30
if body contains " bulkmail" weight 30
if body contains "mass mailing service" weight 30
if body contains "mass marketing" weight 30
if body contains "mass messages" weight 30
if body matches "*million*addresses*" weight 30
if content contains "bulker" weight 51
if body hasall "Email, marketing, inexpensive, promote, targeted" weight 40
# Look in the body for a few addresses intimately associated with
# spam or other unwanted marketing activities.
if body contains "www.try-it-free.net" weight 50
if body contains "www.lendlink.net" weight 50
if body contains "www.safelockrecords.com" weight 50
if body contains "www.overnightrx.com" weight 50
if body contains "usavemore.k666.com" weight 50
if body contains "chicago20s.com" weight 50
if body contains "hudsonleickfan.com" weight 50
if body contains "good-insurance-rates.com" weight 50
if body contains "0mbra.com" weight 50
if body contains "www.geheime-seite.da.ru" weight 90
if body contains "dirtcheapdomain.com" weight 50
if body contains "kiss.com" weight 50
if body contains "edirectnetwork.net" weight 50
if body contains "37500hits4u.com" weight 50
if body contains "emailhello.com" weight 50
if body contains "bestcheapstuff.com" weight 50
if body contains "classmates.com" weight 50
if body contains "elucky-casino.com" weight 50
if body contains "israeliconnections.com" weight 50
if body contains "asiawholesalers.com" weight 50
if body contains "naturaldepot.com" weight 50
if body contains "swapselltrade.com" weight 50
# Other Sales stuff
if body contains "money-back guarantee" weight 40
if body contains "money back guarantee" weight 40
if body contains "no credit check" weight 50
if body matches "*make more money*web*" weight 40
if body matches "*f +r +e +e*" weight 50
if body contains "absolutely free" weight 20
if body contains "descrambler" weight 30
if body contains "free DVD trial" weight 50
if body contains "eValueMarketing" weight 66
if body contains "get more hits" weight 20
if body contains "limited time offer" weight 30
if body contains "increase sales" weight 10
if body contains "INCREDIBLE SOFTWARE BARGAIN" weight 20
if body contains "Internet Detective" weight 50
if body contains "Internet marketing" weight 50
if body contains "Internet Spy" weight 50
if body contains "No Credit Check" weight 30
if body contains "no obligation" weight 30
if body contains "no obligation quote" weight 30
if body contains "free quote" weight 30
if body contains "pay-per-view" weight 30
if body contains "new home loan" weight 30
if body matches "*refinance*home loan*" weight 30
if body contains "paying more than" and body contains "mortgage" weight 40
if body contains "save up to" weight 10
if body contains "site need more traffic" weight 50
if body contains "term life insurance" weight 40
if body contains "free online quote" weight 40
if body contains "buy term life insurance" weight 40
if body matches "*web*promotion service*" weight 50
if body contains "satisfaction guarantee" weight 10
if body contains "your money back" weight 20
if body hasall "click/Where, protect your computer" weight 40
if body matches "*receive*mail*only*once*" weight 40
if body contains "paying too much" or body contains "pay too much" weight 30
if body contains "100% Free" weight 40
if body contains "1oo% Free" weight 51
if body hasall "casino, sportsbook" weight 51
if body contains "100% legal" weight 51
if body has "lender, lenders" and body hasall "compete, loan" weight 30
if body hasall "mortgage, lender, compete, business" weight 51
if body hasall "discovered, website, mortgage" weight 51
if body matches "*/cJOIN/WFOR/WFREE*" weight 51
if body contains "diploma"
and body has "non-accredited, university" weight 51
if body contains "make money on the web" weight 40
if body contains "make money on" weight 20
if body contains "want to make money" weight 20
if body has "/cFREE" weight 20
# Check for certain key words and phrases commonly found in promotional spam
if body matches "*you*been chosen to receive*" weight 51
if body contains "the previous was an advertisement" weight 51
if body matches "*not wish to receive*e-mail*promotion*" weight 51
if body contains "this is not a solicitation" weight 30
if body contains "to be removed from" weight 21
if body contains "to remove yourself from" weight 21
if body contains " opt-in" weight 21
if body contains " opt-out" weight 21
if body contains "opt out" weight 21
if body contains " optout" weight 21
if body has "opted/Win" weight 40
if body has "opted/Win" and body contains "affiliate" weight 51
if body matches "*This*may*recurring mailing*" weight 51
if body matches "*is a one*time*mail*" weight 40
if body contains "No request for removal is necessary" weight 99
if body hasall "cannot be considered spam, removal" weight 51
if body matches "*1618*Title III*105th US Congress*" weight 51
if body matches "*This is not*spam*was sent to you because*" weight 99
if body hasall "click here, unsubscribe" weight 30
if body matches "*was sent*because*not*wish*receive*" weight 40
if body hasall "opportunity, change, life, forever, earn, free" weight 30
if body matches "*no longer*receive*offer*mail*" weight 40
if body has "partner/Wsite" or body has "partner/Wsites" weight 30
if body matches "*your*privacy*important to us*" weight 40
if body matches "*This is not*!*is a friendly*" weight 40
if body has "clickheretoenter" ob weight 40
if body contains "enter here" weight 30
# Viral stuff - not intended to replace competent virus scanning,
# but easy to do for a few of the most common cases
if body matches "*You*I send this to you*advice*" weight 51
if body matches "*This*mail*never sent unsolicited*" weight 51
if body matches "*attached*product*part*official*campaign*popularity*" weight 51

View File

@@ -0,0 +1,497 @@
----------------------------------------------------------------------
Pegasus Mail Message Templates
----------------------------------------------------------------------
Pegasus Mail System,
Copyright (c) 1990-99, David Harris, All Rights Reserved.
----------------------------------------------------------------------
Contents:
1: Overview of Message Templates
2: Types of Templates
3: Using Templates within Pegasus Mail
4: The Message Template Script Language
4.1: String literals
4.1.1: Filenames
4.2: Optional parameters
4.3: Command substitutions
4.4: Script language commands
1: Overview of Message Templates
--------------------------------
Imagine that you're the web master for your Internet site; you receive a
huge amount of mail for much of which the answer is essentially the
same... You laboriously reply to the message, remove the pieces you don't
want, type in your canned response, then send the message. Wouldn't it be
good if there was some way of automating all of this? Well, there is --
Message Templates.
A Message Template is simply a script that tells Pegasus Mail how to
compose a mail message. The template script commands allow you to set any
address or feature field, include the original message for replies (or a
portion of the message), change or modify addresses, add attachments and
generally give you complete control over the shape of your automatically-
generated message. What's even better, you can define variables in
templates: when you use the template, Pegasus Mail will prompt you for
values for the variables it contains; the script language can then take
the values you enter, manipulate them, and insert them seamlessly into
the generated message.
Using a message template, you can generate a complex mail message and
send it with only a couple of keystrokes.
What uses might you have for a template? Here are some ideas:
* Helpdesk submissions (as per the sample HELPDESK.PM5 template)
* Mail server management forms (to simplify the process of
subscribing to and unsubscribing from lists)
* Forms: any kind of complex data-entry based mail form could
be generated using a template
* Order submission
* Automated replies
2: Types of templates
---------------------
Pegasus Mail supports two types of templates - those used to create new
messages from scratch, and those used to create replies to messages.
Template files are simply plain text files containing template script
language commands, one per line.
Templates used to create new messages have the extension .PM5; the name
portion can be anything you wish.
Templates used to create replies to messages have the extension .PM6; once
again, the name portion can be anything you wish.
For both types of template, the script language's TITLE command must be
the first line in the file, so that Pegasus Mail can show the name in its
selector window. Pegasus Mail will not burrow through a template file
looking for a TITLE command if it is not on the first line.
Template files can be located in your home mailbox directory, or may be
placed in the same directory as the Pegasus Mail executable program, in
which case they become system-wide and are made available to all users
running that copy of the program. There is no effective limit on the
number of templates you can define.
For now, in order to create a template file you must use a text editor of
some kind - for instance, the Windows NOTEPAD applet. If you use NOTEPAD,
make sure that the Wordwrap option is turned off - each line in a
template file must contain a single command and you cannot run lines
together. Future versions of Pegasus Mail may include a user-interface for
creating template files.
3: Using templates within Pegasus Mail
--------------------------------------
You can create a new message using a template by selecting Template...
from the New Message submenu of the File menu. This will open a dialog
listing all the templates available on your system. Select the template
you want to use by highlighting it and clicking Open, or by double-
clicking it. A window will open prompting you for any variables the
template uses; at this point, you can choose whether to open a new
message editor window filled out with the message created by the
template, or simply to send the message without further ado.
You can use a template to create a reply to a message in one of two ways:
1: Right-click the message and choose "Reply using template..." from
the popup menu
2: Highlight the message, then hold down <Shift> as you press the
"Reply" button, or else hold down <Shift> and press the R key.
4: The Message Template Script Language
---------------------------------------
The script language used by Pegasus Mail templates is very simple. Each
command in the file must appear on a single line of its own -- commands
may not wrap lines, nor may more than one command appear on a single
line. Lines starting with \, * ; or # are treated as comments and are
ignored.
4.1: String literals
Most template script commands in the language accept strings as
parameters. String literals of this kind must be entered in quote
characters if they contain spaces or special characters.
For example, if you want to use the "insert" command to write the string
Mary had a little lamb
into an outgoing message, you would need to enter the command like this:
insert "Mary had a little lamb"
since otherwise, only the word "Mary" would be inserted.
If your string contains a quote character, or a backslash character, then
you will need to perform a small amount of conversion. So, if you want to
insert the string
Mary had a "little" lamb
you would have to enter the "insert" command like this:
insert "Mary had a \"little\" lamb"
These rules for string construction apply in all places throughout the
script language.
4.1.1: Filenames
Filenames are treated as strings by the script language, and as such are
subject to the same rules. In particular note that long filenames
containing spaces will need to be quoted, and that '\' characters will
need to be doubled in file paths... So, if you wanted to use the include
command to include the file
c:\docs\Mary's "little" lamb
You would need to form the command as
include "c:\\docs\\Mary's \"little\" lamb"
4.2: Optional parameters
Some script commands are shown as having "optional" parameters. This
notion needs some clarification... A parameter may be omitted only if all
the parameters following it are also omitted - it is not possible to omit
only one parameter from the middle of a list.
So, using the "include" command as an example, if you wanted to include a
file in quoted format, you would have to include the "0" value for the
count parameter as well.
4.3: Command substitutions
Practically any string parameter to a script command can contain command
substitutions: these are special character sequences that are replaced by
variables or other information when they are encountered. Pegasus Mail
recognizes the following command substitutions in any place where they
may be used:
~vvariable_name~ The current value of a template script variable
~z A single newline (CR/LF)
~f The "from" field of the original message
~s The "subject" field of the original message
~r The preferred reply address for the message
~kfieldname~ Any field from the original message
~n The current user's basic username
~i The current user's Internet e-mail address
~8 The current user's username truncated to 8 chars
~p The current user's personal name preference
~d A random integer expressed as 4 hex digits
~y The current date and time in RFC822 format
~%name% The value of environment variable %name%
~lname~l The user's address looked up from a synonym file
~a The Pegasus Mail executable directory
~h The current user's home mailbox
~w The current user's new mailbox
~~ A single tilde (~).
Examples:
Assuming that the current user's name is "david" and the variable
"sub" has been assigned the value "your order", the string
"This is a message from ~8, regarding ~vsub~"
would yield the following string after substitution:
"This is a message from david, regarding your order."
Command substitution is the single most powerful feature of the scripting
language used for templates, and a good understanding of what it can do
is essential for writing useful scripts.
4.4: Script language commands
The following commands are valid in template scripts.
title Set the title for a template script
helpfile Set the help file for a template script
picture Add a picture to the variable prompt dialog
text Add a line of informational text to the prompt dialog
option Set options controlling the way the template is processed
string Create a string variable for the script
set Set a message field or variable value
insert Write a formatted line into the message body
include Include a file or the original message body
attach Attach a file to the message
extract Extract elements from an e-mail address
lookup Look up an item from a list using a key value
chain Execute another template when the current template finishes
# title <string>
Set the title for the script file. string can be any string up to 50
characters in length, and can contain all command substitutions except
for variables, which are not defined at the time this command is
processed.
# helpfile <filename> [section]
Set the help file which should be accessed when the user clicks the Help
button in the variable prompt dialog. filename should be a full reference
to any valid Windows Help file (*.HLP) on your system, and may contain
all command substitions except for variables, which will have not been
defined at the time this command is processed. section is an optional
integer value that indicates the context help section within the help
file that should be presented when the help button is pressed. If it is
absent, section 0, the table of contents, is presented.
# option <option_name> = <value>
This command controls aspects of the way the template behaves as it is
being processed. One option_name value is currently defined:
"EDITOR" = "Yes" or "No".
- Determines the state of the "Send message without opening a message
editor" control in the template's variable dialog.
Example: OPTION EDITOR = NO
- Checks the "send without editor" control by default.
# string <name> ["Default"] ["Prompt"] [len] [flags]
Define a variable for use within the script. A maximum of 20 variables
may be defined for any script. name is the name for the variable; it must
not contain spaces, and is not case-sensitive (so var1 and VAR1 are
considered the same). All the parameters following the name parameter are
optional, and you can end the string early if you wish (you cannot omit a
parameter if you need to supply a parameter following it on the line).
"default" is a string which should be used as a default value for the
variable: if it contains spaces or special characters, it must be
enclosed in quotes (see "String literals", above, for more information).
If this parameter is omitted, the default value is an empty string.
"prompt" is the string Pegasus Mail should place next to the editing field
in the variable prompt dialog. If omitted or zero-length, Pegasus Mail
will not prompt the user for a value for this variable. "len" is an integer
defining the maximum allowable length of this variable. If omitted, the
default is "no limit". "flags" defines the format and type of the variable:
the following flag values are available:
multiline creates a multi-line variable
address creates an e-mail address variable
filename creates a filename variable
password creates a password variable
list creates a list - see below for more details
uppercase specifies that the variable must be all in uppercase
Only "uppercase" may be used with other values.
Creating LIST variables
When you use the LIST flag in a STRING statement, you create a variable
that has a list of possible values from which the user can select. LIST
variables require that you provide a DEFAULT value for the variable,
which contains the list of possible values the variable can have. The
first character in the default value should be the character used to
separate the list items from each other, and the remainder of the default
value should be the items, separated by that character.
Example: you want to allow the user to select from the values "Red",
"Green" and "Blue": your string statement would look like this:
string v1 ";Red;Green;Blue" "Select a colour" 0 list
# set <field> = <"value">
or set variable <variable_name> = <"value">
The first form of this command sets a field within the mail message being
generated to the specified value. field may be one of the following:
to
cc
bcc
reply-to
subject
identity (all take an obvious string parameter)
urgent
confirm-reading
confirm-delivery
copyself
volatile
mime (all take either a "Y" or "N" parameter)
header (a fully-formed e-mail header including the keyword)
encrypted ("encryptor_name", "password", "flags" - see below
for more details).
When encrypting a template message, use the "encrypted" parameter to the
set command. "encryptor" is the name of the module that should be used
for encryption - to use the Pegasus Mail built in encryptor, use the name
"builtin". "password" is the password for the message - this can be up to
96 characters in length. "flags" controls the type of encryption
performed; to encrypt a message, set it to 1; to add a digital signature
to the message, set it to 4; to perform both operations, set it to 5.
The "volatile" parameter tells Pegasus Mail to write the message directly
to final form when sending using the built-in SMTP transport. You will
need to set this to "Y" if you are attaching files that will be deleted
once the template has been processed.
The second form of the "set" command sets the value of any defined
variable.
Both forms of this command support all command substitutions for the value
parameter. To copy the value of one variable to another, use an
expression containing the ~v command substitution, like this:
set variable v1 = "~vv2~"
# insert <"string">
Write data into the body of the message being generated. string can
contain any command substitution: if it does not contain a ~z
substitution to force a line break, then the next insert command will
write data onto the same line in the body. A single insert command may
not insert more than 1024 characters into the message body.
# include <filename> [count] [flags]
or include message [count] [flags]
Include either a text file, or the body from the message to which a reply
is being generated. The text from the file or message is included as-is
into the message body - command substitutions are not performed on the
included data. The filename parameter may contain any valid command
substitutions. If "count" is present and non-zero, only that many lines of
the included file or the body of the included message will be read. The
"flags" item can be any combination of the following values:
quoted "Comment-out" the included text using "> "
noheaders If the file is a message, omit its RFC822 headers
keyheaders If the file is a message, include only "significant" headers
nobody If the file is a message, omit the message body
message Only valid for files: the file is an RFC822 message
# attach <filename> [type] [encoding] ["Desc"]
Attach a file to the generated message. Only "filename" is a mandatory
parameter - the others can be omitted and are sensibly defaulted. Any
valid command substitution can be used in the filename. If the filename
contains spaces, it must be quoted. "type" is any string describing the
type of the file - for instance, "RTF_FILE". It must not contain spaces
and is not constrained to the list of possible values inside Pegasus Mail
itself. "encoding" is an integer value that specifies how the file should
be encoded for transfer; the following values are defined - 0 (Pegasus
Mail decides), 1 (No encoding - very dangerous), 2 (ASCII text), 3
(UUencoding), 4 (BinHex 4.0) and 5 (Basic MIME encoding). Unless you are
sure of what you are doing, use 0 for this field. "desc" is a textual
description of the file; it may contain any text, including spaces, and
is truncated at 63 characters.
# picture <flags> <filename>
Add a picture at the top of the variable prompt dialog. The picture
specified by filename must be a Windows BMP file in 16 or 256 colours:
owing to quirks in the way Windows handles 256 colour bitmaps, we
strongly recommend that you use 16-colour bitmaps if your display runs in
256 colour mode or lower. For the Win16 version of Pegasus Mail, the
bitmap must not be larger than 60,000 bytes. You may use any command
substitution in the filename parameter. The bitmap is centred
horizontally in the display and the dialog will adjust size to fit the
vertical dimensions of the image. Exactly one image may be added to the
dialog.
flags will be used in future to offer extra formatting options. For now,
it is unused, must be present, and should be set to zero.
Note: if the filename contains spaces or special characters, it must be
enclosed in quotes.
# text <flags> <"string">
Add a line of descriptive text to the dialog presented to prompt for
script variables. The line of text is added above any variable editing
fields, and below any picture defined using a picture command. You may
specify up to 10 lines of descriptive text, and each line may contain any
valid command substitution. The "flags" parameter will be used in future,
but should currently be set to zero.
To introduce a blank line between groups of lines, use a text statement
with an empty quoted string - like this: text "".
# extract address <var1> <var2>
or extract text <var1> <var2>
or extract user <var1> <var2>
or extract domain <var1> <var2>
Extract a component from an e-mail address. "var1" refers to the variable
containing the address to be manipulated. "var2" is the variable where
the result of the manipulation should be placed - it can be the same as
"var1".
extract address yields the minimum form of the e-mail address
extract text yields the personal name field from the address
extract user yields the simple user name portion of the address
extract domain yields the domain portion of the address
# lookup "string" <var1> <var2> <var3>
Attempt to locate the string "string" in the list variable "var1"; if a
match is found, note the position in the list where the item was matched,
then copy the item at the same ordinal position in the list variable
"var2" into the variable "var3". See above under the description of the
"set" command for more information on list variables. It is an error for
either "var1" or "var2" to be anything other than a list variable. If
"string" cannot be found in "var1", variable "var3" is not changed.
Example: list variable "v1" contains "Monday", "Tuesday" and "Wednesday"
list variable "v2" contains "Open", "Closed" and "Open".
The command
lookup "Tuesday" v1 v2 v3
will result in variable v3 containing the value "Closed".
A common form of this command will use the current value of "var1" as the
string parameter, using the command substitution "~vvar1~".
# chain "filename"
Execute another template when the current template completes. "filename"
should be the path to a valid template file, and may contain command
substitutions. Only one "chain" command may be used per template. If the
current template is cancelled by the user, the chain command will not be
executed.

Binary file not shown.

View File

@@ -0,0 +1,93 @@
# Transaction-level filtering expressions for MercuryS
# Mercury Mail Transport System, Copyright (c) 1993-2007, David Harris.
# This version of the file was prepared for Mercury/32 v4.5
#
# Each line in this file defines a test that MercuryS should apply at various
# stages of the SMTP transaction processing phase of mail delivery. Each line
# has the following general format:
#
# <Operation>, <"Expression">, <Action>[Action]>, ["Response"]
#
# "operation" can be:
#
# 'H' for an expression applied to the client's "HELO" greeting
# 'D' for deferred HELO processing; these filters will only be
# applied if the client does not issue a successful AUTH after
# issuing HELO but before issuing any other command. Otherwise,
# these filters are the same as 'H' filters. They allow a user
# on a system that might otherwise be rejected to redeem the
# connection by authenticating his identity.
# 'S' for an expression applied to the subject line of the message
# 'R' for an expression applied to each SMTP RCPT command
# 'M' for an expression applied to the SMTP MAIL FROM: command
#
# "Expression" is a Mercury regular expression - see the Mercury help on
# mail filtering rules or content control for the format of a Mercury
# extended regular expression. The expression must be quoted, and is
# applied to the entire HELO command.
#
# Action is one or more characters indicating the action MercuryS should
# take when the expression is matched: the first character in the action
# can be one of the following:
#
# 'R' to refuse the transaction and block all subsequent commands
# 'F' to fail the current command only (allow further attempts)
# 'D' to drop the connection immediately with no error response
# 'B' to issue an error response then drop the connection immediately.
# 'L' to log a system message
# 'X' to stop this phase of transaction filtering for this message
# 'S' to suppress all transaction filtering stages for this message.
#
# The difference between 'R' and 'F' is that 'R' will cause all subsequent
# delivery commands in the session to be refused, while 'F' will only fail
# the current command - other commands may still be permitted.
#
# The 'D' and 'B' commands essentially do the same thing, but the 'B'
# command does it more politely. Use 'B' if there's any possibility that
# the connected machine is actually legitimate, because it gives at least
# some level of feedback to the sender or administrator.
#
# To understand the difference between 'X' and 'S', you need to be aware
# that transaction filtering is done in several "passes", each pass testing
# a different state of the SMTP transaction. The 'X' action only exits from
# the current pass, meaning that future passes will still take place. The
# 'S' action, however, exits from the current pass and suppresses all
# further transaction filtering on the message altogether.
#
# The second character in the action string is optional and can have
# one of the following values:
#
# 'S' to blacklist the host for the next half hour
#
# The third character in the action string is optional and can have
# one of the following values:
#
# 'N' if the rule should apply only if the expression does NOT match
#
# Note that optional characters can have the value '-' if they are not
# used... So, if you want to refuse a connection if an expression does not
# match, but do not want to use short term blacklisting, you would use the
# action string "R-N".
#
# "Response" is an optional response code that MercuryS should return to
# the client (for the 'R' action) or the string to log as the system
# message (for the 'L' action). It must be quoted, and if it is returned
# as an error response to the client, then it must start with a 3-digit
# RFC2821 error response code (we recommend 554 for this).
# ------------- Sample Rules --------------------------------------------
# The rules below are examples you can use to get a feel for writing your
# own. They are harmless, and will cause no problems if you leave them in
# place, but it's probably better to remove them when you add your own
# rules.
H, "*192.156.225.44*", R, "554 Get out of here, you worthless scumbag."
R, "*honeypot@aphrodite.pmail.gen.nz*", RS, "554 Fraudulent RCPT rejected."
S, "*viagra*", D, "'Viagra' encountered in subject line - connection dropped."
S, "*vicodin*", R, "554 'Vicodin' encountered in subject line - message refused."
H, "[EHeh][EHeh]LO +[0-9]+.[0-9]+.[0-9]+.[0-9]*", R, "554 Invalid HELO format"
S, "/c*CONGRATULATIONS*WON*", BS, "554 Possibly Nigerian 419 Variant - please change and re-send."
S, "*for job*", BS, "554 Possibly employment spam - please change and re-send."

View File

@@ -0,0 +1,736 @@
Pegasus Mail for Windows DDE (Dynamic Data Exchange) Interface
Copyright (c) 1997-1999, David Harris, All Rights Reserved.
----------------------------------------------------------------
Revision history:
* WinPMail v3.11: added IDENTITY and VOLATILE keywords to MESSAGE topic.
* WinPMail v3.12: added RICHTEXT keyword to MESSAGE topic, and STATUS
keyword to ENVIRONMENT topic
Pegasus Mail v2.54 and later incorporates support for Windows DDE to allow
interprocess communication. This document describes the topics supported by
WinPMail and the syntax of the commands sent to them. It is not a tutorial
on DDE, and assumes that you either understand how to use DDE, or are using
an environment (such as Microsoft Word's WordBasic language) that
simplifies the process of using DDE commands.
One of the most powerful features of DDE is that it allows transparent
communication between 16-bit and 32-bit applications: so, by using DDE, you
can communicate with either the 16- or the 32-bit version of WinPMail
without having to be worried about the differences between the two.
Pegasus Mail's DDE interface has been designed to be as simple to use as
possible, and depends on simple strings for commands. It should be possible
to use DDE to interact with Pegasus Mail from almost any environment.
Service and Topic Names
-----------------------
Under DDE, a "service name" is the name of an application that can accept
DDE connections: when you connect to a service application, you specify a
particular set of commands or operations in which you are interested - this
set of commands is known as a "topic". Pegasus Mail uses the service name
"WinPMail" and exports the following topics:
"System" The standard DDE system topic
"Environment" Accepts DDE Requests (transactions of type XTYP_REQUEST)
and returns information about the environment of the
running copy of WinPMail, such as directories and
usernames.
"Message" Accepts DDE Poke commands to create and send e-mail
messages. A DDE Client can either create and manipulate
standard Pegasus Mail message editor windows, filling
in whichever blanks are required, or it can create
messages without a window.
"TCP" Provides access via DDE Poke commands to WinPMail's
TCP/IP-based mail services.
The "Environment" topic
-----------------------
The "Environment" DDE topic allows client applications to obtain
information about the running copy of Pegasus Mail. To use this command,
send a DDE Request command (a transaction of type XTYP_REQUEST) the the
"Environment" topic with the "item" parameter set to the environment item
you wish to retrieve, selected from the following list:
USER - Returns the name of the user running WinPMail
HOMEBOX - Returns the full path to the user's home mail directory
NEWBOX - Returns the full path to the user's new mail directory
MODE - Returns either "Standalone" or "Network"
VERSION - Returns the version of WinPMail, expressed as a four
digit hexadecimal number ("0254" for v2.54) followed
by a space and either "16" or "32" to indicate the
version of WinPMail that is running.
BASEDIR - The directory from which WinPMail was run
TCP - If WinPMail's TCP/IP services are available, returns
the path to the WINSOCK.DLL in use, otherwise returns
the single character "N".
NEWMAIL - Returns the number of mail messages in the user's new
mail folder.
STATUS - Returns the status of the last mail delivery operation
-- Example: -----------------------------------
In WordBasic (MS-Word 7) the following Macro opens a connection to
WinPMail, retrieves the current version, and displays it:
Sub MAIN
channel = DDEInitiate("WinPMail", "Environment")
a$ = DDERequest$(channel, "version")
DDETerminate channel
MsgBox a$
End Sub
A longer example in C is shown as Appendix A: in this document.
The "Message" topic
-------------------
Client applications use the "Message" topic to create and send electronic
mail messages using WinPMail. Once a connection has been established to the
"Message" topic, the client Pokes data at WinPMail (using XTYP_POKE
transactions). The string parameter in the Poke command should be set to
"Message" - other values may be added in future. The data itself contains
the commands and parameters.
The following commands can be Poked as data to WinPMail:
New : <"Message"> or <"Window">
If the parameter is "Window", then WinPMail creates a standard
message editing window, and subsequent message commands will change
the controls and settings in that window. If the parameter is
"Message", then a data structure representing the message is
allocated internally and subsequent message commands will fill in the
fields within that structure.
Defaults : Y
Tells WinPMail to apply the user's regular message setting default
values to the message. This command is only valid when the
"New: message" command has been sent - it has no effect on message
editing windows created using "New: window", since they always use
default values automatically.
To : <address> [, <address> ...]
Fills in the "To" field for the message or window. The parameter may
be any address WinPMail would normally accept, and you may include
more than one address by separating them with commas. The same rules
apply to the Cc: and Bcc: fields.
Cc : <address> [, <address> ...]
Fills in the "Cc:" (Carbon Copy) field for the message.
Bcc : <address> [, <address> ...]
Fills in the "Bcc:" (Blind Carbon Copy) field for the message.
Subject : <string>
Fills in the subject field of the message.
Reply-to : <address>
Sets the optional reply address for the message.
Copyself : <'Y'> or <'N'>
Selects whether or not a copy-to-self should be made of the message.
Confirm-delivery : <'Y'> or <'N'>
Selects whether or not to request confirmation of delivery
Confirm-reading : <'Y'> or <'N'>
Selects whether or not to request confirmation of reading
Urgent : <'Y'> or <'N'>
Selects whether or not the message should be marked as "urgent"
Encrypted : <encryptor-name><,><passphrase><,><flags>
Chooses an encryption method for the message. "Encryptor-name" is
the tagname of the encryptor you wish to use (use "PM-BUILTIN" to
select Pegasus Mail's built-in encryptor). You can find the tagname
for an encryptor in the "Form tagname" line of the encryptor's .FFF
file. "passphrase" is the password for the message. If it contains
a comma, then it must be quoted using " and ". "flags" is either
1 to encrypt the message, 2 to sign the message, or 3 to encrypt
and sign the message.
Signature : <number>
Chooses the signature you wish to attach to the message. "number"
is 1 - 9, corresponding to the signature sets shown in WinPMail's
Tools | Signatures preferences page, or 0 to disable signatures.
Mime : <'Y'> or <'N'>
Indicates whether or not MIME support should be turned on for
this message. MIME support affects the way attachments and
international characters are handled by WinPMail. We strongly
recommend that you turn MIME on wherever possible.
Attach : <path><,><filename><,><attachment-type><,><encoding>
Attach a file to the message. "path" should be the full path
to the file - do not assume that the current directory in your
client application will be the same as the current directory in
Pegasus Mail. "filename" is the name Pegasus Mail should include
in the message as the real name of the file (you will typically
use this when you have to create a temporary file but want to
send it under the original file's name). If "filename" is "-",
WinPMail will automatically use the filename portion of "path".
"attachment-type" should be textual information describing the
attachment; it must not contain spaces. If you set this field to
a single dash ("-"), WinPMail will use its internal routines to
try to work out the most appropriate type information for the
file. "encoding" is used to select the type of encoding for the
attachment: we strongly recommend that you set this value to 0,
which will allow WinPMail to choose the most appropriate encoding
for you. Possible values are:
0 - Pegasus Mail decides.
1 - No encoding - the file is not altered (local mail only)
2 - ASCII encoding - the file is normalised to CR/LF line
endings and is not otherwise encoded in transit.
3 - UUencoding - the file is uuencoded
4 - BinHex - the file is transformed using the BinHex 4.0 method.
5 - MIME - the file is transformed using the MIME BASE64 method.
File : <filename>
Indicates the name of a file containing the text WinPMail should
use as the body of the message. Note that this file is NOT an
attachment - it is expected to be plain text.
Data : <String>
Adds "string" to the body of the message as a single line. Poke
this command repeatedly to build up a message line by line.
WinPMail automatically adds the CR/LF termination to each line.
Poking this command with no <string> parameter will print a blank
line in the message (but the ':' must still be present).
Identity : <identity_name>
Sets the identity Pegasus Mail should use when processing this
message. For more information on Identities, see the Pegasus Mail
help file. You can specify any valid identity name as the parameter
to this command. The default is the user's current identity.
Volatile : <'Y'> or <'N'> (Default is 'Y')
(Only meaningful when using Pegasus Mail's built-in SMTP mailer).
Setting this flag to 'Y' tells Pegasus Mail that the message should
be written straight into Final Form in the queue when it is sent.
If you want your message to be reloadable from Pegasus Mail's
"Review queued mail" option, you should set this to 'N'. If your
message contains attachments that you plan to delete once the
message has been sent, you must not set this field to 'N'.
Richtext : <'Y'> or <'N'> (Default is 'N')
Set the "rich text" flag in the message.
Send
This command sends the message. Note that it has no parameters and
no ':'. It has no effect when "Window" was used as the parameter to
the "New:" command.
Restore
This command brings WinPMail to the top and activates the Message
Editing Window created using the "New: Window" command. Note that it
has no parameters and no ':'. For messages created using the
"New: Message" command, this command will simply bring WinPMail to
the top without taking any other action.
-- Example: -----------------------------------
In WordBasic (MS-Word 7) the following Macro opens a connection to
WinPMail, and sends a message with no window.
Sub MAIN
channel = DDEInitiate("WinPMail", "Message")
DDEPoke channel, "Message", "New: Message"
DDEPoke channel, "Message", "Defaults: Y"
DDEPoke channel, "Message", "To: David"
DDEPoke channel, "Message", "Subject: Test from Word"
DDEPoke channel, "Message", "Data: Hi there!"
DDEPoke channel, "Message", "Send"
DDETerminate channel
End Sub
The "TCP" topic
---------------
The commands in this topic allow clients to control Pegasus Mail's
built-in TCP/IP-based mail protocols. Before using these commands, a
client should usually use the "TCP" request to the "Environment" topic to
determine whether or not TCP/IP services are enabled and available.
Clients interact with this topic by Poking data at it in a similar manner
to that used to access the "Message" topic. The following commands can be
poked at this topic:
Get
Tells Pegasus Mail to download mail using the current TCP/IP
settings defined for the program.
Send
Tells Pegasus Mail to send any messages currently waiting in
the queue to be sent out.
Both
Tells Pegasus Mail to check for new mail, then to send any messages
currently waiting in the queue, in that order.
Restore
Brings Pegasus Mail to the front and gives it focus.
-- Example: -----------------------------------
In WordBasic (MS-Word 7) the following Macro opens a connection to
WinPMail, tells it to download new mail, then brings it to the front:
Sub MAIN
channel = DDEInitiate("WinPMail", "TCP")
DDEPoke channel, "TCP", "Get"
DDEPoke channel, "TCP", "Restore"
DDETerminate channel
End Sub
Pegasus Mail and the Windows Registry
-------------------------------------
Starting with v2.54, WinPMail updates the Windows registry with a certain
amount of information each time it is run. DDE Client Applications can use
this registry information to work out how to find a copy of Pegasus Mail to
run if none is active, and what commandline is appropriate.
The 32-bit version of WinPMail creates the following keys:
HKEY_CURRENT_USER\Software\Pegasus Mail\Version
HKEY_CURRENT_USER\Software\Pegasus Mail\BaseDir
HKEY_CURRENT_USER\Software\Pegasus Mail\Command
The "version" key contains the WinPMail version, expressed in exactly the
same way as the return from the DDE "Environment" topic's "Version"
request. The "BaseDir" key contains the directory where the WinPMail
executable file is located, and the "command" key contains the full
commandline that was used to invoke the most recently-run copy of Pegasus
Mail.
Both the 16- and 32-bit versions of WinPMail create the following keys:
HKEY_CLASSES_ROOT\Software\Pegasus Mail\Version
HKEY_CLASSES_ROOT\Software\Pegasus Mail\BaseDir
HKEY_CLASSES_ROOT\Software\Pegasus Mail\Command
These keys are formatted in exactly the same way as those shown above.
32-bit applications should always attempt to find the HKEY_CURRENT_USER
keys before the HKEY_CLASSES_ROOT keys, since doing so ensures that
multiple user configurations are respected under Windows 95 and NT.
Appendix A: Using DDE from C programs
-------------------------------------
The source code shown here can be used as a model for interacting with
any DDE-aware application. It presents a simple dialog with "Service",
"Topic" and "Command" fields, request selector radio buttons that allow
the user to select between XTYP_EXECUTE, XTYP_REQUEST and XTYP_POKE
transactions, and three buttons - one to open/close a connection, a
"quit" button, and a "Do it" button, that sends the command. If a
connection is established using the "Open" button, then the "Do it"
button will send the command to that connection, otherwise it will
establish a connection, send the command, then close the connection.
This code was written for Borland C++ v4.52 and should be linked using
Borland's BWCC.LIB or BWCC32.LIB in order to present the proper dialog
appearance.
--------------- DDECLI.C --------------------------------------------
#include <windows.h>
#include <windowsx.h>
#include <stdlib.h>
#include <string.h>
#include <ddeml.h>
DWORD idInst = 0L; // DDE instance identifier
HINSTANCE hInstance;
HCONV mconv;
HSZ ghszServSrv;
HSZ ghszServTop;
#pragma warn -par
#pragma warn -use
HDDEDATA EXPENTRY DDECallback (WORD wType, // transaction type
WORD wFmt, // clipboard format
HCONV hConv, // handle of the conversation
HSZ hsz1, // handle of a string
HSZ hsz2, // handle of a string
HDDEDATA hData, // handle of a global memory object
DWORD dwData1, // transaction-specific data
DWORD dwData2) // transaction-specific data
{
// Nothing need be done here...
return (HDDEDATA) NULL;
}
BOOL SendShellCommand (DWORD idInst, char *service, char *topic, LPSTR lpCommand)
{
HSZ hszServSrv; // Service is "DDESERV"
HSZ hszServTop; // Topic is "MAIL"
HCONV hconv; // handle of conversation
int nLen; // length of command string
HDDEDATA hData; // return value of DdeClientTransaction
DWORD dwResult; // result of transaction
BOOL bResult=FALSE; // TRUE if this function is successful
if (mconv == NULL)
{
// create string handle to service/topic
hszServSrv = DdeCreateStringHandle (idInst, service, CP_WINANSI);
hszServTop = DdeCreateStringHandle (idInst, topic, CP_WINANSI);
// attempt to start conversation with server app
hconv = DdeConnect (idInst, hszServSrv, hszServTop, NULL);
}
else
hconv = mconv;
if (hconv != NULL)
{
// get length of the command string
nLen = lstrlen ((LPSTR) lpCommand);
// send command to server app
hData = DdeClientTransaction (
(LPBYTE) lpCommand, // data to pass
nLen + 1, // length of data
hconv, // handle of conversation
NULL, // handle of name-string
CF_TEXT, // clipboard format
XTYP_EXECUTE, // transaction type
20000, // timeout duration
&dwResult); // points to transaction result
if (hData)
bResult = TRUE;
if (mconv == NULL)
// end conversation
DdeDisconnect (hconv);
}
if (mconv == NULL)
{
// free service/topic string handle
DdeFreeStringHandle(idInst, hszServSrv);
DdeFreeStringHandle(idInst, hszServTop);
}
if (bResult == FALSE)
MessageBox (NULL, "SendShellCommand failed", "DDE Client", MB_OK);
return bResult;
}
BOOL SendPoke (DWORD idInst, char *service, char *topic, LPSTR lpCommand)
{
HSZ hszServSrv; // Service is "DDESERV"
HSZ hszServTop; // Topic is "MAIL"
HCONV hconv; // handle of conversation
int nLen; // length of command string
HDDEDATA hData; // return value of DdeClientTransaction
DWORD dwResult; // result of transaction
BOOL bResult=FALSE; // TRUE if this function is successful
if (mconv == NULL)
{
// create string handle to service/topic
hszServSrv = DdeCreateStringHandle (idInst, service, CP_WINANSI);
hszServTop = DdeCreateStringHandle (idInst, topic, CP_WINANSI);
// attempt to start conversation with server app
hconv = DdeConnect (idInst, hszServSrv, hszServTop, NULL);
}
else
hconv = mconv;
if (hconv != NULL)
{
// get length of the command string
nLen = lstrlen ((LPSTR) lpCommand);
// send command to server app
hData = DdeClientTransaction (
(LPBYTE) lpCommand, // data to pass
nLen + 1, // length of data
hconv, // handle of conversation
hszServTop, // handle of name-string
CF_TEXT, // clipboard format
XTYP_POKE, // transaction type
20000, // timeout duration
&dwResult); // points to transaction result
if (hData)
bResult = TRUE;
if (mconv == NULL)
// end conversation
DdeDisconnect (hconv);
}
if (mconv == NULL)
{
// free service/topic string handle
DdeFreeStringHandle(idInst, hszServSrv);
DdeFreeStringHandle(idInst, hszServTop);
}
if (bResult == FALSE)
MessageBox (NULL, "SendPoke failed", "DDE Client", MB_OK);
return bResult;
}
BOOL SendShellRequest (DWORD idInst, char *service, char *topic, char *cmd)
{
HSZ hszServSrv; // Service is "DDESERV"
HSZ hszServTop; // Topic is "MAIL"
HSZ item;
HCONV hconv; // handle of conversation
int nLen; // length of command string
HDDEDATA hData; // return value of DdeClientTransaction
DWORD dwResult; // result of transaction
BOOL bResult=FALSE; // TRUE if this function is successful
char *str;
DWORD x;
if (mconv == NULL)
{
// create string handle to service/topic
hszServSrv = DdeCreateStringHandle (idInst, service, CP_WINANSI);
hszServTop = DdeCreateStringHandle (idInst, topic, CP_WINANSI);
// attempt to start conversation with server app
hconv = DdeConnect (idInst, hszServSrv, hszServTop, NULL);
}
else
hconv = mconv;
if (hconv != NULL)
{
// send command to server app
item = DdeCreateStringHandle (idInst, cmd, CP_WINANSI);
hData = DdeClientTransaction (
NULL, // data to pass
0, // length of data
hconv, // handle of conversation
item, // handle of name-string
CF_TEXT, // clipboard format
XTYP_REQUEST, // transaction type
20000, // timeout duration
&dwResult); // points to transaction result
if (hData)
{
if ((str = (char *) DdeAccessData (hData, &x)) != NULL)
{
strcpy (cmd, str);
bResult = TRUE;
DdeUnaccessData (hData);
}
DdeFreeDataHandle (hData);
}
DdeFreeStringHandle (idInst, item);
if (mconv == NULL)
// end conversation
DdeDisconnect (hconv);
}
if (mconv == NULL)
{
// free service/topic string handle
DdeFreeStringHandle (idInst, hszServSrv);
DdeFreeStringHandle (idInst, hszServTop);
}
return bResult;
}
int FAR PASCAL _export dummy_proc (HWND hDialog, UINT wMsg,
WPARAM wParam, LPARAM lParam)
{
BOOL fProcessed = TRUE;
DWORD dwResult;
RECT r;
HWND hControl;
char buffer [256], service [80], topic [80];
switch (wMsg)
{
case WM_INITDIALOG :
CheckRadioButton (hDialog, 104, 106, 104);
break;
case WM_SETFOCUS :
SetFocus (GetDlgItem (hDialog, 101));
break;
case WM_COMMAND :
if (GET_WM_COMMAND_ID(wParam, lParam) == IDCANCEL)
{
EndDialog (hDialog, IDCANCEL);
break;
}
if (GET_WM_COMMAND_ID(wParam, lParam) == 120)
{
if (mconv == NULL)
{
GetDlgItemText (hDialog, 101, service, sizeof (service));
GetDlgItemText (hDialog, 102, topic, sizeof (topic));
ghszServSrv = DdeCreateStringHandle (idInst, service, CP_WINANSI);
ghszServTop = DdeCreateStringHandle (idInst, topic, CP_WINANSI);
// attempt to start conversation with server app
mconv = DdeConnect (idInst, ghszServSrv, ghszServTop, NULL);
if (mconv == NULL)
MessageBox (NULL, "Connection failed!", "DDE Client",
MB_OK | MB_ICONEXCLAMATION);
else
SetDlgItemText (hDialog, 120, "Close");
}
else
{
DdeDisconnect (mconv);
mconv = NULL;
DdeFreeStringHandle (idInst, ghszServSrv);
DdeFreeStringHandle (idInst, ghszServTop);
SetDlgItemText (hDialog, 120, "Open");
}
break;
}
if (GET_WM_COMMAND_ID(wParam, lParam) == IDOK)
{
GetDlgItemText (hDialog, 101, service, sizeof (service));
GetDlgItemText (hDialog, 102, topic, sizeof (topic));
GetDlgItemText (hDialog, 103, buffer, sizeof (buffer));
hControl = GetDlgItem (hDialog, 107);
if (IsDlgButtonChecked (hDialog, 105)) // Request
{
if (SendShellRequest (idInst, service, topic, buffer))
{
Edit_ReplaceSel (hControl, "Request successful:\r\n ");
Edit_ReplaceSel (hControl, buffer);
Edit_ReplaceSel (hControl, "\r\n");
}
else
Edit_ReplaceSel (hControl, "Request failed.\r\n");
}
else if (IsDlgButtonChecked (hDialog, 104))
{
if (SendShellCommand (idInst, service, topic, buffer))
Edit_ReplaceSel (hControl, "Command successful.\r\n");
else
Edit_ReplaceSel (hControl, "Command failed.\r\n");
}
else
{
if (SendPoke (idInst, service, topic, buffer))
Edit_ReplaceSel (hControl, "Poke successful.\r\n");
else
Edit_ReplaceSel (hControl, "Poke failed.\r\n");
Edit_SetSel (GetDlgItem (hDialog, 103), 0, 999);
}
}
break;
default:
fProcessed = FALSE;
break;
}
return fProcessed;
}
int PASCAL WinMain (HINSTANCE __hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
MSG msg;
HWND hWndFrame;
WNDCLASS wc;
FARPROC DDEProc, dlgProc;
if (hPrevInstance != NULL)
return 0;
hInstance = __hInstance;
// get proc instance for our DDEML callback
DDEProc = MakeProcInstance ((FARPROC) DDECallback, hInstance);
// register this app with the DDEML
if (DdeInitialize (&idInst, // receives instance ID
(PFNCALLBACK) DDEProc, // address of callback function
APPCMD_CLIENTONLY, // this is a client app
0L)) // reserved
{
#ifndef __FLAT__ // FreeProcInstance is obsolete under Win32
FreeProcInstance (DDEProc);
#endif
return FALSE;
}
dlgProc = MakeProcInstance ((FARPROC) dummy_proc, hInstance);
DialogBox (hInstance, "CLIENT", NULL, dlgProc);
DdeUninitialize (idInst);
return 0;
}
--------------- DDECLI.DEF ----------------------------------------
NAME DDECLI
DESCRIPTION 'DDE Test Client'
EXETYPE WINDOWS
DATA MOVEABLE MULTIPLE PRELOAD
CODE MOVEABLE DISCARDABLE
HEAPSIZE 27500
STACKSIZE 16500
--------------- DDECLI.RC -----------------------------------------
CLIENT DIALOG 180, 121, 246, 168
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CLASS "bordlg"
CAPTION "DDE Test Client"
FONT 8, "MS Sans Serif"
{
RTEXT "Service name:", -1, 15, 15, 60, 8
CONTROL "winpmail", 101, "EDIT", ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP, 83, 13, 102, 12
RTEXT "Topic name:", -1, 15, 30, 60, 8
CONTROL "message", 102, "EDIT", ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP, 83, 28, 102, 12
RTEXT "Command/request:", -1, 14, 45, 61, 8
EDITTEXT 103, 83, 43, 102, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
RTEXT "Transaction type:", -1, 15, 65, 60, 8
CONTROL "Execute", 104, "BorRadio", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 85, 64, 47, 10
CONTROL "Request", 105, "BorRadio", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 133, 64, 43, 10
CONTROL "Poke", 106, "BorRadio", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 64, 32, 10
LTEXT "Results / Diagnostics", -1, 12, 82, 78, 8
EDITTEXT 107, 10, 92, 228, 69, ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
DEFPUSHBUTTON "Do it", IDOK, 192, 12, 43, 14
PUSHBUTTON "Quit", IDCANCEL, 192, 42, 43, 14
CONTROL "", -1, "BorShade", BSS_GROUP | BSS_CAPTION | BSS_LEFT | WS_CHILD | WS_VISIBLE, -5, -7, 257, 180
PUSHBUTTON "Open", 120, 192, 27, 43, 14
}

View File

@@ -0,0 +1,35 @@
##
## Sample character translation resource file for
## WinPMail v1.02, SMTP translation.
## Copyright (c) 1993, David Harris, All Rights Reserved.
##
## This file can be used to replace the default SMTP
## translation table used by PMail on outgoing non-MIME
## messages.
##
## Resource 0 in the file must be an SMTP translation table:
## it consists of high-bit characters followed immediately
## by the string of characters which PMail should use in
## place of the character in outgoing messages. Spaces
## delimit each entry.
##
## To use this file, make any necessary changes to it and
## compile it using the command "ResCom WPM-CHAR.R". Copy
## the resulting WPM-CHAR.RSC file into either your home
## mailbox if you want it to affect only you, or into the
## same directory as WINPMAIL.EXE if you want it to affect
## all users on the system.
##
text TEXT_SMTP_TABLE
{
"<EFBFBD>C <20>ue <20>e <20>a <20>ae <20>a <20>a <20>c <20>e <20>e <20>e <20>i <20>i <20>i <20>AE <20>A ",
"<EFBFBD>E <20>ee <20>AE <20>o <20>oe <20>o <20>u <20>u <20>y <20>OE <20>UE <20>c <20>stlg <20>yen ",
"<EFBFBD>peseta <20>florin <20>a <20>i <20>o <20>u <20>n <20>N <20>a <20>o <20>? <20>+ <20>+ ",
"<EFBFBD>.5 <20>.25 <20>! <20><< <20>>> <20>| <20>| <20>| <20>| <20>+ <20>+ <20>| <20>| <20>+ <20>+ ",
"<EFBFBD>+ <20>+ <20>+ <20>+ <20>- <20>- <20>| <20>- <20>+ <20>| <20>| <20>+ <20>+ <20>- <20>- <20>| <20>- ",
"<EFBFBD>+ <20>- <20>- <20>- <20>- <20>+ <20>+ <20>+ <20>+ <20>+ <20>+ <20>+ <20>+ <20>a <20>ss <20>pi ",
"<EFBFBD>Sigma <20>Rho <20>Tau <20>Theta <20>Omega <20>delta <20>o <20>Epsilon ",
"<EFBFBD>= <20>+/- <20>>= <20><= <20>/ <20>o <20>. <20>sqrt <20>^n <20>^2"
};

View File

@@ -0,0 +1,598 @@
##
## WPM-LMTT.R (Local Mime Translation Table)
## Copyright (c) 1994, David Harris, All Rights Reserved.
##
## This file can be used as a model for a local resource which
## maps ISO character sets to the code pages in use on the PCs
## at your site.
##
## Character translation tables:
## Each translation table maps the characters in a particular
## ISO set to your codepage's character set: the table can be used
## bidirectionally when composing or decoding quoted-printable or
## 8BIT messages. Only characters from 128-255 are included in
## the table, and each table must end with an ASCII NUL (0).
##
## The sample tables in this file are the ones Pegasus Mail uses
## by default: they map ISO character sets to the standard IBM
## code page 437. You may define as many character sets as you
## wish and Pegasus Mail will use them to translate incoming mail
## but for outgoing mail it will only use ISO character sets.
##
## The last resource in the file must be a "charset_list"
## structure which ties the character strings naming an ISO
## character set to the resource which maps it.
##
## Angepa<70>t an deutsche Umlaute (cp_win) am 28-04-2004 Sven Henze
##
#==========================================================
#
# OPTIMAL CHARACTER TRANSLATIONS, should be used as
# a example for user defined tables in multilanguage fonts
# environment.
#
# WEST ISO-8859-1 --> CP 1252
# CE ISO-8859-2 --> CP 1250
# TR,AFR ISO-8859-3 --> ? CP 1252
# BALTIC ISO-8859-4 --> CP 1257
# CYR ISO-8859-5 --> CP 1251
# ARAB ISO-8859-6 --> CP 1256
# GREEK ISO-8859-7 --> CP 1253
# HEBR ISO-8859-8 --> CP 1255
# TR ISO-8859-9 --> CP 1254
# RUSS KOI-8R --> CP 1251
# VIETN CP 1258 (currently not implemented)
# ISO-8859-10 ??? (currently not implemented)
# Conversion tables from Jiri Kuchta, 8-12-96, kuchta@fee.vutbr.cz
#
#=========================================================
##
## To use this file, modify it as required, then compile it with
## the Pegasus Mail system resource compiler, RESCOM, using the
## command 'rescom PM-LMTT.R'. This will produce the file
## PM-LMTT.RSC, which should be copied into the same directory
## as PMAIL.EXE, or into your home mailbox.
##
## The "charset_list" type is used to tie a particular name of
## a character set to the table used to decode it.
##
typedef charset_list 25
{
repeat,
string 20, # Character set name
integer # resource ID of table to load.
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 1 (Latin 1)
###----------------------------------------------------------------
## Danish, Dutch, English, Faeroese, Finnish, French, German, Icelandic,
## Irish, Italian, Norwegian, Portuguese, Spanish and Swedish.
##
## optimal conversion into CP850, CP1252
structure iso8859_1
{
# conversion ISO-1 --> 1252
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '|', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 2 (Latin 2)
###----------------------------------------------------------------
## Albanian, Czech, English, German, Hungarian, Polish, Rumanian,
## Serbo-Croatian, Slovak, Slovene and Swedish.
##
## optimal conversion into CP852, CP1250
#structure iso8859_2
# {
## conversion ISO-2 --> 1252 (WEST)
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
#'\160', 'A', '<27>', 'L', '<27>', 'L', 'S', '<27>', #a0
# '<27>', '<27>', 'S', 'T', 'Z', '<27>', 'Z', 'Z', #a8
# '<27>', 'a', '?', 'l', '<27>', 'l', 's', '<27>', #b0
# '<27>', '<27>', 's', 't', 'z', '<27>', 'z', 'z', #b8
# 'R', '<27>', '<27>', '<27>', '<27>', 'L', 'C', '<27>', #c0
# 'C', '<27>', 'E', '<27>', '<27>', '<27>', '<27>', 'D', #c8
# '<27>', 'N', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #d0
# 'R', '<27>', '<27>', '<27>', '<27>', '<27>', 'T', '<27>', #d8
# 'r', '<27>', '<27>', '<27>', '<27>', 'l', 'c', '<27>', #e0
# 'c', '<27>', 'e', '<27>', '<27>', '<27>', '<27>', 'd', #e8
# '<27>', 'n', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #f0
# 'r', '<27>', '<27>', '<27>', '<27>', '<27>', 't', '<27>', #f8
# 0
# };
structure iso8859_2
{
# conversion ISO-2 --> 1250 (CE)
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 3 (Latin 3)
###----------------------------------------------------------------
## Afrikaans, Catalan, English, Esperanto, French, Galician, German,
## Italian, Maltese and Turkish.
##
## optimal conversion into CP85x, CP125x
structure iso8859_3
{
# conversion ISO-3 --> 1252
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', 'H', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', ' ', 'H', '<EFBFBD>', #a0
'<EFBFBD>', 'I', 'S', 'G', 'J', '<EFBFBD>', ' ', 'Z', #a8
'<EFBFBD>', 'h', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'h', '<EFBFBD>', #b0
'<EFBFBD>', 'i', 's', 'g', 'j', '<EFBFBD>', ' ', 'z', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', ' ', '<EFBFBD>', 'C', 'C', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
' ', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'G', '<EFBFBD>', '<EFBFBD>', #d0
'G', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'U', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', ' ', '<EFBFBD>', 'c', 'c', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
' ', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'g', '<EFBFBD>', '<EFBFBD>', #f0
'g', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'u', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 4 (Latin 4)
###----------------------------------------------------------------
## Danish, English, Estonian, Finnish, German, Greenlandic, Lappish,
## Latvian, Lithuanian, Norwegian and Swedish.
##
## optimal conversion into CP85x, CP1257
#structure iso8859_4
# {
## conversion ISO-4 --> 1252
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
#'\160', 'A', 'k', 'R', '<27>', 'I', 'L', '<27>', #a0
# '<27>', '<27>', '<27>', 'G', 'T', '<27>', 'Z', '<27>', #a8
# '<27>', 'a', '<27>', 'r', '<27>', 'N', 'z', 'n', #b0
# '<27>', '<27>', '<27>', 'g', 't', 'i', 'l', '<27>', #b8
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', 'I', #c0
# 'C', '<27>', 'E', '<27>', '<27>', '<27>', '<27>', '<27>', #c8
# '<27>', '<27>', '<27>', 'K', '<27>', '<27>', '<27>', '<27>', #d0
# '<27>', '<27>', '<27>', '<27>', '<27>', 'U', 'U', '<27>', #d8
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', 'i', #e0
# 'c', '<27>', 'e', '<27>', '<27>', '<27>', '<27>', '<27>', #e8
# '<27>', '<27>', '<27>', 'k', '<27>', '<27>', '<27>', '<27>', #f0
# '<27>', '<27>', '<27>', '<27>', '<27>', 'u', 'u', '<27>', #f8
# 0
# };
structure iso8859_4
{
# conversion ISO-4 --> 1257
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', '<EFBFBD>', 'k', '<EFBFBD>', '<EFBFBD>', 'I', '<EFBFBD>', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'T', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'i', '<EFBFBD>', '<EFBFBD>', #b0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 't', '?', '<EFBFBD>', '?', #b8
'<EFBFBD>', 'A', 'A', 'A', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'E', '<EFBFBD>', 'I', 'I', '<EFBFBD>', #c8
'D', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'O', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', 'U', 'U', '<EFBFBD>', 'U', 'U', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', 'a', 'a', 'a', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'e', '<EFBFBD>', 'i', 'i', '<EFBFBD>', #e8
'd', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', 'o', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', 'u', 'u', '<EFBFBD>', 'u', 'u', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 5 (Cyrilic)
###----------------------------------------------------------------
## Bulgarian, Bielorussian, English, Macedonian, Russian,
## Serbo-Croatian and Ukrainian.
##
## optimal conversion into CP855, CP866, CP1251
#structure iso8859_5
# {
## conversion ISO-5--> 1252
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
#'\160', '<27>', '?', 'r', 'E', 'S', 'I', '<27>', #a0
# 'J', 'L', 'H', '?', 'K', '-', '<27>', '?', #a8
# 'A', 'B', 'V', 'G', 'D', 'E', 'Z', '3', #b0
# 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', #b8
# 'R', 'S', 'T', 'U', '<27>', 'X', 'C', '<27>', #c0
# 'S', 'S', '?', '?', '?', '3', '<27>', '<27>', #c8
# 'a', 'b', 'v', 'g', 'd', 'e', 'z', '3', #d0
# 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', #d8
# 'r', 's', 't', 'u', '<27>', 'x', 'c', '<27>', #e0
# 's', 's', '?', '?', '?', '3', '<27>', '<27>', #e8
# '<27>', '<27>', '?', 'r', 'e', 's', 'i', '<27>', #f0
# 'j', 'l', 'h', '?', 'k', ' ', '<27>', '?', #f8
# 0
# };
structure iso8859_5
{
# conversion ISO-5 --> 1251
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', ' ', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 6 (Arabic)
###----------------------------------------------------------------
## This set of graphic character is intended for use in information
## interchange as well as in data and text processing applications
## where both the Arabic and the Latin scripts are used.
##
## optimal conversion into CP85x, CP1256
#structure iso8859_6
# {
## conversion ISO-6--> 1252
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
#'\160', ' ', ' ', ' ', '<27>', ' ', ' ', ' ', #a0
# ' ', ' ', ' ', ' ', '`', '-', ' ', ' ', #a8
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #b0
# ' ', ' ', ' ', ';', ' ', ' ', ' ', '<27>', #b8
# ' ', '?', '?', '?', '?', '?', '?', '?', #c0
# '?', '?', '?', '?', '?', '?', '?', '?', #c8
# '?', '?', '?', '?', '?', '?', '?', '?', #d0
# '?', '?', '?', ' ', ' ', ' ', ' ', ' ', #d8
# '-', '?', '?', '?', '?', '?', '?', '?', #e0
# '?', '?', '?', '-', '-', '-', '-', '-', #e8
# '-', '-', '-', ' ', ' ', ' ', ' ', ' ', #f0
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #f8
# 0
# };
structure iso8859_6
{
## conversion ISO-6--> 1256
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160',' ', ' ', ' ', '<EFBFBD>', ' ', ' ', ' ', #a0
' ', ' ', ' ', ' ', '\161','\173',' ', ' ', #a8
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #b0
' ', ' ', ' ', '\186',' ', ' ', ' ', '\191', #b8
' ', '\193','\194','\195','\196','\197','\198','\199', #c0
'\200','\201','\202','\203','\204','\205','\206','\207', #c8
'\208','\209','\210','\211','\212','\213','\214','\216', #d0
'\217','\218','\219',' ', ' ', ' ', ' ', ' ', #d8
'\220','\221','\222','\223','\225','\227','\228','\229', #e0
'\230','\236','\237','\240','\241','\242','\243','\245', #e8
'\246','\248','\250',' ', ' ', ' ', ' ', ' ', #f0
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 7 (Greek)
###----------------------------------------------------------------
## This set is suited for multiple-language applications involving the
## Latin and the Greek scripts. It allows handling of data and text
## expressed in Greek.
##
## optimal conversion into CP85x, CP1253
structure iso8859_7
{
## conversion ISO-7--> 1253
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', ',', '`', '<EFBFBD>', ' ', ' ', '<EFBFBD>', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', ' ', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', ' ', '<EFBFBD>', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
'<EFBFBD>', '<EFBFBD>', ' ', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', ' ', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 8 (Hebrew)
###----------------------------------------------------------------
## This set is suited for multiple-language applications involving the
## Latin and the Hebrew scripts. It allows handling of data and text
## expressed in Hebrew.
##
## optimal conversion into CP85x, CP1255
#structure iso8859_8
# {
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
#'\160', ' ', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #a0
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '?', #a8
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #b0
# ',', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', ' ', #b8
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #c0
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #c8
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #d0
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', '?', #d8
# '?', '?', '?', '?', '?', '?', '?', '?', #e0
# '?', '?', '?', '?', '?', '?', '?', '?', #e8
# '?', '?', '?', '?', '?', '?', '?', '?', #f0
# '?', '?', '?', '?', '?', '?', '?', '?', #f8
# 0
# };
structure iso8859_8
{
## conversion ISO-8--> 1255
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', ' ', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', 'x', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '?', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b0
',', '<EFBFBD>', '/', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', ' ', #b8
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #c0
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #c8
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #d0
' ', ' ', ' ', ' ', ' ', ' ', ' ', '?', #d8
'\224','\225','\226','\227','\228','\229','\230','\231', #e0
'\232','\233','\234','\235','\236','\237','\238','\239', #e8
'\240','\241','\242','\243','\244','\245','\246','\247', #f0
'\248','\249','\250',' ', ' ', ' ', ' ', ' ', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 9 (Latin 5)
###----------------------------------------------------------------
## English, Finnish, French, German, Irish, Italian, Norwegian,
## Portuguese, Spanish and Swedish and Turkish.
##
## optimal conversion into CP85x, CP1254
#structure iso8859_9
# {
## conversion ISO-9 --> 1252
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
# ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
#'\160', '<27>', '<27>', '<27>', '<27>', '<27>', '|', '<27>', #a0
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #a8
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #b0
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #b8
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #c0
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #c8
# 'G', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #d0
# '<27>', '<27>', '<27>', '<27>', '<27>', 'I', 'S', '<27>', #d8
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #e0
# '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #e8
# 'g', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', '<27>', #f0
# '<27>', '<27>', '<27>', '<27>', '<27>', 'i', 's', '<27>', #f8
# 0
# };
structure iso8859_9
{
# conversion ISO-9 --> 1254
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## I S O - 8 8 5 9 - 1 5 (Latin 9)
###----------------------------------------------------------------
## Ajout<75> par Th. Thomas
## Albanais, allemand, anglais, basque, breton, catalan, danois, espagnol,
## estonien, f<>ro<72>en, finnois, fran<61>ais, frison, ga<67>lique <20>cossais, ga<67>lique
## irlandais (nouvelle orthographe), galicien, gallois, groenlandais,
## islandais, italien, latin, luxembourgeois, n<>erlandais, norv<72>gien,
## portugais, romanche, su<73>dois, et mon<6F>gasque.
##
## optimal conversion into CP850, CP1252
structure iso8859_15
{
# conversion ISO-15 --> 1252
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #80
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #88
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #90
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', #98
'\160', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #a0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '-', '<EFBFBD>', '-', #a8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## K O I - 8 R (Cyrilic)
###----------------------------------------------------------------
## Bulgarian, Bielorussian, English, Macedonian, Russian,
## Serbo-Croatian and Ukrainian.
##
## optimal conversion into CP855, CP866, CP1251
structure koi8_r
{
# conversion KOI8-R --> 1251
'-', '|', '+', '+', '+', '+', '|', '|', #80
'-', '-', '+', '#', '#', '#', '#', '#', #88
'#', '#', '#', '|', '#', '?', '?', '~', #90
'?', '?', ' ', '|', '?', '2', '.', '/', #98
'-', '|', '+', '<EFBFBD>', '+', '+', '+', '+', #a0
'+', '+', '+', '+', '+', '+', '+', '|', #a8
'|', '|', '|', '<EFBFBD>', '|', '|', '-', '-', #b0
'-', '-', '-', '-', '+', '+', '+', '<EFBFBD>', #b8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #c8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #d8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #e8
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f0
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', #f8
0
};
###----------------------------------------------------------------
## W I N D O W S - 1 2 X X
###----------------------------------------------------------------
##
## optimal conversion transparent
structure cp_WIN
#echo WIN transparent
{
'<EFBFBD>', '?', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '?', '<EFBFBD>', '?',
'?', ''', ''', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '-', '-',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '?', '<EFBFBD>', '<EFBFBD>',
' ', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
'<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>', '<EFBFBD>',
0
};
charset_list _mime_csets
{
"ISO-8859-1", iso8859_1,
"ISO-8859-2", iso8859_2,
"ISO-8859-3", iso8859_3,
"ISO-8859-4", iso8859_4,
"ISO-8859-5", iso8859_5,
"ISO-8859-6", iso8859_6,
"ISO-8859-7", iso8859_7,
"ISO-8859-8", iso8859_8,
"ISO-8859-9", iso8859_9,
"ISO-8859-15", iso8859_15,
"KOI8-R", koi8_r,
"WINDOWS-1250", cp_WIN, # Windows codepages transparent
"WINDOWS-1251", cp_WIN, #
"WINDOWS-1252", cp_WIN, #
"WINDOWS-1253", cp_WIN, #
"WINDOWS-1254", cp_WIN, #
"WINDOWS-1257", cp_WIN, #
"", -1