bug-apl
[Top][All Lists]
Advanced

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

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


From: Elias Mårtenson
Subject: Re: [Bug-apl] Request to add to the ⎕fio[] a 'function_common_name' as argument
Date: Wed, 4 Jan 2017 16:21:28 +0800

I have to admit that I don't really see FILE_IO.apl to be any less "built-in" than ⎕FIO, just because it's written in APL rather than C++.

Regards,
Elias

On 4 January 2017 at 16:03, Christian Robert <address@hidden> wrote:
You miss my point completely.

I don't want to have to )LOAD or )COPY a workspace to use *built-in* native function.

Xtian.

On 2017-01-04 02:52, Elias Mårtenson wrote:
Well, FILE_IO.apl is also part of GNU APL.

Regards,
Elias

On 4 January 2017 at 15:51, Christian Robert <address@hidden <mailto:address@hiddentl.ca>> wrote:

    Not *exactly*. Since QuadFIO is part of gnu-apl, why not improve the QuadFIO so it is essayer to use.

    Xtian.

    On 2017-01-04 01:59, Elias Mårtenson wrote:

        Isn't this exactly what wslib5/FILE_IO.apl is?

        Regards,
        Elias

        On 4 January 2017 at 14:16, Christian Robert <address@hidden <mailto:address@hiddentl.ca> <mailto:address@hiddentl.ca <mailto:address@hiddentl.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] ⍵}





reply via email to

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