From 8ffd177fb2298ef72d79dfb6c6495590b0e7eb25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 10 Nov 2017 16:55:13 +0100 Subject: [PATCH] Kernel 0.9.1 : Shell, CSH, adding functions.... --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes SBIN/SHELL.C.CSH.txt | 105 ++++++++++++++++++++++++++ SBIN/SHELL.G.CSH.txt | 39 ++++++++++ SBIN/SHELL.S.CSH.txt | 158 ++++++++++++++++++++++++++++++++++----- SBIN/SHELL.S.txt | 156 +++++--------------------------------- 6 files changed, 300 insertions(+), 158 deletions(-) create mode 100644 SBIN/SHELL.C.CSH.txt create mode 100644 SBIN/SHELL.G.CSH.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 44c32fa7cf7a3d3ea7aff4d1cdae836416ddab1e..b322ec97c0c19734c855eee0bf8102709d36372b 100644 GIT binary patch delta 3179 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 OP8an~7oVJdDD_`;1*7`_ delta 3006 zcmai0eQZ6G z*rnKImbTex#f!3Ty7Q6@M}a+uiEct{?LLCdAKOd2O`>cm8!ZEhy0;Zb(@JCKzVIQc zNsHt6?mg#s&-vYR&OO($m_HWtOB?jsZkzvfSigdlU*x#8HgB1YyTWl1Tl48t#oyCu zv_D=xmsZT-KAy+*S0lL*{G1oeR^F94~iMBkJ{V$|G%{`W$aEW*n%LR#SbJOY?BuBDc{U z2s{kL28*oHvW$ZIjH8yJZow)m)#9p;;Hr(19Iw0w)n4$5-Ui~Rxvv|po2c!t9k#Ql zd6@666t_1JA-cOEHNOy28iP>niBMy@I!FyUzBCe6Eta9hal29sUb{rH9MhY_SuPMB zuQF94EyZZg=yLpZB$>Y;-wA}F$_IiA-m{s*v@FLTtGM^i_F0|z0O?j$FEH2e3m4ll z&m8xfp8R{{eWDQ!ZnB~F!zGITg6UIpI9WQ{>xIjZntM4aYeTDTpFW*TbAp$Q*D~38vGLcmWs7af4?JY4hKMy@^5i_`N0YNEg39m2@WO6R-036pOENmf#6h1IzvCqq ztXng4tr8fwDtEGXDMn@3He_YN2%Q#x?%SWJWVV`(eXWqvv9xXVX`vO#-j z%n?YL4b0U`;*Wf!Me~yQS07nkF=$7d8?cf}(I#)kDs=maO;aj%_=!g|CdT|^QB(yr z4BOO#wcan-IVxv18(@!252LL`uILO&>eIYR{4On;9nrh_94IB2;b}ZXkRLF2LEJiQ z>E`0LFfK5pd7kdYsO-n@!8D)MWX92CW|M&#ej!PBh>MpHGruRztA!hHIO?PvqOLK0 zeUk1IpF@50zI zDJNcALRLkwIovBndf?%3-^1aa2g5Kk{zAbif0Y^UV8)+iqLqaP`72D+RyZU-0auz* z3)sw059Rn#IOmd_**<6&BuhA>fp-O|8e!UNv0J!RC7M(W7vvi##`b{Bdix>NE(GbW z9FI%rPW2T*k&3{W#2xHWKa0+4Vx?IUE6QqPB&(yn*zqn3(o>kZHpZX@113F=aY;47 zpWKp%k*zPZC_DyeF$3@r#ZAn|2(fiWj8F-R(e|N$$_6s-W_kpz;=*T`u`(9qVtBbp zS{|DlYX+l7dJOz-$;%Lpg$5;v=AVKqg7l@6&%sy+!0kq99zB9Rwj!xo`l%bCsncw) zN&4+{l&41~d5Od_3gd9ve^Oy$qd{=;f z38^P;M}jyTU}p{KyW;LF*VPzrVr%=|;YhYO5FTzAa^4HUDDJy0iQ9IbIKG^;Rv_vf zw_G=R?)s8Z#;i|#b~%CnA&#QB7SRQrY@mI3Syq|D>MHCueHC~=jRZ(hRQ_yKxfuwL z_O1cEJ5;zr%xVO_5GUsB=%b-i{i~wPuUQby;UGPj<9Ved%{QNjq%p~n>|sm;3Kc_h znm>`dcOXVpQCahf6Uj+IE*@YFXSVn$m(Mxy?!O|W?hN2kz^U&;!a})8Q1tn?D&*;tZ(v!S{DGJVlE+5ch{1J(^}O;V-Hd&b zqg$|JZe=yR8TZ-w(C=NC@roY?NmF!7j>qlCCRopf6uD|)-PoQ6c_yC*ww59SiOiaS z2PT+Usi0dieL6O7X4sf83!8Zqc7wst&?GOHASncf6f1kdOq*Bj_Nr$l`6a;jHr`8zn~Pe_a}jH9_wPWIJuH|j!$Tvnlh12X!{eZ$jB;fuW#cP zL+AEwJ>A>(bm=-H8+U2DxAo|@Zr}Dz{idzkH}-HvJ9eRD6M6eCr|sOnTc;E2C$tB| zSI=t?9RG{g|)ASrADLb4mw+xptySzI6E8QkP$#NwC?G(>u}uJ+R0V{^Z^)+`y$<2yB@`b z+S@y3ac?Sltx5BmiMU2CXe&p4PDo-(o0!riru2!aqQq2jV#<)1DoIS0j!ezT{1?|> BZ_WS! diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 0e52713a1fd27b50b163f1a8c171ecb47fb4c99b..7d2970b3fb185df183b40df7ecf2a82ea069f455 100644 GIT binary patch delta 21223 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 delta 20564 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

)- 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" +*-------------------------------------- +* Pre Operators: + - ! ~ ++ -- +*-------------------------------------- +CSH.PREOOPS >PSTR "+" + >PSTR "-" + >PSTR "!" + >PSTR "~" +*-------------------------------------- +* Post Operators: ++ -- +*-------------------------------------- +CSH.POSTOPS >PSTR "++" + >PSTR "--" + .HS 00 +*-------------------------------------- +* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= +*-------------------------------------- +CSH.AOPS >PSTR "=" + >PSTR "+=" + >PSTR "-=" + >PSTR "*=" + >PSTR "/=" + >PSTR "%=" + >PSTR "<<=" + >PSTR ">>=" + >PSTR "&=" + >PSTR "^=" + >PSTR "!=" + .HS 00 +*-- Binary ---- H to L prececence ----- +* Arithmetic Operators: * / % +* Arithmetic Operators: + - +* Shift Operators: << >> +* Relational Operators: < > >= < >= == != +* Bitwise Operators: & | ^ ~ +* Logical Operators: && || +*-------------------------------------- +CSH.BOPS >PSTR "+" + >PSTR "-" + >PSTR "*" + >PSTR "/" + >PSTR "%" + >PSTR "<<" + >PSTR ">>" + >PSTR "<" + >PSTR ">" + >PSTR "<=" + >PSTR ">=" + >PSTR "==" + >PSTR "!=" + >PSTR "&" + >PSTR "|" + >PSTR "^" + >PSTR "&&" + >PSTR "||" + .HS 00 +*-------------------------------------- +* Reserved Keywords: +*-------------------------------------- +CSH.KW >PSTR "if" + >PSTR "while" + >PSTR "else" + >PSTR "do" + >PSTR "for" + >PSTR "switch" + >PSTR "case" + >PSTR "break" + >PSTR "continue" + >PSTR "float" + >PSTR "signed" char,int,long + >PSTR "unsigned" char,int,long +CSH.STYPES >PSTR "char" + >PSTR "int" + >PSTR "long" + .HS 00 +CSH.TSIZE .HS 0001020401020405 00,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT.... +*-------------------------------------- +* int printf ( const char * format, ... ); +CSH.FN >PSTR "printf" + .DA #CSH.T.INT returned value + .DA #CSH.Q.CONST+CSH.T.CHAR + .DA #CSH.Q.POINTER + .DA #CSH.T.VARIADIC + .DA #0 +* float cos ( float x ); + >PSTR "cos" + .DA #CSH.T.FLOAT returned value + .DA #CSH.T.FLOAT + .DA #0 +* int getchar ( void ); + >PSTR "getchar" + .DA #CSH.T.INT returned value + .DA #0 +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/SBIN/SHELL.C.CSH +LOAD /A2OSX.SRC/SBIN/SHELL.S +ASM diff --git a/SBIN/SHELL.G.CSH.txt b/SBIN/SHELL.G.CSH.txt new file mode 100644 index 00000000..5848c400 --- /dev/null +++ b/SBIN/SHELL.G.CSH.txt @@ -0,0 +1,39 @@ +PR#3 +PREFIX /A2OSX.BUILD +LOMEM $A00 +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +CSH.hBuf .BS 1 +CSH.BufPtrSave .BS 2 + +CSH.LineNum .BS 2 + +CSH.hSymbols .BS 1 +CSH.SymbolsPtr .BS 1 + +CSH.hData .BS 1 +CSH.DataPtr .BS 1 + +CSH.hStack .BS 1 +CSH.StackPtr .BS 1 + +CSH.CmdSave .BS 1 + +CSH.ACCT .BS 1 +CSH.ACC .BS 5 + +CSH.EXPBOP1 .BS 1 + +CSH.ARGT .BS 1 +CSH.ARG .BS 5 + +CSH.EXPBOP2 .BS 1 + +CSH.LookupOpt .BS 1 +*-------------------------------------- +MAN +SAVE /A2OSX.SRC/SBIN/SHELL.G.CSH +LOAD /A2OSX.SRC/SBIN/SHELL.S +ASM diff --git a/SBIN/SHELL.S.CSH.txt b/SBIN/SHELL.S.CSH.txt index dde01cfa..ae68db44 100644 --- a/SBIN/SHELL.S.CSH.txt +++ b/SBIN/SHELL.S.CSH.txt @@ -5,20 +5,28 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -CSH.TQ.POINTER .EQ %10000000 -CSH.TQ.CONST .EQ %01000000 -CSH.TQ.SIGNED .EQ %00100000 +CSH.E.SYNTAX .EQ $7F +CSH.E.SOVERFLW .EQ $7E +CSH.E.NOVERFLW .EQ $7D +CSH.E.OOM .EQ $7C +CSH.E.DUP .EQ $7B +CSH.E.UNDEF .EQ $7A +CSH.E.TMISMATCH .EQ $79 + +CSH.Q.POINTER .EQ %10000000 +CSH.Q.CONST .EQ %01000000 +CSH.Q.ARRAY .EQ %11000000 CSH.T.CHAR .EQ 1 CSH.T.INT .EQ 2 CSH.T.LONG .EQ 3 -CSH.T.FLOAT .EQ 4 -CSH.T.VARIADIC .EQ $FF +CSH.T.UCHAR .EQ 4 +CSH.T.UINT .EQ 5 +CSH.T.ULONG .EQ 6 +CSH.T.FLOAT .EQ 7 +CSH.T.VARIADIC .EQ $F *-------------------------------------- -CSH.Init lda #$FF - >STA.G bExitOnEOF - - inc +CSH.Init lda #$0 >STA.G CSH.SymbolsPtr >STA.G CSH.DataPtr >STA.G CSH.StackPtr @@ -72,7 +80,7 @@ CSH.Run jsr CL.RESET jsr CSH.Pop was expected, get stacked Cmd... tax - jmp (J.CSH.KEYWORDS.END,x) + jmp (J.CSH.KW.END,x) .1 cmp #$0D bne .2 @@ -90,7 +98,7 @@ CSH.Run jsr CL.RESET bra .9 error, todo : PREOPS ++ --..... -.3 >LDYA L.CSH.KEYWORDS +.3 >LDYA L.CSH.KW jsr CSH.LookupID bcs .4 not an internal CSH keyword.... @@ -98,7 +106,7 @@ CSH.Run jsr CL.RESET txa >STA.G CSH.CmdSave - jmp (J.CSH.KEYWORDS,x) + jmp (J.CSH.KW,x) .4 jsr CSH.GetVar bcs .5 @@ -253,7 +261,7 @@ CSH.IF jsr CSH.GetCharNB .99 rts CSH.Keyword.Start - jmp (J.CSH.KEYWORDS.START,x) + jmp (J.CSH.KW.START,x) *-------------------------------------- CSH.IF.START jmp CSH.Push *-------------------------------------- @@ -288,12 +296,58 @@ CSH.CONTINUE sec rts *-------------------------------------- +CSH.SIGNED jsr CSH.GetChar + bcs .9 + cmp #' ' + bne .9 + + jsr CSH.GetNextCharNB + bcs .9 + + >LDYA L.CSH.STYPES + jsr CSH.LookupID + + bcs .9 + + jmp (J.CSH.STYPES,x) + +.9 lda #CSH.E.SYNTAX + sec + rts +*-------------------------------------- +CSH.UNSIGNED jsr CSH.GetChar + bcs .9 + cmp #' ' + bne .9 + + jsr CSH.GetNextCharNB + bcs .9 + + >LDYA L.CSH.STYPES + jsr CSH.LookupID + + bcs .9 + + jmp (J.CSH.UTYPES,x) + +.9 lda #CSH.E.SYNTAX + sec + rts +*-------------------------------------- CSH.CHAR lda #CSH.T.CHAR bra CSH.TYPE +CSH.UCHAR lda #CSH.T.CHAR + bra CSH.TYPE CSH.INT lda #CSH.T.INT + >DEBUG + bra CSH.TYPE +CSH.UINT lda #CSH.T.INT bra CSH.TYPE CSH.LONG lda #CSH.T.LONG bra CSH.TYPE +CSH.ULONG lda #CSH.T.LONG + bra CSH.TYPE + CSH.FLOAT lda #CSH.T.FLOAT CSH.TYPE >STA.G CSH.ACCT @@ -328,7 +382,7 @@ CSH.TYPE >STA.G CSH.ACCT jsr CSH.ExpEval - bcs .9 + bcs .99 jsr CSH.StoreACCToVar Update value to this var @@ -364,9 +418,14 @@ CSH.ExpEval jsr CSH.ZeroACC jsr CSH.LoadACCFromVar bcs .9 - bra .11 + bra .11 -.1 bra .9 TO DO : Functions +.1 >LDYA L.CSH.FN + jsr CSH.LookupFn + bcs .9 + jsr CSH.FnEval + bcs .99 + bra .11 .2 jsr CSH.IsDigit10 number ? bcs .9 @@ -429,6 +488,36 @@ CSH.ExpEval jsr CSH.ZeroACC .80 clc rts *-------------------------------------- +CSH.FnEval jsr CSH.GetCharNB + + bcs .9 + cmp #'(' + bne .9 + + lda (ZPPtr1) + >CMP.G CSH.ACCT + bne .99 + + +* TODO : eval params + + +.7 jsr CSH.GetNextCharNB + bcs .9 + cmp #')' + bne .9 + + clc + rts + +.9 lda #CSH.E.SYNTAX + sec + rts + +.99 lda #CSH.E.TMISMATCH + sec + rts +*-------------------------------------- CSH.SavePtr >LDYA ZPCSHBufPtr >STYA.G CSH.BufPtrSave rts @@ -437,11 +526,18 @@ CSH.RestorePtr >LDYA.G CSH.BufPtrSave >STYA ZPCSHBufPtr rts *-------------------------------------- -CSH.LookupID >STYA ZPPtr1 +CSH.LookupFN sec + .HS 90 BCC +CSH.LookupID clc + >STYA ZPPtr1 + ror + >STA.G CSH.LookupOpt + jsr CSH.GetIDLen bra CSH.Lookup CSH.LookupOP >STYA ZPPtr1 + >STZ.G CSH.LookupOpt jsr CSH.GetOPLen CSH.Lookup phy Y = len @@ -472,8 +568,16 @@ CSH.Lookup phy Y = len clc adc ZPCSHBufPtr ..advance Ptr to char after it.. sta ZPCSHBufPtr + bcc .31 + inc ZPCSHBufPtr+1 + +.31 lda ZPPtr1 + sec + adc (ZPPtr1) + sta ZPPtr1 bcc .8 - inc ZPCSHBufPtr+1 + inc ZPPtr1+1 + clc .8 rts @@ -484,6 +588,21 @@ CSH.Lookup phy Y = len sec adc (ZPPtr1) sta ZPPtr1 + bcc .5 + inc ZPPtr1+1 + +.5 >LDA.G CSH.LookupOpt + bpl .1 + + ldy #$ff +.6 iny + lda (ZPPtr1),y + bne .6 + + tya + sec + adc ZPPtr1 + sta ZPPtr1 bcc .1 inc ZPPtr1+1 bra .1 @@ -728,6 +847,7 @@ CSH.StoreACCToVar CSH.IsACC0 >LDA.G CSH.ACCT cmp #CSH.T.FLOAT bne .1 char,int,long + >LDA.G CSH.ACC bne .9 @@ -911,7 +1031,7 @@ CSH.GetChar lda (ZPCSHBufPtr) sec rts *--------------------------------------- -CSH.IsOPChar ldx #OPChars.Count-1 +CSH.IsOPChar ldx #13 .1 cmp CSH.OPChars,x beq .8 diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 6e457efb..6bb0a772 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -24,14 +24,6 @@ ZPCSHStack .EQ ZPBIN+14 CmdLine.MAX .EQ 255 VarLen.MAX .EQ 15 History.MAX .EQ 256 - -CSH.E.SYNTAX .EQ $7F -CSH.E.SOVERFLW .EQ $7E -CSH.E.NOVERFLW .EQ $7D -CSH.E.OOM .EQ $7C -CSH.E.DUP .EQ $7B -CSH.E.UNDEF .EQ $7A -CSH.E.TMISMATCH .EQ $79 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -100,8 +92,9 @@ J.CSH.BOPS .DA CSH.BOPS.ADD .DA CSH.BOPS.EOR .DA CSH.BOPS.LAND .DA CSH.BOPS.LOR -L.CSH.KEYWORDS .DA CSH.KEYWORDS -J.CSH.KEYWORDS .DA CSH.IF +L.CSH.FN .DA CSH.FN +L.CSH.KW .DA CSH.KW +J.CSH.KW .DA CSH.IF .DA CSH.WHILE .DA CSH.ELSE .DA CSH.DO @@ -110,15 +103,19 @@ J.CSH.KEYWORDS .DA CSH.IF .DA CSH.CASE .DA CSH.BREAK .DA CSH.CONTINUE - .DA CSH.CHAR + .DA CSH.FLOAT + .DA CSH.SIGNED + .DA CSH.UNSIGNED +L.CSH.STYPES .DA CSH.STYPES +J.CSH.STYPES .DA CSH.CHAR .DA CSH.INT .DA CSH.LONG - .DA CSH.FLOAT -J.CSH.KEYWORDS.START - .DA CSH.IF.START +J.CSH.UTYPES .DA CSH.UCHAR + .DA CSH.UINT + .DA CSH.ULONG +J.CSH.KW.START .DA CSH.IF.START .DA CSH.WHILE.START -J.CSH.KEYWORDS.END - .DA CSH.IF.END +J.CSH.KW.END .DA CSH.IF.END .DA CSH.WHILE.END L.ERR.Codes .DA ERR.Codes L.ERR.Messages .DA ERR.Messages @@ -260,13 +257,7 @@ CS.RUN.BATCH >SYSCALL GetChar ldy #S.PS.RC sta (pPs),y - pha - - ldy #bExitOnEOF - lda (pData),y - asl CS if bExitOnEOF - - pla + sec rts .7 >LDA.G bCmdBufExec @@ -361,93 +352,6 @@ INTCMDS >CSTR "CD" >CSTR "TIME" .HS 00 *-------------------------------------- -OPChars.Count .EQ 14 -CSH.OPChars >PSTR "!~+-*/%=&|^&<>" -*-------------------------------------- -* Pre Operators: + - ! ~ ++ -- -*-------------------------------------- -CSH.PREOOPS >PSTR "+" - >PSTR "-" - >PSTR "!" - >PSTR "~" -*-------------------------------------- -* Post Operators: ++ -- -*-------------------------------------- -CSH.POSTOPS >PSTR "++" - >PSTR "--" - .HS 00 -*-------------------------------------- -* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= -*-------------------------------------- -CSH.AOPS >PSTR "=" - >PSTR "+=" - >PSTR "-=" - >PSTR "*=" - >PSTR "/=" - >PSTR "%=" - >PSTR "<<=" - >PSTR ">>=" - >PSTR "&=" - >PSTR "^=" - >PSTR "!=" - .HS 00 -*-- Binary ---- H to L prececence ----- -* Arithmetic Operators: * / % -* Arithmetic Operators: + - -* Shift Operators: << >> -* Relational Operators: < > >= < >= == != -* Bitwise Operators: & | ^ ~ -* Logical Operators: && || -*-------------------------------------- -CSH.BOPS >PSTR "+" - >PSTR "-" - >PSTR "*" - >PSTR "/" - >PSTR "%" - >PSTR "<<" - >PSTR ">>" - >PSTR "<" - >PSTR ">" - >PSTR "<=" - >PSTR ">=" - >PSTR "==" - >PSTR "!=" - >PSTR "&" - >PSTR "|" - >PSTR "^" - >PSTR "&&" - >PSTR "||" - .HS 00 -*-------------------------------------- -* Reserved Keywords: -*-------------------------------------- -CSH.KEYWORDS >PSTR "if" - >PSTR "while" - >PSTR "else" - >PSTR "do" - >PSTR "for" - >PSTR "switch" - >PSTR "case" - >PSTR "break" - >PSTR "continue" -CSH.TYPES >PSTR "char" - >PSTR "int" - >PSTR "long" - >PSTR "float" - .HS 00 -*-------------------------------------- -* int printf ( const char * format, ... ); -CSH.FUNCTIONS >PSTR "printf" - .DA #CSH.T.INT returned value - .DA #CSH.TQ.CONST+CSH.T.CHAR+CSH.TQ.POINTER - .DA #CSH.T.VARIADIC - .DA #0 -* float cos ( float x ); - >PSTR "cos" - .DA #CSH.T.FLOAT - .DA #CSH.T.FLOAT - .DA #0 -*-------------------------------------- MSG.GREETINGS >CSTR "\r\nA2osX-Shell 0.9.1\r\n\r\n" MSG.PROMPT >CSTR "$ " MSG.ECHO >CSTR ">%s\r\n" @@ -457,12 +361,11 @@ MSG.CSHERR >CSTR "^\r\nLine #%D:" FMT.DATE >CSTR "%A (%w), %B %d %Y" FMT.TIME >CSTR "%H:%M:%S (%I:%M:%S%p)" *-------------------------------------- + .INB /A2OSX.SRC/SBIN/SHELL.C.CSH .INB /A2OSX.SRC/X.ERRORS.S *-------------------------------------- EscChars.Count .EQ 4 EscChars .AS 'DBAC' - -CSH.TSIZE .HS 0001020405 VOID,CHAR,INT,LONG,FLOAT.... *-------------------------------------- .DUMMY .OR 0 @@ -476,7 +379,6 @@ bEscMode .BS 1 bPause .BS 1 bExit .BS 1 bEcho .BS 1 -bExitOnEOF .BS 1 bReadMode .BS 1 bSecureRead .BS 1 @@ -498,32 +400,8 @@ IO.hIn .BS 1 IO.hOut .BS 1 IO.hErr .BS 1 -CSH.hBuf .BS 1 -CSH.BufPtrSave .BS 2 - -CSH.LineNum .BS 2 - -CSH.hSymbols .BS 1 -CSH.SymbolsPtr .BS 1 - -CSH.hData .BS 1 -CSH.DataPtr .BS 1 - -CSH.hStack .BS 1 -CSH.StackPtr .BS 1 - -CSH.CmdSave .BS 1 - -CSH.ACCT .BS 1 -CSH.ACC .BS 5 - -CSH.EXPBOP1 .BS 1 - -CSH.ARGT .BS 1 -CSH.ARG .BS 5 - -CSH.EXPBOP2 .BS 1 - + .INB /A2OSX.SRC/SBIN/SHELL.G.CSH + DS.END .ED *-------------------------------------- MAN