[Coco] Checking for carrier

David Ladd davidwladd at gmail.com
Sun Jan 15 15:14:56 EST 2017


On Fri, Jan 13, 2017 at 10:33 AM, Taylor, Phillip L CIV <
Phillip.L.Taylor at uscg.mil> wrote:

> Question how do you check for carrier if it's true or false?
>

​Philip, if I remember right the OS-9/NitrOS-9 syscall for carrier detect
is not supported on DriveWire.  That is one of the reasons I could never
get RiBBS to work via the virtual serial ports on DriveWire as it relies on
the syscall status of carrier detect.​

If I am wrong though I hope someone will chime in.



>
>
>
>
> Message: 5
> Date: Tue, 10 Jan 2017 18:41:55 -0500
> From: William Carlin <whcarlinjr at gmail.com>
> To: CoCoList for Color Computer Enthusiasts <coco at maltedmedia.com>
> Subject: Re: [Coco] [Non-DoD Source] Coco Digest, Vol 172, Issue 22
> Message-ID:
>         <CABDDd1RFk-9Hg4tthhN1AcccFVVNK48wwvnoVGB58mHEHQju=
> g at mail.gmail.com>
> Content-Type: text/plain; charset=UTF-8
>
> Phillip,
>
> Here is an example from the drivewire extras disk:
>
> For this example, the inetd is going to be setup for a web server:
>
> [/DD/SYS/ientd.conf]
> 80,runb,httpd
>
> DriveWIre will be instructed to listen for connections on port 80.  When it
> does, the coco runs the runb Basic09 runtime and runb loads and executes
> the Basic09 program httpd.  The inconing serial connection is passed to the
> httpd as the standard input.
>
> [httpd.b09]
> PROCEDURE httpd
>
> (* HTTPD09 - process one http request, should be spawned by inetd *)
>
>
> !    This program is free software: you can redistribute it and/or modify
> !    it under the terms of the GNU General Public License as published by
> !    the Free Software Foundation, either version 3 of the License, or
> !    (at your option) any later version.
>
> !    This program is distributed in the hope that it will be useful,
> !    but WITHOUT ANY WARRANTY; without even the implied warranty of
> !    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> !    GNU General Public License for more details.
>
>
> ON ERROR GOTO 99
> BASE 0
>
> DIM fp:BYTE
> DIM errnum:BYTE
> DIM req:STRING[255]
> DIM target:STRING[255]
> DIM lf:BYTE
> DIM cr:BYTE
> DIM inbyte:BYTE
> DIM buffer(256):BYTE
> TYPE RREGISTERS=CC,A,B:BYTE; DP:BYTE; X,Y,U:INTEGER
> DIM rregs:RREGISTERS
> DIM reqid:BYTE
> DIM i,p:INTEGER
> DIM httperr:STRING[40]
> DIM dent(32):BYTE
>
> lf=10
> cr=13
>
> (* turn off echo on the input path *)
> (* this will be done by inetd in the future *)
>
> (* get ss.opt *)
> rregs.A = 0
> rregs.B = 0
> rregs.X = ADDR(buffer)
> reqid = $8D
> RUN SYSCALL(reqid,rregs)
>
> (* set PD.EKO to 0 *)
> buffer(4) = 0
>
> (* set ss.opt *)
> rregs.A = 0
> rregs.B = 0
> rregs.X = ADDR(buffer)
> reqid = $8E
> RUN SYSCALL(reqid,rregs)
>
> (* read headers from client *)
> REPEAT
>
>     req = ""
>
>     REPEAT
>         GET #0,inbyte
>         req = req + chr$(inbyte)
>     UNTIL inbyte = 13 or EOF(#0)
>
>     IF LEFT$(req,4) = "GET " THEN
>         target = req
>     ENDIF
>
> UNTIL PEEK(ADDR(req)) = 13 OR EOF(#0)
>
> (* just die if stdin is gone.. might help with hung runbs? *)
> IF EOF(#0) THEN 99
>
> (* fixup paths *)
> IF left$(target,6) = "GET / " THEN
>     req = "/DD/WWWROOT/index.html"
> ELSE
>     req = mid$(target,5,len(target) - 14)
> ENDIF
>
> IF right$(req,1) = "/" THEN
>     req = left$(req,len(req)-1)
> ENDIF
>
> (* "security" checks *)
> target = ""
> FOR i=1 TO SIZE(req)
>  inbyte=ASC(MID$(req,i,1))
>  IF $40<inbyte AND inbyte<$60 THEN
>      inbyte = inbyte + $20
>  ENDIF
>  target=target + CHR$(inbyte)
> NEXT i
> IF (SUBSTR("..",req) > 0) OR (SUBSTR("/sys/",target) > 0) THEN
>     httperr = "403 Forbidden"
>     GOTO 1000
> ENDIF
>
> (* /favicon.ico *)
> IF (req = "/favicon.ico") THEN
>     req = "/DD/WWWROOT/favicon.ico"
> ENDIF
>
> ON ERROR GOTO 100
> OPEN #fp,req:READ
> ON ERROR GOTO 50
> httperr = "200 OK"
> GOSUB 2000
>
> IF RIGHT$(req,4) = ".htm" OR RIGHT$(req,5) = ".html" THEN
>     PRINT "Content-Type: text/html"
> ELSE
>     IF RIGHT$(req,4) = ".jpg" THEN
>         PRINT "Content-Type: image/jpeg"
>     ELSE
>         IF RIGHT$(req,4) = ".gif" THEN
>             PRINT "Content-Type: image/gif"
>         ELSE
>             IF RIGHT$(req,4) = ".png" THEN
>                 PRINT "Content-Type: image/png"
>             ELSE
>                 IF RIGHT$(req,4) = ".ico" THEN
>                     PRINT "Content-Type: image/x-icon"
>                     PRINT "Cache-Control: public, max-age=31536000"
>                 ELSE
>                     PRINT "Content-Type: text/plain"
>                 ENDIF
>             ENDIF
>         ENDIF
>     ENDIF
> ENDIF
>
> PUT #1,lf
>
> (* send file contents *)
> REPEAT
>
>     rregs.A = fp
>     rregs.Y = 256
>     rregs.X = ADDR(buffer)
>     reqid = $89
>     RUN SYSCALL(reqid,rregs)
>
>     rregs.A = 1
>     rregs.X = ADDR(buffer)
>     reqid = $8A
>     RUN SYSCALL(reqid,rregs)
>
> UNTIL EOF(#fp)
>
> 50 ON ERROR GOTO 99
> CLOSE #fp
>
> target = DATE$ + " 200 OK " + req
> GOSUB 3000
>
> 99 END
>
>
> 100 ON ERROR GOTO 99
> errnum := ERR
>
> IF errnum = 214 THEN
>     (* directory check *)
>     ON ERROR GOTO 200
>     OPEN #fp,req:READ+DIR
>     ON ERROR GOTO 99
>
>     httperr = "200 OK"
>     GOSUB 2000
>     PRINT "Content-Type: text/html"
>     PUT #1,lf
>
>     PRINT "<HTML><HEAD><TITLE>"
>     PRINT "Directory of ";req
>     PRINT "</TITLE></HEAD><BODY>"
>
>     PRINT "<H3>Directory of ";req;"</H3>"
>     PRINT "<HR>"
>
>     REPEAT
>
>         get #fp,dent
>
>         IF dent(0) > 0 THEN
>
>             target = ""
>             inbyte = dent(0)
>             i = 0
>             WHILE inbyte < 128 AND i<29 DO
>
>                 target = target + chr$(inbyte)
>                 i = i + 1
>                 inbyte = dent(i)
>
>             ENDWHILE
>
>             target = target + chr$(inbyte - 128)
>
>             IF target <> "." THEN
>                 PRINT "<A HREF=";req;"/";target;">";target;"</A>"
>                 PRINT "<br>"
>             ENDIF
>
>         ENDIF
>
>     UNTIL EOF(#fp)
>     CLOSE #fp
>
>     GOSUB 2100
>     PRINT "</BODY></HTML>"
>
>     target = DATE$ + " 200 OK (dir) " + req
>     GOSUB 3000
>     END
> ELSE
>     IF errnum = 216 THEN
>         httperr = "404 Not Found"
>     ELSE
>         IF errnum = 215 THEN
>             httperr = "400 Bad Request"
>         ELSE
>             httperr = "500 Internal Server Error"
>         ENDIF
>     ENDIF
>
>     GOTO 1000
> ENDIF
>
>
>
> 200 ON ERROR GOTO 99
> httperr = "403 Forbidden"
> (* error result *)
> 1000 GOSUB 2000
> PRINT "Content-Type: text/html"
> PUT #1,lf
>
> PRINT "<HTML>"
> PRINT "<HEAD><TITLE>";httperr;"</TITLE></HEAD>"
> PRINT "<BODY><H2>";httperr;"</H2>"
> GOSUB 2100
> PRINT "</BODY></HTML>"
> target = DATE$ + " " + httperr + " " + req
> GOSUB 3000
> END
>
>
> (* server headers *)
> 2000 PRINT "HTTP/1.1 ";httperr
> PRINT "Server: CoCoHTTPD"
> PRINT "Connection: close"
> RETURN
>
> (* footer *)
> 2100 PRINT "<br><HR><font face=Tahoma;Arial;Sans size=2><i>httpd09 version
> 1.1 -
>  ";DATE$;"</i></font>"
> RETURN
>
>
> (* logging - string to log in target *)
> 3000 ON ERROR GOTO 3010
> CREATE #fp,"/DD/LOG/httpd.log":WRITE
> ON ERROR GOTO 3030
> GOTO 3020
> 3010 ON ERROR GOTO 3040
> OPEN #fp,"/DD/LOG/httpd.log":WRITE
> ON ERROR GOTO 3030
> (* getstat ss.siz *)
> rregs.A = fp
> rregs.B = $02
> reqid = $8D
> RUN SYSCALL(reqid,rregs)
> (* seek to eof *)
> rregs.A = fp
> reqid = $88
> RUN SYSCALL(reqid,rregs)
> 3020 WRITE #fp,target
> 3030 ON ERROR GOTO 3040
> CLOSE #fp
> 3040 ON ERROR GOTO 99
> RETURN
>
> I hope this helps.
>
> William
>
>
>
> ----------------
>
>
>
>
> Message: 7
> Date: Wed, 11 Jan 2017 11:26:05 -0500
> From: Barry Nelson <barry.nelson at amobiledevice.com>
> To: coco at maltedmedia.com
> Cc: "Taylor, Phillip L Civ" <phillip.l.taylor at uscg.mil>
> Subject: [Coco] NitrOS9 BBS
> Message-ID: <B0F21E33-3738-47DC-BD99-B6D156E7CDE4 at amobiledevice.com>
> Content-Type: text/plain; charset="utf-8"
>
> > Taylor, Phillip L CIV Phillip.L.Taylor at uscg.mil
> > Wed Jan 11 10:38:21 EST 2017
> >
> > What if you want to write a bbs system and make it listen to the incoming
> ports. How can this be done please?
>
> For a serial line run:
>
> tsmon /n &
>
> Or for telnet/internet access run:
>
> inetd &
>
> More information on inetd can be found here:
> https://urldefense.proofpoint.com/v2/url?u=https-3A__
> sourceforge.net_p_drive
> wireserver_wiki_Using-5FDriveWire_-23inetd&d=CwIGaQ&
> c=0NKfg44GVknAU-XkWXjNxQ
> &r=_wDO0Ub5GRKd_gN_Uz7gGyIfuv5XrYnarPGRxBtD3N0&m=
> FKtBGDTxQ780FnQjJxvNQuAFkOq
> yW8nQpeT6pO9rIVI&s=NimW7p3LfM6cs2pxmKF3i2Jldh9fQGRajikEKE0Ef7I&e=
> <https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__sourceforge.net_p_driv
> ewireserver_wiki_Using-5FDriveWire_-23inetd&d=CwIGaQ&
> c=0NKfg44GVknAU-XkWXjNx
> Q&r=_wDO0Ub5GRKd_gN_Uz7gGyIfuv5XrYnarPGRxBtD3N0&m=
> FKtBGDTxQ780FnQjJxvNQuAFkO
> qyW8nQpeT6pO9rIVI&s=NimW7p3LfM6cs2pxmKF3i2Jldh9fQGRajikEKE0Ef7I&e= >
>
> You can use an inetd.conf line like:
>
> 6809 telnet auth protect banner, login,
>
> Login will prompt for a user name configured in /etc/passwd
>
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: smime.p7s
> Type: application/pkcs7-signature
> Size: 3599 bytes
> Desc: not available
> URL:
> <https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__pairlist5.pair.net_pip
> ermail_coco_attachments_20170111_cf3de85b_attachment-
> 2D0001.bin&d=CwIGaQ&c=0
> NKfg44GVknAU-XkWXjNxQ&r=_wDO0Ub5GRKd_gN_Uz7gGyIfuv5XrYnarPGRxBtD3N0&m=
> FKtBGD
> TxQ780FnQjJxvNQuAFkOqyW8nQpeT6pO9rIVI&s=Nz0MznSVP5-
> qnMq16BvyWssu_1kjr9_lbH80
> za6sfDs&e= >
>
> ------------------------------
>
>
>
>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> https://pairlist5.pair.net/mailman/listinfo/coco
>
>


More information about the Coco mailing list