Isn't this exactly what wslib5/FILE_IO.apl is?
Regards,
Elias
On 4 January 2017 at 14:16, Christian Robert <christian.rob...@polymtl.ca>
wrote:
> I would love to be able to do:
>
> fd ←⎕fio['open'] '.bashrc'
> ⎕fio['fclose'] fd
>
> and so on ...
>
> I have a Workspace named "fio" who just do that, but I would love if
> gnu-apl could just understand 'open'/'close'/... rather than just random
> numbers, as actually.
>
> Numbers are fine, but a tagged name as in ⎕fio['bind'] would be a *plus*.
> (no need for us to remember the random numbers, only the function name)
>
> Yes, a couple of hours for Juergen to code it, but so much
> reliefs/and/easier on our side, as end user.
>
> my wishes for 2017 ;-)
>
> Xtian.
>
> )load fio
> SAVED 2016-12-27 20:04:36 (GMT-5)
> df
> errno ╔════════════╗
> ║z←errno ║
> ║z←⎕fio[1] ''║
> ╚════════════╝
> fio ╔══════════╗
> ║fio ║
> ║'' ⎕fio ''║
> ╚══════════╝
> getcwd ╔═════════╗
> ║z←getcwd ║
> ║z←⎕fio 30║
> ╚═════════╝
> helper ╔══════════════════════════════════════════════════════════════╗
> ║z←helper what;this;t ║
> ║→((≡what)<2)/Single ║
> ║z←helper ¨ what ║
> ║→(∧/1=,⊃⍴¨,¨z)/FinalDisclose ║
> ║⎕ES 'Error: Problem converting at least one of the parameters'║
> ║→0 ║
> ║FinalDisclose: ║
> ║z←,⊃⊃¨z ⍝ Be sure we return a vector of hopefully integers ║
> ║→0 ║
> ║Single: ║
> ║⍝ ║
> ║⍝ Most usefull socket constant ║
> ║⍝ ║
> ║t←0 2⍴'' 0 ║
> ║t←t⍪"AF_UNSPEC" 0 ║
> ║t←t⍪"AF_LOCAL" 1 ║
> ║t←t⍪"AF_UNIX" 1 ║
> ║t←t⍪"AF_INET" 2 ║
> ║t←t⍪"AF_SNA" 22 ║
> ║t←t⍪"AF_DECnet" 12 ║
> ║t←t⍪"AF_APPLETALK" 5 ║
> ║t←t⍪"AF_ROUTE" 16 ║
> ║t←t⍪"AF_IPX" 4 ║
> ║t←t⍪"AF_ISDN" 34 ║
> ║t←t⍪"AF_INET6" 10 ║
> ║t←t⍪"AF_BLUETOOTH" 31 ║
> ║t←t⍪"AF_MAX" 41 ║
> ║t←t⍪"PF_INET" 2 ║
> ║t←t⍪"PF_LOCAL" 1 ║
> ║t←t⍪"PF_UNIX" 1 ║
> ║t←t⍪"SOCK_STREAM" 1 ║
> ║t←t⍪"SOCK_DGRAM" 2 ║
> ║t←t⍪"SOCK_RAW" 3 ║
> ║t←t⍪"SOCK_RDM" 4 ║
> ║t←t⍪"SOCK_SEQPACKET" 5 ║
> ║t←t⍪"SOCK_DCCP" 6 ║
> ║t←t⍪"SOCK_PACKET" 10 ║
> ║t←t⍪"SOCK_CLOEXEC" 524288 ║
> ║t←t⍪"SOCK_NONBLOCK" 2048 ║
> ║t←t⍪"IPPROTO_IP" 0 ║
> ║t←t⍪"IPPROTO_ICMP" 1 ║
> ║t←t⍪"IPPROTO_IPIP" 4 ║
> ║t←t⍪"IPPROTO_TCP" 6 ║
> ║t←t⍪"IPPROTO_PUP" 12 ║
> ║t←t⍪"IPPROTO_UDP" 17 ║
> ║t←t⍪"IPPROTO_IDP" 22 ║
> ║t←t⍪"IPPROTO_TP" 29 ║
> ║t←t⍪"IPPROTO_DCCP" 33 ║
> ║t←t⍪"IPPROTO_IPV6" 41 ║
> ║t←t⍪"IPPROTO_ROUTING" 43 ║
> ║t←t⍪"IPPROTO_FRAGMENT" 44 ║
> ║t←t⍪"IPPROTO_RSVP" 46 ║
> ║t←t⍪"IPPROTO_GRE" 47 ║
> ║t←t⍪"IPPROTO_ESP" 50 ║
> ║t←t⍪"IPPROTO_AH" 51 ║
> ║t←t⍪"IPPROTO_ICMPV6" 58 ║
> ║t←t⍪"IPPROTO_NONE" 59 ║
> ║t←t⍪"IPPROTO_DSTOPTS" 60 ║
> ║t←t⍪"IPPROTO_MTP" 92 ║
> ║t←t⍪"IPPROTO_ENCAP" 98 ║
> ║t←t⍪"IPPROTO_PIM" 103 ║
> ║t←t⍪"IPPROTO_COMP" 108 ║
> ║t←t⍪"IPPROTO_SCTP" 132 ║
> ║t←t⍪"IPPROTO_UDPLITE" 136 ║
> ║t←t⍪"IPPROTO_RAW" 255 ║
> ║t←t⍪"SOL_SOCKET" 1 ║
> ║t←t⍪"SO_BINDTODEVICE" 25 ║
> ║t←t⍪"SO_REUSEADDR" 2 ║
> ║t←t⍪"SO_BROADCAST" 6 ║
> ║t←t⍪"INADDR_ANY" 0 ║
> ║⍝ ║
> ║⍝ Replace thoses I recognize by their value ║
> ║⍝ leaving the rest as they were ║
> ║⍝ ║
> ║→(0=↑0⍴what)/NotSpecial ⍝ can't be an IP ║
> ║→(3≠+/'.'=,what)/NotSpecial ⍝ can't be an IP ║
> ║this←,what ⍝ an IP address ║
> ║(('.'=this)/this)←' ' ⍝ DOT to space ║
> ║z←(4⍴256)⊥⍎this ⍝ change this IP to integer ║
> ║→0 ║
> ║NotSpecial: ║
> ║this←⊂what ⍝ enclose the input for diadic '⍳' ║
> ║z←(,t[;1]) ⍳ this ⍝ search for recognized constants into 't'║
> ║→(z>↑⍴t)/ReturnAsis ⍝ no match ║
> ║z←t[z;2] ⍝ do the substitution ║
> ║→0 ║
> ║ReturnAsis: z←what ⍝ return original parameter unchanged ║
> ╚══════════════════════════════════════════════════════════════╝
> readfile_fast ╔═════════════════════════════
> ════════════════════════════════════════════════════════╗
> ║z←readfile_fast name;fd;lines;⎕io
> ║
> ║⎕io←1 ⍝ Bring a file into a vector of strings, utf8
> aware for both name and contents.║
> ║→(0≠"r" ⎕fio[31] 18 ⎕cr name)/Error ⍝ Can not
> read file ? → Error ║
> ║z←⎕fio[26] 18 ⎕cr name ⍝ First
> pass, read the whole file ║
> ║lines←⍳+/((↑"\n")=z) ⍝ Compute
> the iota for each line ║
> ║z←(⍴lines)⍴⍬ ⍝
> Preallocate "z" to the right size ║
> ║fd←⎕fio[3] 18 ⎕cr name ⍝ Open the
> file ║
> ║⊣ {⊣z[⍵]←⊂19 ⎕cr ⎕ucs ¯1↓⎕fio[8] fd} ⍤0 lines ⍝ Put each
> line in the preallocated "z"║
> ║⊣ ⎕fio[4] fd ⋄ →0 ⍝ Close
> the file and return ║
> ║Error: ⎕ES ∊'Error on file "',name,'": ',⎕fio[2] |
> ⎕fio[1] '' ║
> ╚════════════════════════════
> ═════════════════════════════════════════════════════════╝
>
> accept←{⎕fio[35] ⍵}
> access←{⍺ ⎕fio[31] ⍵}
> bind←{⍺ ⎕fio[33] ⍵}
> connect←{⍺ ⎕fio[36] ⍵}
> fclose←{⎕fio[4] ⍵}
> feof←{⎕fio[10] ⍵}
> ferror←{⎕fio[11] ⍵}
> fflush←{⎕fio[16] ⍵}
> fgetc←{⎕fio[9] ⍵}
> fgets←{⍺ ⎕fio[8] ⍵}
> fopen←{⍺ ⎕fio[3] ⍵}
> fread←{⍺ ⎕fio[6] ⍵}
> fscanf←{⍺ ⎕fio[48] ⍵}
> fseek_cur←{⍺ ⎕fio[14] ⍵}
> fseek_end←{⍺ ⎕fio[15] ⍵}
> fseek_set←{⍺ ⎕fio[13] ⍵}
> fstat←{⎕fio[18] ⍵}
> fsync←{⎕fio[17] ⍵}
> ftell←{⎕fio[12] ⍵}
> fwrite←{⍺ ⎕fio[7] ⍵}
> getpeername←{⎕fio[45] ⍵}
> getsockname←{⎕fio[44] ⍵}
> getsockopt←{⍺ ⎕fio[46] ⍵}
> listen←{⍺ ⎕fio[34] ⍵}
> ls←{⎕fio[29] ⍵}
> ls_full←{⎕fio[28] ⍵}
> ltrim←{(+/^\' '=⍵)↓⍵}
> mkdir←{⍺ ⎕fio[20] ⍵}
> pclose←{⎕fio[25] ⍵}
> popen←{⍺ ⎕fio[24] ⍵}
> read←{⍺ ⎕fio[41] ⍵}
> readfile←{⎕fio[26] ⍵}
> recv←{⍺ ⎕fio[37] ⍵}
> rename←{⍺ ⎕fio[27] ⍵}
> rmdir←{⎕fio[21] ⍵}
> rtrim←{⌽ ltrim ⌽ ⍵}
> select←{⎕fio[40] ⍵}
> send←{⍺ ⎕fio[38] ⍵}
> setsockopt←{⍺ ⎕fio[47] ⍵}
> socket←{⎕fio[32] ⍵}
> strerror←{⎕fio[2] |⍵}
> unlink←{⎕fio[19] ⍵}
> usend←{⍺ ⎕fio[39] ⍵}
> uwrite←{⍺ ⎕fio[43] ⍵}
> write←{⍺ ⎕fio[42] ⍵}
>
>