The CompuBBS code
SPP <[email protected]> Mon, 26 Jul 2021 22:58:53 -0500
| Newsgroups | alt.comics.alternative |
|---|---|
| Message-ID | <[email protected]> |
The CompuBBS code Please use it to communicate :-) ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- readme.txt - file below between horizontal rule ----------------------------------------------------------------------------- Disclaimer: ----------- I recommend the use of a blue background(hexadecimal #0000CD) and white text(hexadecimal #ffffff) for the terminal session of the CompuBBS computer bulletin board system. Somthing about the blue black background that helps anybody to be able to critically think and use the tool toward some level of sufficiency. Notice the success of the black board or chalkboard of the Jewish pedagogy industry of whichever school system. The black board was quite effective in helping so many be able to read, write, and do arithmetic amidst that world of the Jewish religious war trying to degenerate whichever organ of our human bodys to disrupt critical thinking. Such organizations I mention in the killfile under the username of [email protected] through USENET Newsgroups as in giganews.com and groups.google.com. So check it out and may you too find the clues you need to help you deal with your life condition. Good luck to you. I want you to win. The nature of the good is to overcome and defeat the bad. Reading is fundamental. Always a pleasure. Indeed, there is some good out there. However, don't be naieve. Beware of the sucker punch when dealing with whomever in a world of Jewish religious war ideations for whichever resources. I find the Evangelicalism, Nazism, and Existentialism are worth the investment. That world of the Maosit Transcendentalism, Marxist Communism, and Mussolini Zionism are no good, you know. Mao, Marx, and Mussolini are Jews who are only for the Jewish and nobody else. Our Network of 72 is heavily challenged by the world of the Jewish isms and their 3 sabotages in whichever system of things. That is the issue, which this CompuBBS helps overcome in some limit. The CompuBBS unix computer bulletin board system is one of the HUFA(s) weaponrys. In laymens terms the HUFA is elaborated this way: H - Homeopathys U - Unix technologys F - FIAT moneys through whichever social security office A - Ayn Rand postulates of the self using the "I am"(Soham) It is like that as we are... ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- The CompuBBS code Satyababu Popuri Bachelors in Computer Science Silence is death. The need for an open source bulletin board system is vital for communication to prosper across this earth planet. In my travels I have discovered certain tools that help many to research and develop with ease while maintaining a sound and cogent system toward such an end. This CompuBBS is an open source version of the NYUNET bulletin board system I discovered while mistakenly studying and working there in my quest for enligtenment. As fate would have it, I chanced upon certain tools that I now present with an assortment of other tools I have discovered in my triste with death while working in the I.T. industry that just work. Indeed, such tools have helped me here and there to maintain a consistent understanding of not only Unix fundamentals but also a feel good experience that is second to none. These tools represent the love affair that never quits. Not only has it valorized and inundated across this earth planet but has been the aims and means of my reason for living. Man needs a proper meditation of the heart and this tool list is one of the things I have used to be able to better understand myself and others. It was during the college years that I was exposed to such tools in over 3 universities and 11 years of employment here and there. They just work. Given the level of complexity the graphical user interface(GUI) engenders it is refreshing to fall back on a tool base that is time immemorial. So please feel free to use them and contribute toward the open source endeavor to foster freedom of speech. For me prayer works but without a means of communication that is uninhibited and unmoderated we are at a loss for words. That is the shear beauty of the traditional tools as in 'tin' of the USENET NEWS servers; as well as the 'irssi' of the IRC servers. It goes on. The list of tools I mention are as follows based on over 20 years of experience with the UNIX pragma. ----------------------------------------------------------------------- 0. Alpine - a nice email client 1. Tin - a nice newsreader 2. Irssi - a nice internet relay chat client 3. Lynx - a nice web browser 4. Gopher - a nice ftp client 5. Nslookup - a nice directory service 6. Telnet - a nice remote login tool 7. Tailer - a nice monitoring tool [This I discovered at a .com I worked for. It simply goes to an i.p. address and searches for a string. If the string is not there an alert is genertated. Maybe it is out there in the wild blue yonder of the internet as I chanced upon it once during the dawn of the internet in the late 90s and early millenium.] 8. Sendpage - this is a nice beeper software that helps to keep in touch with loved ones and others through the beeper or pager tool. At one time during the golden 80s the beeper was the hallmark of those of teh 2 car garage suburban american dream home. 9. Calcurse - a nice calendar application to assist with scheduling. Indeed, I have seen quite a number of tenured administrators invest into a simple calendar tool to assist with their work. The calendar it seems is like the most auspicious tool for anyone trying to work for a living. Seems to be the hallmark of tenure. Let's see.. A. ECN - a nice day trading game [This is Josh Green's day trading algorithym in Python when he worked at Daytek which is posted once again under the username of [email protected]. I encourage learning how to deal with money because "when men and women get together [money] gets in the way".] That too, they say, education is about learning how to communicate and learn how to deal with money. B. Bible - a nice text based bible program [Does anyone know of an old school Bible program that is text based and worthy of praise? Prayer to Jesus Christ works!] C. T.I.A. - this is the Tiny IDE Ada editor. Could Ada be the language to mature with as a programmer, just as the UNIX is the operating system to mature with as a sysadmin? Surely, Ada is used by the federations as NASA, while the UNIX is used by industrys. It seems the larger than thou organizations of the world just invest in things that work. Unlike those nigger Jews, with thier bullshit Microsoft or pathetic solutions to a complex problems. I am trying to encourage the Ada programming language over C++ and Java. Does it work? I have no clue. Been through so many heartaches and pain trying to go beyond the learning curve trying to program. HTML was the best experience. After that, it all went downhill. D. Tutor - a nice Unix tutorial, which I discovered at New York University. Somewhere there is an open source version of it. It is a great way to learn the Unix operating system. E. Nano - a nice text editor F. Bash - a nice command prompt $. Exit - a simple exit to the whole CompuBBS tools for research and development. I have foregoed useing the 'queue' tool as it may cause some problems as far as managing and maintaining the print spool. The queue tool is always an issue for any I.T. computer lab as it is often the target of attacks by occidental miscreants. There are other tools, such as 'talk', that are also good if you know how to use them in the code I mentioned. I refrained from mentioning 'talk' tool because it requires input about the user and terminal to literally talk to using a text based interface. That too, I find the talk tool is used by Satanists among the Orientals who are in the ways of life of the Yiddish, Zen, Vudu, Hindu, LGBTQ, Trini, Creole, Hapa, Hoon, and Roma ancestorys to brainwash and influence naive people to become hostages of their JUBU(Judeo-Buddhist) suicide rituals. That is how some nigger of the Made in Taiwan Zen tribe of the Jewish tried to influence me to be a Shaolin enthusiast. As well, there is a tool which has been mentioned that is called 'calc'. Is the 'calc' tool how they implement the black-scholes weapon of mass destruction? Who really can calculate properly? Even if the tool is properly designed, what do you do about the shit culture of psychotropics, narcotics, liquor, soya-neurotoxins, tobacco, and steroids that are all over the place from cool drinks to ingredients in condiments that degenerate any organ of our body assisting the interplay of consciousness? When I was on psychotropics I really could not tell if it was night or day. Yet, they say 80 percent are on the pill of some kind. So what does that mean? Well, I tell ya, the whole culture of the psychotropics, narcotics, liquor, soya-neurotoxins, tobacco, and steroids are the means by which the evil empire of the JUBU; eminating from republics as Taiwan, Israel, Sicily, Haiti, Hawaii, Trinidad, Indonesia, Phillipines, Tibet, and Brooklyn(NY, USA); area ble to control the masses by having said control substances bind to various parts of our humanoid body as the brain, heart, stomach, liver, kindeys, intestine, muscles, and lungs. People are literally puppeted to be mindless automatons of the whole multi-level massacre. Not only is this done through criminals but also through gorvernment authorized institutions with fake diplomas as in doctor, lawyer, social worker, nurse, pharmacist, dentist, psychiatrist garnered through bribing of school systems. The whole thing is a farce. That too, a fabrication of the false business practices of mlms. Although, mlms are colloquially known as multi-level marketing businesses they are really multi-level massacre blood money manufacturing organizations where the human body is used to make serious alloy in the human body and the alloys possibly used to built the novus ordo secularam pyramid. The world of Maoist Transcendentalism as an economic system is one of human sacrifices where the human body is fed to the very tool being manufactured or maintained. That is why the level of domestic violence, communal war, and religious war is rampant all throughout this earth planet. So many governments use the kill organizations of Transcendentalism(Temples, Ashrams, and Mandals), Allopathy, Microsoft, Niggervision, Palmistry, Insurance, Gambling, Utilitys, Pedagogy, Security, and Legality to garner the blood money to enact their multi-level massacre scenarios. It is like that among them. To simply eat, sleep, sex, socialize, study, suffice, synergy, spirituality, succeed, evagelize, and open source is like more difficult than anything. Somehow, the American Dream we find out is alot about at least a 6 figure debt in serious economic terms. That is what they are like. A world of heinous domestic violence, communal war, and even religious war to further the Jewish dogmatic supremacy of the torment and torture looming around the nothing, which they brag of as the non one thing that is the everything. That of a TNT leads to a world of hurt where each of the articles of incorporation that evidences a Jewish leader or presence for that matter in wanton disregard and disrespect unders up going inferno. The destruction of the World Trade Center, Louisiana, IRAQ, Hispania and the projected Caribbean and Rule by Might of Hongkong, Pakistan, Germany, Morocco, and Argentina are a result of the Jewish trespass and Jew baiting treachery. It is like that in a world of Jewish pride and prejudice by the most elite of human beings only to betray the very laws they are signatory to. That is the result of the Maoist Transcendentalism, Marxist Communism, and Mussolini Zionism that is all over the place to the depths of the cosmos mentioned through the Star Trek reports. That is what is there. What they boast of is true. The disparity between the rich and poor is growing worse day by day. As well, the insitutionalization of the educated is the norm. Additionally, the usurping of sovereignty and hegemony is the very thign that is most invited through the Jewish trespass and Jew baiting treachery. That too Satanism through the worship of false gods as Gandhi, Buddha, and Khudaji of Judea is like all over the place. It is like that among them and thier wanton disregard and disrespect toward sentient life, liberty, pursuit of happiness, property, faith, and propriety. This has been thier end game for nearly 5,000 to 1 million years minimum. Yet, amidst it all somethings work. One thing to mention is that the forces of the JUBU and their Satanic Dharma get weaker over time. Apparently, the 2019 A.D. marks the end of their pagan occult calendar. Will they enter it? The so called Kale Yuga they brag of? What was once theirs will be ours. In my vector of life, I find whichever the JUBU satanists are against are the very things that help me survive. Take for example the Jewish denuncation of beef, pork, egg, cola, cake, sugar and even to the point of Indian, Christian, Muslim, European, Women, and Nazi ways. Those are the very things that are the most lambasted by those of the Jewish diaspora and their foot soldiers of the Jewish literati who seek to destroy each and everything that has made their life worth living. So many are just happy go lucky with the Jewish slave identitys that is the allurement of the masses. They would rather be turned into an alloy through serious austerites of whicever caveats, banalitys, and divestments to further the Jewish xenophobia as their own. It is like that as they seek to garner success in moneys and prayers without ever reading a Bid or Bible. While we are fundamentally money getting animals who seek to hunt and gather for moneys as the squirrel hunts and gathers for nuts; rare few are of the study of books and whichever accompanying things regard the garnering of money. Most are content with the Jewish propoganda and niggervision as they source of information. For what? That is how well controlled the populace by the world of devils triangle corporations using the hyperdermic syringe; control substances as psychotropics, narcotics, liquor, soya, tobacco, and steroids; as well as the brainwashing by the jewish occults in the worship of the swamis of Gandhi, Buddha, and Kudaji. Those three lists seperated by the semicolon are the literal they mainting to further thier jewish religious war for blood money manufacturing leading to a premature death filled with trajedy, terrorism, and trauma to say the least. That is what most governments of the world bank to justify their sovereignty and hegemony and maintain the Jewish higher law. Amidst it all somethings work. Things as Evangelicalism, Nazism, and Existentialism help to countermeasure the Maoist Transcendentalism, Marxist Communism, and Mussolinist Zionism; for the Jews like nothing more than to implement 3 sabotages in any system of things. That maybe. Indeed, in the I.T. industry the Jews are the most consistent in establish the sabotage of the cron scheduler, mmu(memory management unit), and math corprocessor. That is what they are able to do. Henve them being mentioned in my killfile in this venture of the Cybermatrix or to say open source FIAT like moneys contract. Evangelicalism - spiritual countermeasures to the Mussolini Zionism Nazism - political countermeasures to the Marxist Communism Existentialism - financial countermeasures to the Maiost Transcendentalism of whichever caste like pyramid scheme of the corporate slavery mentioned as the Jewish mlm or multilevel massacre. Here in America the reigning mlms that have governed the world of false money getting have been herbalife, amway, and citigroup. What is there? Only false receipts that are never honored. A world of let downs that just get reiterated unto nothing. A collapse of the very economic systems themselves. That is how the Asian economic global contagion unleashed as so many orientals are heavily of the Jewish marriage and Jew baiting treachery toward anyone they have chanced upon. As a result the following has been evidenced by the Jew baiting Orientals of the Chini, Thai, Ainy, and Malay ethnic groups. Asian economic tigers have gone kaput Model minority has gone bygone Oriental mystique has gone satanic Race supremacy has gone genocided Now, the challenge for many is the evil empire of the JUBU(Judeo-Buddhist) satanists who have hostaged 90 percent of the worlds money or gdp through the forced consumption of the psychotropics, narcotics, liquor, soya, tobacco, and steroids either ilegally, criminally, institutionally, politically, religiouslly, or internationally. The madness or to say mutually assured destructin goes on like this in a world of false ways of money getting; meditation of the heart; and sovereignty and hegemony. I post more online under the username of [email protected]. Kindly search for keywords as 'the deprogram', 'the cybermatrix', 'the emcronexus'. Again, somethings work. Thanks god for the guru Christ Jesus is the god. Indeed, there is some good out there. While there is no that of a thing as a hundred percent it is possible to juxtapose for a well and balanced fully that can endure the test of time and surpass all understanding. Please find mentioned the postings of "The Deprogram Evangelical Savoire" on USENET News as in groups.google.com and giganews.com. I try to communicate it as often as I can. It is an ongoiing process of enlightenment. I share some clues I have gathered in my nearly 45 years of travel across thise earth planet, most in this cosmopolitan city as New York City, which to me is a Jewish death camp. I like to collect clues. Has America done it again, to allow for the development of a proper meditation of the heart the can endure the test of time and surpass all understanding? Indeed, there is some good out there. The file list for this CompuBBS endeavor is as follows: readme.txt compubbs.sh bash-menu.sh bash-draw.sh Josh Greenes' Island ECN code Please find the code in the following USENET newsgroups: soc.culture.indian soc.culture.asian.american soc.culture.usa soc.cutlure.spain soc.culture.bangladesh soc.culture.puerto-rico alt.computer.consultants alt.sex.stories.hetero soc.culture.africa soc.culture.china soc.culture.europe soc.culture.telugu soc.culture.iran Let's setup servers of this type of an unmoderated open source bulletin board system. The internet through such tools as the BBS has encouraged reciprocity or mutual respect. This Cybermatrix endeavor which I am trying to contravecy is an attempt toward synergy or mutual success. As well, there is a need for unity or mutual purpose, which I am coining as Emcronexus. The T.E.A.M. acronymn for "together everyone accomplishes more" is worth encouraging. The following are some nice networks I am encouraging toward some level of mutuality: # - network - tool - description - industry - smurf - mutuality - insult(waveform) ----------------------------------------------------------------------------------- 1 - Simulcast - tablet - educational - pedagogy - 2 race mix of British and one of any other race mix - infidelity - conehead(analog) 2 - Internet - computer - technological - technology - indian - reciprocity - squarehead(digital) 3 - Cybermatrix - television - financial - fiduciary - hispanic - synergy - tacohead(pulse) 4 - Tektocracy - beeper - political - grocery - british - ? - skinhead(?) 5 - Emcronexus - tazergun - fraternal - security - caribbeanese(tamil, taino, terron, and tiwi australoids) - fraternity - burrhead(triangle) 6 - Darkring - console - architectural - realty - african - ? - dothead? (dotpitch?) 7 - Datatron - tracker(i.e. fitbit) - medical - homeopathy - european - ? - ? 8 - Heliopex - WET(wearable electronic timepiece)(i.e. smartwatch) - historical - history - russian - unity - ? 9 - Transpace - PDA(portable digital assistant)(i.e. smartphone) - sexual - sexuality - oriental - ? - slopehead(sawtooth) 10 - Starscape - controller - audiovisual - hospitality - australian - ? - ? ----------------------------------------------------------------------------------- 11 - Sneakerweb - tablet - spiritual - spirituality - arabian - comaradery - ?(?) Datatron Data - basis of reasoning Tron - tool for scientific work As well, I have noticed the following dutys that seem to withstand the test of time and surpass all understanding with my I.T. industry. They are as follows: CIS Sysadmins: (Computer Information Specialties) ---------------------------------- 0. networking - solaris/sparc : british(a.k.a grocer) 1. databasing - linux/intel : mulatto(Terron,Tamil,Taino,Tiwi)(a.k.a bouncer?) 2. multimedia - osx(bsd)/motorola : european(a.k.a physcian) 3. programming - haiku/amd : indian(a.k.a consultant) 4. troubleshooting - cytrix? : hispanic(a.k.a. accountant) 5. management - sap/vax? : african(a.k.a. landlord) 6. gaming - irix : russian(a.k.a. lawyer?) 7. productivity - minix-x11-react os/arm : australian?(a.k.a designer?) 8. security – sgi? : oriental?(a.k.a. escort) 9. testing - sco/sylk? : arabian?(a.k.a. scholar) ---------- Outside contractors: 10.tutoring - amix : jewish(teacher)[outside contractor] With respect to the involvement of the Jewish blight upon humanity within the I.T. industry I find they are a curse more than anything. All they do is sabotage whichever system to justify yet another failed investment into thier diaspora. It is like that among them as their history of failure is not only evidenced in the Holy Bible as in the Nubian kingdom of Egypt but also in whichever other civilization to have graced this earth planet. That is why the Jews of the Yiddish, Zen, Vudu, Hindu, LGBTQ(Zoroastrian), Trini, Creole, Hapa, Hoon, and Roma ancestorys are known as the Negroid race, the niggers of the world. Anyway, join us in this endeavor to liberate humanity from the vice grip of the Jew baiting culture of the Jewish idiot and Zen wrong. I pray to Jesus Christ that you find these clues useful and worthy of praise as I have. This CompuBBS is a brief history of time and space of a world so good. In a way, the nature of the good is to overcome and defeat the bad. So, God bless and God speed for Jesus Christ is God. Always a pleasure. May you and your loved one's in the name of Jesus Christ be well, happy, prosperous, peacefull, healthy, and safe. P.S. Let it be said, "[financial] frustration creates a great imbalance in mind and body." We need to allay our antogonizing forces so that open source fiat like monies are provided for all concerned. The UNIX may help with learning how to communicate but the FIAT may help with learning how to deal with monies. The only issues I have are the evil empire of the JUBU and their branches of Transcedentalism, Allopathy, Microsoft, Niggervision, Palmistry, and Insurance corporations of whichever bilk and swindel. There is that of a thing as evil and it is their incessant anti-Christ ways which ruin the whole thing. That is the issue. The dangers of the Jewish, Zen, Vudu, Hindu, LGBTQ, Trini, Creole, Hapa, Hoon, and Roma masters of the nothing or meaningless things as in zazen(breathing excercises), mantra(meaningless word recitations), and koan(visualizations on meaningless riddles) of the Satanic Dharma is more than anything. They are more of an evil and a bad influence than one can possibly dream. Quite a number bank on those Jewish nigger masters of the nothing in order to eliminate innocent and good people to further their zero sum end game. Simply say the words Jesus Christ in your prayers to escape from such negative influences. The following republics are the bases of the evil empire of the JUBU: Taiwan - empire of Zen Israel - empire of Jews Sicily - empire of LGBTQ Haiti - empire of Vudu Hawaii - empire of Hindus Trinidad - empire of Trini Indonesia - empire of Creole Phillipines - empire of Hapa Tibet - empire of Hoon Brooklyn - empire of the Roma The Transcendentalist mafia are from such areas acenstorally and are harbingers of the worst known massacre known to man, called the religious war. This ComuBBS tool is to help people communicate for the sake of not only the ontology of Jesus Christ but also to better get clues on how to deal with those people of the Dying Arts. I really want to setup this system so that those stinken Jews are not a part of it. Their trespass into literally every industry to do stupid and sabotaging things is a real danger for all concerned. Those people of the Dying Arts and the Jewish diaspora are like criminals hell bent on suicide and sacrifice, to name a few. With their penchant toward brain degenerating ways, we are headed toward a nuclear war and economic collapse the world over unlike anything before. What is the use? Already the evil empire of the JUBU has perpetuated the destruction of the World Trade Center through thier Y2K bug fix pretention. Already the state of Louisiana has been horribly flooded because of yet another Jew baiting fetish gone wrong. Already the coronavirus has been unleashed to kill off more people. I see a trend in history by the Jewish diaspora to literally war with anyone for the sake of thier religious war. A religious war documented in religious books, life experiences, and television programming. It is like all over the place. Open and unmoderated communication for our people of Abraham hostaged by those of the evil empire of the JUBU is a good means toward liberating us from the ignorance which is not bliss. More will arrive to the body of Christ. Believe you me, those stinken Jews have to be defeated. Already, the Europeans, Russians, Chinese, and now the Arabians have politically made it known that Jews are unwanted in their realm. I as a Deshi or ethnic of the Indian subcontinent do the same. I tell ya, travelling to my homeland of the Indian subcontinent or Aryavarta was a real shocking reality to see so many of my people in abject life conditions due to the Hindu pride and prejudice maintained for over 5,000 years and then some. Those gypsy niggers or even to say the negroid race are the very reason why Deshi civilization could never come up and was the repulsion of the masses. Now with this wonderful capitalism, we can see a world where anyone and everyone is able to use such weapons to ward off the evil ones. Nothing worse than trying to find enlightenment in the wrong way through a one way ticket to the foothills of the Himalayas after following some Satanic master of the Zen empire of Taiwan. Ignorance is not bliss and ignorance of Jesus Christ is like the worst. God bless and God speed for Jesus Christ is God. Always a pleasure. Nothing worse than being on a park bench drinking liquor going through an existential doubt in a land of "One nation under God". Believe it. Sincerely, Satya P. Popuri (Satyababu) Signature: "The nature of the good is to overcome and defeat the bad." - divine voice ----------------------------------------------------------------------------- compubbs.sh - file below between horizontal rule ----------------------------------------------------------------------------- #!/bin/bash # Ensure we are running under bash if [ "$BASH_SOURCE" = "" ]; then /bin/bash "$0" exit 0 fi # # Load bash-menu script # # NOTE: Ensure this is done before using # or overriding menu functions/variables. # . "bash-menu.sh" ################################ ## Example Menu Actions ## ## They should return 1 to indicate that the menu ## should continue, or return 0 to signify the menu ## should exit. ################################ actionA() { alpine return 1 } actionB() { tin -g news.giganews.com return 1 } actionC() { irssi return 1 } actionD() { lynx return 1 } actionE() { gopher return 1 } actionF() { nslookup return 1 } actionG() { telnet return 1 } actionH() { tailer return 1 } actionI() { sendpage return 1 } actionJ() { calcurse return 1 } actionK() { ecn return 1 } actionL() { bible return 1 } actionM() { tutor return 1 } actionN() { tia return 1 } actionO() { nano return 1 } actionP() { bash return 1 } actionX() { return 0 } ################################ ## Setup Example Menu ################################ ## Menu Item Text ## ## It makes sense to have "Exit" as the last item, ## as pressing Esc will jump to last item (and ## pressing Esc while on last item will perform the ## associated action). ## ## NOTE: If these are not all the same width ## the menu highlight will look wonky menuItems=( "0. Alpine ----------------------- email client" "1. Tin -------------------------- usenet reader" "2. Irssi ------------------------ irc network" "3. Lynx ------------------------- url browser" "4. Gopher ----------------------- ftp protocol" "5. Nslookup --------------------- directory service" "6. Telnet ----------------------- remote login" "7. Tailer ----------------------- monitoring tool" "8. Sendpage --------------------- beeper server" "9. Calcurse --------------------- calendar app" "A. ECN -------------------------- daytrading game" "B. Bible ------------------------ the deprogram" "C. Tutor ------------------------ unix tutorial" "D. T.I.A. ----------------------- programming IDE" "E. Nano ------------------------- text editor" "F. Bash ------------------------- command prompt" "$. Exit ------------------------- [god] speed...✝" ) ## Menu Item Actions menuActions=( actionA actionB actionC actionD actionE actionF actionG actionH actionI actionJ actionK actionL actionM actionN actionO actionP actionX ) ## Override some menu defaults menuTitle=" CompuBBS - The nature of the good is to overcome and defeat the bad..." menuFooter=" Enter=Select, Navigate via Up/Down/First number/letter - [Prayer works!]" menuWidth=74 menuLeft=13 menuHighlight=$DRAW_COL_WHITE ################################ ## Run Menu ################################ menuInit menuLoop exit 0 ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- bash-menu.sh - file below between horizontal rule ----------------------------------------------------------------------------- #!/bin/bash # # Public Functions # # menuInit() menuLoop() # # # Public Variables to Override # # Should these get passed into menuInit() rather than be set as global # script variables? # # menuTop # Top row of menu (defaults to row 2) # menuLeft # Left offset for menu item text (defaults to column 15) # menuWidth # Width of menu (defaults to 42 columns) # menuMargin # Left offset for menu border (defaults to column 4) # # menuColour # Colour of menu text (defaults to DRAW_COL_WHITE) # menuHighlight # Highlight colour for menu (defaults to # DRAW_COL_GREEN) # # menuTitle # Title of menu menuFooter # Footer text of menu # # menuItems # Array containing menu item text # menuActions # Array # containing functions to call upon menu item selection # # Ensure we are running under bash (will not work under sh or dash etc) if [ "$BASH_SOURCE" = "" ]; then echo "ERROR: bash-menu requires to be running under bash" exit 1 fi # Get script root (as we are sourced from another script, $0 will not be # us) declare -r menuScript=$(readlink -f ${BASH_SOURCE[0]}) menuRoot=$(dirname "$menuScript") # Ensure we can access our dependencies if [ ! -s "$menuRoot/bash-draw.sh" ]; then echo "ERROR: Missing required draw.sh script" exit 1 fi # Load terminal drawing functions . "$menuRoot/bash-draw.sh" ################################ # Private Variables # # These should not be overridden ################################ declare -a menuItems declare -a menuActions menuHeaderText="" menuFooterText="" menuBorderText="" ################################ # Setup Menu # # These are defaults which should be overridden as required. ################################ # Top of menu (row 2) menuTop=2 # Left offset for menu items (not border) menuLeft=15 # Width of menu menuWidth=42 # Left offset for menu border (not menu items) menuMargin=4 menuItems[0]="Exit" menuActions[0]="return 0" menuItemCount=1 menuLastItem=0 menuColour=$DRAW_COL_WHITE menuHighlight=$DRAW_COL_GREEN menuTitle=" Super Bash Menu System" menuFooter=" Enter=Select, Up/Down=Prev/Next Option" ################################ # Initialise Menu ################################ menuInit() { menuItemCount=${#menuItems[@]} menuLastItem=$((menuItemCount-1)) # Ensure header and footer are padded appropriately menuHeaderText=`printf "%-${menuWidth}s" "$menuTitle"` menuFooterText=`printf "%-${menuWidth}s" "$menuFooter"` # Menu (side) borders local marginSpaces=$((menuMargin-1)) local menuSpaces=$((menuWidth-2)) local leftGap=`printf "%${marginSpaces}s" ""` local midGap=`printf "%${menuSpaces}s" ""` menuBorderText="${leftGap}x${midGap}x" } ################################ # Show Menu ################################ menu_Display() { local menuSize=$((menuItemCount+2)) local menuEnd=$((menuSize+menuTop+1)) drawClear drawColour $menuColour $menuHighlight # Menu header drawHighlightAt $menuTop $menuMargin "$menuHeaderText" 1 # Menu (side) borders for row in $(seq 1 $menuSize); do drawSpecial "$menuBorderText" 1 done # Menu footer drawHighlightAt $menuEnd $menuMargin "$menuFooterText" 1 # Menu items for item in $(seq 0 $menuLastItem); do menu_ClearItem $item done } ################################ # Mark Menu Items ################################ # Ensure menu item is not highlighted menu_ClearItem() { local item=$1 local top=$((menuTop+item+2)) local menuText=${menuItems[$item]} drawPlainAt $top $menuLeft "$menuText" } # Highlight menu item menu_HighlightItem() { local item=$1 local top=$((menuTop+item+2)) local menuText=${menuItems[$item]} drawHighlightAt $top $menuLeft "$menuText" } ################################ # Wait for and process user input ################################ menu_HandleInput() { local choice=$1 local after=$((choice+1)) [[ $after -gt $menuLastItem ]] && after=0 local before=$((choice-1)) [[ $before -lt 0 ]] && before=$menuLastItem # Clear highlight from prev/next menu items menu_ClearItem $before menu_ClearItem $after # Highlight current menu item menu_HighlightItem $choice # Get keyboard input local key="" local extra="" read -s -n1 key 2> /dev/null >&2 while read -s -n1 -t .05 extra 2> /dev/null >&2 ; do key="$key$extra" done # Handle known keys local escKey=`echo -en "\033"` local upKey=`echo -en "\033[A"` local downKey=`echo -en "\033[B"` if [[ $key = $upKey ]]; then return $before elif [[ $key = $downKey ]]; then return $after elif [[ $key = $escKey ]]; then if [[ $choice -eq $menuLastItem ]]; then # Pressing Esc while on last menu item will trigger action # This is a helper as we assume the last menu option is exit key="" else # Jumping possibly more than 1 (next/prev) item menu_ClearItem $choice return $menuLastItem fi elif [[ ${#key} -eq 1 ]]; then # See if we wanrt to jump to a menu item by entering the first # character for index in $(seq 0 $menuLastItem) ; do local item=${menuItems[$index]} local startChar=${item:0:1} if [[ "$key" = "$startChar" ]]; then # Jumping possibly more than 1 (next/prev) item menu_ClearItem $choice return $index fi done fi if [[ "$key" = "" ]]; then # Notify that Enter key was pressed return 255 fi return $choice } ################################ # Main Menu Loop ################################ menuLoop() { local choice=0 local running=1 menu_Display while [[ $running -eq 1 ]]; do # Enable case insensitive matching local caseMatch=`shopt -p nocasematch` shopt -s nocasematch menu_HandleInput $choice local newChoice=$? # Revert to previous case matching $caseMatch if [[ $newChoice -eq 255 ]]; then # Enter pressed - run menu action drawClear action=${menuActions[$choice]} $action running=$? # Back from action If we are still running, redraw menu [[ $running -eq 1 ]] && menu_Display elif [[ $newChoice -lt $menuItemCount ]]; then # Update selected menu item choice=$newChoice fi done # Cleanup screen drawClear } ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- bash-draw.sh - file below between horizontal rule ----------------------------------------------------------------------------- #!/bin/bash # # Public Functions: # # drawClear() drawColour(colour = DRAW_COL_DEF, bgColour = # DRAW_COL_DEF) # # drawPlain(text, newLine = 0) drawSpecial(text, newLine = 0) # drawHighlight(text, newLine = 0) drawPlainAt(left, top, text, # newLine = 0) drawHighlightAt(left, top, text, newLine = 0) # # # Colours # # DRAW_COL_DEF # Default colour DRAW_COL_BLACK DRAW_COL_WHITE # DRAW_COL_RED DRAW_COL_GREEN DRAW_COL_YELLOW DRAW_COL_BLUE # DRAW_COL_GRAY # Light gray (grey?) # # Ensure we are running under bash (will not work under sh or dash etc) if [ "$BASH_SOURCE" = "" ]; then echo "ERROR: bash-draw requires to be running under bash" exit 1 fi DRAW_COL_DEF=39 DRAW_COL_BLACK=30 DRAW_COL_WHITE=97 DRAW_COL_RED=31 DRAW_COL_GREEN=32 DRAW_COL_YELLOW=33 DRAW_COL_BLUE=34 DRAW_COL_GRAY=37 # drawClear() drawClear() { $ESC_WRITE "\033c" } # drawColour(colour = DRAW_COL_DEF, bgColour = DRAW_COL_DEF) drawColour() { local colour=$DRAW_COL_DEF local bgColour=$((DRAW_COL_DEF+10)) if [[ ! -z "$1" && "$1" != "" ]]; then colour="$1" fi if [[ ! -z "$2" && "$2" != "" ]]; then bgColour="$2" fi $ESC_ECHO "\033c\033[H\033[J\033[${colour};${bgColour}m\033[J" } # drawPlain(text, newLine = 0) drawPlain() { if [[ -z "$2" || "$2" -eq 0 ]]; then $ESC_WRITE "$1" else $ESC_ECHO "$1" fi } # drawSpecial(text, newLine = 0) drawSpecial() { [[ -z "$2" ]] && newLine=0 || newLine="$2" draw_SetDrawMode drawPlain "$1" "$newLine" draw_SetWriteMode } # drawHighlight(text, newLine = 0) drawHighlight() { [[ -z "$2" ]] && newLine=0 || newLine="$2" draw_StartHighlight drawPlain "$1" "$newLine" draw_EndHighlight } # drawPlainAt(left, top, text, newLine = 0) drawPlainAt() { [[ -z "$4" ]] && newLine=0 || newLine="$4" draw_MoveTo $1 $2 drawPlain "$3" "$newLine" } # drawHighlightAt(left, top, text, newLine = 0) drawHighlightAt() { [[ -z "$4" ]] && newLine=0 || newLine="$4" draw_StartHighlight drawPlainAt "$1" "$2" "$3" "$newLine" draw_EndHighlight } # Write escape sequence with no newline ESC_WRITE='echo -en' # Write escape sequence adding newline ESC_ECHO='echo -e' # Move cursor to specified location draw_MoveTo() { $ESC_WRITE "\033[${1};${2}H" } draw_StartHighlight() { $ESC_WRITE "\033[7m" } draw_EndHighlight() { $ESC_WRITE "\033[27m" } draw_SetDrawMode() { $ESC_WRITE "\033%@\033(0" } draw_SetWriteMode() { $ESC_WRITE "\033(B" } ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- CompuBBS - ECN code ----------------------------------------------------------------------------- Please find below the CompuBBS ECN code originally developed by Josh Greene. It is something a former friend of mine once told me about as he worked at Daytek during the dawn of the internet. At the time I was to oblivous to the fact that money is the very means by which our lives revolve around. As they say, "when men and women get together [money] gets in the way". The Josh Greene's ECN day trading code is intended as a game for now until it becomes more viable for the purposes of the Cybermatrix. The below ECN day trading code is in Python. So check it out. Try to make it into a game at first so that you and your network can learn how to play it before proceeding. I heard when it comes to the stock market one can literally loose their shirt on this. So beware. Ignorance is not bliss. The intention for this code is toward the establishment of the cybermatrix or to say the opern source fiat like monies initiative for the sake of synergy or mutual success. The meaning of cybermartix is virtual as in cyber and a database of the nth dimension as in matrix. So the cybermatrix is a network of databases of a given dimension(matricees) with a larger databases of the nth dimension(matrix). So, let's do this. God bless and God speed for Jesus Christ is God. Always a pleasure. Good luck to you all. I want you to win. Allahu Akhbar! ----------------------------------------------------------------------------- Josh Greene's Island ECN day trading code in Python between horizontal rule ----------------------------------------------------------------------------- SET TALK OFF SET CURSOR OFF SET SAFETY OFF SET MEMOWIDTH TO 80 CLEAR ALL CLOSE ALL CLEAR CLEAR MACRO && Get rid of F keys typing commands SET HELP OFF && Needed to clear out F1 key too =rand(-1) #define COREDEST "FFFFFFFF0673" gstoredflag = .F. && Are there any messages buffered that could be flushed? #define VERSION "2.40" malertfile = "M:\logs\island2.err" mholdofffile = "M:\island2\holdoff.txt" blanknbuffer="R"+replicate( " " , 200 ) && get BRIGADEN message here #define CORELINELEN 124 define COREMESSAGELEN 122 #define READPORT "067F" load int99 define window title from 0,0 to 0,scols()-1 COLOR "W/B" NONE define window output from 1,0 to 10,scols()-1 NONE COLOR "W+/N" define window ticker from 12,0 to srows()-1,scols()-1 NONE define window status from 11,0 to 11,scols()-1 COLOR "W+/R" NONE do title do initstatus activate window title activate window status activate window output activate window ticker s = fopen( "ISLAND2.TXT" ) if s <= 0 wait window "COULD NOT FIND ISLAND2.TXT IN CURRENT DIR. RUN RESET." quit endif x = fgets( s ) if "ISLAND2" # x wait window "ACCOUNT IN ISLAND2.TXT DOES NOT MATCH ACCOUNT ENV VAR. RUN RESET." =fclose( s ) quit endif tcount = 0 && For counting random stuff tseq = val( fgets( s ) ) && Next order number tmatch = val( fgets( s ) ) && Next match number tnextdead = val( fgets( s ) ) && Next dead order (zero=none) =fclose( s ) select select(1) use events set order to WHEN tnow = 0 ttoolate = 0 && Count the too late to cancel events gaccept = .F. && Let any orders in? Set by SOD, cleared by EOD gactaccept = .F. && Let ACT orders in? Set by SOD, cleared by EOA geom = .F. && Have we gotten EOM yet? gprinting = .F. && Print incoming messages? go top if eof("EVENTS") tnext = 99999.999 else tnext = WHEN && Time of next event endif select 0 use sources set order to SOURCE select select(1) use island gsx = alltrim( str( date() - {2/6/1996} ) ) gsession = left( "0000000000" , 9-len( gsx ) ) + gsx + "F" s="N"+gsession+"5050" && Open the islandfile for writing Mold on port 5050 call int99 with s if s # "n" && Valid open file? do alert with "InitMold filed with reason >"+s do case case s = "i" sm ="Error opening files in deney-write mode" case s = "j" sm = "a file had a partial line fragment" case s = "k" sm = "not all trailing files are empty" case s = "l" sm = "all files full" otherwise sm = "Unknown error" endcase do alert with sm wait window "Error on ISLAND.OUT or ISLAND2.OUT OPEN:"+s quit endif select island tecount = 0 && Assume worst case, just to make sure ecount is high enough txcount = 0 && Cancels x = "L"+READPORT+" " && Read Island2 requests call int99 with x if x # "l" do alert with "Could not open Command listen!" endif gstatdelay = 0.25 do showstatus gnextstats = seconds() + gstatdelay gmolddelay = 1 && Time between mold heartbeats gmoldheart = seconds() + gmolddelay && Time to send a MOLD heartbeat by doing a FLUSH gmessages = 0 && Number of messages written to the stream gpackets = 0 && Number of packets writtento the stream mdone = .F. do while !mdone tnow = seconds() do while tnow >= tnext if !EVENTS.PROCESSED do swrite with "G" , EVENTS.CODE select EVENTS replace PROCESSED with .T. select ISLAND else ? time()+" Event bypassed:"+ EVENTS.CODE endif do seteventflags with EVENTS.CODE skip 1 in EVENTS if eof("EVENTS") tnext = 99999.999 else tnext = EVENTS.WHEN endif enddo nbuffer = blanknbuffer call int99 with nbuffer if nbuffer = "r" tlenstr = substr( nbuffer , 2 , 5 ) tlen = val( tlenstr ) tmessage = substr( nbuffer , 43 , tlen ) if gprinting ? time()+" >"+tmessage+"<" endif if tmessage = "P" && PING REQUEST tsource = substr( nbuffer ,11 , 8) do pingreply with tsource , tmessage else do processtcpip with tmessage endif else && No pending commands... if gstoredflag do flush gstoredflag = .F. gmoldheart = seconds() + gmolddelay gpackets = gpackets + 1 else if gmoldheart < seconds() do flush gmoldheart = seconds() + gmolddelay endif endif endif if gnextstats <= seconds() do showstatus gnextstats = seconds() + gstatdelay endif lastkey=inkey() if lastkey # 0 activate window output do case case lastkey = asc("~") ? time()+" Quitting..." mdone = .T. case lastkey = asc("@") ? time()+" Copying to island2.dbf" set order to copy to m:\island2\island2 ?? "Done" case lastkey = asc("#") ? time()+" Suspending..." suspend case lastkey = asc("!") ? time()+" ACCEPT="+iif(gaccept,"T","F")+" ACT="+ iif(gactaccept,"T","F") + " EOM="+iif(geom,"T","F")+" NEXT="+str(tnext,9,3)+ " TOO-LATE="+str(ttoolate,6,0)+" COUNT="+str(tcount,9,0) s = "T"+space(60) call int99 with s if s = "t" tbuffered = val( substr(s,26,5) ) ? "MOLD INFO: SESSION="+substr(s,2,10)+" SEQ="+substr(s,12,10)+" SOCKET="+substr(s,22,4)+" BUFFERED="+str(tbuffered,5,0) else ? "Could not get mold info!" tbuffered = 0 endif if gpackets > 0 ? "MESSAGES:"+str(gmessages-tbuffered, 12,0)+" PACKETS:"+str(gpackets,12,0)+" ("+str( (gmessages-tbuffered)/ gpackets , 5 , 3 )+")" gmessages = tbuffered gpackets =0 endif case lastkey = asc("%") ? time()+" Shutdown attempt..." do shutdown case lastkey = asc("(") ? time()+" toggled gaccept" gaccept = !gaccept case lastkey = asc("?") ? "@-Copy to island2.DBF ~-Quit !-Status #-Suspend %-ShutDown $-Print incoming" case lastkey = asc("$") if gprinting ? time()+" Printing off" gprinting = .F. else ? time()+" Printing on" gprinting = .T. endif endcase activate window ticker endif enddo && Main Loop activate window output && Final flush to mak sure everything is sent do flush && Close file s = "C" call int99 with s x = "H"+READPORT call int99 with x if x # "h" do alert with "Could not close PingPort!" endif use && Unuse Island && Create fresh waypoint file f = fcreate("ISLAND2.TXT") if f<=0 ? "Could not create ISLAND.TXT!" suspend endif =fputs( f , "ISLAND2" ) && ROLE =fputs( f , str( tseq , 9 , 0 ) ) && Order number =fputs( f , str( tmatch , 9 , 0 ) ) && Match number =fputs( f , str( tnextdead , 9 , 0 ) ) && Next dead order pointer =fclose(f) quit procedure title activate window title SAME clear @ 0,0 SAY " Island2 ú Version "+VERSION+" (c)1996 Joshua Levine ú Press [?] for help" activate window ticker SAME return proc werror param wcode do case case wcode = "w" return "Error on file write" case wcode = "s" return "Error on nework send" case wcode = "c" return "Invalid message length" case wcode = "d" return "all files full" endcase return "Unknown error" **** write actualy writes a string the the file, steam, and screen proc write parameter wstring wl = len( wstring ) ws="W"+chr(wl)+wstring call int99 with ws gmessages = gmessages + 1 if ws = 'b' gstoredflag = .T. else if ws = "f" gpackets = gpackets + 1 gstoredflag = .F. else activate window output ? time() +" !!!! ERROR ON WRITE!!!!!!" ? ws do alert with "Erorr on write:"+werror(ws) activate window ticker suspend endif endif return *** Write a message **** ACTIONS: **** A - Accept the order was accepted into Island **** B - Booked this order hit the book **** E - Execute the order was executed for this many shares at this price **** X - Cancel this many shares were canceled **** C - Break this order was executed, now broken **** G - Control stock is the control type **** R - Report trade done away but will report/clear through Island **** ON Cancel CONTRA = Reason for cancel ***** MINDICATE = on accept always "D" (legacy) ***** on execute "A"= added liquidity, "R"=Removed liquidity ***** on report "Y" trade report, "N" don't report, "S" step-out ****** mmatch = on accept or book is MINIMUM shares, in execution is match number ****** not defined on cancels, but 0 for now proc mwrite parameter maction,mseq,mshares,mprice,mcontra,mindicate,mmatch,mlocate mwhen = str( tnow , 9 , 3) w = left( mwhen , 5 ) + "," +maction+","+str(mseq,9,0)+","+PORT+","+USER+","+TOKEN+","+BUY_SELL+"," +str(mshares,9,0)+","+str(mmatch,9,0)+","+STOCK+","+str(mprice,11,4)+"," +str(mlocate,8,0)+ ", 0,"+SHORT+","+MMID+","+PA+","+mcontra+","+mindicate+","+DISPLAY+"," +right(mwhen,3)+","+CLEARING+",D" do write with w return ****** Swrite writes a status message that doesnot concern an order, Like G-Good morning proc swrite param maction , mcode mwhen = str( tnow , 9 , 3) xcode = left( padr( mcode , 3) , 3 ) w = left( mwhen , 5 ) +","+maction+","+" 0"+", , , , , 0, 0,*"+xcode+" , 0.0000,00000000, 0, , , , , , ,"+right( mwhen , 3 )+", , " do write with w return ****** Enter order adds the audit, tries for a match, and if it don't work, books it. ****** Enter order assumes ostock and obuy_sell are the right length. ****** Also assumes that buy_sell has aready been checked to be B or S. ****** Also assumes that the token is no already used proc enter2order parameter oport,ouser,otoken,obuy_sell,oshares,ostock,oprice,otif,oshort,ommid, opa,odisplay,omin,oclearing,oflags if odisplay = "P" obasefirm = ouser else obasefirm = "####" endif && Get the working record if tnextdead > 0 tlocate = tnextdead goto tnextdead tnextdead = SEQ else insert into ISLAND (LEAVES) values (0) && Keep it out of the indexes for now tlocate = recno() endif tseq = tseq + 1 awhen = str( tnow , 9 , 3) oleaves = oshares ofilled = 0 aflag = .f. && have we written the "A" message yet? if obuy_sell = "B" && Buy order... set order to SSEEK do case case omin > 1 && Minimum quantity specified? *** if the min is bigger than the size, set it to the size if omin > oshares mmin = oshares else mmin = omin endif *** First prescan to see if we have enough size to fill it if seek( ostock ) scan while mmin > 0 .and. ostock = STOCK .and. BUY_SELL = "S" .and. oprice >= PRICE mmin = mmin - LEAVES endscan endif if mmin <= 0 *** There were at least enough to fill the minimum quantity mmax = oshares else *** Not enough to fill the min, so fill none mmax = 0 endif case odisplay = "R" .or. odisplay = "P" && Is this a round-lot only order? mmax = 0 *** Prescan to find the number of a shares available if seek( ostock ) scan while mmax <= oshares .and. ostock = STOCK .and. BUY_SELL = "S" .and. oprice >= PRICE .and. obasefirm # MMID mmax = mmax + LEAVES endscan endif if mmax >= oshares *** Max out with the number of shares specified mmax = oshares endif *** Round down to nearest round lot wihtout using floating point mmax = val( substr( str( mmax , 6, 0 ) , 1 ,4 ) + "00" ) otherwise mmax = oshares endcase do while mmax > 0 .and. seek( ostock ) .and. oprice >= PRICE if !aflag w = left( awhen , 5 ) +",A," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(oshares,6,0) +", " +str(omin,6,0) +"," +ostock +"," +str(oprice,11,4) +"," +str(tlocate,8,0) +"," +str(otif,5,0) +"," +oshort +"," +ommid +"," +opa+","+oflags+", ," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" do write with w aflag = .T. endif tecount = tecount + 1 eshares = min( LEAVES , mmax ) oleaves = oleaves - eshares mmax = mmax - eshares ofilled = ofilled + eshares tmatch = tmatch + 1 w = left( awhen , 5 ) +",E," +str( SEQ ,9,0) +"," +PORT +"," +USER +"," +TOKEN +"," +BUY_SELL +", " +str(eshares,6,0) +"," +str(tmatch,9,0) +"," +ostock +"," +str(PRICE,11,4) +"," +str( recno() ,8,0)+ ", 0," +SHORT +"," +MMID +"," +PA+"," +ommid+",A," +DISPLAY +"," +right(awhen,3) +"," +CLEARING+",D" do write with w w = left( awhen , 5 ) +",E," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(eshares,6,0) +"," +str(tmatch,9,0) +"," +ostock +"," +str(PRICE,11,4) +"," +str(tlocate,8,0)+", 0," +oshort +"," +ommid +"," +opa+","+MMID+",R," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" do write with w dleaves = LEAVES - eshares if dleaves <= 0 && Dead record? replace LEAVES with 0 , SEQ with tnextdead tnextdead = recno() else replace LEAVES with dleaves , FILLED with FILLED + eshares endif enddo else && sell order.. set order to BSEEK do case case omin > 1 && Minimum quantity specified? *** if the min is bigger than the size, set it to the size if omin > oshares mmin = oshares else mmin = omin endif *** First prescan to see if we have enough size to fill it if seek( ostock ) scan while mmin > 0 .and. ostock = STOCK .and. BUY_SELL = "B" .and. oprice <= PRICE mmin = mmin - LEAVES endscan endif if mmin <= 0 mmax = oshares else mmax = 0 endif case odisplay = "R" .or. odisplay = "P" && Is this a round-lot only order? mmax = 0 *** Prescan to find the number of a shares available if seek( ostock ) scan while mmax <= oshares .and. ostock = STOCK .and. BUY_SELL = "B" .and. oprice <= PRICE .and. obasefirm # MMID mmax = mmax + LEAVES endscan endif if mmax >= oshares mmax = oshares endif *** Round down to nearest round lot wihtout using floating point mmax = val( substr( str( mmax , 6, 0 ) , 1 ,4 ) + "00" ) otherwise mmax = oshares endcase do while mmax > 0 .and. seek( ostock ) .and. oprice <= PRICE if !aflag w = left( awhen , 5 ) +",A," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(oshares,6,0) +", " +str(omin,6,0) +"," +ostock +"," +str(oprice,11,4) +"," +str(tlocate,8,0) +","+str(otif,5,0) +"," +oshort +"," +ommid +"," +opa+","+oflags+", ," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" do write with w aflag = .T. endif tecount = tecount + 1 eshares = min( LEAVES , mmax ) oleaves = oleaves - eshares mmax = mmax - eshares ofilled = ofilled + eshares tmatch = tmatch + 1 w = left( awhen , 5 ) +",E," +str( SEQ ,9,0) +"," +PORT +"," +USER +"," +TOKEN +"," +BUY_SELL +", " +str(eshares,6,0) +"," +str(tmatch,9,0) +"," +ostock +"," +str(PRICE,11,4) +"," +str( recno() ,8,0) +", 0," +SHORT +"," +MMID +"," +PA+"," +ommid+",A," +DISPLAY +"," +right(awhen,3) +"," +CLEARING+",D" do write with w w = left( awhen , 5 ) +",E," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(eshares,6,0) +"," +str(tmatch,9,0) +"," +ostock +"," +str(PRICE,11,4) +"," +str(tlocate,8,0) +", 0," +oshort +"," +ommid +"," +opa+","+MMID+",R," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" do write with w dleaves = LEAVES - eshares if dleaves <= 0 && Dead record? replace LEAVES with 0 , SEQ with tnextdead tnextdead = recno() else replace LEAVES with dleaves , FILLED with FILLED + eshares endif enddo endif if oleaves > 0 && any non-executed shares left? if otif = 0 && Fill or kill, so cancel leaves if !aflag && did we not make an A message yet? w = left( awhen , 5 ) +",A," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(oshares,6,0) +", " +str(omin,6,0) +"," +ostock +"," +str(oprice,11,4) +"," +str(tlocate,8,0)+ "," +str(otif,5,0) +"," +oshort +"," +ommid +"," +opa+","+oflags+", ," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" do write with w endif w = left( awhen , 5 ) +",X," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(oleaves,6,0) +", 0," +ostock +"," +str(oprice,11,4) +"," +str(tlocate,8,0)+ ", 0," +oshort +"," +ommid +"," +opa+",#IOC, ," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" do write with w oleaves = 0 else if !aflag && did we not make an A message yet? w = left( awhen , 5 ) +",A," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(oshares,6,0) +", " +str(omin,6,0) +"," +ostock +"," +str(oprice,11,4) +"," +str(tlocate,8,0) +"," +str(otif,5,0) +"," +oshort +"," +ommid +"," +opa+","+oflags+",B," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" else w = left( awhen , 5 ) +",B," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken +"," +obuy_sell +", " +str(oleaves,6,0) +", 0," +ostock +"," +str(oprice,11,4) +"," +str(tlocate,8,0) +"," +str(otif,5,0) +"," +oshort +"," +ommid +"," +opa+", , ," +odisplay +"," +right(awhen,3) +"," +oclearing+",D" endif do write with w endif && otif == 0 endif && oleaves > 0 if oleaves > 0 && Still open? goto tlocate replace ; PORT with oport,; USER with ouser,; TOKEN with otoken,; BUY_SELL with obuy_sell,; LEAVES with oleaves,; STOCK with ostock,; PRICE with oprice,; SHORT with oshort,; MMID with ommid,; PA with opa,; DISPLAY with odisplay,; CLEARING with oclearing,; FILLED with ofilled,; SEQ with tseq else && leaves = 0 (add current order to deadlist) goto tlocate replace SEQ with tnextdead tnextdead = recno() endif && oleaves > 0 return ****** Enter Report adds a type R line to the file ****** Enter order assumes ostock and obuy_sell are the right length. proc enter2report parameter oport,ouser,otoken,obuy_sell,oshares,ostock,oprice,oshort,ommid,opa,oreport,oclearing,ocontra tseq = tseq + 1 tmatch = tmatch + 1 mwhen = str( tnow , 9 , 3) w = left( mwhen , 5 ) + ",R,"+str(tseq,9,0) +"," +oPORT+"," +oUSER+"," +oTOKEN+"," +oBUY_SELL +", "+str(oshares,6,0)+","+str(tmatch,9,0)+"," +oSTOCK+","+str(oprice,11,4)+",00000000, 0,"+oSHORT+","+oMMID+","+oPA+","+ocontra+","+oreport+",R,"+right(mwhen, 3)+","+oCLEARING+",D" do write with w return ****** Enter Reject adds a type J line to the file proc enter2reject parameter oport,ouser,otoken,otype,oreason tseq = tseq + 1 *** Leaves MUST be 0 or it might be included in the match! mwhen = str( tnow , 9 , 3) w = left( mwhen , 5 ) + ",J," +str(tseq,9,0) +"," +oport+"," +ouser +"," +otoken+"," +otype+", 0, 0, , 0.0000,00000000, 0, , , , ," +oreason +",N,"+right(mwhen,3)+", ,D" do write with w return ****** Enter break adds a type C line to the file proc enterbreak parameter oseq, oport , ouser, otoken, obuy_sell, oshares, omatch, ostock, oprice, ommid, oreason, omisc, oclearing , oshort if oseq > tseq .or. oseq < 1 ? time()+" Bad SEQ in Break! OSEQ="+str(oseq,9,0)+" RECS="+str( tseq, 9,0) return endif if oshares <= 0 ? time()+" Jerk boy BREAK zero shares SEQ="+str(oseq,9,0) return endif if oprice <= 0 ? time()+" Jerk boy BREAK zero price SEQ="+str(oseq,9,0) return endif if ! omisc $ "AR" ? time()+" Invalid A/R BREAK MISC="+omisc+" SEQ="+str(oseq,9,0) return endif mwhen = str( tnow , 9 , 3) w = left( mwhen , 5 ) + ",C,"+str(oseq,9,0) +"," +oPORT+"," +oUSER+"," +oTOKEN+"," +oBUY_SELL +", "+str(oshares,6,0)+","+str(omatch,9,0)+"," +oSTOCK+","+str(oprice,11,4)+",00000000, 0,"+oshort+","+oMMID+", ,"+oreason +","+omisc+", ,"+right(mwhen,3)+","+oCLEARING+",D" do write with w return ****** Enter maint adds a type M line to the file *** SHORTTYPE ***** N - No short sale checks ***** B - Bidtick test ***** L - Lasttrade test *** BLOCKSUB - Block subscriber only orders? ***** B - Block ***** N - No block *** CENTER ***** Q - NASDAQ ***** L - LISTED proc entermaint parameter oport,ouser,otoken,ostock,oshorttype,oblocksub,ocenter,omisc if ! oshorttype $ "NBL" ? time()+" Bad SHORTTYPE="+oshorttype+" STOCK="+ostock return endif if !oblocksub $ "BN" ? time()+" Bad BLOCKSUB="+oblocksub+" STOCK="+ostock return endif if !ocenter $ "QL" ? time()+" Bad CENTER="+ocenter+" STOCK="+ostock return endif if len( omisc ) # 4 ? time()+" Bad omisc len!"+omisc return endif for eml = 1 to 4 emb = substr( omisc , eml , 1 ) if !isalpha( emb ) .and. emb # " " ? time()+" Bad omisc letter!"+omisc return endif endfor awhen = str( tnow , 9 , 3 ) w = left( awhen , 5 ) +",M, 0,"+oport+","+ouser+","+otoken+",S, 0, 0," +ostock +", 0.0000,00000000, 0,"+oshorttype+", , ,"+omisc+","+ocenter+","+oblocksub+"," +right(awhen,3) +", , " do write with w return *** STATE - Trading state ***** T - Trading ***** H - Halted proc enterstate parameter oport,ouser,otoken,ostock,ostate if !ostate $ "TH" ? time()+" Bad STATE="+ostate+" STOCK="+ostock return endif awhen = str( tnow , 9 , 3 ) w = left( awhen , 5 ) +",M, 0,"+oport+","+ouser+","+otoken+",T, 0, 0," +ostock +", 0.0000,00000000, 0, , , , ,"+ostate+", ," +right(awhen,3) +", , " do write with w return *** Enter account configures an OUCH account proc enteraccount parameter oaccount,opassword,otest,otrusted, othresh, osscheck,oiflag, odefault if !otest$"TN" ? time()+" Bad TEST flag in enteraccount:"+otest return endif if !otrusted$"TN" ? time()+" Bad TRUSTED flag in enteraccount:"+otrusted return endif if !osscheck$"YN" ? time()+" Bad SSCHECK flag in enteraccount:"+osscheck return endif if !oiflag$"IN" ? time()+" Bad IFLAG flag in enteraccount:"+oiflag return endif if len( opassword ) # 10 ? time()+" Bad opassword len!"+opassword return endif for eml = 1 to 10 emb = substr( opassword , eml , 1 ) if !isalpha( emb ) .and. !isdigit( emb) .and. emb # " " .and. emb # "!" .and. emb # "#" ? time()+" Bad opassword letter!"+opassword+":"+str(eml) return endif endfor if len( oaccount ) # 6 ? time()+" Bad oaccount len!"+oaccount return endif for eml = 1 to 6 emb = substr( oaccount , eml , 1 ) if !isalpha( emb ) .and. !isdigit( emb ) .and. emb # " " ? time()+" Bad oaccount letter!"+oaccount+":"+str(eml) return endif endfor if len( odefault ) # 4 ? time()+" Bad odefault len!"+odefault return endif for eml = 1 to 4 emb = substr( odefault , eml , 1 ) if !isalpha( emb ) .and. !isdigit( emb) .and. emb # " " ? time()+" Bad odefault letter!"+odefault +":"+str(eml) return endif endfor awhen = str( tnow , 9 , 3 ) w = left( awhen , 5 ) +",M, 0,"+oaccount+", ,"+opassword+",A,"+str(othresh,9,0)+", 0, , 0.0000,00000000, 0,"+osscheck+","+odefault +", ,"+otest+ " "+ otrusted +" ,"+oiflag+", ," +right(awhen,3) +", , " do write with w return *** Enter firm configures an OUCH account for clearing proc enterfirm parameter oaccount,ommid,oclearing if !oclearing$"AIQRN" ? time()+" Bad clearing in enterfirm:"+oclearing return endif if len( ommid ) # 4 ? time()+" Bad ommid len!"+ommid return endif for eml = 1 to 4 emb = substr( ommid , eml , 1 ) if !isalpha( emb ) .and. !isdigit( emb) .and. emb # " " ? time()+" Bad ommid letter!"+ommid+":"+str(eml) return endif endfor if len( oaccount ) # 6 ? time()+" Bad oaccount len!"+oaccount return endif for eml = 1 to 6 emb = substr( oaccount , eml , 1 ) if !isalpha( emb ) .and. !isdigit( emb ) .and. emb # " " ? time()+" Bad oaccount letter!"+oaccount+":"+str(eml) return endif endfor awhen = str( tnow , 9 , 3 ) w = left( awhen , 5 ) +",M, 0,"+oaccount+", , ,F, 0, 0, , 0.0000,00000000, 0, ,"+ ommid +", , , , ," +right(awhen,3) +","+oclearing+", " do write with w return proc new2cancel parameter olocate,oseq,oshares,ocontra && Contra indeicates reason for cancel if olocate <= 0 .or. olocate > reccount() ? time()+" CANCEL LOCATE OUT OF BOUNDS " +str( olocate , 8 , 0)+ " SEQ=" +str(oseq,8,0) return 0 endif goto olocate if oseq # SEQ *** ? time()+" CANCEL OUT OF DATE " +str( olocate , 8 , 0)+ " SEQ=" +str(oseq,8,0) ttoolate = ttoolate + 1 return 0 endif if LEAVES <= oshares ttoolate = ttoolate + 1 return endif xshares = LEAVES - oshares do mwrite with "X", SEQ , xshares , PRICE , ocontra , " " , 0 , recno() txcount = txcount + 1 dleaves = LEAVES - xshares if dleaves <=0 && Must set LEAVES to zero to pull order from indexes replace LEAVES with 0 , SEQ with tnextdead tnextdead = recno() else replace LEAVES with dleaves endif return ****** Cancel Order takes a locator and a SEQ number ****** passed shares in new intedned order size ****** returns number of shares canceled and leaves record pointer on order canceled. proc i2cancel parameter olocate,oseq,oshares,ocontra && Contra indeicates reason for cancel if olocate <= 0 .or. olocate > reccount() ? time()+" CANCEL LOCATE OUT OF BOUNDS " +str( olocate , 8 , 0)+ " SEQ=" +str(oseq,8,0) return 0 endif goto olocate if oseq # SEQ *** ? time()+" CANCEL OUT OF DATE " +str( olocate , 8 , 0)+ " SEQ=" +str(oseq,8,0) ttoolate = ttoolate + 1 return 0 endif msize = LEAVES + FILLED && Current size of order if oshares >= msize *** ? time()+" INTENEDED CANCEL BIGGER THAN ORDER SHARES="+str( oshares, 6 , 0 )+" REASON="+ocontra return 0 endif xshares = msize - oshares && HOwmany do we have to cancel to get from current size to new size? if xshares > LEAVES && Don't cancel more than are open xshares = LEAVES endif if xshares = 0 ttoolate = ttoolate + 1 return 0 endif do mwrite with "X", SEQ , xshares , PRICE , ocontra , " " , 0 , recno() txcount = txcount + 1 dleaves = LEAVES - xshares if dleaves <=0 && Must set LEAVES to zero to pull order from indexes replace LEAVES with 0 , SEQ with tnextdead tnextdead = recno() else replace LEAVES with dleaves endif return xshares proc initstatus activate window status @ 0,1 SAY "Orders:" @ 0,27 SAY "Executions:" @ 0,52 SAY "Cancels:" activate window ticker return proc showstatus activate window status @ 0,11 SAY tseq PICTURE "##,###,###" @ 0,38 SAY tmatch PICTURE "##,###,###" @ 0,60 SAY txcount PICTURE "##,###,###" activate window ticker return proc processtcpip param ptm tcommand = substr( ptm , 1 , 1 ) if geom ? time()+" Command recieved after EOM:"+tcommand return endif do case case tcommand = "H" tport = substr( ptm , 2 , 6 ) if !seek( tport , "SOURCES" ) insert into SOURCES values ( tport , 1 ) endif tinseq = val(substr( ptm , 73, 9 ) ) if tinseq # SOURCES.SEQ if tinseq < SOURCES.SEQ *** ? time()+" Duped inseq "+tport+" Expected:"+str( SOURCES.SEQ , 9, 0)+" Got:"+str( tinseq , 9 , 0 ) return endif do alert with "Gapped inseq "+tport+" Expected:"+str( SOURCES.SEQ , 9, 0)+" Got:"+str( tinseq , 9 , 0 ) endif tuser = substr( ptm , 8 , 4 ) ttoken = substr( ptm , 12 , 10 ) tbuy_sell = substr( ptm , 22 , 1 ) tshares = val( substr( ptm , 23 , 6 ) ) tmin = val( substr( ptm , 29 , 6 ) ) tstock = substr( ptm , 35 , 6 ) tprice = val( substr( ptm , 41 , 11 ) ) ttif = val( substr( ptm , 52 , 5 ) ) tdisplay = substr( ptm , 57 , 1 ) tshort = substr( ptm , 58 , 1 ) tpa = substr( ptm , 59 , 1 ) tmmid = substr( ptm , 60 , 4 ) tclearing = substr( ptm , 64 , 1 ) tflags = substr( ptm , 65 , 4 ) if tbuy_sell = "B" xshort = " " else if tbuy_sell # "S" ? time()+" Bad buy_sell "+tbuy_sell+" port="+tport return endif do case case tshort = "Y" xshort = "S" case tshort = "S" xshort = "S" case tshort = "N" xshort = "L" case tshort = "L" xshort = "L" case tshort = "E" xshort = "E" otherwise xshort = "?" endcase endif if tshares <= 0 ? time()+" Jerk boy zero shares TOKEN " +tport+"-" +tuser+"-" +ttoken return endif if tshares >= 1000000 ? time()+" Jerk boy million shares TOKEN " +tport+"-" +tuser+"-" +ttoken return endif if tprice <= 0 ? time()+" Jerk boy zero price TOKEN " +tport+"-" +tuser+"-" +ttoken return endif if tprice >= 1000000 ? time()+" Jerk boy million price TOKEN " +tport+"-" +tuser+"-" +ttoken return endif if ! tclearing $ "AIQOR" ? time()+" Jerk boy strange clearing >" +tclearing+"< TOKEN " +tport+"-" +tuser+"-" +ttoken return endif if ! tdisplay $ "YNLRP" ? time()+" Jerk boy strange display >" +tdisplay+"< TOKEN " +tport+"-" +tuser+"-" +ttoken return endif if (tdisplay = "R" .or. tdisplay = "P" ) .and. ttif > 0 ? time()+" Jerk boy R or P or Q display with nonzero tif >" +str(ttif,5,0)+"< TOKEN " +tport+"-"+tuser+"-"+ttoken return endif if !gaccept ? time()+" Trade ignored outside SOD-EOD time "+tport+"-" +tuser+"-" +ttoken return endif if tclearing = "A" if !gactaccept ? time()+" ACT trade ignored outside ACT time " +tport+"-" +tuser+"-" +ttoken return endif endif select SOURCES replace SEQ with tinseq + 1 select ISLAND do enter2order with tport , tuser , ttoken , tbuy_sell , tshares , tstock , tprice , ttif , xshort , tmmid , tpa , tdisplay , tmin , tclearing , tflags case tcommand = "L" tolocate = val( substr( ptm , 2 , 8 ) ) toseq = val( substr( ptm , 10 , 9 ) ) tshares = val( substr( ptm , 19 , 6 ) ) treason = substr( ptm , 25 , 1 ) do case case treason = "A" xreason = "#USR" case treason = "B" xreason = "#TME" case treason = "C" xreason = "#HLT" case treason = "D" xreason = "#SUP" case treason = "E" xreason = "#DNT" case treason = "F" xreason = "#MBL" otherwise xreason = "#USR" endcase do new2cancel with tolocate , toseq , tshares , xreason case tcommand = "I" tport = substr( ptm , 2 , 6 ) if !seek( tport , "SOURCES" ) insert into SOURCES values ( tport , 1 ) endif tinseq = val( substr( ptm , 24 , 9 ) ) if tinseq # SOURCES.SEQ if tinseq < SOURCES.SEQ *** ? time()+" Duped REJ inseq "+tport+" Expected:"+str( SOURCES.SEQ , 9, 0)+" Got:"+str( tinseq , 9 , 0 ) return endif do alert with "Gapped REJ inseq "+tport+" Expected:"+str( SOURCES.SEQ , 9, 0)+" Got:"+str( tinseq , 9 , 0 ) endif tuser = substr( ptm , 8 , 4 ) ttoken = substr( ptm , 12 , 10 ) ttype = substr( ptm , 22 , 1 ) treason = substr( ptm , 23 , 1 ) do enter2reject with tport , tuser , ttoken , ttype , treason select SOURCES replace SEQ with tinseq + 1 select ISLAND case tcommand = "Z" tolocate = val( substr( ptm , 2 , 8 ) ) toseq = val( substr( ptm , 10 , 9 ) ) tshares = val( substr( ptm , 19 , 6 ) ) treason = substr( ptm , 25 , 1 ) do case case treason = "A" xreason = "#USR" case treason = "B" xreason = "#TME" case treason = "C" xreason = "#HLT" case treason = "D" xreason = "#SUP" case treason = "E" xreason = "#DNT" case treason = "F" xreason = "#MBL" otherwise xreason = "#USR" endcase =i2cancel( tolocate , toseq , tshares , xreason ) case tcommand = "S" tport = substr( ptm , 2 , 6 ) if !seek( tport , "SOURCES" ) insert into SOURCES values ( tport , 1 ) endif tinseq = val(substr( ptm , 58 , 9 ) ) if tinseq # SOURCES.SEQ if tinseq < SOURCES.SEQ *** ? time()+" Duped REP inseq "+tport+" Expected:"+str( SOURCES.SEQ , 9, 0)+" Got:"+str( tinseq , 9 , 0 ) return endif do alert with "Gapped REP inseq "+tport+" Expected:"+str( SOURCES.SEQ , 9, 0)+" Got:"+str( tinseq , 9 , 0 ) endif tuser = substr( ptm , 8 , 4 ) ttoken = substr( ptm , 12 , 10 ) tbuy_sell = substr( ptm , 22 , 1 ) tshares = val( substr( ptm , 23 , 6 ) ) tstock = substr( ptm , 29 , 6 ) tprice = val( substr( ptm , 35 , 11 ) ) treport = substr( ptm , 46 , 1 ) tshort = substr( ptm , 47 , 1 ) tpa = substr( ptm , 48 , 1 ) tmmid = substr( ptm , 49 , 4 ) tclearing = substr( ptm , 53 , 1 ) tcontra = substr( ptm , 54 , 4 ) if ! treport $ "YNS" ? time()+" Jerk boy REPORT code TOKEN " +tport return endif if tshares <= 0 ? time()+" Jerk boy REPORT zero shares TOKEN "+tport+"-"+tuser+"-"+ttoken return endif if tshares >= 1000000 ? "Jerk boy REPORT million shares TOKEN "+tport+"-"+tuser+"-"+ttoken return endif if tprice <= 0 ? "Jerk boy REPORT zero price TOKEN "+tport+"-"+tuser+"-"+ttoken return endif if tprice >= 1000000 ? "Jerk boy REPORT million price TOKEN "+tport+"-"+tuser+"-"+ttoken return endif if ! tclearing $ "ABSIQORN" ? "Jerk boy REPORT strange clearing >"+tclearing+"< TOKEN "+tport+"-"+tuser+"-"+ttoken return endif if !gaccept ? "Report ignored outside SOD-EOD time "+tport+"-"+tuser+"-"+ttoken return endif if tclearing = "A" if !gactaccept ? "ACT trade REPORT ignored outside ACT time "+tport+"-"+tuser+"-"+ttoken return endif endif do enter2report with tport , tuser , ttoken , tbuy_sell , tshares , tstock , tprice , tshort , tmmid , tpa , treport , tclearing , tcontra select SOURCES replace SEQ with tinseq + 1 select ISLAND case tcommand = "D" tcseq = val( substr( ptm , 2 , 9 ) ) tcport = substr( ptm , 11 , 6 ) tcuser = substr( ptm , 17 , 4 ) tctoken = substr( ptm , 21 , 10 ) tcbuy_sell = substr( ptm , 31 , 1 ) tcshares = val( substr( ptm , 32 , 6 ) ) tcmatch = val( substr( ptm , 38 , 9 ) ) tcstock = substr( ptm , 47 , 6 ) tcprice = val( substr( ptm , 53 , 11 ) ) tcmmid = substr( ptm , 64 , 4 ) tcmisc = substr( ptm , 68 , 1 ) tcreason = substr( ptm , 69 , 1 ) tcclearing = substr( ptm , 70 , 1 ) do case case tcreason = "A" xreason = "#ERR" case tcreason = "B" xreason = "#CON" case tcreason = "C" xreason = "#SUP" case tcreason = "D" xreason = "#SYS" case tcreason = "E" xreason = "#EXT" otherwise ? time()+" Unvalid break reason = "+tcreason return endcase do case case tcbuy_sell = "B" xbuy_sell = "B" xshort = " " case tcbuy_sell = "S" xbuy_sell = "S" xshort = "L" case tcbuy_sell = "T" xbuy_sell = "S" xshort = "S" case tcbuy_sell = "E" xbuy_sell = "S" xshort = "E" otherwise ? time()+" Unvalid break buy_sell = "+tcbuy_sell return endcase do enterbreak with tcseq , tcport, tcuser, tctoken, xbuy_sell, tcshares , tcmatch ,tcstock , tcprice , tcmmid , xreason , tcmisc , tcclearing , xshort case tcommand = "M" tctype = substr( ptm , 2 , 1 ) do case case tctype = "S" && Stock maintence tport = substr( ptm , 3 , 6 ) tuser = substr( ptm , 9 , 4 ) ttoken = substr( ptm , 13 , 10 ) tcstock = substr( ptm , 23 , 6 ) tcshorttype = substr( ptm , 29 , 1 ) tcblocksub = substr( ptm , 30 , 1 ) tccenter = substr( ptm , 31 , 1 ) tcmisc = substr( ptm , 32 , 4 ) do entermaint with tport, tuser, ttoken, tcstock , tcshorttype , tcblocksub , tccenter , tcmisc case tctype = "A" && Account settings taccount = substr( ptm , 3 , 6 ) tpassword = substr( ptm , 9 , 10 ) ttest = substr( ptm , 19 , 1 ) ttrusted = substr( ptm , 20 , 1 ) tthresh = val( substr( ptm , 21 , 6 ) ) tsscheck = substr( ptm , 27 , 1 ) tiflag = substr( ptm , 28 , 1 ) tdefault = substr( ptm , 29 , 4 ) do enteraccount with taccount, tpassword, ttest , ttrusted , tthresh, tsscheck, tiflag, tdefault case tctype = "F" && Account settings taccount = substr( ptm , 3 , 6 ) tmmid = substr( ptm , 9 , 4 ) tclearing = substr( ptm , 13 , 1 ) do enterfirm with taccount, tmmid, tclearing case tctype = "T" && Stock state tport = substr( ptm , 3 , 6 ) tuser = substr( ptm , 9 , 4 ) ttoken = substr( ptm , 13 , 10 ) tcstock = substr( ptm , 23 , 6 ) tcstate = substr( ptm , 29 , 1 ) do enterstate with tport, tuser, ttoken, tcstock , tcstate otherwise ? time()+" Unvalid maint reason = "+tctype endcase otherwise do alert with "Unknown command"+ptm endcase return proc sendeos s = "E" call int99 with s if s # "f" .and. s # "b" activate window output ? time() +" !!!! ERROR ON EOS WRITE!!!!!!" ? ws activate window ticker suspend endif return proc flush s = "F" call int99 with s if s # "f" ? "!!!!ERROR ON FLUSH!!!!" do alert with "Error on flush:"+werror(s) suspend endif gstoredflag = .F. return proc shutdown do alert with "Shutdown initiated" if !geom && Shutting down too early? Just in case... wait window "Can't end day, EOM has not happened yet!" nowait do alert with "Ending day attempted before EOM time!" return endif sdk = chr( (rand() * 25) + asc("A") ) wait window "Initiate Shutdown by pressing ["+sdk+"] within 10 seconds" to sdh timeout 10 if upper( sdh ) # sdk wait window "Shutdown Aborted" nowait do alert with "Shutdown aborted" return endif wait window "Confirm Shutdown by pressing the magic key within 10 seconds" to sdh timeout 10 if upper( sdh ) # "M" wait window "Inccorect Shutdown confirmation" nowait do alert with "Incorrect shutdown magic key" return endif do alert with "Shutdown confirmed" if file( mholdofffile ) ? "Holdoff file exists! Escalate!" suspend else sdf = fcreate( mholdofffile ) =fputs( sdf , "Stop in the name of love!") =fclose( sdf ) endif if !file( mholdofffile ) wait window "No HOLDOFF file created, aborting Shutdown" nowait do alert with "No HOLDOFF file created, aborting shutdown" return endif wait window "Shutting down..." nowait do swrite with "N" , "" wait window "Shutting down... 3" timeout 1 do swrite with "N" , "" wait window "Shutting down... 2" timeout 1 do swrite with "N" , "" wait window "Shutting down... 1" timeout 1 do flush wait window "Flushing..." timeout 1 do sendeos do flush wait window "Sending End of Session... 3" timeout 1 do flush wait window "Sending End of Session... 2" timeout 1 do flush wait window "Sending End of Session... 1" timeout 1 do flush wait window "Sending End of Session... 0" timeout 1 do flush mdone = .T. zap return proc pingreply param preply , ptm ptoken = substr( ptm , 2 , 12 ) pport = substr( ptm , 14 , 4 ) x = "R"+ptoken+str( tseq ,9,0)+str( tmatch ,9,0)+str(0,9,0) s = "S"+chr(len(x))+ preply+pport+ x call int99 with s return proc seteventflags param secode do case case secode = "SOD" gaccept = .T. gactaccept = .T. case secode = "EOA" gactaccept = .F. case secode = "EOD" gaccept = .F. case secode = "EOM" geom = .T. endcase return proc alert parameter s xs = dtoc(date())+" "+time() +"-"+ s ? xs IF FILE( malertfile ) && Does file exist? errfile = FOPEN( malertfile ,12) && If so, open read/write ELSE errfile = FCREATE( malertfile ) && If not create it ENDIF IF errfile < 0 && Check for error opening file WAIT 'Cannot open or create output file' WINDOW NOWAIT ELSE && If no error, write to file =fseek( errfile, 0 , 2 ) =FWRITE(errfile, xs + chr(13) + chr(10) ) ENDIF =FCLOSE(errfile) && Close file * ? chr(07)+chr(07)+chr(07)+chr(07) return ----------------------------------------------------------------------------- MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMWNXKKKKXXNWMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMN0xoc;'..'::,..',:lxOXWMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMWKd:'. ;kXXO:. .;d0WMMMMMMMMMMMMMMM MMMMMMMMMMMMMNk:. ;kNMMMMWO, .;dXMMMMMMMMMMMMM MMMMMMMMMMMNx, ;kNMMMMMMXd' .oXMMMMMMMMMMM MMMMMMMMMWO; ;kNMMMMMX0d' 'kNMMMMMMMMM MMMMMMMMNd. ;kNMMMMMXd'. .:d:. .lXMMMMMMMM MMMMMMMNo. ;kNMMMMMXd' .:OWMWO:. cXMMMMMMM MMMMMMWd. .xWMMMMXo' . ;0WMMMMWO:. lNMMMMMM MMMMMMO' .:OWXo. .d0: .lKWMMMMWO:. .xMMMMMM MMMMMWl '' .,. lNMO. .lKWMMMMWO:. :NMMMMM MMMMMX; ;kNNx' ,KMMWo. .lKWMMMMWO:. '0MMMMM MMMMMK,.dNMMMMXd' .lKWMMMNk, .lKMMMMMWk..OMMMMM MMMMMK, ,xNMMMMMNx' .:kK0kxdxO00o' .lKWMNk;..OMMMMM MMMMMN: ,xNMMMMMXx' .,'. ..'' .ld; ,KMMMMM MMMMMMx. ,xNMMMMMXd' .oOo. oWMMMMM MMMMMMN: ,xNMMMMMXd. .oXMMWKo. ,KMMMMMM MMMMMMM0, ,xNMMMW0; .oKMMMMMNk' .OMMMMMMM MMMMMMMM0, ,xX0c. .oXMMMMMNk; .OWMMMMMMM MMMMMMMMMXc. .. .oOKWMMMMNk; ;0WMMMMMMMM MMMMMMMMMMWk, .oXMMMMMMNk; 'xNMMMMMMMMMM MMMMMMMMMMMMNx;. '0MMMMMMNk; ,dXMMMMMMMMMMMM MMMMMMMMMMMMMMW0o,. ,xNMMNk; 'lkNMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMW0xl,.. ,lo; ..,cdONMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMWX0Oxdoooooodxk0XWMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM ----------------------------------------------------------------------------- Political Swastika ascii ............................................................ ............................................................ .....................';cloddxxxxxdolc;,..................... ................';ldOKXWMMMMMMMMMMMMWXKOdl;'................ ..............;oOXWMMMMMMMMXd::dXMMMMMMMMWXko;.............. ...........':xXWMMMMMMMMMXx' 'dXMMMMMMMMMWXx:'........... ..........:kNMMMMMMMMMMXd' ,OMMMMMMMMMMMMNk:.......... ........,oXMMMMMMMMMMXd' 'dXMMMMMMMMMMMMMMMXo,........ .......;kNMMMMMMMMMXd' 'dOXMMMMMXxxXMMMMMMMMMNk;....... ......;kWMMMMMMMMXd' 'dXMMMMMMXd' 'dXMMMMMMMMWk;...... .....,xWMMMMMMMMNo. 'OMMMMMMXd' 'dXMMMMMMMWx,..... .....lXMMMMMMMMMMXd' 'dXMMXd' 'dXMMMMMMXl..... ....,kMMMMMXOXMMMMMXd' 'c:' .. 'dXMMMMMk,.... ....:0MMMXd' 'dXMMMMMXd' 'dXXd' 'dXMMM0:.... ....cKMM0, 'dXMMMMMXl. .lXMMMMXd' ,0MMKc.... ....:KMMXd' 'dXMMXd' 'dXMMMMMXd' 'dXMMK:.... ....;OMMMMXd' 'oo' . 'dXMMMMMXd:dXMMMMO;.... ....'dWMMMMMXd' 'd00d' 'dXMMMMMWMMMMMWd'.... .....:0MMMMMMMXd' 'dXMMMMXd. 'xNMMMMMMMMM0;..... ......lXMMMMMMMMXd' 'dXMMMMMMXo. 'xNMMMMMMMMXl...... ......'lXMMMMMMMMMXd,,dXMMMMMXOd' 'dXMMMMMMMMMXl'...... .......'c0WMMMMMMMMMNNMMMMMXd' 'dXMMMMMMMMMW0c........ .........;xXMMMMMMMMMMMMMXd' 'dXMMMMMMMMMMXx;......... ..........':kNMMMMMMMMMMMO, 'dXMMMMMMMMMWXk:'.......... ............':d0NMMMMMMMMMXd' 'dXMMMMMMMMMN0d:'............ ...............,cdOXWMMMMMMMXOOXMMMMMMMWXOdc,............... ..................';coxk0KKXXNXXXKK0kxoc;'.................. ........................',,;;;;;;,,'........................ ............................................................ ............................................................ ----------------------------------------------------------------------------- Sig : "The nature of the good is to overcome and defeat the bad." -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice -- "The nature of the good is to overcome and defeat the bad." - divine voice