bug-apl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-apl] Request to add to the ⎕fio[] a 'function_common_name' as argum


From: Christian Robert
Subject: [Bug-apl] Request to add to the ⎕fio[] a 'function_common_name' as argument
Date: Wed, 4 Jan 2017 01:16:45 -0500
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0

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] ⍵}


reply via email to

[Prev in Thread] Current Thread [Next in Thread]