The CompuBBS Code - November 2020 (2/3)
From
Aryavartan Riekh@21:1/5 to
All on Tue Nov 10 10:22:04 2020
[continued from previous message]
virtual as in cyber and a database of the nth dimension as in matrix.
So the cybermatrix is a network of databases of a given
dimension(matricees) with a larger databases of the nth
dimension(matrix). So, let's do this.
God bless and God speed for Jesus Christ is God. Always a pleasure.
Good luck to you all. I want you to win. Allahu Akhbar! ----------------------------------------------------------------------------- Josh Greene's Island ECN day trading code in Python between horizontal
rule ----------------------------------------------------------------------------- SET TALK OFF SET CURSOR OFF SET SAFETY OFF SET MEMOWIDTH TO 80 CLEAR ALL
CLOSE ALL CLEAR CLEAR MACRO && Get rid of F keys typing commands SET
HELP OFF && Needed to clear out F1 key too
=rand(-1)
#define COREDEST "FFFFFFFF0673"
gstoredflag = .F. && Are there any messages buffered that could be
flushed?
#define VERSION "2.40"
malertfile = "M:\logs\island2.err" mholdofffile =
"M:\island2\holdoff.txt"
blanknbuffer="R"+replicate( " " , 200 ) && get BRIGADEN message here
#define CORELINELEN 124 define COREMESSAGELEN 122
#define READPORT "067F"
load int99
define window title from 0,0 to 0,scols()-1 COLOR "W/B" NONE define
window output from 1,0 to 10,scols()-1 NONE COLOR "W+/N" define window
ticker from 12,0 to srows()-1,scols()-1 NONE define window status from
11,0 to 11,scols()-1 COLOR "W+/R" NONE
do title do initstatus
activate window title activate window status
activate window output activate window ticker
s = fopen( "ISLAND2.TXT" )
if s <= 0 wait window "COULD NOT FIND ISLAND2.TXT IN CURRENT DIR. RUN
RESET." quit
endif
x = fgets( s )
if "ISLAND2" # x wait window "ACCOUNT IN ISLAND2.TXT DOES NOT MATCH
ACCOUNT ENV VAR. RUN RESET." =fclose( s ) quit
endif
tcount = 0 && For counting random stuff
tseq = val( fgets( s ) ) && Next order number tmatch = val( fgets( s ) )
&& Next match number tnextdead = val( fgets( s ) ) && Next dead order (zero=none) =fclose( s )
select select(1) use events set order to WHEN
tnow = 0
ttoolate = 0 && Count the too late to cancel events
gaccept = .F. && Let any orders in? Set by SOD, cleared by EOD
gactaccept = .F. && Let ACT orders in? Set by SOD, cleared by EOA
geom = .F. && Have we gotten EOM yet?
gprinting = .F. && Print incoming messages?
go top
if eof("EVENTS")
tnext = 99999.999
else
tnext = WHEN && Time of next event
endif
select 0 use sources set order to SOURCE
select select(1) use island
gsx = alltrim( str( date() - {2/6/1996} ) )
gsession = left( "0000000000" , 9-len( gsx ) ) + gsx + "F"
s="N"+gsession+"5050" && Open the islandfile for writing Mold on port
5050 call int99 with s
if s # "n" && Valid open file?
do alert with "InitMold filed with reason >"+s
do case
case s = "i"
sm ="Error opening files in deney-write mode"
case s = "j"
sm = "a file had a partial line fragment"
case s = "k"
sm = "not all trailing files are empty"
case s = "l"
sm = "all files full"
otherwise
sm = "Unknown error"
endcase
do alert with sm
wait window "Error on ISLAND.OUT or ISLAND2.OUT OPEN:"+s
quit
endif
select island
tecount = 0 && Assume worst case, just to make sure ecount is high
enough txcount = 0 && Cancels
x = "L"+READPORT+" " && Read Island2 requests call int99 with x if x #
"l"
do alert with "Could not open Command listen!" endif
gstatdelay = 0.25 do showstatus gnextstats = seconds() + gstatdelay
gmolddelay = 1 && Time between mold heartbeats gmoldheart = seconds() + gmolddelay && Time to send a MOLD heartbeat by doing a FLUSH
gmessages = 0 && Number of messages written to the stream gpackets = 0
&& Number of packets writtento the stream
mdone = .F.
do while !mdone
tnow = seconds()
do while tnow >= tnext
if !EVENTS.PROCESSED
do swrite with "G" , EVENTS.CODE
select EVENTS replace PROCESSED with .T. select
ISLAND
else
? time()+" Event bypassed:"+ EVENTS.CODE
endif
do seteventflags with EVENTS.CODE
skip 1 in EVENTS
if eof("EVENTS")
tnext = 99999.999
else
tnext = EVENTS.WHEN
endif
enddo
nbuffer = blanknbuffer
call int99 with nbuffer
if nbuffer = "r"
tlenstr = substr( nbuffer , 2 , 5 )
tlen = val( tlenstr )
tmessage = substr( nbuffer , 43 , tlen )
if gprinting ? time()+" >"+tmessage+"<" endif
if tmessage = "P" && PING REQUEST
tsource = substr( nbuffer ,11 , 8)
do pingreply with tsource , tmessage
else
do processtcpip with tmessage
endif
else && No pending commands...
if gstoredflag
do flush
gstoredflag = .F.
gmoldheart = seconds() + gmolddelay
gpackets = gpackets + 1
else
if gmoldheart < seconds()
do flush
gmoldheart = seconds() + gmolddelay
endif
endif
endif
if gnextstats <= seconds()
do showstatus gnextstats = seconds() + gstatdelay
endif
lastkey=inkey()
if lastkey # 0
activate window output
do case case lastkey = asc("~") ? time()+" Quitting..."
mdone = .T.
case lastkey = asc("@") ? time()+" Copying to
island2.dbf" set order to copy to
m:\island2\island2 ?? "Done"
case lastkey = asc("#") ? time()+"
Suspending..." suspend
case lastkey = asc("!")
? time()+"
ACCEPT="+iif(gaccept,"T","F")+" ACT="+
iif(gactaccept,"T","F") + "
EOM="+iif(geom,"T","F")+"
NEXT="+str(tnext,9,3)+ "
TOO-LATE="+str(ttoolate,6,0)+"
COUNT="+str(tcount,9,0)
s = "T"+space(60) call int99 with s
if s = "t"
tbuffered = val( substr(s,26,5)
)
? "MOLD INFO:
SESSION="+substr(s,2,10)+"
SEQ="+substr(s,12,10)+"
SOCKET="+substr(s,22,4)+"
BUFFERED="+str(tbuffered,5,0)
else
? "Could not get mold info!"
tbuffered = 0
endif
if gpackets > 0
?
"MESSAGES:"+str(gmessages-tbuffered,
12,0)+"
PACKETS:"+str(gpackets,12,0)+"
("+str( (gmessages-tbuffered)/
gpackets , 5 , 3 )+")"
gmessages = tbuffered gpackets
=0
endif
case lastkey = asc("%") ? time()+" Shutdown
attempt..." do shutdown
case lastkey = asc("(") ? time()+" toggled
gaccept" gaccept = !gaccept
case lastkey = asc("?") ? "@-Copy to island2.DBF
~-Quit !-Status #-Suspend %-ShutDown
$-Print incoming"
case lastkey = asc("$")
if gprinting
? time()+" Printing off"
gprinting = .F.
else
? time()+" Printing on"
gprinting = .T.
endif
endcase
activate window ticker
endif
enddo && Main Loop
activate window output
&& Final flush to mak sure everything is sent
do flush
&& Close file
s = "C" call int99 with s
x = "H"+READPORT call int99 with x if x # "h" do alert with "Could not
close PingPort!"
endif
use && Unuse Island
&& Create fresh waypoint file
f = fcreate("ISLAND2.TXT")
if f<=0 ? "Could not create ISLAND.TXT!" suspend endif
=fputs( f , "ISLAND2" ) && ROLE
=fputs( f , str( tseq , 9 , 0 ) ) && Order number =fputs( f , str(
tmatch , 9 , 0 ) ) && Match number =fputs( f , str( tnextdead , 9 , 0 )
) && Next dead order pointer =fclose(f)
quit
procedure title activate window title SAME clear @ 0,0 SAY " Island2 ú
Version "+VERSION+" (c)1996 Joshua Levine ú Press [?] for help"
activate window ticker SAME
return
proc werror param wcode
do case
case wcode = "w"
return "Error on file write"
case wcode = "s"
return "Error on nework send"
case wcode = "c"
return "Invalid message length"
case wcode = "d"
return "all files full"
endcase
return "Unknown error"
**** write actualy writes a string the the file, steam, and screen
proc write parameter wstring
wl = len( wstring )
ws="W"+chr(wl)+wstring
call int99 with ws
gmessages = gmessages + 1
if ws = 'b'
gstoredflag = .T.
else
if ws = "f"
gpackets = gpackets + 1
gstoredflag = .F.
else
activate window output
? time() +" !!!! ERROR ON WRITE!!!!!!"
? ws
do alert with "Erorr on write:"+werror(ws)
activate window ticker
suspend
endif
endif
return
*** Write a message
**** ACTIONS: **** A - Accept the order was accepted into Island **** B
- Booked this order hit the book **** E - Execute the order was executed
for this many shares at this price **** X - Cancel this many shares were canceled **** C - Break this order was executed, now broken **** G -
Control stock is the control type **** R - Report trade done away but
will report/clear through Island
**** ON Cancel CONTRA = Reason for cancel
***** MINDICATE = on accept always "D" (legacy) ***** on execute "A"=
added liquidity, "R"=Removed liquidity ***** on report "Y" trade report,
"N" don't report, "S" step-out
****** mmatch = on accept or book is MINIMUM shares, in execution is
match number ****** not defined on cancels, but 0 for now
proc mwrite
parameter
maction,mseq,mshares,mprice,mcontra,mindicate,mmatch,mlocate
mwhen = str( tnow , 9 , 3)
w = left( mwhen , 5 ) + "," +maction+","+str(mseq,9,0)+","+PORT+","+USER+","+TOKEN+","+BUY_SELL+"," +str(mshares,9,0)+","+str(mmatch,9,0)+","+STOCK+","+str(mprice,11,4)+","
+str(mlocate,8,0)+ ", 0,"+SHORT+","+MMID+","+PA+","+mcontra+","+mindicate+","+DISPLAY+"," +right(mwhen,3)+","+CLEARING+",D"
do write with w
return
****** Swrite writes a status message that doesnot concern an order,
Like G-Good morning
proc swrite
param maction , mcode
mwhen = str( tnow , 9 , 3)
xcode = left( padr( mcode , 3) , 3 )
w = left( mwhen , 5 ) +","+maction+","+" 0"+", , , , , 0,
0,*"+xcode+" , 0.0000,00000000, 0, , , , , , ,"+right( mwhen , 3
)+", , "
do write with w
return
****** Enter order adds the audit, tries for a match, and if it don't
work, books it. ****** Enter order assumes ostock and obuy_sell are the
right length. ****** Also assumes that buy_sell has aready been checked
to be B or S. ****** Also assumes that the token is no already used
proc enter2order
parameter
oport,ouser,otoken,obuy_sell,oshares,ostock,oprice,otif,oshort,ommid, opa,odisplay,omin,oclearing,oflags
if odisplay = "P"
obasefirm = ouser
else
obasefirm = "####"
endif
&& Get the working record
if tnextdead > 0
tlocate = tnextdead goto tnextdead tnextdead = SEQ
else
insert into ISLAND (LEAVES) values (0) && Keep it out of
the indexes for now tlocate = recno()
endif
tseq = tseq + 1
awhen = str( tnow , 9 , 3)
oleaves = oshares
ofilled = 0
aflag = .f. && have we written the "A" message yet?
if obuy_sell = "B" && Buy order...
set order to SSEEK
do case
case omin > 1 && Minimum quantity specified?
*** if the min is bigger than the size,
set it to the size
if omin > oshares
mmin = oshares
else
mmin = omin
endif
*** First prescan to see if we have
enough size to fill it
if seek( ostock )
scan while mmin > 0 .and. ostock
= STOCK .and. BUY_SELL = "S"
.and. oprice >= PRICE
mmin = mmin - LEAVES
endscan
endif
if mmin <= 0
*** There were at least enough
to fill the minimum quantity
mmax = oshares
else
*** Not enough to fill the min,
so fill none
mmax = 0
endif
case odisplay = "R" .or. odisplay = "P" && Is
this a round-lot only order?
mmax = 0
*** Prescan to find the number of a
shares available
if seek( ostock )
scan while mmax <= oshares .and.
ostock = STOCK .and. BUY_SELL =
"S" .and. oprice >= PRICE .and.
obasefirm # MMID
mmax = mmax + LEAVES
endscan
endif
if mmax >= oshares
*** Max out with the number of
shares specified
mmax = oshares
endif
*** Round down to nearest round lot
wihtout using floating point
mmax = val( substr( str( mmax , 6, 0 ) ,
1 ,4 ) + "00" )
otherwise
mmax = oshares
endcase
do while mmax > 0 .and. seek( ostock ) .and. oprice >=
PRICE
if !aflag
w = left( awhen , 5 ) +",A,"
+str(tseq,9,0) +"," +oport+"," +ouser
+"," +otoken +"," +obuy_sell +", "
+str(oshares,6,0) +", " +str(omin,6,0)
+"," +ostock +"," +str(oprice,11,4) +","
+str(tlocate,8,0) +"," +str(otif,5,0)
+"," +oshort +"," +ommid +","
+opa+","+oflags+", ," +odisplay +","
+right(awhen,3) +"," +oclearing+",D"
do write with w
aflag = .T.
endif
tecount = tecount + 1
eshares = min( LEAVES , mmax )
oleaves = oleaves - eshares
mmax = mmax - eshares
ofilled = ofilled + eshares
tmatch = tmatch + 1
w = left( awhen , 5 ) +",E," +str( SEQ ,9,0)
+"," +PORT +"," +USER +"," +TOKEN +"," +BUY_SELL
+", " +str(eshares,6,0) +"," +str(tmatch,9,0)
+"," +ostock +"," +str(PRICE,11,4) +"," +str(
recno() ,8,0)+ ", 0," +SHORT +"," +MMID +","
+PA+"," +ommid+",A," +DISPLAY +","
+right(awhen,3) +"," +CLEARING+",D"
do write with w
w = left( awhen , 5 ) +",E," +str(tseq,9,0) +","
+oport+"," +ouser +"," +otoken +"," +obuy_sell
+", " +str(eshares,6,0) +"," +str(tmatch,9,0)
+"," +ostock +"," +str(PRICE,11,4) +","
+str(tlocate,8,0)+", 0," +oshort +"," +ommid
+"," +opa+","+MMID+",R," +odisplay +","
+right(awhen,3) +"," +oclearing+",D"
do write with w
dleaves = LEAVES - eshares
if dleaves <= 0 && Dead record?
replace LEAVES with 0 , SEQ with
tnextdead tnextdead = recno()
else
replace LEAVES with dleaves , FILLED
with FILLED + eshares
endif
enddo
else && sell order..
set order to BSEEK
do case
case omin > 1 && Minimum quantity specified?
*** if the min is bigger than the size,
set it to the size
if omin > oshares
mmin = oshares
else
mmin = omin
endif
*** First prescan to see if we have
enough size to fill it
if seek( ostock )
scan while mmin > 0 .and. ostock
= STOCK .and. BUY_SELL = "B"
.and. oprice <= PRICE
mmin = mmin - LEAVES
endscan
endif
if mmin <= 0
mmax = oshares
else
mmax = 0
endif
case odisplay = "R" .or. odisplay = "P" && Is
this a round-lot only order?
mmax = 0
*** Prescan to find the number of a
shares available
if seek( ostock )
scan while mmax <= oshares .and.
ostock = STOCK .and. BUY_SELL =
"B" .and. oprice <= PRICE .and.
obasefirm # MMID
mmax = mmax + LEAVES
endscan
endif
if mmax >= oshares
mmax = oshares
endif
*** Round down to nearest round lot
wihtout using floating point
mmax = val( substr( str( mmax , 6, 0 ) ,
1 ,4 ) + "00" )
otherwise
mmax = oshares
endcase
do while mmax > 0 .and. seek( ostock ) .and. oprice <=
PRICE
if !aflag
w = left( awhen , 5 ) +",A,"
+str(tseq,9,0) +"," +oport+"," +ouser
+"," +otoken +"," +obuy_sell +", "
+str(oshares,6,0) +", " +str(omin,6,0)
+"," +ostock +"," +str(oprice,11,4) +","
+str(tlocate,8,0) +","+str(otif,5,0)
+"," +oshort +"," +ommid +","
+opa+","+oflags+", ," +odisplay +","
+right(awhen,3) +"," +oclearing+",D"
do write with w
aflag = .T.
endif
tecount = tecount + 1
eshares = min( LEAVES , mmax )
oleaves = oleaves - eshares
mmax = mmax - eshares
ofilled = ofilled + eshares
tmatch = tmatch + 1
w = left( awhen , 5 ) +",E," +str( SEQ ,9,0)
+"," +PORT +"," +USER +"," +TOKEN +"," +BUY_SELL
+", " +str(eshares,6,0) +"," +str(tmatch,9,0)
+"," +ostock +"," +str(PRICE,11,4) +"," +str(
recno() ,8,0) +", 0," +SHORT +"," +MMID +","
+PA+"," +ommid+",A," +DISPLAY +","
+right(awhen,3) +"," +CLEARING+",D"
do write with w
w = left( awhen , 5 ) +",E," +str(tseq,9,0) +","
+oport+"," +ouser +"," +otoken +"," +obuy_sell
+", " +str(eshares,6,0) +"," +str(tmatch,9,0)
+"," +ostock +"," +str(PRICE,11,4) +","
+str(tlocate,8,0) +", 0," +oshort +"," +ommid
+"," +opa+","+MMID+",R," +odisplay +","
+right(awhen,3) +"," +oclearing+",D"
do write with w
dleaves = LEAVES - eshares
if dleaves <= 0 && Dead record?
replace LEAVES with 0 , SEQ with
tnextdead tnextdead = recno()
else
replace LEAVES with dleaves , FILLED
with FILLED + eshares
endif
enddo
endif
if oleaves > 0 && any non-executed shares left?
if otif = 0 && Fill or kill, so cancel leaves
if !aflag && did we not make an A message yet?
w = left( awhen , 5 ) +",A,"
+str(tseq,9,0) +"," +oport+"," +ouser
+"," +otoken +"," +obuy_sell +", "
+str(oshares,6,0) +", " +str(omin,6,0)
+"," +ostock +"," +str(oprice,11,4) +","
+str(tlocate,8,0)+ "," +str(otif,5,0)
+"," +oshort +"," +ommid +","
+opa+","+oflags+", ," +odisplay +","
+right(awhen,3) +"," +oclearing+",D" do
write with w
endif
w = left( awhen , 5 ) +",X," +str(tseq,9,0) +","
+oport+"," +ouser +"," +otoken +"," +obuy_sell
+", " +str(oleaves,6,0) +", 0," +ostock +","
+str(oprice,11,4) +"," +str(tlocate,8,0)+ ", 0,"
+oshort +"," +ommid +"," +opa+",#IOC, ,"
+odisplay +"," +right(awhen,3) +","
+oclearing+",D" do write with w
oleaves = 0
else
if !aflag && did we not make an A message yet?
w = left( awhen , 5 ) +",A,"
+str(tseq,9,0) +"," +oport+"," +ouser
+"," +otoken +"," +obuy_sell +", "
+str(oshares,6,0) +", " +str(omin,6,0)
+"," +ostock +"," +str(oprice,11,4) +","
+str(tlocate,8,0) +"," +str(otif,5,0)
+"," +oshort +"," +ommid +","
+opa+","+oflags+",B," +odisplay +","
+right(awhen,3) +"," +oclearing+",D"
else
w = left( awhen , 5 ) +",B,"
+str(tseq,9,0) +"," +oport+"," +ouser
+"," +otoken +"," +obuy_sell +", "
+str(oleaves,6,0) +", 0," +ostock +","
+str(oprice,11,4) +"," +str(tlocate,8,0)
+"," +str(otif,5,0) +"," +oshort +","
+ommid +"," +opa+", , ," +odisplay +","
+right(awhen,3) +"," +oclearing+",D"
endif
do write with w
endif && otif == 0
endif && oleaves > 0
if oleaves > 0 && Still open?
goto tlocate
replace ; PORT with oport,; USER with ouser,; TOKEN with
otoken,; BUY_SELL with obuy_sell,; LEAVES with
oleaves,; STOCK with ostock,; PRICE with
oprice,; SHORT with oshort,; MMID with ommid,;
PA with opa,; DISPLAY with odisplay,; CLEARING
with oclearing,; FILLED with ofilled,; SEQ with
tseq
else && leaves = 0 (add current order to deadlist)
goto tlocate replace SEQ with tnextdead tnextdead =
recno()
endif && oleaves > 0
return
****** Enter Report adds a type R line to the file ****** Enter order
assumes ostock and obuy_sell are the right length.
proc enter2report
parameter
oport,ouser,otoken,obuy_sell,oshares,ostock,oprice,oshort,ommid,opa,oreport,oclearing,ocontra
tseq = tseq + 1
tmatch = tmatch + 1
mwhen = str( tnow , 9 , 3)
w = left( mwhen , 5 ) + ",R,"+str(tseq,9,0) +"," +oPORT+","
+oUSER+"," +oTOKEN+"," +oBUY_SELL +",
"+str(oshares,6,0)+","+str(tmatch,9,0)+","
+oSTOCK+","+str(oprice,11,4)+",00000000,
0,"+oSHORT+","+oMMID+","+oPA+","+ocontra+","+oreport+",R,"+right(mwhen, 3)+","+oCLEARING+",D"
do write with w
return
****** Enter Reject adds a type J line to the file
proc enter2reject
parameter oport,ouser,otoken,otype,oreason
tseq = tseq + 1
*** Leaves MUST be 0 or it might be included in the match!
mwhen = str( tnow , 9 , 3)
w = left( mwhen , 5 ) + ",J," +str(tseq,9,0) +"," +oport+","
+ouser +"," +otoken+"," +otype+", 0, 0, , 0.0000,00000000, 0, ,
, , ," +oreason +",N,"+right(mwhen,3)+", ,D"
do write with w
return
****** Enter break adds a type C line to the file
proc enterbreak
parameter oseq, oport , ouser, otoken, obuy_sell, oshares,
omatch, ostock, oprice, ommid, oreason, omisc, oclearing ,
oshort
if oseq > tseq .or. oseq < 1
? time()+" Bad SEQ in Break! OSEQ="+str(oseq,9,0)+"
RECS="+str( tseq, 9,0)
return
endif
if oshares <= 0
? time()+" Jerk boy BREAK zero shares
SEQ="+str(oseq,9,0)
return
endif
if oprice <= 0
? time()+" Jerk boy BREAK zero price SEQ="+str(oseq,9,0)
return
endif
if ! omisc $ "AR"
? time()+" Invalid A/R BREAK MISC="+omisc+"
SEQ="+str(oseq,9,0)
return
endif
mwhen = str( tnow , 9 , 3)
w = left( mwhen , 5 ) + ",C,"+str(oseq,9,0) +"," +oPORT+","
+oUSER+"," +oTOKEN+"," +oBUY_SELL +",
"+str(oshares,6,0)+","+str(omatch,9,0)+","
+oSTOCK+","+str(oprice,11,4)+",00000000, 0,"+oshort+","+oMMID+",
,"+oreason +","+omisc+", ,"+right(mwhen,3)+","+oCLEARING+",D"
do write with w
return
****** Enter maint adds a type M line to the file
*** SHORTTYPE ***** N - No short sale checks ***** B - Bidtick test
***** L - Lasttrade test
*** BLOCKSUB - Block subscriber only orders? ***** B - Block ***** N -
No block
*** CENTER ***** Q - NASDAQ ***** L - LISTED
proc entermaint
parameter
oport,ouser,otoken,ostock,oshorttype,oblocksub,ocenter,omisc
if ! oshorttype $ "NBL"
? time()+" Bad SHORTTYPE="+oshorttype+" STOCK="+ostock
return
endif
if !oblocksub $ "BN" ? time()+" Bad BLOCKSUB="+oblocksub+"
STOCK="+ostock
return endif
if !ocenter $ "QL" ? time()+" Bad CENTER="+ocenter+"
STOCK="+ostock
return endif
if len( omisc ) # 4 ? time()+" Bad omisc len!"+omisc return
endif
for eml = 1 to 4
emb = substr( omisc , eml , 1 )
if !isalpha( emb ) .and. emb # " "
? time()+" Bad omisc letter!"+omisc return
endif
endfor
awhen = str( tnow , 9 , 3 )
w = left( awhen , 5 ) +",M, 0,"+oport+","+ouser+","+otoken+",S,
0, 0," +ostock +", 0.0000,00000000, 0,"+oshorttype+", ,
,"+omisc+","+ocenter+","+oblocksub+"," +right(awhen,3) +", , "
do write with w
return
*** STATE - Trading state ***** T - Trading ***** H - Halted
proc enterstate
parameter oport,ouser,otoken,ostock,ostate
[continued in next message]
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)