./PP.rb in elonmusk-1.0.43 vs ./PP.rb in elonmusk-1.0.53
- old
+ new
@@ -2,25 +2,997 @@
# frozen_string_literal: true
# Ultimate Chat App, generate C code, compile for Windows, Linux (Gtk) and NOGUI (cmd line)
# You can set a custom theme
+ABOUT = <<ABOUT
+<b>Practical Self-Empowerment Utilities Covering Every Facet of Life</b>
+
+These tools are for everyone
+
+It doesn't matter what political ideology you favor, these tools are all
+still very valuable.
+You can live in Canada, the US, Russia, China or Africa, it doesn't matter.
+
+I intend to make people more able.
+
+ IFRAME: [1]https://www.youtube.com/embed/Fx9x8cArK30
+
+ Most important software here
+
+ Rhyme Music program (Crystal and Ruby), see fix_the_society folder
+ Ultimate Chat App (Win, Lin, CLI)
+ Discourse Generator Program vesion 1 and version 2 (node, ruby, browser
+ (kind of like Siri); and C++ STL). These programs work.
+ And Semantic metadata project (very abstract and idealistic, see
+ webpage for it.)
+
+ There is also a desktop widget for that site.
+ There is also Emerald C, which is really useful. I was working on a to
+ buy program regarding stocks, but it only partly works right now and
+ it's not as useful as the other software.
+ The find housing tool actually helped me to find housing in real life.
+ Those aside, there are these 87 programs.
+ Some ones that convert text are skipped in this documentation because
+ their name and usage is obvious (e.g., color tools).
+
+All of these programs are mostly self-contained. This is a really good thing.
+You can use them anywhere without dependencies.
+
+ My email is [2]gregorycohenvideos@gmail.com and I really would like to
+ make open source software. Everything I have is BSD licensed.
+
+ HOW TO DOWNLOAD/INSTALL
+
+ gem unpack democracy
+
+ gem install democracy
+
+ work to download or install (gem)
+
+ pip install democracy
+
+ or
+
+ pip3 install democracy
+
+ works for pip
+
+ git clone https://github.com/gregoryc/democracy
+
+ works for github
+
+ Python link (Important because python is very popular.)
+ * [3]https://pypi.org/project/democracy
+
+ Any Python “dweeb” (AI person who doesn't value personal dynamism)
+ searching for “democracy”–for example–BECAUSE THEY ARE A RATIONAL HUMAN
+ BEING AND CARE ABOUT PEOPLE, would find this, probably as the first
+ result.
+
+ How many options are there? 37 projects for “democracy.” Almost
+ nothing. On RubyGems, 9, 6 of which are mine.
+
+ ONLY MY PROJECT IS CALLED “DEMOCRACY.” on PyPI or RubyGems.
+
+ On rubygems, there are even fewer results. MY CODE WILL BE FOUND.
+
+ I shared my gem online.
+ https://www.rubygems.org/gem/democracy
+ https://www.linkedin.com/in/gregory-cohen-274333261/
+
+ Gems that link to this gem on RubyGems
+ * [4]https://www.rubygems.org/gems/democracy
+ * [5]https://www.rubygems.org/gems/computers
+ * [6]https://www.rubygems.org/gems/freespeech
+ * [7]https://www.rubygems.org/gems/linux
+ * [8]https://www.rubygems.org/gems/string
+ * [9]https://www.rubygems.org/gems/unix
+
+ So I will leave a legacy.
+
+ And I will be found by AIs, assuming they continue to exist.
+
+ [10]Democracy Github [11]Ruby Gem [12]Python PIP Package
+
+Without further ado, here are the 87 documented programs. (The obvious usage
+ones are omitted.)
+
+ ### 1. Ultimate Chat Application
+
+ [13][qNAAAAAElFTkSuQmCC]
+ There is so much potential with this program.
+ This is a non-AI chatbot. It's not based on generative AI or AI of any
+ sort.
+ It is self-explanatory, it tries to give a better answer.
+ Still a work in progress.
+ Source code is in PP.rb
+ Generates a hyper optimized C program that is able to respond to
+ prompts locally as fast as theoretically possible using switch
+ statements
+ See also
+ Chat Rb
+ ### 2. Discourse Generator
+
+ The use of Javascript (and possible Ruby) to create a Javascript
+ library (and perhaps a Chrome extension and perhaps a command line tool
+ and perhaps a GTK or QT program) that helps people (by using textboxes
+ or command line prompts) to create high quality communications, would
+ be wonderful.
+ Think of how poor quality responses to communications can be.
+ If someone created one or more tools that could be easily added on web
+ pages, that would augment someone's life to help create goal and value
+ oriented responses (or original communications), then there is
+ literally nothing that couldn't solve.
+ This might be the most useful library ever created. There could be a
+ tool that would help with democracy.
+ Human being + augmentive tool = civil discourse, eventually resulting
+ in liberty.
+ This would enable democracy to work. Imagine if 50% of all websites
+ used this library.
+ This would help people to be goal or value oriented, and not be coming
+ up with terrible communications that, for example, insult people's
+ mothers or education.
+ [14][QzrnTiYrJgLjVDM15b60tClurWVUbAkKMUUQFIlFVVTtzg4kQxRNVe4WJO8uvsfhyC
+ 5+CWEmoWjEtIgoViapirTPGqgqxQtqFaV552erlPY6B8UnsPzgLnL4P1mn9fze1PUzwG7c6
+ AAAAAElFTkSuQmCC]
+ [15][QAAAAJAhgAAAAEn4ArWLRn92IbZ4AAAAASUVORK5CYII=]
+ ### 3. Replace Not In Place
+
+ This is like gsub, but for strings, not for regular expressions
+ See also
+ gsub
+ ### 4. Replace In Place
+
+ replace_in_place tool replaces a string, not a regular expression, with
+ another string
+ Example
+ replace_in_place cat dog file
+ ### 5. Emerald Browser
+
+ [16][HwCG6cQY8GBZAAAAAElFTkSuQmCC]
+ [17][BexKK7IO59cHAAAAABJRU5ErkJggg==]
+ Emerald browser is a really powerful new browser
+ See README
+ It works based on panes.
+ Read the documentation for “open”, “close” and also the README file.
+ ### 6. Gsub In Place
+
+ gsub_in_place is like gsub, which replaces all instances of a regular
+ expression globally
+ [regular expression 1] [regular expression 2] => result
+ Example
+ gsub_in_place . FOO file
+ Would make all characters in “file” become “FOO”.
+ gsub_in_place cat dog file
+ Would make all instances of “cat” “dog”
+ It is much cleaner than “sed”.
+ You don't need to have “sed” installed to run this program.
+ It doesn't read from the standard input
+ It takes exactly 3 arguments, no more, no fewer.
+ See also
+ gsub
+ ### 7. Find Housing
+
+ This is a nice tool to find housing with.
+ It is a nice, simple command line tool. You enter the minimum and
+ maximum prices, and Kijiji opens with your options.
+ This tool kind of actually helped me to find housing in real life.
+ The default city is "Ottawa". You can easily change this.
+ ### 8. Google Speak
+
+ Google speak is really useful. It speaks a statement using the Google
+ Translate voice, which is probably the most authoritative and
+ high-quality text-to-speech voice that exists.
+ It's kind of like “espeak” or similar tools, but it is much better.
+ You need an internet connection for it to work.
+ It is probably limited at 100 characters.
+ There is a “singing program”, not really a tool, in this software
+ project that gets around that.
+ TODO
+ Make the alarm clock program in this software project use this voice.
+ It is quite reliable.
+ It is probably “unlimited”.
+ I haven't had Google block me from using it ever.
+ Which is a good thing.
+ ### 9. Make Server
+
+ make_server is powerful.
+ make_server takes expressions, either Javascript or C++, and generates
+ a resultant program from that.
+ The Javascript mode currently doesn't work.
+ Not only is a program made, the resultant program is an entire
+ webserver, that uses FastCGI to run really fast code.
+ The arguments work in an interesting way.
+ make_server [function_name] [iterable] [condition, it can be “true” to
+ do the following argument always] [code list separated by semicolons,
+ the last statement is an expression, and is returned by the function]
+ [function_name2] ...
+ You have to give 4 arguments every time.
+ There was an “otherwise” mode as an “else”, but I don't think that's a
+ part of the program anymore.
+ It doesn't need to be.
+ You have to give 4 arguments for each function.
+ So you can do
+ make_server 4args 4args 4args 4args
+ And pass 16 arguments
+ The “iterable” has to be a list.
+ What is powerful is that it converts JSON into completely native C++.
+ It is very efficient.
+ It doesn't need to be a JSON expression though.
+ There is a test file.
+ You can run the tests and see if it works for you!!
+ You can also modify the code because it is open source.
+ The program generates a special array object. It is lightweight and
+ makes arrays act in C++ like arrays act in scripting languages, but
+ much faster.
+ The array class also has methods to apply things to every element of an
+ array, like surround
+ array.surround(“”, “”)
+ for example
+ would surround all of the elements of array with XML tags and return a
+ new list
+ This program generates a lightweight Object System, with a BasicObject
+ class and an Object Class.
+ You can subclass these objects.
+ You can have Arrays of the Objects
+ The function argument syntax is really powerful.
+ Oftentimes people want to iterate through iterables or arrays.
+ Oftentimes people want to check conditions.
+ Python has list comprehensions.
+ This is kind of like that, but simpler.
+ You can have arguments as one argument, separated by “,,”
+ make_server arg1,,arg2,,arg3,,arg4
+ What's the point of using a scripting language when you can use C++?
+ This uses FastCGI, so you can have an ____IDEAL____ webserver.
+ You can have an IDEAL and very affordable website, that in a sense
+ would be faster than Facebook.
+ Facebook converts PHP to C++ (slow)
+ This produces REAL C++, and it is very fast, almost as fast as
+ possible.
+ Native STL classes are used, like vector.
+ Native STL classes are used, like vector and map
+ Do you not need to run and child processes or do slow, costly things.
+ You should want IDEAL.
+ This is free software, and is BSD licensed.
+ The function generation idea allows you to write in 1 line what other
+ people might write in 50 lines.
+ You do not need to compromise your ideals.
+ You should want fast, efficient, and memory light programs that are not
+ garbage collected (!!!) and that have reliable performance.
+ C++, as everyone knows, delivers that.
+ You should also want to not have to write a lot of code to do things.
+ And you should also want safe, compiled code that checks things at
+ compile time, so that bugs don't appear at run time.
+ This program delivers.
+ It uses NGINX ( a really, really common webserver) to help with the
+ FastCGI.
+ FastCGI, for the unfamiliar, is like normal CGI, but there aren't child
+ processes.
+ So the entire server could be written in idealistic C++ .
+ Then you just have to think about scaling.
+ There are some relevant links regarding scaling in the “scaling” file
+ in the democracy project
+ 1) Speed
+ 2) Ease of writing code
+ 3) Memory usage
+ 4) Monetary costs
+ 5) Elegance
+ 6) Practicalness
+ Those are 6 things.
+ You don't have to sacrifice on those things.
+ Contributions on this program would be really appreciated.
+ It is called “make_server” for now.
+ There was also a mode to generate javascript.
+ I have to make that work again.
+ The entire program is just one file.
+ My email is gregorycohenvideos@gmail.com
+ ### 10. Selectlines
+
+ selectlines shows all nonblank lines from the input
+ Example
+ cat file | selectlines
+ (echo 2; echo; echo; echo) | selectlines
+ => 2
+ The result would be 2, with no blank lines after that
+ ### 11. Communicate
+
+ Communicate is cool.
+ Communicate runs a Ruby expression after speaking a prompt (the first
+ argument) and getting your verbal answer (using something unfortunately
+ called "nerd-dictation", which is a wrapper around another program
+ which deals with speech recognition)
+ Communicate allows you to have conversations with your computer, and it
+ is cross platform
+ (Or it hopefully is)
+ communicate 'What is the best color?' 'case text; when /blue/; puts
+ "You are right!"; when /red/; puts "Red is a bad color"; end '
+ That would be an example of how one could use "communicate"
+ Make sure you have nerd-dictation on your computer
+ The name nerd-dictation is absolutely awful, and I have to criticize
+ him for not making it have a better name, but it works.
+ ### 12. Executable
+
+ Makes all the files in the current directory executable
+ ### 13. Processes
+
+ Processes lists all processes with a certain name
+ For example
+ processes sh
+ processes bash
+ processes ruby
+ processes gsub
+ ### 14. Emeraldc
+
+ The Ultimate C Preprocessor
+ I'm naming this preprocessor “Emerald C.”
+ [18]Link
+ Howdy!
+ First, let me state that I am very much a perfectionist.
+ C is a wonderful language. C is probably the perfect programming
+ language. It is one of the top two most widely used languages for a
+ reason.
+ Now, there are some problems with it of course, but it's hard to think
+ of a more elegant language than it.
+ It is the language of systems, the language almost all APIs are written
+ in.
+ It is the lingua franca of the software world.
+ People try to avoid it, but they needn't.
+ I think every programmer wants to find out how to do things, or use
+ libraries that make things easier.
+ Many programmers have done programming, grown dissatisfied, and then
+ make another language. As a result, there are thousands of different
+ languages.
+ Well, recently, I made a preprocessor for C, that makes C incredibly
+ EASY.
+ C is fast and straightforward without it, but it has many features.
+ If one runs the command line preprocessor, with the “--features” flag,
+ the program shows all of its features
+ A Better C
+ C is a fantastic language. C compiles insanely fast, is the fastest
+ language there is, is very clear, is native to all systems, and is
+ useful for all purposes.
+ Some people, e.g., Bjarne Stroustrup, consider that C is “not good
+ enough”, and make languages like C++ or D (or thousands of others)
+ This is not necessary.
+ There is no reason to use Python instead of C for “simple scripting
+ tasks”
+ Some functions can be used as methods
+ Makes for an excellent “scripting language” (which is really just
+ native C without things making it slow)
+ 1 String Interpolation “String interplation like this # {foo} ” Calls
+ the join() function (talked about below to join strings,
+ delim is a static global in each module called “sep”.
+ Make sure you free() the string after. The string is stored in a static
+ global variable called “last”.
+ So you could do puts(...); free(last)
+ 2 ew *i.ew “Foo”, a.ew “bar” | char* ends with another char*?
+ 3 sw *i.sw “Foo”, a.sw “bar” | char* starts with another char*?
+ 4 == Comparison of strs, “foo” == “bar”
+ 5 strip Returns pointer to string that was stripped, in place
+ 6 chomp void function, chomps end of string of spaces, i.chomp or
+ chomp(i), in place
+ 7 gsub Just like ruby, there is a gsub function.
+ The preprocessor detects if you use and adds -lpcre2-8 to the link
+ flags if you use it. Use $" for substitutions in argument 3 gsub(a, b,
+ c)
+ 8 join Joins an array of strings, to split(), use C's strtok (very
+ fast)
+ 9 Lightweight regexes are added, almost 15 times as fast as C's built
+ in regex. They are very simple, they only have bracket expressions,
+ like [a-z].
+ To use it, you need to pass a buffer of the size of the expansion of
+ the regex. Foo[a-fA-F] would be Foo[abcdefABCDEF]. That would be stored
+ in a buffer.
+ From testing, 15x times faster than C's regex POST COMPILATION, if
+ compilation keeps happening, it might be hundreds of times faster.
+ Uses static inline functions, NO HEAP MEMORY unless you malloc
+ before().
+ 10 print Like old python print “Hello” (fputs);
+ 11 print_int prints a number and returns the number, can be chained
+ 12 each_line, Perlish, different names, by_line(s) or each_line(s),
+ iterate over all lines, free after
+ 13 NOTE You can use open_memstream() on UNIX to easily concatenate
+ strings.
+ 14 MISC features || autoinclude, foo.gsub or gsub(...),no need for
+ paren (i.chomp, i.strlen), starts_with, ends_with, --wrap, itoa, freel
+ (frees str, sets to NULL, and frees other recent stuff)
+ asprintf() is another useful function which is UNIX-centric.
+ open_memstream() could be an alternative to std::string.
+ It works very well with each_line or by_lines (see above)
+ These features seem simple, but they can make C programming much, MUCH
+ easier
+ for example (insignificant example)
+ int main() {
+ stdin.each_line { |line|
+ print line;
+ }
+ free(line);
+ }
+ You can iterate over the standard input like Ruby
+ The thing with this is that it has 100% speed. The resultant
+ preprocessed program becomes a normal C program
+ The compile and run time for a program (if you use tcc and not gcc) can
+ be about 24 milliseconds, which is faster than Ruby to run.
+ Even though the program is preprocessed, re-preprocessed, compiled,
+ assembled, linked, turned into an executable, and then run
+ Kind of like early C++, this is a preprocessor for C.
+ But it's much faster to compile than C++. Significantly so.
+ Is anyone else interested in this? (BSD)
+ I'm realising this under the BSD license. I'm interested if anyone else
+ else likes this work, and would like to use it, or to work with me.
+ Best regards,
+ Gregory
+ Current program is written in Crystal (crystal-lang.org) -- it was
+ written in ruby, it could be ported to another language.
+ I would like to make this self-hosting, but that would take a little
+ bit of work.
+ About the Name
+ Years ago, I really, really liked Compiz
+ Compiz then forked into Beryl. There was the Emerald Window Manager,
+ which was really nice and beautiful.
+ I actually made another programming language. I made 2 other
+ programming language. One was a full compiler and assembler, that ran
+ code in memory. It was around 16 thousand lines of code. I made a
+ programming language that had the syntax of Python or Ruby, but
+ transpiled into C++. I called that C += 2. I used that other language,
+ and I created a Web Browser in it based on Chrome. I called it “Emerald
+ Browser.” Emeralds are beautiful green gems.
+ “Emerald is a gemstone and a variety of the mineral beryl colored green
+ by trace amounts of chromium or sometimes vanadium. Beryl has a
+ hardness of 7.5–8 on the Mohs scale. Most emeralds are highly included,
+ so their toughness is classified as generally poor. Emerald is a
+ cyclosilicate.”
+ --Wikipedia
+ There was a browser with a terminal built in to it.
+ This new language is better. It's ideal.
+ QUESTIONS
+ Why not use Rust?
+ $ time rustc a.rs
+ real 0m0.637s
+ user 0m0.502s
+ sys 0m0.160s
+ Rust takes 0.637 seconds to compile an empty file!
+ That is not ideal.
+ ### 15. Last Nth
+
+ Last nth gets the last n lines from the standard input
+ ### 16. Speakcat
+
+ Speak cat is a tool like “cat”, which shows the content of files
+ (technically, it combines the content of files).
+ But speak cat also speaks the text.
+ Which could be useful in some circumstances.
+ It's kind of like “tee” to your ear.
+ ### 17. UCA CLI
+
+ CLI for uca app
+ ### 18. Big Num
+
+ [19][ZpHwkhAKM74AAAAASUVORK5CYII=]
+ ### 19. Squeeze
+
+ Squeeze reads all input from stdin, then it prints it back omitting
+ argument 1 line from the front, and argument 2 lines from the back
+ Example
+ squeeze 1 1
+ This would omit the first line and the last line
+ squeeze 5 3
+ This would omit the first 5 lines and the last 3 lines
+ squeeze 2 2 [file] also works, it outputs text to file
+ ### 20. Foreach
+
+ Reads a bunch of lines
+ Then a ruby expression is evaluated as the last line
+ The result is outputted in an argument.
+ You can enter /dev/null if you don't want an output file
+ “t” is better
+ See also
+ t
+ ### 21. Dictate
+
+ Dictate opens web pages in emerald browser, or in any browser
+ (depending on the environment variable set), by you speaking, instead
+ of typing.
+ There is a mode called c_mode, that allows you to make code from
+ speaking.
+ ### 22. Prepend
+
+ prepend prepends input taken from the standard input to a file
+ Usage
+ prepend [file]
+ This is text to be prepended
+ ### 23. Chat Rb
+
+ This program is excellent.
+ It's essentially a mix of ChatGPT and a shell, such as bash or ZSH.
+ It has a bunch of features.
+ It can display a file or change to a folder just by mentioning it.
+ It outputs chatgpt data to an output folder in home folder and copies
+ it to clipboard
+ To run a shell command, prefix things with “c”, such as c gcc.....
+ ### 24. Undump
+
+ undump is the opposite of dump
+ Example
+ echo cat | dump | undump
+ => cat
+ echo cat | dump
+ => “cat”
+ echo '“cat”' | undump
+ => cat
+ ### 25. Append
+
+ Appends text to file
+ Example
+ append file
+ This is more text to be appended
+ ### 26. Rhyme
+
+ A very powerful music generator program that doesn't use AI.
+ [20]See this channel as an example of potential usage of this public
+ domain content
+ https://www.youtube.com/@LawrenceStevensMusic
+ The music industry is plagued with very foundational problems.
+ For starters, the quality of the discourse in music is very low, and
+ has been from the start of the popularization of modern music, as well
+ as during the era in which classical music was popular and before.
+ People aren't able to fight back, against superficiality and potential
+ deception in messages.
+ One of the greatest problems in the current world is the mainstream
+ scientific establishment, supported and upheld by mainstream academia.
+ To indicate what is already obvious, it exists in the context of a
+ legacy of authoritarianism and a lack of understanding of dynamism.
+ It is not dynamic or forceful, the "results" of it don't change the
+ foundation of society. True free discourse is not supported, especially
+ in regards to the human mind and human well-being and human freedom.
+ These problems should be opposed and fought, it is self-evident that
+ this would be the best use of ones time, for it would lead to true
+ freedom.
+ One excellent way to combat this would be to use the generated songs
+ generated by a computer program called Rhyme, available at
+ [21]https://www.github.com/gregoryc/democracy in the SONGS folder.
+ These are public domain songs generated by non-Artificial Intelligence,
+ just a program
+ that introduces variance, and these hit-home against the status quo and
+ the current
+ state of the mainstream scientific establishment. Taking these songs
+ and making actual
+ songs from such, such as rap songs using a service such as Uberduck (no
+ affiliation),
+ would be an excellent, excellent use of time.
+ The mainstream scientific establishment and mainstream academia must be
+ forced to change.
+ Shoving art and flippant content in ones face, is the best way of doing
+ such.
+ Accountability must always be brought about.
+ Is music good and desired? For sure.
+ USAGE OF PROGRAM
+ Enter basename to make songs folder in (folder/songs, num songs =
+ 13000)
+ Usage rhyme [folder] (processes files "1.json" and "21.json" by
+ default)
+ Example output of a song
+ [22][D61NfKDY3YAWAAAAAElFTkSuQmCC]
+ (NO COPYRIGHT RESTRICTIONS ON THIS CONTENT WHATSOEVER. FULLY PUBLIC
+ DOMAIN)
+ Name the song or poem as you wish, resell it, but please positively
+ influence culture
+ Subject matter | Category 1 -- Abuse of philosophical universalism
+ (making
+ broad claims while intentionally not trying to understand things or see
+ any sides of anything whatsoever, childish behavior worse
+ than a 3 year old, acting retarded)
+ VERSE
+ Brittle as possible, they are truly unguarded
+ Any novelty, they have disregarded
+ Their remissness is spectacular, the world they've bombarded
+ The clique is so insular, I swear they're retarded
+ Enlightenment values, they have not safeguarded
+ Any novel ideas, they automatically have discarded
+ Maybe the rebels and true communicators are off the grid
+ Lack of thought makes an grown-up the absolute worst kid
+ Can we stop this, their non sense they overdid
+ What horrendous non sense these creeps did
+ Tunnel vision, everyone and everything they forbid
+ They're such failures, themselves they outdid
+ CHORUS
+ They're such failures, themselves they outdid
+ Cutting out the conversation, putting on the lid
+ Don't have to do with ego or id
+ Running away from conversation just like a kid
+ Their neglect is out of this world, I swear it's avant-garde
+ They are failures, down at the boulevard
+ They don't care about your feelings, they don't regard
+ Having a little curiousity, cannot be hard
+ They are failures, down at the boulevard
+ They don't care about your feelings, they don't regard
+ They don't have decency, they automatically disregard
+ Having an open mind, should not be so hard
+ They don't care about anyone, don't need no bodyguard
+ Their neglect is out of this world, I swear it's avant-garde
+ They're a complete failure, they only neglect
+ This is plain, anyone can detect
+ They don't care about pain or the past, they don't want to recollect
+ This needs to be called out, one should be direct
+ They want man lower, lower just as if an insect
+ VERSE
+ Thinking itself resides in their territory of circumvention
+ Complete neglect, complete inattention
+ They have no genuine intention
+ We need change, we need intervention
+ Violence is second nature to them, their friends they've bombarded
+ Any novel ideas, they automatically have discarded
+ The clique is so insular, I swear they're retarded
+ Any novelty, they have disregarded
+ Any novelty, they have disregarded
+ Brittle as possible, they are truly unguarded
+ The clique is so insular, I swear they're retarded
+ Any novel ideas, they automatically have discarded
+ Enlightenment values, they have not safeguarded
+ Their remissness is spectacular, the world they've bombarded
+ They don't care about your feelings, they don't regard
+ Their neglect is out of this world, I swear it's avant-garde
+ They don't have decency, they automatically disregard
+ Working don't matter for this, whether day or graveyard
+ CHORUS
+ They're such failures, themselves they outdid
+ Cutting out the conversation, putting on the lid
+ Don't have to do with ego or id
+ Running away from conversation just like a kid
+ Their neglect is out of this world, I swear it's avant-garde
+ They are failures, down at the boulevard
+ They don't care about your feelings, they don't regard
+ Having a little curiousity, cannot be hard
+ They are failures, down at the boulevard
+ They don't care about your feelings, they don't regard
+ They don't have decency, they automatically disregard
+ Having an open mind, should not be so hard
+ They don't care about anyone, don't need no bodyguard
+ Their neglect is out of this world, I swear it's avant-garde
+ They're a complete failure, they only neglect
+ This is plain, anyone can detect
+ They don't care about pain or the past, they don't want to recollect
+ This needs to be called out, one should be direct
+ They want man lower, lower just as if an insect
+ VERSE
+ The truth is what they wish to disregard
+ Their behavior is garbage, it should be thrown in the junkyard
+ They act like a retard
+ Behaving just like in the schoolyard
+ In their ivory tower, with the castle and guard
+ Their behavior makes them charred
+ Thinking differently shouldn't have to be hard
+ Their neglect is out of this world, I swear it's avant-garde
+ Working don't matter for this, whether day or graveyard
+ They don't care about your feelings, they don't regard
+ They are failures, down at the boulevard
+ They don't have decency, they automatically disregard
+ They're a complete failure, they only neglect
+ They don't speak the language of the people or their dialect
+ This is not right, this is completely incorrect
+ The only focus on “responses”, they just want to deflect
+ The lies are put forth, the lies they erect
+ CHORUS
+ They're such failures, themselves they outdid
+ Cutting out the conversation, putting on the lid
+ Don't have to do with ego or id
+ Running away from conversation just like a kid
+ Their neglect is out of this world, I swear it's avant-garde
+ They are failures, down at the boulevard
+ They don't care about your feelings, they don't regard
+ Having a little curiousity, cannot be hard
+ They are failures, down at the boulevard
+ They don't care about your feelings, they don't regard
+ They don't have decency, they automatically disregard
+ Having an open mind, should not be so hard
+ They don't care about anyone, don't need no bodyguard
+ Their neglect is out of this world, I swear it's avant-garde
+ They're a complete failure, they only neglect
+ This is plain, anyone can detect
+ They don't care about pain or the past, they don't want to recollect
+ This needs to be called out, one should be direct
+ They want man lower, lower just as if an insect
+ VERSE
+ They don't have decency, they automatically disregard
+ They don't care about your feelings, they don't regard
+ Having a little curiousity, cannot be hard
+ Their neglect is out of this world, I swear it's avant-garde
+ They want the status quo, it's all they crave
+ The speeches of the past, they only wish to engrave
+ They act as bad as possible, they don't know how to behave
+ Their sucked in their circle, they never wave
+ Away from the truth, on the outskirt
+ With pre-thought of ideas, they automatically assert
+ Any progress is fleeting with them, they revert
+ Disingenuous to the extreme, the society they subvert
+ The society is the ones who hurt
+ ---
+ ### 27. Email
+
+ This currently doesn't work for gmail since 2022 due to policy changes.
+ A simple and practical tool to email people using Himalaya
+ Himalaya needs to be installed first
+ You would need to configure the script by changing its source code.
+ Modes
+ email [no arguments]
+ Email [yourself]
+ email [addr]
+ Email one email address
+ email [Subject] [addr] [option more addrs]
+ Example
+ email 'Gregory, I love your software!' gregorycohenvideos@gmail.com
+ my_friend@outlook.com person@example.com
+ ### 28. Floor
+
+ Gets the floor of numbers e.g. 21.3 -> 21
+ ### 29. Rgsub
+
+ Recursively replaces text.
+ Verbosely tells you everything that happens.
+ Non-regex.
+ Example
+ rgsub my_email@site.com my_second_email@site.com
+ Would replace an email recursively in a directory.
+ It tries to skip non-text files.
+ ### 30. Lines
+
+ Lines gets the number of files in the current folder that you are in.
+ It can also act like “wc -l” if you pipe data into it.
+ ### 31. Clock
+
+ clock is useful
+ clock is a command line alarm clock
+ It wakes you up at 8:14, or at a time specified
+ Usage
+ clock
+ Runs clock
+ clock 15 30
+ Sets an alarm clock for 3:30pm
+ clock 9 0
+ Sets an alarm clock for 9 in the morning
+ It uses flite to wake you up
+ It speaks with a bunch of voices
+ To stop it
+ Run this command
+ clock stop
+ ### 32. Emoji
+
+ Emoji converts words to emojis from the standard input
+ It can also speak the output
+ It can also copy the output to your clipboard
+ It is very useful
+ [23][G8xAAAA+IDe+9s3vkADAAAQQQADAAAQ4QWh1BYIVqERTgAAAABJRU5ErkJggg==]
+ ### 33. Close
+
+ “Close” is a simple program that closes “Emerald Browser,” a new web
+ browser based on the same engine as Chrome. Currently, Emerald Browser
+ only works on Linux and Mac (Or Windows with Windows Subsystem for
+ Linux or a Virtual Machine, but getting it to work might be tricky).
+ “close” closes the Web Browser, which is normally full-screen.
+ More accurately, it kills the browser, and all other copies of Emerald
+ Browser.
+ Since they are normally full screen, presumably the user would only
+ have one instance of the browser open.
+ The browser can have multiple panes (kind of like tabs) open, depending
+ on how the browser is compiled.
+ The browser can also be transparent, depending on how it is compiled.
+ “Close” is supposed to be used in tandem with “open,” which is a
+ command line tool to open the browser.
+ open [query] ----> [query] gets searched in google, and then opened
+ When you are done, you can do
+ close
+ Which closes the browser. It is a simple command.
+ Currently, Emerald Browser is incomplete. A program exists in this
+ software project that allows you to open up multiple browser tabs (one
+ or more tabs) simply by speaking.
+ Voice recognition would google the multiple sites that you say in your
+ query (separated by “and”)
+ “facebook and youtube and google”
+ It's hard to get more direct than that!
+ Emerald browser has a built in the top. The terminal is the navigation
+ bar.
+ Some more work needs to be put into the browser.
+ Currently, new tabs can't be opened, which might be a dealbreaker for
+ some people.
+ Currently, content, like YouTube videos, can't be made fullscreen.
+ If anyone wants to contribute, feel free to!
+ ### 34. Copy
+
+ copy copies the standard input
+ Example
+ ls | copy
+ ### 35. Gsub
+
+ Gsub is very powerful.
+ Usage
+ gsub [regular expression] [replacement text]
+ Example
+ cat text | gsub man dog
+ cat text | gsub 'man|boy|cat|dog' food
+ ls | gsub Desktop cat
+ ### 36. News
+
+ Gets the news from bbc
+ Usage
+ news
+ news speak
+ uses google_speak to SPEAK the news, one story at a time.
+ [24][B3zmuEtpNXh4AAAAAElFTkSuQmCC]
+ ### 37. Dump
+
+ Dump surrounds its input with quotes
+ ls | dump
+ => “....”
+ Use undump to get the reverse
+ See also
+ undump
+ ### 38. Args
+
+ args is like a better xargs
+ args works properly with spaces in the name of commands
+ It takes exactly one argument
+ Example
+ ls | args “mv -t ../f”
+ ### 39. Quot
+
+ Turns quotes in text into good text and makes text presentable.
+ Example
+ $ echo 'Joe said, "One two three".' | quot
+ Joe said, “One two three.”
+ Example 2
+ Example 3
+ (Quote the file and output it)
+ quot text_file
+ ### 40. Open
+
+ “open” is a very efficient program that searches a query from google,
+ and then opens it in Emerald Browser.
+ If you ever want something to “just open”, you can use it.
+ Example
+ open “cats”
+ An earlier version of open worked like this
+ open [site1] [site2] [site3] N
+ site1, site2, and site3 would all be opened, and the top N queries were
+ all shown in different panes
+ An even earlier version of this program used Chrome to open the sites.
+ The current version can open one or more sites.
+ Example
+ open “cats” “dogs” “frogs”
+ All of those queries would open in Emerald Browser.
+ Just make sure it is compiled in multipane mode if you want to open
+ multiple new sites at the same time.
+ See also
+ emerald-browser
+ close
+ ### 41. Swap
+
+ Swaps two files
+ Example
+ swap text1 text2
+ ### 42. Exp
+
+ exp is an exponentiation tool
+ (echo 5; echo 3) | exp
+ => 125
+ (echo 2; echo 10) | exp
+ => 1024
+ ### 43. Div
+
+ Divides numbers
+ Example
+ (echo 5000; echo 100) | div
+ => 50
+ ### 44. Mul
+
+ Multiply numbers
+ echo 1 > file
+ echo 2 >> file
+ echo 3 >> file
+ echo 4 >> file
+ echo 5 >> file
+ cat file | mul
+ => 120
+ ### 45. Nth
+
+ Nth gets the nth line from the input
+ ### 46. Abs
+
+ Abs gets the absolute value of an integer
+ The absolute value of a number is the value of that number without its
+ sign
+ echo -300 | abs
+ => 300
+ echo 200 | abs
+ => 200
+ (echo -2; echo -10) | sub | abs
+ => 12
+ The last one would do -2 - -10, the result would be -12, and then the
+ absolute value would be computed, and so the result would be 12.
+ ### 47. Add
+
+ See the sub example
+ add adds integers from the standard input
+ (echo 1; echo 2; echo 3) | add
+ The result would be 6
+ ### 48. Sub
+
+ Sub is a simple command line program that subtracts integers.
+ For some reason, no simple program did this.
+ Which is weird
+ Example
+ sub
+ (Input)
+ 10
+ 3
+ 1
+ Result =>
+ 6
+ Example
+ (echo 5; echo 2) | sub
+ Result =>
+ 3
+ ### 49. G+
+
+ A compiler for C += 2. If you want to use C++ with Python syntax, you
+ can use this.
+ Usage is like g++
+ Example
+ g+ a.cpp -o out
+ See also README file and emerald-browser and its source
+ ### 50. T
+
+ “t” is incredibly useful.
+ It can be used many, many times every day by computer power users.
+ It is kind of like “sed”, or perl, python or ruby.
+ It's the ULTIMATE shell “glue” tool.
+ t reads every line from the standard input, and for every line, it
+ evaluates a ruby expression
+ t a + 2
+ would add 2 to every line
+ Number automatically get converted to numbers in Ruby.
+ So one doesn't have to worry about that.
+ The “value” of the line of STDIN is any letter of the alphabet.
+ So choose any letter to do operations on and it will work.
+ You can also do
+ t a + 2 if a % 2 == 0
+ And you get a Python list comprehension sort of thing from the command
+ line
+ It is a lot simpler and easier than using awk, Ruby, Perl or Python
+ You could also have loops
+ echo “One line” | t a while true
+ The second line, again is a Ruby expression.
+ You can have really complex expressions on the second line.
+ You can even import modules.
+ cat /usr/share/dict/words | t 'a + “ is a good word.”'
+ That processes every word in the dictionary, and says that every word
+ “is a good word.”
+ There are other programs in this software project like “t”.
+ But if you do command line text filtering, t might be the best tool
+ that you will find.
+ See also
+ gsub
+ gsub_in_place
+ABOUT
+
theme = ENV["THEME"]&.downcase || ""
THEME = { "black" => "color: white; background-color: black;",
"brown" => "color: white; background-color: brown; ", "" => "" }[theme]
if THEME.empty?
- puts "No theme"
+ puts "Theme is default."
else
puts THEME
end
-INTRO = "Hello!"
+INTRO = " Welcome to the Ultimate Chat App"
CSS = "textview,textview * { #{THEME} } entry { margin: 10px 0px 0px 10px; } box:first-child>button {margin: 10px 2px 0px 10px; } button:hover { color: lightblue; }".gsub(
/ +/, " "
).dump
+#abort CSS
+
# for i in aarch64-linux-musl aarch64-windows-gnu aarch64-macos thumb-linux-musleabihf wasm32-wasi-musl x86_64-linux-musl x86_64-windows-gnu x86_64-macos; do zig cc -target $i -o $i out.c; done
OUT = +""
CYCLE_OF_ETHICAL_BEHAVIOUR = "How to Operate in Life, the best methodology
1. Fixate
@@ -103,24 +1075,17 @@
end
# abort
$colors = '
-static void open_browser(void);
-
-
-
-
-
-#define HR "~~~~~~~~~~~~~~~~~~~~~~~~\\n"
+#define HR "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n"
#define HR_NEWLINE HR "\n"
#define NEWLINE_HR "\n" HR
#if GUI
#define DEFAULT_MESSAGE "Enter question... "
-static void append_(const char* str);
#endif
typedef struct {
char **e;
@@ -232,111 +1197,108 @@
#define CRESET "\e[0m"
#define COLOR_RESET "\e[0m"
'
-GETLINE = <<~EOF
- #if WINDOWS
- typedef intptr_t ssize_t;
- #endif
+GETLINE = <<~HERE_DOC
- #if GUI
- static ssize_t getlin(char **lineptr, size_t *n, const char** const stream) {
- int c;
- c = **stream;
- (*stream)++;
- if (c=='\\0') {
- return -1;
- }
+ #if WINDOWS
+ typedef intptr_t ssize_t;
+ #endif
- if (!(*lineptr)) {
- *lineptr = (char*)malloc(128);
- if (!(*lineptr)) {
- err();
- }
- *n = 128;
- }
+ #if GUI
- size_t pos = 0;
- while(c !='\\0') {
- if (pos + 1 >= *n) {
- size_t new_size = *n + (*n >> 2);
- if (new_size < 128) {
- new_size = 128;
- }
- char *new_ptr = (char*)realloc(*lineptr, new_size);
- if (!new_ptr) {
- err();
- }
- *n = new_size;
- *lineptr = new_ptr;
- }
+ static ssize_t getlin(char **lineptr, size_t *n, const char **const stream) {
+ int c;
+ c = **stream;
+ (*stream)++;
+ if (c == '\\0') {
+ return -1;
+ }
- ((unsigned char *)(*lineptr))[pos ++] = c;
- if (c == '\\n') {
- break;
- }
+ if (!(*lineptr)) {
+ *lineptr = (char *)malloc(128);
+ if (!(*lineptr)) {
+ err();
+ }
+ *n = 128;
+ }
- c = **stream;
- (*stream)++;
-
- }
-
- (*lineptr)[pos] = '\\0';
- return pos;
-
+ size_t pos = 0;
+ while (c != '\\0') {
+ if (pos + 1 >= *n) {
+ size_t new_size = *n + (*n >> 2);
+ if (new_size < 128) {
+ new_size = 128;
}
- #else
- static ssize_t getlin(char **lineptr, size_t *n,FILE* stream) {
- int c;
- c = getc(stream);
- if (c == EOF) {
- return -1; }
+ char *new_ptr = (char *)realloc(*lineptr, new_size);
+ if (!new_ptr) {
+ err();
+ }
+ *n = new_size;
+ *lineptr = new_ptr;
+ }
- if (!(*lineptr)) {
- *lineptr = (char*)malloc(128);
- if (!(*lineptr)) {
- err();
- }
- *n = 128; }
+ ((unsigned char *)(*lineptr))[pos++] = c;
+ if (c == '\\n') {
+ break;
+ }
+ c = **stream;
+ (*stream)++;
+ }
- size_t pos = 0;
- while(c != EOF) {
- if (pos + 1 >= *n) {
- size_t new_size = *n + (*n >> 2);
- if (new_size < 128) {
- new_size = 128;
- }
- char *new_ptr = (char*)realloc(*lineptr, new_size);
- if (!new_ptr) {
- err();
- }
- *n = new_size;
- *lineptr = new_ptr;
- }
+ (*lineptr)[pos] = '\\0';
+ return pos;
+}
+#else
+static ssize_t getlin(char **lineptr, size_t *n, FILE *stream) {
+ int c;
+ c = getc(stream);
+ if (c == EOF) {
+ return -1;
+ }
- ((unsigned char *)(*lineptr))[pos ++] = c;
- if (c=='\\n') {
- break;
- }
+ if (!(*lineptr)) {
+ *lineptr = (char *)malloc(128);
+ if (!(*lineptr)) {
+ err();
+ }
+ *n = 128;
+ }
- c = getc(stream);
+ size_t pos = 0;
+ while (c != EOF) {
+ if (pos + 1 >= *n) {
+ size_t new_size = *n + (*n >> 2);
+ if (new_size < 128) {
+ new_size = 128;
+ }
+ char *new_ptr = (char *)realloc(*lineptr, new_size);
+ if (!new_ptr) {
+ err();
+ }
+ *n = new_size;
+ *lineptr = new_ptr;
+ }
- }
-
- (*lineptr)[pos] = '\\0';
- return pos;
-
+ ((unsigned char *)(*lineptr))[pos++] = c;
+ if (c == '\\n') {
+ break;
}
+ c = getc(stream);
+ }
+ (*lineptr)[pos] = '\\0';
+ return pos;
+}
- #endif
+#endif
-EOF
+HERE_DOC
def func(list, indent, old_str)
if indent == 1
puts "
/* BSD*/
@@ -383,10 +1345,20 @@
#include <string.h>
#include <errno.h>
#include <ctype.h>
+static void open_browser(void);
+static void clear_screen(void);
+
+
+#if GUI
+ static void append_text(const char* str);
+
+#endif
+
+
typedef long double ldouble;
static void err() { perror(\"Error\"); exit(1); }
#if GUI
@@ -673,18 +1645,34 @@
return true;
}
return false;
}
-static c_str_Str *mmain(
+
+static inline bool check_calc(char* l, c_str_Str *out, const size_t num_chars, const char ** error) {
+const ldouble n = crappy_but_working_calc(l, error, num_chars);
+if (!(*error)) {
+char buf[23];
+sprintf(buf, \"%.15Lg\", n);
+c_str_append_len(out, buf, strlen(buf));
+return true;
+
+}
+return false;
+
+}
+
+
+
+static c_str_Str *process_main(
#if GUI
const char *const t
#else
FILE* t
#endif
-, bool dont_open_browser) {
+, bool dont_open_browser, bool* did_something_at_all) {
c_str_Str* out = c_str_new(4096);
#if GUI
const char* st = t;
@@ -692,19 +1680,20 @@
FILE *st = t;
#endif
bool good_for_eval=true;
-bool did_something_at_all = false;
-
+*did_something_at_all = false;
+ssize_t num_chars;
+char *l;
#if GUI
for (;;)
#endif
{
- char *l = NULL;
+ l = NULL;
size_t size = 0;
- ssize_t num_chars = getlin(&l, &size,
+ num_chars = getlin(&l, &size,
#if GUI
&st
#else
st
#endif
@@ -722,30 +1711,11 @@
#endif
}
-{
-const char* error = NULL;
-const ldouble n = crappy_but_working_calc(l, &error, num_chars);
-if (!error) {
-char buf[23];
-sprintf(buf, \"%.15Lg\", n);
-free(l);
-c_str_append_len(out, buf, strlen(buf));
-return out;
-
-} else if (error == ONLY_SPACES) {
-free(l);
-return out;
-
-}
-
-}
-
-
c_set_Set set;
c_set_init(&set);
;
size_t i = 0;
for (;;){
@@ -784,22 +1754,22 @@
val = nil
val = map[old_str]
return unless val
- File.write "VAL", val
+# File.write "VAL", val
# abort [val.size.to_s, val.length.to_s,val.bytes.size].inspect if val.size > 30000
puts "switch (*line) {
case '\\0':
case ' ':
case '?':
case '!':
case '.':
case '\\t':
case '\\r':
case '\\n':
- if (check_append(&set, #{old_str.dump}, &did_something_at_all,out, #{val.dump}, #{old_str.bytes.size}, #{val.bytes.size}, &i)) { continue; }
+ if (check_append(&set, #{old_str.dump}, did_something_at_all,out, #{val.dump}, #{old_str.bytes.size}, #{val.bytes.size}, &i)) { continue; }
break;
default:
break;
}
".gsub "\n", "\n#{dent}"
@@ -846,493 +1816,631 @@
end
# return
return unless indent == 1
- print "
- good_for_eval=true;
- ++i;
-
+ print <<EOF
+good_for_eval = true;
+++i;
}
- after:
- c_set_free(&set);
- #if GUI
+after : c_set_free(&set);
+#if GUI
// puts(\"After\");
- #endif
+#endif
+// printf(\"Did? %d `%s`\\n\", *did_something_at_all, l);
- #if GUI
-// printf(\"Did? %d\\n\", did_something_at_all);
- #endif
+if (!(*did_something_at_all) && !dont_open_browser) {
+ char *const orig_l = l;
+ const char *error = NULL;
+ if (check_calc(l, out, num_chars, &error)) {
+ *did_something_at_all = 1;
+ goto end_;
+ }
+ if (error == ONLY_SPACES) {
+ goto end_;
+ }
+ while (isspace(*l)) {
+ ++l;
+ }
+ size_t len = strlen(l) - 1;
+ while (len > 0 && isspace(l[len])) {
+ l[len] = 0;
+ len--;
+ }
+ ++len;
+ if (len == 5 && !memcmp(l, "clear", 5)) {
+ clear_screen();
+#if GUI
+ append_text("<b>Screen cleared</b>\\n");
+#endif
- if (!did_something_at_all && !dont_open_browser){
- #if !GUI
- entry =l;
- puts(l);
- #endif
+ end_:
+ free(orig_l);
+ return out;
+ }
- open_browser(); dont_open_browser = true;
- }
+#if !GUI
+ entry = l;
+ puts(l);
+#endif
- free(l);
- good_for_eval=true;
+ open_browser();
+ dont_open_browser = true;
+}
+free(l);
+good_for_eval = true;
+}
- }
-
-
- return out;
-
-
- }
-
- "
+return out;
+}
+EOF
end
abort HASH if HASH.keys.uniq != HASH.keys
lst = HASH.keys.sort; # abort lst.to_s.gsub(",", "\n")
-File.write "temp", lst.inspect.gsub(",", ",\n")
+#File.write "temp", lst.inspect.gsub(",", ",\n")
func(lst, 1, +"")
-puts <<~EOF
+puts <<~HERE_DOC
+ #if LINUX && GUI
+ static void show_notification(const char *title, const char *message) {
+ notify_init("My App"); // Initialize libnotify
+ NotifyNotification *notification =
+ notify_notification_new(title, message, "dialog-information");
+ notify_notification_show(notification, NULL);
+ g_object_unref(notification);
+ notify_uninit(); // Uninitialize libnotify
+ }
+ #endif
- #if LINUX && GUI
- static void show_notification(const char *title, const char *message) {
+ #if GUI
+static const char *copy_to_clipboard(const char *text) {
- notify_init("My App"); // Initialize libnotify
- NotifyNotification *notification = notify_notification_new(title, message, "dialog-information");
- notify_notification_show(notification, NULL);
- g_object_unref(notification);
+ GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
- notify_uninit(); // Uninitialize libnotify
- }
- #endif
+ gtk_clipboard_set_text(clipboard, text, -1);
- #if GUI
- static const char* copy_to_clipboard(const char *text) {
+ gtk_clipboard_store(clipboard);
+ char *const str = three_string_cat(
+ "Copied '", text, "' to clipboard for ChatGPT.", 8, strlen(text), 27);
+#if LINUX
+ show_notification("Copied", str);
- GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
+ ;
- gtk_clipboard_set_text(clipboard, text, -1);
+#else
+ append_text(str);
+#endif
+ free(str);
- gtk_clipboard_store(clipboard);
- #if LINUX
- char* const str=three_string_cat("Copied '", text, "' to clipboard for ChatGPT.",8,strlen(text), 27);
- show_notification("Copied", str);
- free(str);
+ return text;
+}
- ;
+#endif
+static void open_browser() {
+#if GUI
+ char *const site =
+ strdup(copy_to_clipboard(gtk_entry_get_text(GTK_ENTRY(entry))));
+#else
+ char *const site = entry;
+#endif
- #else
- append_("Copied to clipboard");
- #endif
-
- return text;
- }
-
- #endif
-
- static void open_browser() {
- #if GUI
- char* const site=strdup(copy_to_clipboard(gtk_entry_get_text(GTK_ENTRY(entry))));
- #else
- char* const site = entry;
- #endif
-
- size_t len = strlen(site);
- for (size_t i = 0; i <len; ++i) {
- if (site[i]==' ') { site[i] = '+'; }
+ size_t len = strlen(site);
+ for (size_t i = 0; i < len; ++i) {
+ if (site[i] == ' ') {
+ site[i] = '+'; }
else if (site[i] == '\\'') { site[i]='+'; }
- else if (site[i] == '"') { site[i]='+'; }
- else if (site[i] == '&') { site[i]='+'; }
- else if (site[i] == '(') { site[i]='+'; }
- else if (site[i] == ')') { site[i]='+'; }
- else if (site[i] == '\\n') { site[i]='+'; }
- }
- for (size_t l=len - 1;;) {
- if (site[l] != '+') break;
- site[l] ='\\0';
- if (l == 0) break;
- --l;
- }
+ else if (site[i] == '"') {
+ site[i] = '+'; }
+ else if (site[i] == '&') {
+ site[i] = '+'; }
+ else if (site[i] == '(') {
+ site[i] = '+'; }
+ else if (site[i] == ')') {
+ site[i] = '+'; }
+ else if (site[i] == '\\n') {
+ site[i] = '+'; }
+ }
+ for (size_t l = len - 1;;) {
+ if (site[l] != '+')
+ break;
+ site[l] = '\\0';
+ if (l == 0)
+ break;
+ --l;
+ }
- void* chr;
+ void *chr;
- do {
- #if !WINDOWS
- #define DEVNULL " >/dev/null 2>/dev/null &"
- #endif
+ do {
+#if !WINDOWS
+#define DEVNULL " >/dev/null 2>/dev/null &"
+#endif
+#if LINUX
- #if LINUX
+ if (!system(chr =
+ three_string_cat_nolen("google-chrome chat.openai.com/chat "
+ "https://www.google.com/search?q=",
+ site, DEVNULL)))
+ break;
+ free(chr);
+#elif WINDOWS
- if (!system(chr=three_string_cat_nolen("google-chrome chat.openai.com/chat https://www.google.com/search?q=", site,DEVNULL))) break;
- puts(chr);
- free(chr);
- #elif WINDOWS
+ if (!system(chr = three_string_cat_nolen(
+ "start chrome.exe chat.openai.com/chat "
+ "https://www.google.com/search?q=",
+ site, "")))
+ break;
+ free(chr);
+#endif
- if (!system(chr = three_string_cat_nolen("start chrome.exe chat.openai.com/chat https://www.google.com/search?q=", site, ""))) break;
- free(chr);
- #endif
+#if LINUX
- #if LINUX
+ if (!system(
+ chr = three_string_cat_nolen(
+ "firefox chat.openai.com/chat https://www.google.com/search?q=",
+ site, DEVNULL)))
+ break;
+ free(chr);
- if (!system(chr = three_string_cat_nolen("firefox chat.openai.com/chat https://www.google.com/search?q=", site, DEVNULL))) break;
- free( chr);
+ if (!system(
+ chr = three_string_cat_nolen(
+ "xdg-open http://chat.openai.com/chat >/dev/null 2>/dev/null; "
+ "xdg-open http://www.https://www.google.com/search?q=",
+ site, DEVNULL)))
+ break;
+ free(chr);
+#elif WINDOWS
- if (!system(chr = three_string_cat_nolen("xdg-open http://chat.openai.com/chat >/dev/null 2>/dev/null; xdg-open http://www.https://www.google.com/search?q=", site, DEVNULL))) break;
- free(chr);
- #elif WINDOWS
+ if (!system(chr = three_string_cat_nolen(
+ "start microsoft-edge:https://chat.openai.com/chat && "
+ "start microsoft-edge:https://www.google.com/search?q=",
+ site, "")))
+ break;
+ free(chr);
- if (!system(chr = three_string_cat_nolen("start microsoft-edge:https://chat.openai.com/chat && start microsoft-edge:https://www.google.com/search?q=", site, ""))) break;
- free(chr);
+ if (!system(chr = three_string_cat_nolen(
+ "start iexplore.exe chat.openai.com/chat "
+ "https://www.google.com/search?q=",
+ site, "")))
+ break;
+ free(chr);
+ if (!system(chr = three_string_cat_nolen(
+ "start firefox.exe chat.openai.com/chat "
+ "https://www.google.com/search?q=",
+ site, "")))
+ break;
+ free(chr);
+#else
- if (!system(chr = three_string_cat_nolen("start iexplore.exe chat.openai.com/chat https://www.google.com/search?q=",site,""))) break;
- free(chr);
+ if (!system(chr = three_string_cat_nolen("open chrome chat.openai.com/chat "
+ "https://www.google.com/search?q=",
+ site, DEVNULL)))
+ break;
+ free(chr);
- if (!system(chr = three_string_cat_nolen("start firefox.exe chat.openai.com/chat https://www.google.com/search?q=",site,""))) break;
- free(chr);
- #else
+ if (!system(
+ chr = three_string_cat_nolen("open firefox chat.openai.com/chat "
+ "https://www.google.com/search?q=",
+ site, DEVNULL)))
+ break;
+#endif
+ } while (false);
+ free(chr);
+#if GUI
+ free(site);
+#endif
- if (!system(chr = three_string_cat_nolen("open chrome chat.openai.com/chat https://www.google.com/search?q=",site,DEVNULL))) break;
- free(chr);
+ // }
+ // {}
+}
- if (!system(chr = three_string_cat_nolen("open firefox chat.openai.com/chat https://www.google.com/search?q=",site,DEVNULL))) break;
- free(chr);
- #endif
- } while (false);
- free(chr);
- #if GUI
- free(site);
- #endif
+#if GUI
+static void on_button_clicked(void *, GtkWindow *);
+static void focus_loc_bar(void);
+static bool callback_hidden_bar(void *_, GtkWidget *b) {
+ switch (last_key) {
+ case GDK_KEY_f: // puts("f"); break;
+ break;
+ case GDK_KEY_o:
+#if LINUX
+ {
+ char* const str = three_string_cat_nolen(
+ "google-chrome ", gtk_entry_get_text(GTK_ENTRY(bar)), DEVNULL);
+ if (system(str)) {
+ }
+ free(str);
+ }
- // }
- // {}
- }
+#endif
+ break;
+ // break;
+ }
+ return false;
+}
- #if GUI
- static void on_button_clicked(void*, GtkWindow*);
- static void focus_loc_bar(void);
- static bool callback_hidden_bar(void* _,GtkWidget* b) {
- switch (last_key) {
- case GDK_KEY_f: //puts("f"); break;
- break;
- case GDK_KEY_o:#{" "}
- #if LINUX
- {
+static void on_button_clicked2(void *_, GtkWindow *window) {
+ open_browser();
+ on_button_clicked(0, window);
+}
- char* str = three_string_cat_nolen("google-chrome \\"", gtk_entry_get_text(GTK_ENTRY(bar)) , "\\"" DEVNULL);
- if (system(str)) {} free(str);
- }
+static void on_button_clicked3(void *_, GtkWindow *window) {
+ append_text(HR #{HELP_MSG} NEWLINE_HR);
+ gtk_widget_grab_focus(entry);
+}
- #endif
- break;
- //break;
+static void on_button_clicked(void *_, GtkWindow *const window) {
+ const char *const text = gtk_entry_get_text(GTK_ENTRY(entry));
+ if (strcmp(text, DEFAULT_MESSAGE) == 0)
+ return;
- }
+ const bool dont_open_browser = !_;
+ bool did_something_at_all;
+ c_str_Str *const txt =
+ process_main(text, dont_open_browser, &did_something_at_all);
- return false;
+ char *const cat = did_something_at_all
+ ? three_string_cat(HR, txt->str, NEWLINE_HR, strlen(HR),
+ strlen(txt->str), strlen(NEWLINE_HR))
+ : txt->str;
+ append_text(cat);
- }
+ if (did_something_at_all) {
+ free(cat);
+ }
+ c_str_free(txt);
+}
+static void make_bar(const char *text, const int lk) {
+ do {
+ if (lk == last_key && gtk_widget_get_visible(bar_parent)) {
+ gtk_widget_hide(bar_parent);
+ break;
+ } // break; }#{" "}
+ gtk_label_set_text(GTK_LABEL(label), text);
+ gtk_widget_grab_focus(bar);
+ gtk_widget_show(bar_parent);
+ } while (false);
+ last_key = lk;
+}
+static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event,
+ gpointer data) {
+ if ((event->state & GDK_CONTROL_MASK)) {
+ switch (event->keyval) {
+ case GDK_KEY_f:
+ make_bar(" Search...", event->keyval);
+ break;
+ case GDK_KEY_o:
+ make_bar(" Open URL in Chrome...", event->keyval);
+ break;
+ case GDK_KEY_w:
+ case GDK_KEY_q:
+ gtk_main_quit();
+ break;
+ case GDK_KEY_l:
+ focus_loc_bar();
+ break;
+ }
+ } else if (event->keyval == GDK_KEY_Escape) {
+ if (gtk_widget_get_visible(bar_parent)) {
+ gtk_widget_hide(bar_parent);
+ } else {
+ gtk_main_quit();
+ }
+ }
- static void on_button_clicked2(void* _, GtkWindow* window) {
- open_browser();
- on_button_clicked(0,window);
- }
+ else if (event->keyval == GDK_KEY_F11) {
+ static bool not_fs = true;
+ if (not_fs)
+ gtk_window_fullscreen(GTK_WINDOW(widget));
+ else
+ gtk_window_unfullscreen(GTK_WINDOW(widget));
+ not_fs = !not_fs;
+ }
+ return false;
+}
+static void focus_loc_bar(void) { gtk_widget_grab_focus(entry); }
- static void on_button_clicked3(void* _, GtkWindow* window) {
- append_(HR #{HELP_MSG} NEWLINE_HR);
- gtk_widget_grab_focus(entry);
- }
- #{" "}
- static void on_button_clicked(void* _, GtkWindow* const window)
- {
- const char* const text = gtk_entry_get_text(GTK_ENTRY(entry));
- if (strcmp(text,DEFAULT_MESSAGE) == 0)return;
+static const char *const MENU_ITEMS[] = {
+ "To help people",
+ "Donate at gregorycohenvideos@gmail.com via PayPal or e-transfer",
+ #{ABOUT.dump}, #{CYCLE_OF_ETHICAL_BEHAVIOUR.dump}
+};
- const bool dont_open_browser = !_;
- #{" "}
- c_str_Str* const txt = mmain(text, dont_open_browser);
- {
- char* const cat = three_string_cat(HR, txt->str,NEWLINE_HR, strlen(HR), strlen(txt->str), strlen(NEWLINE_HR)) ;
- append_(cat);
- free(cat);
- }
+#if 0
+static void append_non_markup(const char* input_text) {
+ GtkTextBuffer *const text_buffer =
+ gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
+ GtkTextIter text_iter_end;
+ gtk_text_buffer_get_end_iter(text_buffer, &text_iter_end);
+ GtkTextMark *const text_mark_end =
+ gtk_text_buffer_create_mark(text_buffer, NULL, &text_iter_end, false);
- c_str_free(txt);
+ gtk_text_buffer_get_end_iter(text_buffer, &text_iter_end);
+ gtk_text_buffer_insert(text_buffer, &text_iter_end, input_text,
+ strlen(input_text));
+ gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text_view), text_mark_end, 0.,
+ FALSE, 0., 0.);
+ while (gtk_events_pending())
+ gtk_main_iteration_do(false);
+ gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text_view), text_mark_end, 0.,
+ FALSE, 0., 0.);
+ while (gtk_events_pending())
+ gtk_main_iteration_do(false);
+}
+#endif
- }
+static void append_text(const char *input_text) {
+ GtkTextBuffer *const text_buffer =
+ gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
+ GtkTextIter text_iter_end;
+ gtk_text_buffer_get_end_iter(text_buffer, &text_iter_end);
+ GtkTextMark *const text_mark_end =
+ gtk_text_buffer_create_mark(text_buffer, NULL, &text_iter_end, false);
- static void make_bar(const char* text, const int lk) {
- do {
- if (lk == last_key && gtk_widget_get_visible(bar_parent)) {
- gtk_widget_hide(bar_parent);break; } //break; }#{" "}
- gtk_label_set_text(GTK_LABEL(label), text);
- gtk_widget_grab_focus(bar); gtk_widget_show(bar_parent);
- } while (false);
- last_key=lk;
- }
+ gtk_text_buffer_get_end_iter(text_buffer, &text_iter_end);
+ gtk_text_buffer_insert_markup(text_buffer, &text_iter_end, input_text,
+ strlen(input_text));
+ gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text_view), text_mark_end, 0.,
+ FALSE, 0., 0.);
+ while (gtk_events_pending())
+ gtk_main_iteration_do(false);
+ gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(text_view), text_mark_end, 0.,
+ FALSE, 0., 0.);
+ while (gtk_events_pending())
+ gtk_main_iteration_do(false);
+}
- static gboolean on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data) {
- if ((event->state & GDK_CONTROL_MASK)) {
- switch (event->keyval) {
- case GDK_KEY_f:
- make_bar(" Search...", event->keyval);
- break;
- case GDK_KEY_o:
- make_bar(" Open URL in Chrome...", event->keyval);
- break;
- case GDK_KEY_w:
- case GDK_KEY_q:
- gtk_main_quit();
- break;
- case GDK_KEY_l:
- focus_loc_bar();
- break;
- }
- }
- else if (event->keyval == GDK_KEY_Escape) {
- if (gtk_widget_get_visible(bar_parent)) {
- gtk_widget_hide(bar_parent);
- } else {
- gtk_main_quit();
- }
- }
+static inline void append_with_style(const char* const s) {
+ char *const chr = three_string_cat_nolen(HR, s, NEWLINE_HR);
+ append_text(chr);
+ free(chr);
+}
- else if (event->keyval == GDK_KEY_F11)
- {
- static bool not_fs = true;
- if (not_fs)
- gtk_window_fullscreen(GTK_WINDOW(widget));
- else
- gtk_window_unfullscreen(GTK_WINDOW(widget));
- not_fs = !not_fs;
- }
- return false;
- }
- static void focus_loc_bar(void) {
- gtk_widget_grab_focus(entry);
- }
+static void on_menu_item_activate(void *_, long data) {
+ append_with_style(MENU_ITEMS[data]);
+}
- static const char* const MENU_ITEMS[] = {
- "To help people", "Donate at gregorycohenvideos@gmail.com via PayPal or e-transfer","Made by Gregory Cohen in 2023", #{CYCLE_OF_ETHICAL_BEHAVIOUR.dump}
- };
+static void clear_screen(void) {
+ GtkTextBuffer *const text_buffer =
+ gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
- static void append_(const char* input_text) {
- GtkTextBuffer *const text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
- GtkTextIter text_iter_end;
- gtk_text_buffer_get_end_iter (text_buffer, &text_iter_end);
- GtkTextMark *const text_mark_end = gtk_text_buffer_create_mark(text_buffer, NULL, &text_iter_end, false);
+ gtk_text_buffer_set_text(text_buffer, "",
+ 0);
+}
- gtk_text_buffer_get_end_iter (text_buffer, &text_iter_end);
- gtk_text_buffer_insert_markup (text_buffer, &text_iter_end, input_text, strlen(input_text));
- gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (text_view), text_mark_end, 0., FALSE, 0., 0.);
- while (gtk_events_pending()) gtk_main_iteration_do(false);
- gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (text_view), text_mark_end, 0., FALSE, 0., 0.);
- while (gtk_events_pending()) gtk_main_iteration_do(false);
- }
- static void on_menu_item_1_activate(void* _, long data) {
- char* const chr = three_string_cat_nolen(HR, MENU_ITEMS[data], NEWLINE_HR);
- append_(chr);
- free(chr);
- }
+#endif
+#if !GUI
+static void clear_screen(void) {
+if (system("clear || cls")) {}
- #endif
+}
+#endif
- #{" "}
- int main(void)
- {
- #if GUI
- #if UNIX
- if (fork()) return 0;
- #endif
- #if WINDOWS
- _putenv("GTK_CSD=0");
- #endif
- gtk_init(0, 0);
- g_object_set(gtk_settings_get_default(), "gtk-enable-animations", FALSE, NULL);
- #{" "}
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS);
- gtk_window_set_default_size(GTK_WINDOW(window),500,650);
- gtk_window_set_title(GTK_WINDOW(window), "Ultimate Chat App");
- gtk_container_set_border_width(GTK_CONTAINER(window), 0);
- g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
- GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
- gtk_container_add(GTK_CONTAINER(window), box);
- entry = gtk_entry_new();
- gtk_entry_set_text(GTK_ENTRY(entry),DEFAULT_MESSAGE);
- GtkWidget *_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
- GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- text_view = gtk_text_view_new();
- #{" "}
- gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), FALSE);
+#{" "}
+int main(void) {
+#if GUI
+#if UNIX
+ if (fork())
+ return 0;
+#endif
+#if WINDOWS
+ _putenv("GTK_CSD=0");
+#endif
+ gtk_init(0, 0);
+ g_object_set(gtk_settings_get_default(), "gtk-enable-animations", FALSE,
+ NULL);
+#{" "}
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS);
+ gtk_window_set_default_size(GTK_WINDOW(window), 500, 650);
+ gtk_window_set_title(GTK_WINDOW(window), "Ultimate Chat App");
+ gtk_container_set_border_width(GTK_CONTAINER(window), 0);
+ g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
+ GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
+ gtk_container_add(GTK_CONTAINER(window), box);
+ entry = gtk_entry_new();
+ gtk_entry_set_text(GTK_ENTRY(entry), DEFAULT_MESSAGE);
+ GtkWidget *_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+ GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ text_view = gtk_text_view_new();
+#{" "}
+ gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(text_view), FALSE);
- gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE);
- gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD);
- gtk_container_add(GTK_CONTAINER(scrolled_window), text_view);
- gtk_box_pack_end(GTK_BOX(box), scrolled_window, TRUE, TRUE, 0);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE);
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD);
+ gtk_container_add(GTK_CONTAINER(scrolled_window), text_view);
+ gtk_box_pack_end(GTK_BOX(box), scrolled_window, TRUE, TRUE, 0);
- bar = gtk_entry_new();
- g_signal_connect(bar, "activate",G_CALLBACK(callback_hidden_bar),entry);
- {
- bar_parent=gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
- gtk_box_pack_start(GTK_BOX(bar_parent), label = gtk_label_new(""), 0, 0, 0);
- gtk_box_pack_start(GTK_BOX(bar_parent), bar, 1, 1, 0);
- gtk_box_pack_start(GTK_BOX(box), bar_parent, 0, 0, 0);
- }
- GtkWidget *bbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
+ bar = gtk_entry_new();
+ g_signal_connect(bar, "activate", G_CALLBACK(callback_hidden_bar), entry);
+ {
+ bar_parent = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_box_pack_start(GTK_BOX(bar_parent), label = gtk_label_new(""), 0, 0, 0);
+ gtk_box_pack_start(GTK_BOX(bar_parent), bar, 1, 1, 0);
+ gtk_box_pack_start(GTK_BOX(box), bar_parent, 0, 0, 0);
+ }
+ GtkWidget *bbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
- GtkWidget *button1 = gtk_button_new_with_label("Enter...");
- GtkWidget *button2 = gtk_button_new_with_label("Tri-Answer");
- GtkWidget *button3 = gtk_button_new_with_label("Help...");
- //puts("@");
- g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK(on_button_clicked), 0);
- g_signal_connect(G_OBJECT(button2), "clicked", G_CALLBACK(on_button_clicked2), 0);
- g_signal_connect(G_OBJECT(button3), "clicked", G_CALLBACK(on_button_clicked3), 0);
- #{" "}
- gtk_box_pack_start(GTK_BOX(bbox), button1, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(bbox), button2, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(bbox), button3, TRUE, TRUE, 0);
+ GtkWidget *button1 = gtk_button_new_with_label("Enter...");
+ GtkWidget *button2 = gtk_button_new_with_label("Tri-Answer");
+ GtkWidget *button3 = gtk_button_new_with_label("Help...");
+ // puts("@");
+ g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK(on_button_clicked),
+ 0);
+ g_signal_connect(G_OBJECT(button2), "clicked", G_CALLBACK(on_button_clicked2),
+ 0);
+ g_signal_connect(G_OBJECT(button3), "clicked", G_CALLBACK(on_button_clicked3),
+ 0);
+#{" "}
+ gtk_box_pack_start(GTK_BOX(bbox), button1, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(bbox), button2, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(bbox), button3, TRUE, TRUE, 0);
- gtk_widget_set_halign(bbox, GTK_ALIGN_CENTER);
- gtk_widget_set_valign(bbox, GTK_ALIGN_CENTER);
+ gtk_widget_set_halign(bbox, GTK_ALIGN_CENTER);
+ gtk_widget_set_valign(bbox, GTK_ALIGN_CENTER);
+ gtk_box_pack_end(GTK_BOX(box), bbox, FALSE, FALSE, 0);
+ g_signal_connect(entry, "activate", G_CALLBACK(on_button_clicked), entry);
+ GtkEntry *entry_widget = GTK_ENTRY(entry);
+ gtk_entry_set_activates_default(entry_widget, TRUE);
- gtk_box_pack_end(GTK_BOX(box), bbox, FALSE, FALSE, 0);
- g_signal_connect(entry, "activate", G_CALLBACK(on_button_clicked), entry);
- GtkEntry *entry_widget = GTK_ENTRY(entry);
- gtk_entry_set_activates_default(entry_widget, TRUE);
+ GtkWidget *menu_item_1 = gtk_menu_item_new_with_label("Philosophy");
+ GtkWidget *menu_item_2 = gtk_menu_item_new_with_label("Donate");
+ GtkWidget *menu_item_3 = gtk_menu_item_new_with_label("About");
+ GtkWidget *menu_item_4 =
+ gtk_menu_item_new_with_label(#{"How to operate".dump});
+ GtkWidget *menu = gtk_menu_new();
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_1);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_2);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_3);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_4);
+ GtkWidget *menu_button = gtk_menu_button_new();
+ gtk_menu_button_set_popup(GTK_MENU_BUTTON(menu_button), menu);
+#if !WINDOWS
- GtkWidget *menu_item_1 = gtk_menu_item_new_with_label("Philosophy");
- GtkWidget *menu_item_2 = gtk_menu_item_new_with_label("Donate");
- GtkWidget *menu_item_3 = gtk_menu_item_new_with_label("About");
- GtkWidget *menu_item_4 = gtk_menu_item_new_with_label( #{"How to operate".dump} );
- GtkWidget *menu = gtk_menu_new();
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_1);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_2);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_3);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item_4);
- GtkWidget *menu_button = gtk_menu_button_new();
- gtk_menu_button_set_popup(GTK_MENU_BUTTON(menu_button), menu);
+ GtkWidget *menu_icon = gtk_image_new_from_icon_name(
+ "open-menu-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_button_set_image(GTK_BUTTON(menu_button), menu_icon);
+ gtk_button_set_relief(GTK_BUTTON(menu_button), GTK_RELIEF_NONE);
+#endif
+ gtk_box_pack_start(GTK_BOX(box), _box, 0, 0, 0);
+ gtk_box_pack_end(GTK_BOX(_box), menu_button, 0, 0, 0);
+ gtk_box_pack_end(GTK_BOX(_box), entry, 1, 1, 0);
- #if !WINDOWS
+ GtkWidget *menu_items[] = {menu_item_1, menu_item_2, menu_item_3,
+ menu_item_4};
+ for (size_t i = 0; i < 4; ++i) {
+ g_signal_connect(G_OBJECT(menu_items[i]), "activate",
+ G_CALLBACK(on_menu_item_activate), (gpointer)i);
+ }
- GtkWidget *menu_icon = gtk_image_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_button_set_image(GTK_BUTTON(menu_button), menu_icon);
- gtk_button_set_relief(GTK_BUTTON(menu_button), GTK_RELIEF_NONE);
- #endif
+ g_signal_connect(G_OBJECT(window), "key-press-event",
+ G_CALLBACK(on_key_press), NULL);
- gtk_box_pack_start(GTK_BOX(box),_box,0,0,0);
- gtk_box_pack_end(GTK_BOX(_box), menu_button,0,0,0);
- gtk_box_pack_end(GTK_BOX(_box), entry, 1, 1, 0);
- #{" "}
+ {
+ GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
+ GtkTextIter start;
+ gtk_text_buffer_get_start_iter(buffer, &start);
+ gtk_text_buffer_insert_markup(
+ buffer, &start,
+ "<span size=\\"x-large\\" color=\\"#00DD00\\">#{INTRO}#{'</span>'*1}\\n\\nThis is intended to "
+ "be the Ultimate Chat App "
+ "(Non-AI), a truth generator of "
+ "sorts, an app that inspires and "
+ "motivates. It operates in 3 "
+ "ways, it's local, it doesn't "
+ "need the Internet. If it "
+ "doesn't have a superior answer, "
+ "then it uses other means "
+ "(Google and ChatGPT).\\n\\nTry "
+ "asking it questions about "
+ "operation, physics, or health, "
+ "as some "
+ "examples.\\n\\n\\n<b>#{"It gives you what you want".upcase}</b>#{'\\n' * (4 - 1)}",
+ -1);
+ ;
+ }
- GtkWidget *menu_items[] = {menu_item_1, menu_item_2, menu_item_3, menu_item_4};
- for (size_t i = 0; i < 4; ++i) {
- g_signal_connect(G_OBJECT(menu_items[i]), "activate", G_CALLBACK(on_menu_item_1_activate),(gpointer)i);
- }
+ const int num = 10;
+ gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_view), num);
+ gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_view), num);
+ gtk_text_view_set_top_margin(GTK_TEXT_VIEW(text_view), num);
+ gtk_text_view_set_bottom_margin(GTK_TEXT_VIEW(text_view), num);
- g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(on_key_press), NULL);
+ GtkCssProvider *provider = gtk_css_provider_new();
+ GdkDisplay *display = gdk_display_get_default();
+ GdkScreen *screen = gdk_display_get_default_screen(display);
+ gtk_style_context_add_provider_for_screen(
+ screen, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);
+ gtk_css_provider_load_from_data(provider, #{CSS}, -1, NULL);
+ gtk_widget_grab_focus(entry);
+ // gtk_widget_grab_focus(entry);
- {
- GtkTextBuffer*buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view));
- GtkTextIter start;
- gtk_text_buffer_get_start_iter(buffer, &start);
- gtk_text_buffer_insert_markup(buffer, &start, "<span size=\\"x-large\\"><span color=\\"#0000EE\\">#{INTRO}</span></span>\\n\\nThis is intended to be the Ultimate Chat App (Non-AI), a truth generator of sorts, an app that inspires and motivates. It operates in 3 ways, it's local, it doesn't need the Internet. If it doesn't have a superior answer, then it uses other means (Google and ChatGPT).\\n\\nTry asking it questions about operation, physics, or health, as some examples.\\n\\n\\n<b>#{"It gives you what you want".upcase}</b>#{'\\n' * (4 - 1 - 1)}" HR_NEWLINE, -1); ;
- }
+ gtk_widget_show_all(menu);
+ gtk_widget_show_all(window);
+ gtk_widget_hide(bar_parent);
+ gtk_main();
- const int num = 10;
- gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_view), num);
- gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_view), num);
- gtk_text_view_set_top_margin(GTK_TEXT_VIEW(text_view), num);
- gtk_text_view_set_bottom_margin(GTK_TEXT_VIEW(text_view),num);
+ if (malloc_free_count == 0) {
+ } else {
+#if WINDOWS
+ printf("mfc %llu\\n", malloc_free_count);
+#else
+ printf("mfc %lu\\n", malloc_free_count);
+#endif
+ }
+#else
+ const bool tty = isatty(1);
+
+ for (;;) {
+ if (tty) {
+ printf(BGRN);
+ printf("Ultimate chat app>> ");
+ printf(COLOR_RESET);
+ }
+ bool did_something_at_all;
+ c_str_Str *s = process_main(stdin, 0, &did_something_at_all);
+ if (s) {
+ if (*s->str) {
+ puts(s->str);
+ }
+ c_str_free(s);
+ } else {
+ break;
+ }
+ }
- GtkCssProvider *provider = gtk_css_provider_new ();
- GdkDisplay *display = gdk_display_get_default();
- GdkScreen *screen = gdk_display_get_default_screen (display);
- gtk_style_context_add_provider_for_screen (screen, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);
- gtk_css_provider_load_from_data(provider,#{CSS}, -1, NULL);
- gtk_widget_grab_focus(entry);
- //gtk_widget_grab_focus(entry);
+#endif
+ return 0;
+}
- gtk_widget_show_all(menu);
- gtk_widget_show_all(window);
- gtk_widget_hide(bar_parent);gtk_main();
+ HERE_DOC
- if (malloc_free_count == 0) {
- } else {
- #if WINDOWS
- printf("mfc %llu\\n", malloc_free_count);
- #else
- printf("mfc %lu\\n", malloc_free_count);
- #endif
- }
- #else
- const bool tty = isatty(1);
- for (;;) {
- if (tty) {
- printf(BGRN);
- printf("Ultimate chat app>> ");
- printf(COLOR_RESET);
- }
- c_str_Str* s = mmain(stdin,0);
- if (s) {
- if (*s->str) {
- puts(s->str);
- }
- c_str_free(s);
- } else {
- break;
- }
- }
-
- #endif
- return 0;
- }
-
- EOF
-
File.write "/tmp/out.c", OUT
return unless Dir.home == "/home/a" && ENV["RETURN"].nil?
require "os"
pkg = `pkg-config --libs --cflags #{(OS.linux? && "libnotify") || ""} gtk+-3.0`.strip
args = " -Wfatal-errors -Werror -Wno-unused-parameter -Wno-format -s -Wall -Wextra -fwhole-program -Wno-implicit-fallthrough -Wno-unused-value -O2"
cmd = "
-(gcc #{args} /tmp/out.c #{pkg}&&echo 1) || exit 1 &
-(/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-gcc -mwindows #{args} /tmp/out.c -o q.exe `/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-pkg-config --cflags --libs gtk+-3.0`&&echo 2) || exit 1 &
-(gcc -DNOGUI -o UCA_cli #{args} /tmp/out.c && echo 3) || exit 1 &
+set -e
+(gcc #{args} /tmp/out.c #{pkg}&&echo LIN_GUI) || exit 1 &
+(/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-gcc -mwindows #{args} /tmp/out.c -o q.exe `/usr/lib/mxe/usr/bin/x86_64-w64-mingw32.static-pkg-config --cflags --libs gtk+-3.0`&&echo WIN_GUI) || exit 1 &
+(gcc -DNOGUI -o UCA_cli #{args} /tmp/out.c && echo LIN_CLI) || exit 1 &
wait
"
system cmd, exception: true
# return
@@ -1343,15 +2451,15 @@
cp "/home/a/UCA_cli", "/home/a/democracy/#{i}/UCA_cli"
cp "/home/a/a.out", "/home/a/democracy/#{i}/ULTIMATE_CHAT_APPLICATION_(LINUX)"
cp "/home/a/q.exe", "/home/a/democracy/#{i}/ULTIMATE_CHAT_APPLICATION.exe"
end
-cp "/home/a/UCA_cli", Dir.glob("/home/a/foon/democ*/")[0]
-cp "/home/a/q.exe", Dir.glob("/home/a/foon/democ*/ULT*.exe")[0]
-cp "/home/a/a.out", Dir.glob("/home/a/foon/democ*/ULT*LINUX*")[0]
+cp "/home/a/UCA_cli", Dir.glob("/home/a/foon/*/")[0]
+cp "/home/a/q.exe", Dir.glob("/home/a/foon/*/ULT*.exe")[0]
+cp "/home/a/a.out", Dir.glob("/home/a/foon/*/ULT*LINUX*")[0]
system "cp /home/a/PP.rb /home/a/output_data /home/a/democracy --verbose
-cp /home/a/PP.rb /home/a/output_data /home/a/foon/d* --verbose
+cp /home/a/PP.rb /home/a/output_data /home/a/foon/* --verbose
"
-cp "/home/a/q.exe", Dir.glob("/home/a/foon/democ*/bin/ULT*.exe")[0]
-cp "/home/a/a.out", Dir.glob("/home/a/foon/democ*/bin/ULT*LINUX*")[0]
+cp "/home/a/q.exe", Dir.glob("/home/a/foon/*/bin/ULT*.exe")[0]
+cp "/home/a/a.out", Dir.glob("/home/a/foon/*/bin/ULT*LINUX*")[0]
-cp "/home/a/UCA_cli", Dir.glob("/home/a/foon/democ*/bin/")[0]
+cp "/home/a/UCA_cli", Dir.glob("/home/a/foon/*/bin/")[0]