From b09ff879472dce04d4d736de5e3344c527f7e57a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sat, 30 May 2020 22:38:47 +0200 Subject: [PATCH] Kernel 0.94 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes .Floppies/A2OSX.TEST.po | Bin 819200 -> 819200 bytes ETC/HTTPD.CONF.txt | 11 ++ LIB/LIBBLKDEV.S.D2.txt | 93 ++++------ LIB/LIBTCPIP.S.SKT.txt | 19 ++- LIB/LIBTCPIP.S.TCP.txt | 5 + ProDOS.FX/ProDOS.S.XRW.txt | 90 ++++------ SBIN/HTTPD.S.txt | 338 +++++++++++++++++++++++++------------ 8 files changed, 335 insertions(+), 221 deletions(-) create mode 100644 ETC/HTTPD.CONF.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 937f3a422d7065809ede5d650557766083623bd9..640e4f15173df274861209f2bc3e0ad6e340ccd9 100644 GIT binary patch delta 47880 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 q_!>9^d;e}G?rUxDA$yT$Kn(EkA^Nos%q diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 27350bdfc4095e6bf2494530fc249ff782665246..ffdc00c609b7444af0e2628237e62937b2d2cf07 100644 GIT binary patch delta 7202 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 delta 7269 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 DrvSlt bcs .9 stz MoveTo - lda #252 + lda #162 sta MoveFrom jsr D2MoveHead.1 @@ -35,19 +35,20 @@ D2Recalibrate >PULLB DrvSlt jsr D2.PhaseOn lda #0 wait 25.6 ms - jsr D2.Wait100msA Trash X + jsr D2.Wait100usecA Trash X +* lda #0 + jsr D2.Wait100usecA Trash X +* lda #0 + jsr D2.Wait100usecA Trash X +* lda #0 + jsr D2.Wait100usecA Trash X + +* lda #0 + jsr D2.PhaseOff lda #0 wait 25.6 ms - jsr D2.Wait100msA Trash X - - lda #0 wait 25.6 ms - jsr D2.Wait100msA Trash X - - lda #0 wait 25.6 ms - jsr D2.Wait100msA Trash X - - jsr D2.PhaseOn.2 - + jsr D2.Wait100usecA Trash X + clc .9 rts */-------------------------------------- @@ -92,69 +93,49 @@ D2MoveHead.1 ldy #0 jsr D2.PhaseOn - lda #104 - jsr D2.Wait100msA Trash X + lda #0 + jsr D2.Wait100usecA Trash X iny bra .1 .8 tya - beq D2.PhaseOff.8 + beq D2.PhaseOn.RTS lda #0 wait 25.6 ms - jsr D2.Wait100msA Trash X + jsr D2.Wait100usecA Trash X lda MoveTo *-------------------------------------- -D2.PhaseOff bit #1 1,3,5,7 ? - beq D2.PhaseOff.2 only half track - -D2.PhaseOff.1 bit IO.D2.Ph0Off SELF MODIFIED -D2.PhaseOff.2 bit IO.D2.Ph0Off SELF MODIFIED - -D2.PhaseOff.8 rts +D2.PhaseOff clc + .HS B0 BCS *-------------------------------------- -D2.PhaseOn bit #1 1,3,5,7 ? - bne .1 only half track +D2.PhaseOn sec + + bit #1 + beq .1 - jsr .7 - bra D2.PhaseOn.2 - -.1 pha - jsr .7 + php + pha + jsr .1 pla inc - jsr .7 - bra D2.PhaseOn.1 - -.7 and #6 mask for 0,2,4,6 - ora Slotn0 Slot $n0 - ora #IO.D2.Ph0On + plp + +.1 and #6 + adc Slotn0 tax - - lda D2.PhaseOn.2+1 - sta D2.PhaseOn.1+1 - - stx D2.PhaseOn.2+1 - - lda D2.PhaseOff.2+1 - sta D2.PhaseOff.1+1 - - dex - stx D2.PhaseOff.2+1 - rts + lda IO.D2.Ph0Off,x + +D2.PhaseOn.RTS rts *-------------------------------------- -D2.PhaseOn.1 bit IO.D2.Ph0On SELF MODIFIED -D2.PhaseOn.2 bit IO.D2.Ph0On SELF MODIFIED - rts -*-------------------------------------- -D2.Wait100msA sec +D2.Wait100usecA sec -.1 ldx #19 +.1 ldx #19 (2) -.2 dex - bne .2 +.2 dex (2) + bne .2 (3) sbc #1 bne .1 diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index a0b7f0cb..a3d5f381 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -24,10 +24,6 @@ SKT.Socket.RAW ldy #S.SOCKET SKT.Socket.DGRAM lda #S.IP.PROTOCOL.UDP ldy #S.SOCKET - bra SKT.Socket.DSOCK -SKT.Socket.SEQPACKET - lda #S.IP.PROTOCOL.TCP - ldy #S.SOCKET.TCP SKT.Socket.DSOCK stx FD.DSOCK+S.SOCKET.T save type sta FD.DSOCK+S.SOCKET.PROTO ICMP,UDP,TCP @@ -60,6 +56,8 @@ SKT.Socket.DSOCK txa clc .9 rts + +SKT.Socket.SEQPACKET SKT.Socket.STREAM lda #S.IP.PROTOCOL.TCP ldy #S.SOCKET.TCP @@ -1317,13 +1315,17 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM ldy #S.SOCKET.T lda (ZPPtrSKT),y - cmp #S.SOCKET.T.STREAM + cmp #S.SOCKET.T.SEQPACKET bcc .8 + tax + >LDYAI K.TCP.WSIZE >STYA SKT.Cache+S.SOCKET.TCP.INFREE - >STYA SKT.Cache+S.SOCKET.TCP.OUTFREE - + + cpx #S.SOCKET.T.STREAM + bcc .8 + .DO AUXPIPE=1 >SYSCALL2 NewStkObj .ELSE @@ -1335,6 +1337,9 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM ldy #S.SOCKET.SQ.hInMem sta (ZPPtrSKT),y + >LDYAI K.TCP.WSIZE + >STYA SKT.Cache+S.SOCKET.TCP.OUTFREE + .DO AUXPIPE=1 >SYSCALL2 NewStkObj .ELSE diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index b0898dc1..4162d6fa 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -50,12 +50,17 @@ TCP.IN.JMP.LISTEN bcs .99 jsr TCP.IN.ACKTheSYN + + lda #S.SOCKET.TCP.S.OPENED + jsr SKT.StoreTCB.S + lda #S.TCP.OPTIONS.SYN+S.TCP.OPTIONS.ACK jsr TCP.OUT.SendOptA SYN received, Send SYN.ACK bcs .9 lda #S.SOCKET.TCP.S.SYNRCVD jmp SKT.StoreTCB.S + .9 lda #ERR.SKT.OOS .99 rts *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 2b088808..bf75fbba 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -35,17 +35,17 @@ L59A6 lda XRW.LastUnitUsed jsr XRW.CheckMotorOnX check if previous drive running. beq L59BD branch if stopped. - jsr XRW.Wait100ms + jsr XRW.Wait100usec lda montimeh bne L59A6 L59BD ldx A2L - bit IO.D2.Ph0Off,x make sure all motor phases are off - bit IO.D2.Ph3Off,x - bit IO.D2.Ph2Off,x - bit IO.D2.Ph1Off,x + lda IO.D2.Ph0Off,x make sure all motor phases are off + lda IO.D2.Ph1Off,x + lda IO.D2.Ph2Off,x + lda IO.D2.Ph3Off,x lda IO.D2.ReadMode,x turn off write enable X = slot $S0 nop @@ -127,7 +127,7 @@ L5362 lda IO.D2.DrvSel1,x ldy #7 lda #0 150 ms delay before stepping. -.1 jsr XRW.Wait100msA +.1 jsr XRW.Wait100usecA dey bne .1 @@ -146,7 +146,7 @@ L537C plp was motor on ? * motor was off, wait for it to speed up -L537F jsr XRW.Wait100ms wait 100us for each count in montime +L537F jsr XRW.Wait100usec wait 100us for each count in montime lda montimeh bmi L537F count up to 0000 @@ -181,12 +181,15 @@ L53A4 dec XRW.RetryCnt one less chance. dec XRW.Recalibrate can only recalibrate once. bne hndlerr - lda XRW.CurrentTrack +* lda XRW.CurrentTrack + lda #0 pha save track - clc - adc #8 pretend track is 8 > curtrk +* clc +* adc #12 pretend track is 8 > curtrk + lda #40 + ldy #64 sty XRW.RetryCnt reset retries to 64 max. bra L53CC always. @@ -559,9 +562,10 @@ wnibl sta IO.D2.WLoad,x (5) nibl write * montimel, montimeh are incremented once per 100 usec interval * for motor on timing. *-------------------------------------- -XRW.Wait100ms lda #1 +XRW.Wait100usec lda #1 -XRW.Wait100msA sec (2) +XRW.Wait100usecA + sec (2) .1 ldx #17 (2) @@ -773,66 +777,46 @@ XRW.Seek ldx XRW.UnitIndex stx XRW.CurrentQTrack txa - jsr XRW.PhaseOn - lda #104 - jsr XRW.Wait100msA Trash X + lda #30 + jsr XRW.Wait100usecA Trash X iny bra .1 .8 tya - beq XRW.PhaseOff.RTS + beq XRW.PhaseOn.RTS lda #0 wait 25.6 ms - jsr XRW.Wait100msA Trash X + jsr XRW.Wait100usecA Trash X lda XRW.TargetQTrack *-------------------------------------- -XRW.PhaseOff bit #1 1,3,5,7 ? - beq XRW.PhaseOff.2 only half track - -XRW.PhaseOff.1 bit IO.D2.Ph0Off SELF MODIFIED -XRW.PhaseOff.2 bit IO.D2.Ph0Off SELF MODIFIED - -XRW.PhaseOff.RTS - rts +* A = QTrack *-------------------------------------- -XRW.PhaseOn bit #1 1,3,5,7 ? - bne .1 only half track +XRW.PhaseOff clc + .HS B0 BCS +*-------------------------------------- +XRW.PhaseOn sec + + bit #1 + beq .1 - jsr .7 - bra XRW.PhaseOn.2 - -.1 pha - jsr .7 + php + pha + jsr .1 pla inc - jsr .7 - bra XRW.PhaseOn.1 - -.7 and #6 mask for 0,2,4,6 - ora A2L Slot $n0 - ora #IO.D2.Ph0On + plp + +.1 and #6 + adc A2L tax - - lda XRW.PhaseOn.2+1 - sta XRW.PhaseOn.1+1 - - stx XRW.PhaseOn.2+1 + lda IO.D2.Ph0Off,x - lda XRW.PhaseOff.2+1 - sta XRW.PhaseOff.1+1 - - dex - stx XRW.PhaseOff.2+1 - rts -*-------------------------------------- -XRW.PhaseOn.1 bit IO.D2.Ph0On SELF MODIFIED -XRW.PhaseOn.2 bit IO.D2.Ph0On SELF MODIFIED - rts +XRW.PhaseOn.RTS rts *-------------------------------------- XRW.Trk2Qtrk asl x2 sta .1+1 diff --git a/SBIN/HTTPD.S.txt b/SBIN/HTTPD.S.txt index 9b41f06f..61898146 100644 --- a/SBIN/HTTPD.S.txt +++ b/SBIN/HTTPD.S.txt @@ -5,11 +5,12 @@ NEW .OR $2000 .TF sbin/httpd *-------------------------------------- - .INB INC/MACROS.I - .INB INC/A2OSX.I - .INB INC/ETH.I - .INB INC/LIBTCPIP.I - .INB INC/NET.HTTP.I + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/mli.i + .INB inc/eth.i + .INB inc/libtcpip.i + .INB inc/net.http.i *-------------------------------------- TIMEOUT.MAX .EQ 30 30 sec. CONN.MAX .EQ 16 @@ -17,24 +18,29 @@ CONN.MAX .EQ 16 .DUMMY .OR ZPBIN ZS.START -ZPIPCfgPtr .BS 2 +ZPPtr1 .BS 2 ZPSktPtr .BS 2 -ZPMsgPtr .BS 2 -ZPMsgDataPtr .BS 2 -ZPMsgDataLen .BS 2 -ZPMsgDataCnt .BS 2 - -ArgIndex .BS 1 -hRootdir .BS 1 -ZPRootDirPtr .BS 2 +hFile .BS 1 +hStr .BS 1 ZPStrPtr .BS 2 hSrvSocket .BS 1 -hClntSocket .BS 1 -hMsg .BS 1 -hStr .BS 1 TimeOut .BS 1 +hSrvName .BS 1 +ZPSrvNamePtr .BS 2 +hRootdir .BS 1 +ZPRootDirPtr .BS 2 + +hClntSocket .BS 1 + +hRequest .BS 1 +ZPRequestPtr .BS 2 +ZPnRequestLen .BS 2 + +hReply .BS 1 +ZPReplyPtr .BS 2 + ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -58,9 +64,16 @@ CS.START cld .DA CS.DOEVENT .DA CS.QUIT L.LIBTCPIP .DA LIBTCPIP +L.ETCHTTPDCONF .DA ETCHTTPDCONF +L.KEYWORDS .DA KEYWORDS +J.KEYWORDS .DA CS.RUN.CONF.SERVERNAME + .DA CS.RUN.CONF.LISTEN + .DA CS.RUN.CONF.DOCUMENTROOT + .DA CS.RUN.CONF.ADDTYPE L.SA.Local .DA SA.Local L.MSG.TCPWAIT .DA MSG.TCPWAIT L.MSG.TCPIPERR .DA MSG.TCPIPERR +L.MSG.INITCONF .DA MSG.INITCONF L.MSG.INITOK .DA MSG.INITOK L.MSG.SKTERR .DA MSG.SKTERR L.MSG.INCOMING .DA MSG.INCOMING @@ -84,8 +97,8 @@ CS.RUN >LDYA L.MSG.TCPWAIT >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? bcs .99 - >STYA ZPIPCfgPtr - lda (ZPIPCfgPtr) Configured ? + >STYA ZPPtr1 + lda (ZPPtr1) Configured ? bmi CS.RUN.INIT lda Timeout @@ -101,7 +114,7 @@ CS.RUN >LDYA L.MSG.TCPWAIT >SYSCALL GetChar bcs CS.RUN.RTS - cmp #$03 + cmp #3 Ctrl-C bne .1 sec @@ -117,35 +130,30 @@ CS.RUN.RTS rts CS.RUN.INIT ldx #3 ldy #S.IPCFG.IP+3 -.1 lda (ZPIPCfgPtr),y +.1 lda (ZPPtr1),y sta SA.LOCAL+S.SOCKADDR.ADDR,x dey dex bpl .1 - lda #1 - sta ArgIndex - - >SYSCALL ArgV - bcs CS.RUN.SYN - >SYSCALL atoi - bcs .2 - - >STYA SA.LOCAL+S.SOCKADDR.PORT - inc ArgIndex - -.2 lda ArgIndex - >SYSCALL ArgV - bcs CS.RUN.SYN - - >PUSHYA - >PUSHWI 0 Allocate - >SYSCALL RealPath + >LDYAI 256 + >SYSCALL GetMem bcs CS.RUN.RTS - >STYA ZPRootDirPtr - -CS.RUN.ARGSOK >PUSHBI 0 no protocol + >STYA ZPStrPtr + stx hStr + + >PUSHW L.MSG.INITCONF + >PUSHW L.ETCHTTPDCONF + >PUSHBI 2 + + >SYSCALL PrintF + bcs CS.RUN.RTS + + jsr CS.RUN.CONF + bcs CS.RUN.RTS + + >PUSHBI 0 no protocol lda #S.SOCKET.T.SEQPACKET >LIBCALL hLIBTCPIP,LIBTCPIP.Socket bcs CS.RUN.RTS @@ -161,13 +169,6 @@ CS.RUN.ARGSOK >PUSHBI 0 no protocol >LIBCALL hLIBTCPIP,LIBTCPIP.Listen bcs CS.RUN.ERR - >LDYAI 256 - >SYSCALL GetMem - bcs CS.RUN.ERR - - >STYA ZPStrPtr - stx hStr - >PUSHW L.MSG.INITOK >PUSHW SA.LOCAL+S.SOCKADDR.PORT >PUSHW ZPRootDirPtr @@ -186,6 +187,120 @@ CS.RUN.LOOP >SLEEP sec CS.RUN.ERR rts *-------------------------------------- +CS.RUN.CONF >PUSHW L.ETCHTTPDCONF + >PUSHBI O.RDONLY+O.TEXT + >PUSHBI S.FI.T.TXT + >PUSHWZ + >SYSCALL FOpen + bcs .99 + + sta hFile + +.1 >PUSHWI 256 + >PUSHW ZPStrPtr + lda hFile + >SYSCALL fgets + bcs .8 + + tya + beq .1 + + lda (ZPStrPtr) + cmp #'#' + beq .1 + + >LDYA L.KEYWORDS + >STYA ZPPtr1 + + ldx #0 + +.2 ldy #0 + +.3 lda (ZPPtr1),y + cmp (ZPStrPtr),y + bne .4 + + iny + cmp #C.SPACE + bne .3 + + jsr CS.RUN.CONF.JMP + bcc .1 + + bra .97 + +.4 inx + inx + + ldy #0 + +.5 iny + lda (ZPPtr1),y + cmp #C.SPACE + bne .5 + + tya + sec + adc ZPPtr1 + sta ZPPtr1 + bcc .6 + inc ZPPtr1+1 + +.6 lda (ZPPtr1) + bne .2 + +.97 lda #E.SYN + +.98 pha + jsr .8 + pla + sec +.99 rts + +.8 lda hFile + >SYSCALL FClose + rts +*-------------------------------------- +CS.RUN.CONF.JMP tya + clc + adc ZPStrPtr + sta ZPPtr1 + tay + lda #0 + adc ZPStrPtr+1 + sta ZPPtr1+1 + + jmp (J.KEYWORDS,x) + +CS.RUN.CONF.SERVERNAME + >SYSCALL StrDup + bcs .9 + + >STYA ZPSrvNamePtr + stx hSrvName + +.9 rts +CS.RUN.CONF.LISTEN + >SYSCALL atoi + bcs .9 + + >STYA SA.LOCAL+S.SOCKADDR.PORT + +.9 rts +CS.RUN.CONF.DOCUMENTROOT + >PUSHYA + >PUSHWI 0 Allocate + >SYSCALL RealPath + bcs .9 + + >STYA ZPRootDirPtr + stx hRootdir + +.9 rts +CS.RUN.CONF.ADDTYPE + clc + rts +*-------------------------------------- CS.RUN.SERVER lda hSrvSocket >LIBCALL hLIBTCPIP,LIBTCPIP.accept bcs .8 @@ -216,6 +331,7 @@ CS.RUN.SERVER lda hSrvSocket CS.RUN.CLIENT .1 >SLEEP + lda hClntSocket >LIBCALL hLIBTCPIP,LIBTCPIP.Recv bcc .2 @@ -223,21 +339,43 @@ CS.RUN.CLIENT beq .1 bra .8 -.2 jsr CS.RUN.MSG.INIT +.2 sta hRequest + >SYSCALL GetMemPtr + >STYA ZPRequestPtr + + ldy #S.IP.TOTAL.LENGTH+1 + lda (ZPRequestPtr),y + sec + sbc #S.TCP-S.IP + eor #$ff + sta ZPnRequestLen + + dey + + lda (ZPRequestPtr),y + sbc /S.TCP-S.IP + eor #$ff + sta ZPnRequestLen+1 + + lda ZPRequestPtr + clc + adc #S.TCP + sta ZPRequestPtr + bcc .3 + + inc ZPRequestPtr+1 -.3 jsr CS.RUN.MSG.GetStr +.3 jsr CS.RUN.REQUEST.GetStr bcs .7 - >PUSHYA - >PUSHW ZPStrPtr - ldy #S.PS.hStdOut - lda (pPS),y - - >SYSCALL fwrite + >LDYA ZPStrPtr + >SYSCALL puts bra .3 - lda hMsg - >SYSCALL FreeMem +* jsr CS.RUN.REPLY.INIT + +* lda hReply +* >SYSCALL FreeMem .7 >PUSHWI HTTP.200OK.len >PUSHW L.HTTP.200OK @@ -250,61 +388,31 @@ CS.RUN.CLIENT clc rts *-------------------------------------- -CS.RUN.MSG.INIT sta hMsg - >SYSCALL GetMemptr - >STYA ZPMsgPtr - pha - tya -* clc - adc #S.TCP - sta ZPMsgDataPtr - - pla - adc /S.TCP - sta ZPMsgDataPtr+1 - - ldy #S.IP.TOTAL.LENGTH+1 - lda (ZPMsgPtr),y - sec - sbc #S.IP - sta ZPMsgDataLen - eor #$ff - sta ZPMsgDataCnt - - dey - lda (ZPMsgPtr),y - sbc /S.IP - sta ZPMsgDataLen+1 - eor #$ff - sta ZPMsgDataCnt+1 - - rts -*-------------------------------------- -CS.RUN.MSG.GetStr +CS.RUN.REQUEST.GetStr ldy #0 -.1 inc ZPMsgDataCnt +.1 inc ZPnRequestLen bne .2 - inc ZPMsgDataCnt+1 + inc ZPnRequestLen+1 beq .9 -.2 lda (ZPMsgDataPtr) - inc ZPMsgDataPtr +.2 lda (ZPRequestPtr) + inc ZPRequestPtr bne .21 - inc ZPMsgDataPtr+1 + inc ZPRequestPtr+1 .21 cmp #C.CR bne .4 - inc ZPMsgDataCnt + inc ZPnRequestLen bne .3 - inc ZPMsgDataCnt+1 + inc ZPnRequestLen+1 beq .9 -.3 lda (ZPMsgDataPtr) - inc ZPMsgDataPtr +.3 lda (ZPRequestPtr) + inc ZPRequestPtr bne .31 - inc ZPMsgDataPtr+1 + inc ZPRequestPtr+1 .31 eor #C.LF bne .9 @@ -320,6 +428,10 @@ CS.RUN.MSG.GetStr .9 sec rts *-------------------------------------- +CS.RUN.REPLY.INIT + + rts +*-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? lda TimeOut @@ -330,11 +442,18 @@ CS.DOEVENT lda (pEvent) rts *-------------------------------------- CS.QUIT lda hSrvSocket - beq .3 + beq .1 >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown -.3 lda hLIBTCPIP +.1 lda hStr + beq .2 + + >SYSCALL FreeMem + + +.2 + lda hLIBTCPIP beq .8 >SYSCALL UnloadLib @@ -346,15 +465,24 @@ CS.END *-------------------------------------- hLIBTCPIP .BS 1 LIBTCPIP .AZ "libtcpip" +ETCHTTPDCONF .AZ "${BOOT}etc/httpd.conf" +*-------------------------------------- +KEYWORDS .AS "ServerName " + .AS "Listen " + .AS "DocumentRoot " + .AS "AddType " + .DA #0 +*-------------------------------------- MSG.TCPWAIT .AZ "HTTPD:Waiting for TCP/IP initializing..." MSG.TCPIPERR .AZ "HTTPD:TCP/IP Not initialized properly." +MSG.INITCONF .AZ "HTTPD:Reading %s file...\r\n" MSG.INITOK .AZ "HTTPD:Listening on port %D, root dir: %s.\r\n" MSG.SKTERR .AZ "HTTPD:Listen Error." MSG.INCOMING .AZ "HTTPD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" *-------------------------------------- HTTP.200OK .AS "HTTP/1.1 200 OK" .DA #C.CR,#C.LF - .AS "Server: A2osX-HTTPD 0.93" + .AS "Server: A2osX-HTTPD 0.94" .DA #C.CR,#C.LF .AS "Content-Type: text/html" .DA #C.CR,#C.LF @@ -363,7 +491,7 @@ HTTP.200OK .AS "HTTP/1.1 200 OK" .AS "Connection: Close" .DA #C.CR,#C.LF .DA #C.CR,#C.LF - .AS "Hello From A2osX-HTTPD 0.93 !" + .AS "Hello From A2osX-HTTPD 0.94 !" .DA #C.CR,#C.LF HTTP.200OK.len .EQ *-HTTP.200OK *-------------------------------------- @@ -379,5 +507,5 @@ DS.END .ED *-------------------------------------- MAN -SAVE USR/SRC/SBIN/HTTPD.S +SAVE usr/src/sbin/httpd.s ASM