From 1447390f3f43a2a400429975b59a8c7c433cc0e4 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Fri, 31 Mar 2023 13:47:58 -0400 Subject: [PATCH] Build and release scripts, reorganize code, prep for releases --- .gitignore | 3 + LICENSE | 2 +- README.md | 23 ++++- aminet.readme.erb | 17 ++++ bin/rebuild_raw_source | 6 ++ bin/release | 81 +++++++++++++++ .../HTTP Client Example.amos | Bin examples/HTTP Client Example.basic | 93 ++++++++++++++++++ examples/HTTP Server Example.amos | Bin 0 -> 1934 bytes examples/HTTP Server Example.basic | 56 +++++++++++ http get v3.amos | Bin 1648 -> 0 bytes icons.info | Bin 0 -> 628 bytes icons/BSDSocket-Extension.info | Bin 0 -> 1222 bytes .../AMOSPro_BSDSocket.Lib.info | Bin 0 -> 1598 bytes icons/BSDSocket-Extension/API.md.info | Bin 0 -> 1651 bytes icons/BSDSocket-Extension/LICENSE.info | Bin 0 -> 1651 bytes icons/BSDSocket-Extension/README.md.info | Bin 0 -> 1651 bytes icons/BSDSocket-Extension/examples.info | Bin 0 -> 1222 bytes icons/BSDSocket-Extension/src.info | Bin 0 -> 1222 bytes the minimum.amos | Bin 60 -> 0 bytes updated sockaddr in.amos | Bin 704 -> 0 bytes 21 files changed, 277 insertions(+), 4 deletions(-) create mode 100644 aminet.readme.erb create mode 100755 bin/rebuild_raw_source create mode 100755 bin/release rename HTTP Client Example.amos => examples/HTTP Client Example.amos (100%) create mode 100644 examples/HTTP Client Example.basic create mode 100644 examples/HTTP Server Example.amos create mode 100644 examples/HTTP Server Example.basic delete mode 100644 http get v3.amos create mode 100644 icons.info create mode 100644 icons/BSDSocket-Extension.info create mode 100644 icons/BSDSocket-Extension/AMOSPro_BSDSocket.Lib.info create mode 100644 icons/BSDSocket-Extension/API.md.info create mode 100644 icons/BSDSocket-Extension/LICENSE.info create mode 100644 icons/BSDSocket-Extension/README.md.info create mode 100644 icons/BSDSocket-Extension/examples.info create mode 100644 icons/BSDSocket-Extension/src.info delete mode 100644 the minimum.amos delete mode 100644 updated sockaddr in.amos diff --git a/.gitignore b/.gitignore index db25df0..2b9712b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ *.uaem *.Bak +dist/ +build/ +aminet/ diff --git a/LICENSE b/LICENSE index a4e9dc9..37fa1de 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT No Attribution -Copyright +Copyright 2023 John Bintz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software diff --git a/README.md b/README.md index cdd39a3..82402b8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # amos-pro-bsdsocket-extension -Want to get online with your AMOS program? Now you can in (some) style! +Want to get online with your AMOS program? Now you can in style! This extension provides a wrapper around the BSD Socket library provided by your Internet stack. There's some attempt to roll up some @@ -151,16 +151,33 @@ This project uses semantic versioning. Copyright 2023 John Bintz. Licensed under the MIT License. If you use this in your project, and you really want to, -throw a link to theindustriousrabbit.com somewhere. +throw a link to theindustriousrabbit.com somewhere! You can +also find a donate link on +[the About section on The Industrious Rabbit](https://theindustriousrabbit.com/about). ## Feedback? Bug reports? Go to the [About section on The Industrious Rabbit](https://theindustriousrabbit.com/about) to contact me. +## Changelog + +### 0.7.0 (2023-02-20) + +* Current development release + ## Development ### Environment * Clone the [AMOS Professional source code](https://github.com/AOZ-Studio/AMOS-Professional-Official) -* Copy the contents of +* Copy the contents of `src` into the `extensions` folder +* Run `absdsocket` + +### Releasing + +#### Ubuntu/Debian + +* Install `jlha-utils` and a modern enough Java to run it +* Install Ruby +* Run `bin/release` diff --git a/aminet.readme.erb b/aminet.readme.erb new file mode 100644 index 0000000..a21437d --- /dev/null +++ b/aminet.readme.erb @@ -0,0 +1,17 @@ +Short: Use bsdsocket.library in AMOS Pro +Uploader: aminet@theindustriousrabbit.com (John Bintz) +Author: John Bintz +Type: dev/amos +Version: <%= version %> +Architecture: m68k-amigaos + +Want to get online with your AMOS program? Now you can in style! + +This extension provides a wrapper around the BSD Socket library +provided by your Internet stack. There's some attempt to roll up some +of the low-level functionality into something more usable by AMOS. + +More details provided in README.md in the archive file, and in the +source code repository at: +https://code.hackerbun.dev/TheIndustriousRabbit/amos-pro-bsdsocket-extension + diff --git a/bin/rebuild_raw_source b/bin/rebuild_raw_source new file mode 100755 index 0000000..2a1b19b --- /dev/null +++ b/bin/rebuild_raw_source @@ -0,0 +1,6 @@ +#!/bin/bash + +for i in examples/*.amos; do + echo "$i" + ~/Projects/amostools/listamos -e AMOSPro_BSDSocket.Lib "${i}" > "${i%.amos}.basic" 2>/dev/null +done diff --git a/bin/release b/bin/release new file mode 100755 index 0000000..dd9dd06 --- /dev/null +++ b/bin/release @@ -0,0 +1,81 @@ +#!/usr/bin/env ruby + +require 'fileutils' +require 'open3' +require 'erb' + +source = File.read('src/BSDSocket.s') + +aminet_template = ERB.new(File.read("aminet.readme.erb")) + +capture_version = false +version = nil + +source.lines.each do |line| + if capture_version + version = line[/dc\.b "([^"]+)"/,1] + + break + end + + if line[/^Version.*MACRO/] + # the version is on the next line + capture_version = true + end +end + +FileUtils.mkdir_p 'dist' + +build_base = 'build' +project_name = 'BSDSocket-Extension' + +build_dir = File.join(build_base, project_name) +FileUtils.rm_rf build_dir +FileUtils.mkdir_p build_dir +FileUtils.mkdir_p 'aminet' + +hackerbun_target = File.expand_path("dist/AMOSPro_BSDSocket_#{version}.lha") + +[ + "AMOSPro_BSDSocket.Lib", + "README.md", + "API.md", + "LICENSE", +].each do |file| + target = "#{build_dir}/#{file}" + FileUtils.mkdir_p File.dirname(target) + FileUtils.cp file, target +end + +[ + "src", + "examples" +].each do |dir| + FileUtils.cp_r dir, "#{build_dir}/#{dir}" +end + +Dir["icons/**/*.info"].each do |info| + target = info.gsub("icons/", build_base + "/") + FileUtils.mkdir_p File.dirname(target) + FileUtils.cp info, target +end + +Dir.chdir build_base do + Open3.popen2e( + "jlha", "c", hackerbun_target, + *(Dir["*"])) do |stdin, stdout_and_stderr, wait_thr| + + Thread.new do + stdout_and_stderr.each { |l| puts l } + end + + stdin.close + + wait_thr.value + end +end + +FileUtils.cp hackerbun_target, "aminet/BSDSocket-Extension.lha" +File.open("aminet/BSDSocket-Extension.readme", "w") do |fh| + fh.puts aminet_template.result(binding) +end diff --git a/HTTP Client Example.amos b/examples/HTTP Client Example.amos similarity index 100% rename from HTTP Client Example.amos rename to examples/HTTP Client Example.amos diff --git a/examples/HTTP Client Example.basic b/examples/HTTP Client Example.basic new file mode 100644 index 0000000..f29e981 --- /dev/null +++ b/examples/HTTP Client Example.basic @@ -0,0 +1,93 @@ +' This code shows how to make a non-blocking request with +' timeout to a remote HTTP server to retrieve a webpage +' and print it on the screen. +' +' This requires the BSD Socket Extension installed in Extension +' Slot 18. +' +' Copyright 2023 John Bintz +' Visit theindustriousrabbit.com for more info +' Licensed under the MIT License + +LIB=Socket Library Open + +If LIB<=0 + Print "Unable to open bsdsocket.library!" + End +End If + +SOCKET=Socket Create Inet Socket + +' A lot of functions return debugging info. Assign that to +' some useless variable, unless you're trying to figure out +' an issue with the extension. +_=Socket Set Nonblocking(SOCKET,True) + +HOST$="aminet.net" +Print "Trying to connect to "+HOST$ +IP$=Dns Get Address By Name$(HOST$) + +' When nonblocking sockets start to connect, they may or +' may not finish their connection before the function +' returns. If the socket doesn't connect, we have to wait +' for it to do so. +ALREADY_CONNECTED=Socket Connect(SOCKET To IP$,80) + +Reserve As Work 30,1024 + +' Due to how AMOS takes over Ctrl-C handing, there's no way +' for the bsdsocket code to use Exec's Ctrl-C handling. +' This means we need to poll for network activity. +' However, the async functions will immediately return +' if they get appropriate data before the timeout ends. +' This is somewhat more CPU efficient. +For I=1 To 100 + If ALREADY_CONNECTED=-1 + ' We can check a socket for writing if it's currently + ' attempting to connect. Once it connects, we can stop + ' checking for that status -- we're ready to communicate + ' with the remote server. + RESULT=Socket Wait Async Writing(SOCKET,100) + + If RESULT>0 + ALREADY_CONNECTED=0 + End If + End If + + If ALREADY_CONNECTED=0 + Print "Connected to "+HOST$ + + HTTPGET$="GET / HTTP/1.0"+Chr$(10)+"Host: amiga"+Chr$(10)+Chr$(10) + Print "Making HTTP request to "+HOST$ + _=Socket Send(SOCKET,Varptr(HTTPGET$),Len(HTTPGET$)) + + For J=1 To 100 + RESULT=Socket Wait Async Reading(SOCKET,50) + + If RESULT>0 + Print "Receiving data" + ' You can receive either to a block of memory... + ' + 'OUT=Socket Recv(SOCKET To Start(30),1024) + 'For K=0 To OUT-1 + ' _DATA$=_DATA$+Chr$(Peek(Start(30)+K)) + 'Next K + ' + ' ...or to a string... + _DATA$=Socket Recv$(SOCKET,1024) + + Print _DATA$ + ' If the amount read is less than the length of data, + ' assume we're done. This is fine for HTTP. + If Len(_DATA$)<1024 + Exit 2 + End If + End If + Next J + Exit + End If +Next I + +Socket Library Close + + diff --git a/examples/HTTP Server Example.amos b/examples/HTTP Server Example.amos new file mode 100644 index 0000000000000000000000000000000000000000..e8e5f16cb40bab1527e291d650086f70fd433bb2 GIT binary patch literal 1934 zcmZ`)!D<{w5Up9QB}j~Lmf$EMSQQ=O5R_#t3n7d!k?e#h*s@U^gTWwrXL_|wX1h1t zJ-e347v$`74*rB3OinrGkW>C=1MjI|a-Q9~ zy~#vN@w064knZr4u?dWqexWAQQgiMK%_Ha8O|>=lm=#Z*kL)a;xXSZH~ z*yg!1Q354Nab6m2BS(iy*6KX2a~x~SQ*Ueva}}PBHS$*_e~U-Phsd`E8=E{li8`dG zLHn8Z>~*fq48M)Mo1_PI{XS7wvhnwUe15|B-1Nko<8kDT!NzU=-ixx|-1<;T2r|la8ma5l?gn&k)-n z`i%`04iLEOC@vf@urBhjMA|wlTVMbcc@D;u1x{7aL~Am^P8v-Wh1VfSzz~B7AvHW| zu1?sD>gqMhpg%7ipy{)qh2|DJbVRAQQ+iABe8=>>cb9%4>RpKI{CXh{F)~x5vuCbK zou+1zlA6)bn6l`|M(sx`$JjOv&-}YcIsOwzIIy)!_ z1$D>>L!z>bUZu|hCw8HLE&fh>-3RwKAtS6*vv?j7vR@?$rOgf}Hg6RMEdwpd-hrBw zpwQ?2QNpNUYODeeHFmk#Y^+jrvfhBw14o?0Kuc=C6--&;*I0QAR{+A5=3^8F%fg!l zzWfLT__+yi6Kq_{AX<_9FOsV?mNHi5h=azdMPnvSU6hdc%j|T<7tl>?WdF8oEO)V~ z3B^TfSbfv(>*`WMa5vBOw05dyTWNVRillM<-{-fu{b2wvOcuV=l#drZnEsWr~#*Zv;?KVXR<#~Q9fU%%9qZ?yf~xR zM*sKDsH9PrKDPO=_T0q$Id6vTjr1Js)h3N)IUBw9^Pc2?+TH-E-82%OPGl}&>w4SE zKkw)zG1aA(sWqv&BSM6c=@*cRb@QZxR)s=Kl1_*)Ho3L>d=GAx*0{cBq{bGEV(67e zh+HcO_Gv4m^{IEqUQOyU$q89Oy;2LVF4@cHP75-}m8H&a@cI?;cX9TG?$y6>t7e^V Z!GBM76B~*<;Yyb717wH`>`wLq(f>i65kLR{ literal 0 HcmV?d00001 diff --git a/examples/HTTP Server Example.basic b/examples/HTTP Server Example.basic new file mode 100644 index 0000000..956d97a --- /dev/null +++ b/examples/HTTP Server Example.basic @@ -0,0 +1,56 @@ +' This is example code for opening a port on your machine, +' waiting for a client to connect, then printing out the +' first 1024 bytes the server receives from the client. +' +' Copyright 2023 John Bintz +' Licensed under the MIT License +' Visit theindustriousrabbit.com for more information + +If Socket Library Open<=0 + End +End If + +SOCKET=Socket Create Inet Socket + +' Ensure our socket does not block, and that we can reuse +' the address we bind to right away if our server is closed. +_=Socket Set Nonblocking(SOCKET,True) +_=Socket Reuse Addr(SOCKET) + +' You can bind your socket to any interface on the machine. +' You'd have to get that list of interfaces yourself. +' Using "INADDR_ANY" is the equivalent of binding to 0.0.0.0. +RESULT=Socket Bind(SOCKET To "INADDR_ANY",8000) + +_=Socket Listen(SOCKET) +Print "Listening on port 8000" + +For I=1 To 100 + ' Here. we're testing our non-blocking async socket for + ' reading. If the socket has been connected to, this request + ' will return a value greater than 0. Otherwise, it will + ' wait for a half second, then return 0. + RESULT=Socket Wait Async Reading(SOCKET,500) + + If RESULT>0 + ' Accept the connection so we can receive data from it. + _REMOTE_SOCKET=Socket Accept(SOCKET) + + ' Print out the remote IP address and port. + Print Socket Inet Ntoa$(Socket Get Host(_REMOTE_SOCKET)) + Print Socket Get Port(_REMOTE_SOCKET) + + ' Receive the first 1024 or fewer bytes of data from the + ' client and print them out. + Print Socket Recv$(_REMOTE_SOCKET,1024) + + ' If we exit now, the connection will stay open. Closing the + ' library or restarting the program will close all open + ' connections. + Exit + End If + Wait Vbl +Next I + +Socket Library Close + diff --git a/http get v3.amos b/http get v3.amos deleted file mode 100644 index 0265493fdd24de2fa6a8ade1fa976bfd779f7a63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1648 zcmah}%}*0i5TAX!?7~9%Xi(|}Urb|KKFSu5D51m_1PtLLw0a;U&C-2=NhO=jmgtI5l#Iq+){sVR9ZKRfncr_Fxwet!DZ7%-@oIc(ngi&s z?<@Kigt<7ji-!flOXbq|ZlRnz$d~r`zULisSG+wE6_2AgQvkXZ&;c|kGVC!gZ!zQdI6v+?ArJ2p%}Uj70e^NdX!l_L+?R4>tT?+iGB@Uvp4Jn z=i$_k(?`BRjqR5!6y-6Pb}?TPUJM_AUPY^-ZNPI+s2H!zbLCP=vmCuBP$!}OgPE`B9tW*1iRo0+d0YBqX_2);dTqcGt3%@Kbwrj zXP(BMSg{!kV266~@HrvxBV27F0$^`~wV%BoO5$Di&@JbLbL0v{OuaD`{!8|B*pH`? z9XsEzusLlJV-7RO6DsPv0%!8=0Nm4%neXj#*3N5R>o*`|pjTK2Y{gNb&J0^>sZZ7d z4%O0Q+>N%&kTo_Uq0-1gYWa+q4P?haOsQMhE+h(s9yHryz41{EQj@AlO<^Mju|{?B z|MyJ7@ff=Pu;}B7Q{^L_j5NQ8@{xM#U4D__6MQ9;*_?>StlCw_7WRU=Yr<*m3gdLI zp!Q}t>Tb`5*7Ig>fFVEg(3&lWi-IBS=O;VWRJEPDBomVc){OJjY*>(Qs(}pvddQ!7NtTE<8gox*(03u z>|!#L3@7~8=)%4mj%*5X5NSXfU5!Qo4D#34#j(d%0lKJ09p-Lu01O0hHlWTVH0-Cf zFVth2`p$m#38%-BJ;&9c2IMrD^lun!iRvXTF^Ykn^5@Trp~zFYDg5oxp~$)9{?~w_ nR?&S-UZJl2wTZek$%#?49l`UoO;ttx=-;MoL{GAqssQ{3yLDnc diff --git a/icons.info b/icons.info new file mode 100644 index 0000000000000000000000000000000000000000..2470fed6ef726193c2d68bfcdc13091027594e24 GIT binary patch literal 628 zcmZ{gzfJ-{5XQe-&+|-(5G!Iu2!*jC7$sJ>k3d5Ku`%&I*hla&47Cqn=?j?9S!m%C z;1$GmzL`5XBYw&5Z)bM?Wahnt1hsB(f=ukh=j~6QpT5)|TPAM%4D#af{kx$+)B#2q zB@eidk+$=0LH^Mk=TX$?%n){WaI@aQuY@*3;|E&mO_3`H!sFP3^3|Bbcod)2&%l91 zS-z$rh1J`b*|-ahD`CTQaaq}8Zg7{8*iM4^5Lu5hh2yW*qDMu$DmYUVli z&wRF|o^Um#Zn4ms8+a|1R?LLlg;I8r1uxq%au>9zELi?`a9Vd63az)Bxv&059BRLb ZX7Q@ycH}NN_gZ#Aau;NMSopu$e*h2^v=smV literal 0 HcmV?d00001 diff --git a/icons/BSDSocket-Extension.info b/icons/BSDSocket-Extension.info new file mode 100644 index 0000000000000000000000000000000000000000..95a7a0d131d2f520b4ab8ab01aecb49b0299229b GIT binary patch literal 1222 zcmb7EPe>F|82`ODyR)0E?sV8vF&m5p5mP&4R_Knl34w>G#-xK;UZO-JJQQgAQX%N> zwHCYBuGu9zsI@9o*9~0g67J%qQ+f#UVEg*sn^mxb&`F(%h_sws<*$oQ}WIGjz z;v6C{i8H72YNb>8qD@8i8RMghJHeB)1gGf=I8~F|$_H4$SG2HByp~dN4lCgtfAdq_ zJHe`uLT&x%lw@A#U8nADfZxmq_FU>Frcz}Qw)UE6mMLJ2Fy~%jMULj-S;3`=Q#m*8 zm&64PRs4+T%THGL&nlYUW)a?0{Ff8{vWn)+md6!Jic`K{b|dP>5s(vTNCL*VNt~pi z^Ut_staon?J;nh)C-l7AN)3|4=i!c42ker^x#4kN?G!8^8SzcNCTy3AHrJCIfRv-laEkNdPZ3z!laYQ zzrnx$-3qn$pkng}Lc@LVXG2|$@g9WpL4<~gF9$K#MsWcg1?9W(x_K<2EJ^Q!&hxug zS-QA`>J-_8TAu?DZJLC>F%xtt0}!H;5My*eHlhBJXj9vLF^HpUYR6rd=@Pibzod_Hhz9 zrFG(l*zL>JGo@72Ge-l*E*{p2S#K8*L_+f&FaCtS4wXMMp^-76k%znBP{8QO3#Y*b zPtbYx0HG}$r^IPaqhmm*dR{|uLMDXfnBj=1IqQ1`xq%MK`Dacq!0=4ZQz+?osPwJ* zbQx74MtX8Nk9MVJ=Nei`&*!8@O!a4DB9eLMG}WeXVLc1;Y@>)Ij|AuI8W3ByV73w$ z7N4(a!g)IJA}F8A)96P74RCB_N!(L&CF)E4Aj;L;uB&*EuIj}_`|{w(uzlyT-Tm

HOs__Gx7fB$Zn--f2B6;XGJ`_y-q@?Ng1EfCa zE^Z(y;s%NMpe0X2NJ3tOn6O|rHn5)2@AyA6mspAPusgr` z&zv)J4l{E%W3WK8j^GP)p&cP=EB@e2hJTg!N)CC$#W{GZeVx^Yam3x^Q| zetJIq?-XpLlvr&KpO_V!k#YLh@aWVOIfIv!DwMq<9%EEh&0v3N_)ckf97l)eN`HL) zJHk~?xXXxqh!cUp_XsQHwJRIZBdaeww0{Kl>f3J|h%Uog9=sR{YF<4^HkH<^bv1%u zp?qHPps3>%BQtH3`cX&&TEF+%sj>nS)dJOL96L_X^h@R+8?ybIvBm87V34atupt>?&KC+`el1Ei?ZHFJ(-EW7*A$5 znHJY?2+)trHX5oweg42f{=8#x&5cKlp6!IzQO8ii#4jTJe+&8N`nS*RU7GWq+|@i^ z*4u$I4Q<`+){E#sB-X$-rWcN}CuUlymz!E;OK+{~<)pP#79Zx62je8tM9Ww|?qj|E zaGU_^b&yCT)K;Qj?v?s(YErb-?Q7d>&QrC;)MZz+>^(r{amX<3xUq-p*+ zn>!xJoVojs8$Td`XSA=khphu*r)4}1yn~iRfH=CA=c-jilXE-Cxo^=r z_jB@2=}iP(PSiGFpTGl_^*Vx-P3m3P9}hizAbJdep{Kume`EvL=B0 zsc&FyR=Tg!Uo6c0#M<(P>w}t2%{Mi>?l(I8x$z61^qD48+?UTx$4g^$4RL?u9;9np z{4{&r&C+e^UbkA1JKO83l{)otR}~MfYd^?0-8O4 zT9G$G7Pgoc*AL0(jO-gVOu0UP%j@x!zi1BA{68l(h2gYI+>y2TGcYK?7T=xC-$5UGGqrSGbR$04I6umP4!KCC@tMV>O x9bXyNQe>WM`X(DW)6>(=bFU;XI4{5D^qxO=<<+z2E;|Ef&kwzJ*~#T{_y^o35E=jg literal 0 HcmV?d00001 diff --git a/icons/BSDSocket-Extension/API.md.info b/icons/BSDSocket-Extension/API.md.info new file mode 100644 index 0000000000000000000000000000000000000000..2895d192b315b432d8058e5ccd8f4e411eda2aab GIT binary patch literal 1651 zcmZ9Le`r-@7{|ZoocqhGw%gcsh%ygiIWD+Af{=vV2}UR}M7hjA9MqhnZeBN7Gb!}$ zErXUCV&j$wqKJRg-KZ!laZ zPOy0c@B7MCzDN zR2hl`%#=@BH-&XaeYTiymo=L$P<&^#W@EzV=l%E>nx~3O>zDSE%3Qr3jhc%PzULiw zQ~;%vR@K|&XPzPTNbmT3*XO@{{(IYRpB+(kw^aVWZNJyoa`EGv+coQc<#Y0`;vxn; zsw-^?_Or^;yyEh6QuCwtHJ{o1y2^j#DR%cX_SDvw^YWfzy|3zvE}4WdNMR|<{y8tI zI$tA)%#&1Ll#!_C!W=qRG2cLf{lu{b=6WRJ-)-y=IdP5)f!Aldvoe(lrRJFY`?>CmdC6|Kf&&7hI}Mh9B!1Zf8G zm8_F!QQV8T(n&;~;JhfY9F|um2|)j;i9ne7dX;I*#P2dwK7Et$9O|k}{_vcq*=U5p zJip?kj!z5CO`46}n&%GxuYO5Cea8Mbpd~fCaCm((hp&M2mC_Wm&XJpSVUSe7nP(+_ zz<%NdKmKq-Iyp`(<*bUA)~7$%TEp&32QKQkuJ?Ax2Z~*^Rw&OsYkr^Me7Bfq_SQDwtFo{zeYD5n2%Er=`6ZS+ z5t>=DK%Sh{Ew77aoPsr5pcXlEdf`RlEG)M`>*ma_-Jc50I16j1gHGg(Uk?53G}FGh z{xI_9c|;vjZckiLs)lI$!Sq0?Bh_<=aRoh3jgi@Heck)*y>Hp=UHt>8UVGcYfq|ah obl+<|{q_hMCpV3Z*xS4NdO7Wdbn10t*+M8S62x+(9~!7J20eQw5Yv`I zy^K~c_JyM1R0>6re(@4i`mQIv6QL2oFH%CaO49~fS}jSM7VfUQH$KnI_Hyxoo&Wrv zx0&6UosPi(+gUVXBU%t5Hk|m6wiBN!sYv}`1mHwo_{E8A_?+BDdLj#9TTi)*1zcDe zUI-z843pt%wR|;Qw6WhDM`jJHi^M8YYaHE*|3ZS5IJTPOO~i7&JUmVS8)g8J2IgZm zhT;G-<&!o{Va;KmE#{jQ&1M@E-+D%~G2!!ze*9a_Q>DfAi~C7su3nEu%_Rum^By~@ zfKp1U=}q!8-zN1)Z~1)J=Q}>%+kWlqcU9dDmH(jQkH&f~eR_R|X5Fvyg}ke{gkg{B z%A13Otg<|(xUxxVe*B^4lN;Ys`Hwxt?(XKk`ua*i{-ap$tM;OcCLs({Sjvij&I_u} z*T^CBG!+;XBpSIehwc^3e$^mboi+>;k!AVk?u#QeMmV+Zf-spW z-$X3erO;-91GpDP_Cn}5gim+J4h4$-AUyP8(D8c#HXX7(FhXm1dt8N`>d zPNGe5KjKO!5n0Z8QDQkNf0`r!{ih}ZVdg6}rY#e{&rJFBO~SKis4@A&vz}(783yy* z(i1v9Ei|`iHg;*AJ@mi&Mg8;{``>_;)a=6H^~oH*0@7DXQ_MO`Zr1r>QUPac3*n?w2td~?`8Q=v5WR9<+-QK?=zh5mI}C;xP{b{7g1=AW&g5*G9`#aB^?2%5Rb zKE;kCzFEThFS5#?#7LBR1lj2I(J?2el7S_2>b~_wl6BseS!xAS# zGfNi9le2o|714^1Va*h&Mb4a_-$tB;;P+Ju?NS literal 0 HcmV?d00001 diff --git a/icons/BSDSocket-Extension/README.md.info b/icons/BSDSocket-Extension/README.md.info new file mode 100644 index 0000000000000000000000000000000000000000..2fdb58ef474b0da3abcf5c5977d9166f90f4ce7e GIT binary patch literal 1651 zcmZ9LZDl1aL@=skqR|i2t_HOC`bHYK+_oN)oTK2tQ72J zS_@6zC^eidg0zTVyabiDwrIe+QZOPYMI>mo_!6*MTXHc9cjxX+pJ!&hT>8Mye}2!~ z%Tat1hwazuYq@yv`X(EUvUvb9@UlB z2M1VXX-0ARWvTheCz=nfdt2o{@f5q;ntE&N%Q^W#vEEnpMdwXI7^1M0W&fP#RGqJp zMS3w67-hukxiE{aCCq;y&VJ%p19Ls%jlZn!6j^rKFib=ijj#Gwd{$+IlPiA~CNt%m zhy{0GiQuMTDPSTInvh>&3ti~&O+jNKIB}Obj&MoPI*H(0rHt5u^#~miID>?Bbovl+ zTGi9OgAN*mzkihdb2R;PrGsSi@A&WcYVWuX(WOJ1npU(LPc@Au_8XmOs}rPYG%jMD zM62RHG%B4$m&i_KQ$2uGoPz6ZJGEZX3D2;5-y;w%H$6hJk3TE4Ca}I zU+MUi(A=!q*s8g(?|=34`sp+FzX2_&*@eUFlR10^q_32wn6*G|*4ZIa0cVDl_!0Yw zXZ`r&m8ry8VkxIpytE?q>4qA1Uw`MQj_Z2w4f#m1i?#~oxrfcuY0h_xIc9H})a?DH zxnt?64IK9>iYqUE{=-?7uj{?-^08vQFa1_e|LIEgF61c8KU+>E%;`6ZuOJr@G;@)8 zh8+nUU%>hgGRmL8aFlr%ndtSAQ76HDW1#Wl(4Qmk<=d+)te*~Sb2!2#Fl?U00w+Q< zOXkUwwR+?^(SomGP3Nga)|{GsjW`3#&C|MB^GEkWz6FP2ZFbOwtZ{koMW==K&Gq|` zGrvdFA?5bOd8KNIcI-(FCOeb8dl?tf^TIfp-QM4`+kW$XyQ6zxFxh8s+%q`X+n4I! m)jMF1l5ukL=%~G^r@xQWUQH$6-PxTSu(x)nc2myyIQ|1vb_L4- literal 0 HcmV?d00001 diff --git a/icons/BSDSocket-Extension/examples.info b/icons/BSDSocket-Extension/examples.info new file mode 100644 index 0000000000000000000000000000000000000000..76ea79f063a1bc1156f3883cd8d8839545865ce2 GIT binary patch literal 1222 zcmb7EPe>F|82`ODyR)0E?R3~e5gPHr%tCb#`e5d_zwgiczWL2JyKR9%*%u7r z9AYquGbda#>4Z;j=*XWp#)lMj!m&Yu&ve~(%I@zeA7BAP=whGnN=n5!tdvvsbVdE9 zidzb`^`KRf`JIbi)!hK!ONWXcjd7JK3$Qga(I7LxFyXp;g%vm&lGB1q6DQZ*L{JhJ zK&Y^S>K7lZ=&xnezg|UjNAd4Y^y4xba=RW^C@D_)LD`OKH-V5GMQs`|Moi))4V{0+ zC1af^&Y{OR;C4cdEBBNdBuT)-eXS1IC69B%^W=T~4*B0&K$lS! z;-n{+Su`s>Ti4J?dOjyL;;KIz7O~tLr@k_S3!AGj&(?`p`e-;?Rg3td1+$U3uz0qj z9_Q)Ai=ccepFt05X@KKP3*xStD^=t7gD6#VyRPD4y2|J0?aO@wN&Ds_yZyn9I3duB#u(0|5n0Q)E) literal 0 HcmV?d00001 diff --git a/icons/BSDSocket-Extension/src.info b/icons/BSDSocket-Extension/src.info new file mode 100644 index 0000000000000000000000000000000000000000..c1b7788a0e0ebeb8b61ffd2c7dcce96bf37613a4 GIT binary patch literal 1222 zcmb7EPe>F|82`#x`ZxXyy-#8gYD~kZ+4+N2z@Z~+u!@X?|r}d&6{1fph3o0 zoX07IVG!3G^V)`EUf)oeKW`cvmeeuBLj+&wYIQ2_?Z`F20*2A8ea1^6BxkS^PUVA( z^0#9iIWAE}FWLn~adK%@PS?Sfk#iuzF29D<3 zm|qa*K%npub;1LnI04qXu!Z zhW0<p3>SGfc2oX45&abL{@EE_OJ7hr`g_zIM_juASv zUgXg&7$cOY?R+g>zfSK=axLa@tk5$komXh}f5Jx|NI!cJQhv@LB>fzJh;s6?PHRAj zd@|TK_*cJM!PYKRY;GVJ?}2|g*wGN{LTJrIaDe!NiJ2D4bKoGT-i_5}Fpsh%y${;Y z?^9G%-@f9v z=2LCdg(&&SLHPLIMsg&htA`SE9Z+54>FJc3sI$x~k^p>K literal 0 HcmV?d00001 diff --git a/the minimum.amos b/the minimum.amos deleted file mode 100644 index 8720d01cc3ea825279e97ba4a109eb81bc911de8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60 zcmZ?t^$%8XN-WMyRwy$xHc?<;U{GRXWGQ3t6JlUs10qJDc?@<842(Jq46KY`QJ@;f JT&H3N1^_#~2$cW; diff --git a/updated sockaddr in.amos b/updated sockaddr in.amos deleted file mode 100644 index 69eeabc319e377e23b65b6005942f9f43164471e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 zcmZ{iF-yZh6vzK}NfXdgN|4$?^d>isaY2^=jbYb zsy_@vyDt&&Qd`dC6IP(Otc5skob