3 \X COPYRIGHT (C) 1979, DIGITAL RESEARCH  _ ͌> ͒> Ò> Ò͘~#͌ì  _  2<ԯ2     Շ!۶2 :2 a{_:۷ʖ:۷> Ľʖ:=2–! B!6 #5ʖ:۷Ľ!ͬʧ  )!F#xʺ~0wëw!"      !~6 ͽ:ý(! #͘*~ "ַ"͌#>?͌͘ =_.:;<> Oօo$> !Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6 " #~?  xDIR ERA TYPESAVEREN USER ! yO#< Ty#O 3ׯ21y_͸2y2ͽ:Է˜1͘A͌>>9 2^ :۷¥.!_ ~#fow]٭ڎڥ!v" ! çREAD ERROR çNO FILE ^:۷ ! ~ 3#0 Wx x ր ւ G ~ # 3x~#B! Y~ɯ2:۷=!۾ý:۷=!۾:ý^T!~  6?#ˆ :`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)? ^ Tʧ͘!6!~ڇ ٯw4! Y~ʆ͌†t=ʆf ^ T ٯ2o& ) |+! <ͧÆNO SPACE ^ :Ty!B*O=?_s#"^sG!~Yڸpsp2mÆÆf ͧÆFILE EXISTS  _: É: :۷ʉ=2)ͽÉ T!@k! 0  }|q=qf^!~2>`~2ۯ2\ !!B!~> >#0  ~O#Cx2 ͘ 1)ͽÂf zͧÆBAD LOAD COMf^: !۶  $$$ SUB ܙܥܫܱ"C{2! "E9"1A߯22!ty)K!G_ ^#V*Cސ~E ,&-AGMSߛ! !ô!ô! Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :߷E B  2>: ߷b# : ߷y! 4 5~yy5 6 yҐ^H@Oy H H: –ͬ  #H: ! ߾ Hù H H $O͐: 2 *CN#  x: 2 p&x~+é7ݯ2 H! >w_: ! ߾5ͤNkͱ¦ͱxʊ#Nx: ߷! ߖ2 ͤ! 5™#wO~x½ p Hy<< ʑ : ! qMD#2E> ! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6 >*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \S*C  :qn& ^#V>O ^"*}:*)=":O:页o"*C *C ! ͮ~2~2ͦ:2ͮ:O:w:w |g}o*鯆# ):BO! yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C ~i6 iw**{#zr+s{ozg**͕** ,w͜͸Ͳ!!N#F$**O!~#:A߾#~$=2Ek͌::/GyO>2!q*C"͡ ʔ*JҔ^:O yʃ?|x | s-|N-# S:2E!~Яw>T D^6 k-äPYy 5*{zBK5 ڋ>*C w~#+w#w+ɯ2E22i ^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C! w# F! w͌x2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻx>2>2ͻ:!Z2:E߷ẅ́͊Ͳ>2> 2T*CGͻ:ẅ́ n>2 ;O ^DM;}H>"*C ::ddslO s#r:E߷͊:==»y==»*Ww#*"͸* :G#š"͸:!w4 ! iw : Z!E~=26 2*C!! ~~#~O~G#n,-.‹! w! yG! x͢.:E<ʄ! q! pQ:E<. ʄ$.:E<ʄ CANDR-C BAS  CANDR-S BAS  CANDR-S COM . CBMENU BAS w  DPLAY BAS  FAC BAS  GRAPHICSBAS  GRAPHICSDOC B SBMENU BAS 3 U ADD i6}2Ex N ! ~态O> G~G! ~G} *C! r#r#r ^ ͥ_y#x#{s+p+q-*C ͥ!! q#p#w*:BOYG}*MD "ã:!B߾w!>2*C~=2u:B2~2wE:A*C߶w>"! ""2B! "!rQQQâ ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6 :ʑw:2E**E}DQ>2  é#Êï $imquy}Ç?Ù  0123456789-, ., D D e2 :32 !JF#N#~ :G :H KAYPRO 10 CP/M Version 2.2F ! "P>!2 " !2 " : O yO  mie Warm Boot 1  q CTy,u} *T DM"Ty2 >( q*P+"P|:M : .3ʝ.*Ý>͊(:M /: .6ʝ.-͝!5O ~!ay''O "K>2M*KN#"K:M=2My~ y2My.'Ý: .9ʝ.EÝ.6Ý.9Ý: .9ʝR.E@ʝ.9Ý: .Bʝ.<ʝ? y˟.4. 0.,.(.$. ! "P.! "P.:4(.! sR1& {R˿~#O   8 >1͌0͌>>Ì  2N2O 2<:N(!2O:O_   2:N_  :<:O_  :N_  COMMENT ********************************************************* * * * Auxilliary program for CBMENU.BAS * * * * By R. Schrader * * * * Copyright (C) 1983 by Non-Linear Systems, Inc * * No warranty is made, expressed, or implied. * * * ********************************************************* END $LINES VAR CREDIT_STRING = STRING CREDIT_STRING = " WRITTEN BY ROBERT SCHRADER " VAR C = CHAR VAR FILE_NAME = STRING:14 BASED F_NAME = STRING:14 BASE F_NAME AT 80H VAR TRUE, FALSE = INTEGER REM Translation tables. VAR SPEC_CHAR = STRING:128 VAR UP_CASE = STRING:128 UP_CASE = "..............................." +\ " !"+CHR(34)+"#$%&'()*+,-./0123456789:;<=>?" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" SPEC_CHAR = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" +\ " !"+chr(34)+"#$%&'()$+$-$/0123456789$$$$$$" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ$\$^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" PROCEDURE COMMAND_LINE( FILE_NAME1,DEFAULT_CMND,COM_FILE,RECOVER=STRING ) DEFAULT_CMND = " "+DEFAULT_CMND BASED FILE_CONTROL_BLOCK = STRING BASED COMMAND_BUFFER = STRING BASED DRIVE_NUMBER, BUFFER_LENGTH = BYTE BASED EXTENT_NUMBER, RECORD_NUMBER = BYTE $CONSTANT TFCB = 5CH $CONSTANT TBUFF= 80H BASE FILE_CONTROL_BLOCK AT TFCB BASE DRIVE_NUMBER AT TFCB BASE EXTENT_NUMBER AT TFCB+16 BASE RECORD_NUMBER AT TFCB+32 BASE COMMAND_BUFFER AT TBUFF BASE BUFFER_LENGTH AT TBUFF FILE_CONTROL_BLOCK = FCB$(RIGHT(FILE_NAME1,3)) EXTENT_NUMBER = 0 RECORD_NUMBER = 0 DRIVE_NUMBER = ASCII(FILE_NAME1)-64 COMMAND_BUFFER = XLATE(DEFAULT_CMND,UP_CASE) BUFFER_LENGTH = LEN(DEFAULT_CMND) IF LEN(RECOVER) THEN EXECUTE COM_FILE,RECOVER ELSE EXECUTE COM_FILE END of procedure set up parameters for command line. F_NAME = RIGHT(F_NAME,2) F_NAME = LEFT$(F_NAME,(LEN(F_NAME)-4)) PRINT "A4>CBAS2 ";F_NAME PRINT "A4>CRUN2 ";F_NAME COMMAND_LINE F_NAME,F_NAME,"CBAS2.COM","CRUN2 "+F_NAME ME1,DEFAULT_CMND,COM_FILE,RECOVER=STRING ) DEFAULT_CMND = 0 DRIVE_NUMBER = ASCII(FILE_NAME1)-64 COMMAND_BUFFER = XLATE(DEFAULT_CMND,UP_CASE) BUFFER_LENGTH = LEN(DEFAULT_CMND) IF LEN(RECOVER) THEN EXECUTE COM_FILE,RECOVER ELSE EXECUTE COM_FILE END of procedure set up parameters for command line. F_NAME = RIGHT(F_NAME,2) F_NAME = LEFT$(F_NAME,(LEN(F_NAME)-4)) PRINT "A4>CBAS2 ";F_NAME PRINT "A4>CRUN2 "COMMENT ********************************************************* * * * Auxilliary program for SBMENU.BAS * * * * By R. Schrader * * * * Copyright (C) 1983 by Non-Linear Systems, Inc * * No warranty is made, expressed, or implied. * * * ********************************************************* END $LINES VAR CREDIT_STRING = STRING CREDIT_STRING = " WRITTEN BY ROBERT SCHRADER " VAR C = CHAR VAR FILE_NAME = STRING:14 BASED F_NAME = STRING:14 BASE F_NAME AT 80H VAR TRUE, FALSE = INTEGER REM Translation tables. VAR SPEC_CHAR = STRING:128 VAR UP_CASE = STRING:128 UP_CASE = "..............................." +\ " !"+CHR(34)+"#$%&'()*+,-./0123456789:;<=>?" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" SPEC_CHAR = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" +\ " !"+chr(34)+"#$%&'()$+$-$/0123456789$$$$$$" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ$\$^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" PROCEDURE COMMAND_LINE( FILE_NAME1,DEFAULT_CMND,COM_FILE,RECOVER=STRING ) DEFAULT_CMND = " "+DEFAULT_CMND BASED FILE_CONTROL_BLOCK = STRING BASED COMMAND_BUFFER = STRING BASED DRIVE_NUMBER, BUFFER_LENGTH = BYTE BASED EXTENT_NUMBER, RECORD_NUMBER = BYTE $CONSTANT TFCB = 5CH $CONSTANT TBUFF= 80H BASE FILE_CONTROL_BLOCK AT TFCB BASE DRIVE_NUMBER AT TFCB BASE EXTENT_NUMBER AT TFCB+16 BASE RECORD_NUMBER AT TFCB+32 BASE COMMAND_BUFFER AT TBUFF BASE BUFFER_LENGTH AT TBUFF FILE_CONTROL_BLOCK = FCB$(RIGHT(FILE_NAME1,3)) EXTENT_NUMBER = 0 RECORD_NUMBER = 0 DRIVE_NUMBER = ASCII(FILE_NAME1)-64 COMMAND_BUFFER = XLATE(DEFAULT_CMND,UP_CASE) BUFFER_LENGTH = LEN(DEFAULT_CMND) IF LEN(RECOVER) THEN EXECUTE COM_FILE,RECOVER ELSE EXECUTE COM_FILE END of procedure set up parameters for command line. F_NAME = LEFT$(F_NAME,(LEN(F_NAME)-4)) F_NAME = RIGHT(F_NAME,2)+".AAX" PRINT "A5>SBASIC ";F_NAME PRINT "A5>";LEFT$(F_NAME,(LEN(F_NAME)-4)) COMMAND_LINE F_NAME,F_NAME,"SBASIC.COM",LEFT$(F_NAME,(LEN(F_NAME)-4))  ) DEFAULT_CMND = 0 DRIVE_NUMBER = ASCII(FILE_NAME1)-64 COMMAND_BUFFER = XLATE(DEFAULT_CMND,UP_CASE) BUFFER_LENGTH = LEN(DEFAULT_CMND) IF LEN(RECOVER) THEN EXECUTE COM_FILE,RECOVER ELSE EXECUTE COM_FILE END of procedure set up parameters for command line. F_NAME = LEFT$(F_NAME,(LEN(F_NAME)-4)) F_NAME = RIGHT(F_NAME,2)+".AAX" PRINT "A5>SBASIC ";F_NAME PRINT "A5  * J> ͔  ͔ N$ WRITTEN BY ROBERT SCHRADER !)!#!&"$c *a*$~"$wÓ...............................Ù !Þ" ÿ#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~!s!ͻ*Uͻ!ͻ!ͻ!ͻ!#Z$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$` !e" Æ#$%&'()$+$-$/0123456789$$$$$$ê @ABCDEFGHIJKLMNOPQRSTUVWXYZ$\$^_ `ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~!:!]ͻ*cUͻ!hͻ!ͻ!ͻ!+#lͬ ! #!#!~#!-#͹ & !$!~ͻ!~#!s"q!v"t!y"w!|"z!"}!"`\ *^*q~"qwr\ *p"w\ Ä *}*] "}Ø\ Ý **] "ñ **t~"tw *"z !-*͉*q# *& >*}  *& >*  @!->* & Q >*w !~!*t#!~8>*z ! 8i b!! >ak!aq *$*$8*oQ b*$#Ñ Ù.AAX*$*͉!ͻ*$#  A5>SBASIC !r *$r  A5>!r  *$*$8*Q br *$*$& SBASIC.COM!/ *$*$8*-Q b Copyright (C) 1979, By Topaz programming. All rights reserved. From here on protected by End User License.  "Ͷ2!#Ͷ2!#!Q !Q ! ~#w#x y222! ";!6#͞ 2> 2! "R!6#:_ !  > ""!6#:2!Q ! ""Ͷ2!#!Q !:N  ! 2:! ! þ"1Ͷ2!#Ͷ2!#!Q !Q 2!"4"6*6~+#"6O ! ~*4w#"4!4! "^Ͷ2!#!Q !~#S !   ‡ à: ʜÇ2Ͷ2!#! :O~# µ6 x2  > 2  $$$ SUB !6#* %%"͞ * w#~9=_ *6  6 * S!l * 6 * %{/_z/W"!~_#Vʌ#N#F* r+sq*"b $ "Y  : 2 * % w#z¯* * % CHAIN/EXECUTE OPE     ! 7 = @ F J O U t w  >! I Q v Q _Q *v {v >!Q w#=. |H Q +|? Q w#I y_ ! ~\   Q    PROGRAM CHAIN/EXECUTE ERROR$!F > 6 #=£  !6 !E ::> ~##` @~ #.  ~ #. N ~ # !F $ !N $ !E  w#  ~*0 > _y{> > >?w#& }o|g}o|g|>" Ͷ2!#:_ !6 :K ʣ !:O>ͫ * 2 ~ 2 #~ ! 5 ö :  y 2K "  Ͷ2N !N #!O "L !N Q :! *L  ~#.,-$*^+/&!\< #~:O~# N # 6 ~d #Z 6 #d ^ "#: ʉ * : * * 2 ~2#~2#: ! :O>[[ >]> : =2 >2 y +  : /2 + ^ "#* ! ͔ : WARNING ONL:O ͔ !L ͔ :!R ͔ [ ERRO IN LINE*|0|0}0}0!>w~ !4#Ô * s#r#" * +V+^" y2 1:O!4 ~ > < O> > 2^#V#"~2"#:"! ! "zWOFxnyA#6 n#wnn A#6 nO~ti #6 #y *"|ˆ}ˆqY!y2 *͟n FO #6 wçz   !4 4 6!U 4 6y22>v123 ^#V!*!3>:2O:3 ʔ! A ‚#~#^#VN#! A  ~#­ "( ^#=V#=*(*("(_ _{s+='r+='s+=! `4~> G! D !Ml %BAD CHANNEL NUMBEè`````eßNW````````_ 8|*  :7 27ý !é:78|*  7>|) 2727  *L|!   "L_ _ 7:‚\  !l >2:¡  \  !l _<2 ! ~ɀ &INPUT FILE REA P   P P P P P P t COMMENT ********************************************************* * * * C-Basic menu program for Kaypro 10. * * * * By R. Schrader * * * * Copyright (C) 1983 by Non-Linear Systems, Inc * * No warranty is made, expressed, or implied. * * * ********************************************************* END $LINES VAR CREDIT_STRING = STRING CREDIT_STRING = " WRITTEN BY ROBERT SCHRADER " VAR VERSION_STRING = STRING VERSION_STRING = "Version 1.0" DIM BYTE BUFFER_128(128) DIM BYTE FCBUFF(32) VAR SETDMA, SEARCH_FIRST, SEARCH_NEXT = INTEGER SETDMA = 26 SEARCH_FIRST = 17 SEARCH_NEXT = 18 VAR RESPONSE, ESC, RTN, UP_ARROW, DOWN_ARROW, BACK_SPACE = CHAR VAR FILE_NAME, N_STR = STRING:14 VAR TRUE, FALSE = INTEGER FALSE= 0 TRUE = NOT FALSE ESC = 1BH RTN = 0DH UP_ARROW = 2DH DOWN_ARROW = 2BH BACK_SPACE = 8 N_STR = "" VAR BDOS = INTEGER BDOS = 5 REM Alter the vector pad: "+" is down, "-" is up. REM EA35 and EA36 are equates in the BIOS that assign the arrow keys. BASED NEW_UP, NEW_DOWN = BYTE BASE NEW_UP AT 0EA35H BASE NEW_DOWN AT 0EA36H NEW_UP = UP_ARROW NEW_DOWN = DOWN_ARROW REM The possible video attributes. VAR INVERSE, REDUCED, BLINKING, UNDERLINE, CURSOR = CHAR REM Intitialize attributes. INVERSE = '0' REDUCED = '1' BLINKING = '2' UNDERLINE = '3' CURSOR = '4' REM Translation tables. VAR SPEC_CHAR = STRING:128 VAR UP_CASE = STRING:128 UP_CASE = "..............................." +\ " !"+CHR(34)+"#$%&'()*+,-./0123456789:;<=>?" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" SPEC_CHAR = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" +\ " !"+chr(34)+"#$%&'()$+$-$/0123456789$$$$$$" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ$\$^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" VAR MSG_1, MSG_0 = STRING MSG_0 = "Hit the down-arrow to use this menu, or ESC to exit." MSG_1 = "Hit RETURN to run a program, or ESC to exit. " VAR J, K, L = INTEGER VAR XPL_MAX = INTEGER XPL_MAX = 14 VAR CHOICE_MAX = INTEGER CHOICE_MAX = 6 REM Image for printing menu on screen. DIM STRING:49; SCREEN(20) SCREEN (0) = " " SCREEN (1) = " List CBasic source programs (*.BAS) " SCREEN (2) = " List CBasic compiled programs (*.INT) " SCREEN (3) = " Edit a program " SCREEN (4) = " Compile a program " SCREEN (5) = " Run a program " SCREEN (6) = " Compile and run a program " REM Text of explanations. DIM STRING:25; EXPLAIN(20,20) EXPLAIN (0,1) = " Use the arrow keys to" EXPLAIN (0,2) = " move the highlighted bar" EXPLAIN (0,3) = " up and down. When the" EXPLAIN (0,4) = " program(s) that you want" EXPLAIN (0,5) = " is(are) highlighted, hit" EXPLAIN (0,6) = " the return key. " EXPLAIN (0,7) = " " EXPLAIN (0,8) = " A short description " EXPLAIN (0,9) = " of the highlighted item " EXPLAIN (0,10) = " will appear in this box." EXPLAIN (0,11) = " " EXPLAIN (0,12) = " If you wish to exit " EXPLAIN (0,13) = " from this menu, hit the " EXPLAIN (0,14) = " escape key. " EXPLAIN (1,1) = " This option will show" EXPLAIN (1,2) = " you all of the CBasic " EXPLAIN (1,3) = " source(uncompiled) files" EXPLAIN (1,4) = " in this user group. " EXPLAIN (1,5) = " " EXPLAIN (1,6) = " " EXPLAIN (1,7) = " " EXPLAIN (1,8) = " " EXPLAIN (1,9) = " " EXPLAIN (1,10) = " " EXPLAIN (1,11) = " " EXPLAIN (1,12) = " " EXPLAIN (1,13) = " " EXPLAIN (1,14) = " " EXPLAIN (2,1) = " This option will show" EXPLAIN (2,2) = " you all the executable " EXPLAIN (2,3) = " CBasic files in this " EXPLAIN (2,4) = " user group. " EXPLAIN (2,5) = " " EXPLAIN (2,6) = " " EXPLAIN (2,7) = " " EXPLAIN (2,8) = " " EXPLAIN (2,9) = " " EXPLAIN (2,10) = " " EXPLAIN (2,11) = " " EXPLAIN (2,12) = " " EXPLAIN (2,13) = " " EXPLAIN (2,14) = " " EXPLAIN (3,1) = " This option allows you" EXPLAIN (3,2) = " to edit a CBasic file " EXPLAIN (3,3) = " using WordStar. " EXPLAIN (3,4) = " " EXPLAIN (3,5) = " " EXPLAIN (3,6) = " " EXPLAIN (3,7) = " " EXPLAIN (3,8) = " " EXPLAIN (3,9) = " " EXPLAIN (3,10) = " " EXPLAIN (3,11) = " " EXPLAIN (3,12) = " " EXPLAIN (3,13) = " " EXPLAIN (3,14) = " " EXPLAIN (4,1) = " This option allows you" EXPLAIN (4,2) = " to compile a CBasic " EXPLAIN (4,3) = " program. That is, you " EXPLAIN (4,4) = " can turn a BAS file into" EXPLAIN (4,5) = " an INT file. " EXPLAIN (4,6) = " " EXPLAIN (4,7) = " " EXPLAIN (4,8) = " " EXPLAIN (4,9) = " " EXPLAIN (4,10) = " " EXPLAIN (4,11) = " " EXPLAIN (4,12) = " " EXPLAIN (4,13) = " " EXPLAIN (4,14) = " " EXPLAIN (5,1) = " This option allows you" EXPLAIN (5,2) = " to run a psuedo-compiled" EXPLAIN (5,3) = " (.INT) program. " EXPLAIN (5,4) = " " EXPLAIN (5,5) = " " EXPLAIN (5,6) = " " EXPLAIN (5,7) = " " EXPLAIN (5,8) = " " EXPLAIN (5,9) = " " EXPLAIN (5,10) = " " EXPLAIN (5,11) = " " EXPLAIN (5,12) = " " EXPLAIN (5,13) = " " EXPLAIN (5,14) = " " EXPLAIN (6,1) = " This option compiles " EXPLAIN (6,2) = " and runs a program. If " EXPLAIN (6,3) = " the compilation does not" EXPLAIN (6,4) = " complete(due to errors)," EXPLAIN (6,5) = " an attempt will still be" EXPLAIN (6,6) = " made to run the INT file" EXPLAIN (6,7) = " of the same name. " EXPLAIN (6,8) = " " EXPLAIN (6,9) = " " EXPLAIN (6,10) = " " EXPLAIN (6,11) = " " EXPLAIN (6,12) = " " EXPLAIN (6,13) = " " EXPLAIN (6,14) = " " REM ************************** PROCEDURES ************************** PROCEDURE POSITION (X,Y=CHAR) PRINT ESC;'=';Y+31;X+31; END PROCEDURE CLEAR REM CLEAR VIDEO DISPLAY PRINT " " PRINT CHR(1AH); END PROCEDURE PAUSE VAR X = CHAR INPUT3 "PLEASE PUSH ANY KEY TO CONTINUE.";X END PROCEDURE SET_ON (ATT=CHAR) PRINT ESC; 'B'; ATT; END PROCEDURE SET_OFF (ATT=CHAR) PRINT ESC; 'C'; ATT; END PROCEDURE PIXON (X1,Y1 = CHAR) PRINT ESC; '*'; Y1+31; X1+31; END PROCEDURE PIXOFF (X1,Y1 = CHAR) PRINT ESC; ' '; Y1+31; X1+31; END PROCEDURE LINEON (X1,Y1,X2,Y2 = CHAR) PRINT ESC; 'L'; Y1+31; X1+31; Y2+31; X2+31; END PROCEDURE LINEOFF (X1,Y1,X2,Y2 = CHAR) PRINT ESC; 'D'; Y1+31; X1+31; Y2+31; X2+31; END PROCEDURE RE_SET REM Set the vector pad back to normal. NEW_UP = 0BH NEW_DOWN = 0AH REM Restore the cursor. SET_ON CURSOR END FUNCTION KBHIT(ENTRY=CHAR)=INTEGER VAR AF, BC, DE, HL = INTEGER BC = 6 DE = 0FFH CALL (BDOS,HL,DE,BC,AF) ENTRY = CHR(AF/256) END = AF/256 PROCEDURE COMMAND_LINE( FILE_NAME1,DEFAULT_CMND,COM_FILE,RECOVER=STRING ) DEFAULT_CMND = " "+DEFAULT_CMND BASED FILE_CONTROL_BLOCK = STRING BASED COMMAND_BUFFER = STRING BASED DRIVE_NUMBER, BUFFER_LENGTH = BYTE BASED EXTENT_NUMBER, RECORD_NUMBER = BYTE $CONSTANT TFCB = 5CH $CONSTANT TBUFF= 80H BASE FILE_CONTROL_BLOCK AT TFCB BASE DRIVE_NUMBER AT TFCB BASE EXTENT_NUMBER AT TFCB+16 BASE RECORD_NUMBER AT TFCB+32 BASE COMMAND_BUFFER AT TBUFF BASE BUFFER_LENGTH AT TBUFF FILE_CONTROL_BLOCK = FCB$(RIGHT(FILE_NAME1,3)) EXTENT_NUMBER = 0 RECORD_NUMBER = 0 DRIVE_NUMBER = ASCII(FILE_NAME1)-64 COMMAND_BUFFER = XLATE(DEFAULT_CMND,UP_CASE) BUFFER_LENGTH = LEN(DEFAULT_CMND) IF LEN(RECOVER) THEN EXECUTE COM_FILE,RECOVER ELSE EXECUTE COM_FILE END of procedure set up parameters for command line. PROCEDURE DUMP_NAMES(TYPE=STRING;GROUP=INTEGER) VAR COL = INTEGER VAR AF, BC, DE, HL = INTEGER BC = SETDMA LOCATION ARRAY DE = BUFFER_128 CALL (BDOS,HL,DE,BC,AF) FOR J = 0 TO 11 FCBUFF(J) = "?" NEXT J FOR J = 12 TO 31 FCBUFF(J) = 00H NEXT J COL = 0 PRINT LOCATION ARRAY DE = FCBUFF BC = SEARCH_FIRST CALL(BDOS,HL,DE,BC,AF) WHILE ( AF >= 0 ) DO BEGIN AF = AF / 256 AF = AF * 32 IF (BUFFER_128[AF] = CHR(GROUP)) AND \ (BUFFER_128(AF+9)=MID(TYPE,1,1)) AND \ (BUFFER_128(AF+10)=MID(TYPE,2,1)) AND \ (BUFFER_128(AF+11)=MID(TYPE,3,1)) THEN BEGIN FOR J = (AF+1) TO (AF+11) PRINT BUFFER_128(J); NEXT J PRINT " "; COL = COL + 1 IF COL = 5 THEN BEGIN COL = 0 PRINT END END LOCATION ARRAY DE = FCBUFF BC = SEARCH_NEXT CALL (BDOS,HL,DE,BC,AF) END END FUNCTION GET_FILE_NAME( TYPE=STRING )=INTEGER SET_ON CURSOR VAR RESULT,P,LENGTH = INTEGER CLEAR TEXT 0,% Name the file, following these rules: a. Use A: or B: or C: to indicate in which drive the file is located. If none is given, A: will be assumed. b. Give a file name of eight characters or less. The first character must be alphabetic. Then either alphabetic or numeric characters may be used. c. Type a period. d. Give a file type of three characters or less. If you do not give a file type, a default type may be supplied. Example: B:SMITH.MSS If you want to return to the main menu, press the ESCape key. If you want to continue, enter the file name here ==>%; INPUT3 FILE_NAME IF RIGHT$(FILE_NAME,1)<>ESC AND LEN(FILE_NAME)<>0 THEN BEGIN IF MID(FILE_NAME,2,1)<>":" THEN FILE_NAME="A:"+FILE_NAME IF INSTR(1,"bBcC",LEFT$(FILE_NAME,1))=0 THEN FILE_NAME="A"+RIGHT(FILE_NAME,2) ELSE FILE_NAME=XLATE(LEFT$(FILE_NAME,1),UP_CASE)+\ RIGHT(FILE_NAME,2) REM At this point the drive name is adequate. REM Now we attend to the period. P = INSTR(3,FILE_NAME,".") IF P = 3 THEN BEGIN FILE_NAME=LEFT$(FILE_NAME,2)+"$"+RIGHT(FILE_NAME,3) P = 4 END LENGTH = LEN(FILE_NAME) IF ((P=0) OR (P>11)) THEN BEGIN IF LENGTH>10 THEN LENGTH=10 FILE_NAME=LEFT$(FILE_NAME,LENGTH)+"." LENGTH = LENGTH + 1 P = LENGTH END REM A period now exists in the 4th to 11th characters. REM Now the extent must be handled. IF ((P+3)>LENGTH) THEN FILE_NAME=LEFT$(FILE_NAME,P)+TYPE LENGTH = LEN(FILE_NAME) REM Now replace certain special characters in REM between colon and period or in extent, and REM change all lowercase letters to uppercase. FILE_NAME=LEFT$(FILE_NAME,2)+\ XLATE(MID$(FILE_NAME,3,(P-3)),SPEC_CHAR)+\ "."+\ XLATE(RIGHT$(FILE_NAME,(LENGTH-P)),SPEC_CHAR) RESULT = TRUE END ELSE BEGIN Set return false + clear esc sequence to video. RESULT = FALSE PRINT ' '; END SET_OFF CURSOR END = RESULT PROCEDURE GET_RESPONSE INPUT3 RESPONSE REPEAT BEGIN CASE RESPONSE OF UP_ARROW: IF L > 0 THEN BEGIN POSITION 2, L+6 PRINT SCREEN[L] L = L - 1 SET_ON INVERSE POSITION 2, L+6 PRINT SCREEN[L] SET_OFF INVERSE END DOWN_ARROW: IF L < CHOICE_MAX THEN BEGIN POSITION 2, L+6 PRINT SCREEN[L] L = L + 1 SET_ON INVERSE POSITION 2, L+6 PRINT SCREEN[L] SET_OFF INVERSE END END POSITION 4, 24 IF L = 0 THEN PRINT MSG_0; ELSE PRINT MSG_1; K = 1 WHILE (NOT KBHIT(RESPONSE) AND (K<=XPL_MAX)) DO BEGIN POSITION 52, K+6 PRINT EXPLAIN[L,K] K = K + 1 END END UNTIL ((K>=XPL_MAX)OR(RESPONSE=ESC)OR((RESPONSE=RTN)AND(L>0))) END PROCEDURE DRAW_SCREEN VAR I = INTEGER ECHO OFF CLEAR REM Draw the outer border. LINEON 2,2, 159,2 LINEON 2,2, 2,98 LINEON 2,98, 159,98 LINEON 159,2, 159,98 REM Draw the inner lines. LINEON 2,19, 159,19 LINEON 101,19, 101,91 LINEON 2,91, 159,91 POSITION 20, 3 PRINT " << KAYPRO 10 CBASIC MENU >>" POSITION 4, 24 PRINT MSG_0; POSITION 55,3 PRINT VERSION_STRING; FOR I = 1 TO CHOICE_MAX POSITION 2, I+6 PRINT SCREEN[I] NEXT I L = 0 FOR K = 1 TO 14 POSITION 52, K+6 PRINT EXPLAIN[L,K] NEXT K SET_ON INVERSE POSITION 2, L+6 PRINT SCREEN[L] SET_OFF INVERSE END 0MENU REM MASTER MENU ENTRY POINT SET_OFF CURSOR DRAW_SCREEN REPEAT GET_RESPONSE UNTIL ( (RESPONSE = ESC) OR ((RESPONSE = RTN)AND(L>0)) ) ECHO ON IF (RESPONSE = RTN) THEN BEGIN CASE L OF 1: BEGIN CLEAR PRINT "A4>D *.BAS" DUMP_NAMES "BAS",4 PRINT PAUSE GOTO 0MENU END 2: BEGIN CLEAR PRINT "A4>D *.INT" DUMP_NAMES "INT",4 PRINT PAUSE GOTO 0MENU END 3: BEGIN IF NOT GET_FILE_NAME ("BAS") THEN GOTO 0MENU RE_SET CLEAR PRINT "A4>WS ";FILE_NAME COMMAND_LINE FILE_NAME,FILE_NAME,"WS.COM","CBMENU" END 4: BEGIN IF NOT GET_FILE_NAME ("BAS") THEN GOTO 0MENU RE_SET CLEAR PRINT "A4>CBAS2 ";FILE_NAME COMMAND_LINE FILE_NAME,FILE_NAME, "CBAS2.COM", "CBMENU" END 5: BEGIN IF NOT GET_FILE_NAME ("INT") THEN GOTO 0MENU RE_SET CLEAR PRINT "A4>CRUN2 ";LEFT$(FILE_NAME,(LEN(FILE_NAME)-4)) COMMAND_LINE FILE_NAME,FILE_NAME,"CRUN2.COM","CBMENU" END 6: BEGIN IF NOT GET_FILE_NAME ("BAS") THEN GOTO 0MENU RE_SET CLEAR COMMAND_LINE FILE_NAME,FILE_NAME,"CANDR-C.COM", "CBMENU" END END END RE_SET CLEAR TN) THEN BEGIN CASE L OF ";FILE_NAME COMMAND_LINE FILE_NAME,FILE_NAME, "CBAS2.COM", "CBMENU" END 5: BEGIN IF NOT GET_FILE_NAME ("INT") REM USED TO "PLAY" WITH RANDOM DISK FILES var x,y=integer var xdata=integer files r(256) if size("JUNK")=0 then create "JUNK" open #0;"JUNK" 0 input "SEQ ON=0 OFF=1";x if x=0 then record.sequential on if x=1 then record.sequential off input "0=READ 1=WRITE";x input "RECORD #";y if x=1 then begin input "DATA=";xdata write #0,y; xdata end if x=0 then begin read #0,y; xdata print "DATA=";xdata end goto 0  Rem This function finds X! Function fac(i=real)=real If i=0 then i=1 else i=fac(i-1)*i End =i Var x=real 0Loop Input x Print fac(x) Goto 0Loop End PROCEDURE SET.ON (ATT=CHAR) PRINT CHR(27); 'B'; ATT; END PROCEDURE SET.OFF (ATT=CHAR) PRINT CHR(27); 'C'; ATT; END PROCEDURE POSITION (VERT, HORZ = CHAR) PRINT CHR(27); '=' ; VERT+31; HORZ+31; END PROCEDURE PIXON (VERT1,HORZ1=CHAR) PRINT CHR(27);'*';(VERT1+31);(HORZ1+31); END PROCEDURE PIXOFF (VERT1,HORZ1=CHAR) PRINT CHR(27);' ';(VERT1+31);(HORZ1+31); END PROCEDURE LINEON (VERT1,HORZ1,VERT2,HORZ2=CHAR) PRINT CHR(27);'L';(VERT1+31); (HORZ1+31); (VERT2+31); (HORZ2+31); END PROCEDURE LINEOFF (VERT1,HORZ1,VERT2,HORZ2=CHAR) PRINT CHR(27);'D';(VERT1+31);(HORZ1+31);(VERT2+31);(HORZ2+31); END PROCEDURE CLEAR.SCREEN PRINT CHR(26) END FUNCTION SQRT(N=INTEGER) =INTEGER VAR ROOT1,ROOT2 = INTEGER ROOT1 = N ROOT2 = 1 WHILE (ROOT1 > ROOT2) DO BEGIN ROOT1 = (ROOT1 + ROOT2)/2 ROOT2 = N/ROOT1 END END = ROOT1 PROCEDURE CIRCLE (CENTER.Y, CENTER.X, RADIUS = INTEGER) VAR X, Y, OFFSET = INTEGER OFFSET = (RADIUS * 100) / 141 PIXON CENTER.Y + RADIUS - 1, CENTER.X PIXON CENTER.Y - RADIUS + 1, CENTER.X FOR X = 1 TO OFFSET Y = SQRT(RADIUS^2 - X^2) PIXON CENTER.Y + Y , CENTER.X + X PIXON CENTER.Y + Y , CENTER.X - X PIXON CENTER.Y - Y , CENTER.X + X PIXON CENTER.Y - Y , CENTER.X - X NEXT PIXON CENTER.Y, CENTER.X + RADIUS - 1 PIXON CENTER.Y, CENTER.X - RADIUS + 1 FOR Y = 1 TO OFFSET X = SQRT(RADIUS^2 - Y^2 ) PIXON CENTER.Y + Y , CENTER.X + X PIXON CENTER.Y + Y , CENTER.X - X PIXON CENTER.Y - Y , CENTER.X + X PIXON CENTER.Y - Y , CENTER.X - X NEXT END PROCEDURE RECTANGLE (Y, X, HEIGHT, WIDTH = INTEGER) LINEON Y, X, Y + HEIGHT, X LINEON Y, X + WIDTH, Y + HEIGHT, X + WIDTH LINEON Y, X, Y, X + WIDTH LINEON Y + HEIGHT, X, Y + HEIGHT, X + WIDTH END PROCEDURE SQUARE (Y, X, SIDE = INTEGER) RECTANGLE Y, X, SIDE, SIDE END PROCEDURE BAR(REF.Y,REF.X,HEIGHT,WIDTH,DEPTH,INSIDE,VERT.P,HORZ.P=INTEGER) VAR I, TEMP, EMPTY, FULL, X, Y = INTEGER DIM INTEGER REF(2) CENTER(2) REAR(2) X = 1 Y = 2 FULL = 1 EMPTY = 0 REF(X) = REF.X REF(Y) = REF.Y CENTER(X) = REF.X + (WIDTH * HORZ.P) CENTER(Y) = REF.Y + (HEIGHT * VERT.P) REAR(X) = CENTER(X) + (DEPTH * HORZ.P) REAR(Y) = CENTER(Y) + (DEPTH * VERT.P) IF (INSIDE = EMPTY) THEN BEGIN FOR I = REF(X) TO CENTER(X) STEP HORZ.P LINEOFF REF(Y), I, CENTER(Y), I NEXT I FOR I = 0 TO (WIDTH*HORZ.P) STEP HORZ.P LINEOFF CENTER(Y), CENTER(X)-I, REAR(Y), (REAR(X)-I) NEXT I FOR I = 0 TO (HEIGHT*VERT.P) STEP VERT.P LINEOFF CENTER(Y)-I, CENTER(X), (REAR(Y)-I), REAR(X) NEXT I LINEON REF(Y),REF(X),CENTER(Y),REF(X) LINEON REF(Y),REF(X),REF(Y),CENTER(X) LINEON CENTER(Y),CENTER(X),CENTER(Y),REF(X) LINEON CENTER(Y),CENTER(X),REF(Y),CENTER(X) LINEON CENTER(Y),CENTER(X),REAR(Y),REAR(X) LINEON REF(Y),CENTER(X),(REAR(Y)-HEIGHT*VERT.P),REAR(X) LINEON CENTER(Y),REF(X),REAR(Y),(REAR(X)-WIDTH*HORZ.P) LINEON REAR(Y),REAR(X),(REAR(Y)-HEIGHT*VERT.P),REAR(X) LINEON REAR(Y),REAR(X),REAR(Y),(REAR(X)-WIDTH*HORZ.P) END IF (INSIDE = FULL) THEN BEGIN FOR I = REF(X) TO CENTER(X) STEP HORZ.P LINEON REF(Y), I, CENTER(Y), I NEXT I FOR I = 0 TO (WIDTH*HORZ.P) STEP HORZ.P LINEON CENTER(Y), CENTER(X)-I, REAR(Y),(REAR(X)-I) NEXT I FOR I = 0 TO (HEIGHT*VERT.P) STEP VERT.P LINEON CENTER(Y)-I, CENTER(X), (REAR(Y)-I),REAR(X) NEXT I LINEOFF CENTER(Y),CENTER(X),CENTER(Y),REF(X) LINEOFF CENTER(Y),CENTER(X),REF(Y),CENTER(X) LINEOFF CENTER(Y),CENTER(X),REAR(Y),REAR(X) END END Y)-I, CENTER(X), (REAR(Y)-I), REAR(X) NEXT I LINEON REF(Y),REF(X),CENTER(Y),REF(X) LINEON REF(Y),RE G R A P H I C S D O C U M E N T A T I O N =============== ========================= In the S-Basic graphics package (graphics.bas), there are several procedures that allow the user to draw complicated figures with just one command. These are: - a circle drawing routine; it requires three parameters: the vertical coordinate of the center of the circle, the horizontal coordinate of the center, and the radius of the circle. - a rectangle drawing routine: it has four parameters: the vertical coordinate of the upper left corner, the horizontal coordinate of that corner, the height, and the width. - a square drawing routine: it needs three parameters: the vertical coordinate of the upper left corner, the horizontal coordinate of the upper left corner, and the length of a side. - a bar drawing routine; it requires eight parameters: the vertical coordinate of the base of the bar, the horizontal coordinate of the base, the height, the width, the depth, the interior of the bar filled or empty, vertical illusion of depth up or down, and horizontal illusion of depth up or down. The fifth parameter should be 0 for an empty bar, or 1 for a full one. The seventh parameter should be 1 for down, -1 for up. the eighth should be 1 for right, -1 for left. It is reccommended that the user run the following program to observe the use of these procedures: $INCLUDE GRAPHICS.BAS VAR V1, H1, RADIUS = INTEGER VAR V2, H2, HEIGHT, WIDTH = INTEGER VAR V3, H3, LENGTH = INTEGER VAR V4, H4, H, W, V.PERSPECTIVE, H.PERSPECTIVE, INTERIOR, DEPTH = INTEGER V1 = 15 H1 = 15 RADIUS = 10 CIRCLE V1, H1, RADIUS V2 = 30 H2 = 10 HEIGHT = 20 WIDTH = 40 RECTANGLE V2, H2, HEIGHT, WIDTH V3 = 60 H3 = 20 LENGTH = 30 SQUARE V3, H3, LENGTH V4 = 80 H4 = 80 H = 50 W = 15 DEPTH = 8 V.PERSPECTIVE = -1 H.PERSPECTIVE = 1 INTERIOR = 0 BAR V4, H4, H, W, DEPTH, INTERIOR, V.PERSPECTIVE, H.PERSPECTIVE V4 = 20 H4 = 130 H = 50 W = 10 DEPTH = 15 V.PERSPECTIVE = 1 H.PERSPECTIVE = 1 INTERIOR = 1 BAR V4, H4, H, W, DEPTH, INTERIOR, V.PERSPECTIVE, H.PERSPECTIVE VIDEO GRAPHICS AND ATTRIBUTES COMMAND SET FOR THE KAYPRO 10 =========================================================== INTRODUCTION The KAYPRO 10 has a graphics and attributes set that currently includes drawing and erasing lines, drawing and erasing pixels, inverse video, reduced intensity, blinking fields, graphics char- acters, cursor positioning, and cursor on/off. GRAPHICS To draw graphics on the KAYPRO 10, the screen is treated as an array 100 pixels high, and 160 pixels wide. Any spot on the screen can be addressed by a vertical coordinate (ranging from 32 to 131) and a horizontal coordinate (ranging from 32 to 191). The pixel in the upper left corner of the screen has coordinates of 32,32. Line and pixel graphics are drawn on the screen by writing an escape sequence to the console output. For the purpose of drawing lines and pixels, an escape sequence is a 4 or 6 byte sequence defined as follows: Escape sequence = ESC

[

] where: 1) ESC is an ascii 27 (1B hex). 2) is a character of the set { *, (space), L, D }. 3) V1, H1, V2, H2 are 1-byte values indicating locations on the screen. To write a pixel, the sequence-type must be a "*". H2 and V2 are not used. V1 is the vertical coordinate of the pixel. H1 is the horizontal coordinate. To erase a pixel, the sequence-type must be a space. H1, V1, H2, and V2 are the same as above. To draw a line, the sequence-type must be a "L". H1 is the horizontal coordinate of the first point of the line. V1 is the vertical coordinate of the first point. H2 is the horizontal coordinate of the last point. V2 is the vertical coordinate of the last point. To delete a line, the sequence-type must be a "D". H1, V1, H2, and V2 are the same as above. CURSOR POSITIONING When positioning the cursor on the KAYPRO 10, the screen is treated as an array 25 characters high, and 80 characters wide. Any spot on the screen can be addressed by a vertical coordinate (ranging from 32 to 66) and a horizontal coordinate (ranging from 32 to 111). The character in the upper left corner of the screen has coordinates of 32,32. The cursor can be moved to a desired position on the screen by writing an escape sequence to the console output. For the purpose of cursor positioning, an escape sequence is a 4 byte sequence defined as follows: Escape sequence = ESC EQUALSIGN

where: 1) ESC is an ascii 27 (1B hex). 2) EQUALSIGN is the character '=' (3D hex). 3) V1, H1 are 1-byte values indicating the location on the screen. GRAPHICS CHARACTERS Each of the character positions on the screen occupies the same area as eight pixels (4 high, 2 wide). Thus, pixels can be addressed in groups of eight at a time. To set pixels in a character position, the cursor is moved to that position, and then a byte is sent to the console output. This byte must have the high order bit set to 1 to distinguish it from normal characters. The remaining seven bits are use to set 7 of the 8 pixels. I.E: to write these pixels.... ------- Pixel # 1 ------> | | | <------ Pixel # 0 |---+---| Pixel # 3 ------> | | | <------ Pixel # 2 |---+---| Pixel # 5 ------> | | | <------ Pixel # 4 |---+---| Pixel # 7 (off)------> | | | <------ Pixel # 6 ------- output this byte: ------------------------------- must be '1' --> | | | | | | | | | <-- bit for # 0 ------------------------------- ^ ^ ^ ^ ^ ^ | | | | | | bit for # 6 | | | | bit for # 1 | | | | bit for # 5 | | bit for # 2 | | bit for # 4 bit for # 3 As shown above, pixel # 7 is off. To write a pixel with it on, send the inverse video command (ESC,B,0), then output the inverse for bits 0 through 6. I.e: 10000000b would print a blank graphics character; (ESC,B,0),10000000b would print a solid character. ATTRIBUTE COMMANDS A character can be set to inverse video, blinking, reduced intensity, or underlined. Also, the cursor can be turned off. These attributes are activated by sending a 3 byte escape sequence to the console output: Escape sequence = ESC where: 1) ESC is an ascii 27 (1B hex) 2) is a 'B' to set an attribute on, or a 'C' to set it off. 3) has a value of 0 through 4, as follows: 0 = inverse video, 1 = reduced intensity, 2 = blinking, 3 = underline, 4 = cursor. Default for these attributes is: 0 = off, 1 = off, 2 = off, 3 = off, 4 = on. COMMENTS 1) Examples of line and pixel drawing can be found in GRAPHICS.BAS. 2) All of the coordinates used are 32 or greater. At first glance, it would seem natural to start them at 1 or 0. However BDOS interprets some byte values of 32 or less as control keys. For example, an attempt to use a coordinate of 9 will result in eight spaces being printed on the screen (BDOS thinks that the 9 is a tab). 3) A line drawn from point a to point b will not always look the same as a line from b to a; it will be a mirror image. 4) Graphics characters, pixels, and lines cannot write over normal characters. SUMMARY Graphics commands: Set Pixel ESC, * , V1, H1 Clear Pixel ESC, , V1, H1 Set line ESC, L , V1, H1, V2, H2 Delete line ESC, D , V1, H1, V2, H2 Attribute commands: Inverse video on ESC, B, 0 Reduced intensity on ESC, B, 1 Blinking on ESC, B, 2 Underlining on ESC, B, 3 Cursor on ESC, B, 4 Inverse video off ESC, C, 0 Reduced intensity off ESC, C, 1 Blinking off ESC, C, phics characters, pixels, and lines cannot write over normal characters. SUMMARY Graphics commands: Set Pixel ESC, * , V1, H1 Clear Pixel ESC, , V1, H1 Set line ESC, L , V1, H1, V2, H2 Delete line ESC, D , V1, H1, V2, H2 AtCOMMENT ********************************************************* * * * S-Basic menu program for Kaypro 10. * * * * By R. Schrader * * * * Copyright (C) 1983 by Non-Linear Systems, Inc * * No warranty is made, expressed, or implied. * * * ********************************************************* END $LINES VAR CREDIT_STRING = STRING CREDIT_STRING = " WRITTEN BY ROBERT SCHRADER " VAR VERSION_STRING = STRING VERSION_STRING = "Version 1.0" DIM BYTE BUFFER_128(128) DIM BYTE FCBUFF(32) VAR SETDMA, SEARCH_FIRST, SEARCH_NEXT = INTEGER SETDMA = 26 SEARCH_FIRST = 17 SEARCH_NEXT = 18 VAR RESPONSE, ESC, RTN, UP_ARROW, DOWN_ARROW, BACK_SPACE = CHAR VAR FILE_NAME, N_STR = STRING:14 VAR TRUE, FALSE = INTEGER FALSE= 0 TRUE = NOT FALSE ESC = 1BH RTN = 0DH UP_ARROW = 2DH DOWN_ARROW = 2BH BACK_SPACE = 8 N_STR = "" VAR BDOS = INTEGER BDOS = 5 REM Alter the vector pad: "+" is down, "-" is up. REM EA35 and EA36 are equates in the BIOS that assign the arrow keys. BASED NEW_UP, NEW_DOWN = BYTE BASE NEW_UP AT 0EA35H BASE NEW_DOWN AT 0EA36H NEW_UP = UP_ARROW NEW_DOWN = DOWN_ARROW REM The possible video attributes. VAR INVERSE, REDUCED, BLINKING, UNDERLINE, CURSOR = CHAR REM Intitialize attributes. INVERSE = '0' REDUCED = '1' BLINKING = '2' UNDERLINE = '3' CURSOR = '4' REM Translation tables. VAR SPEC_CHAR = STRING:128 VAR UP_CASE = STRING:128 UP_CASE = "..............................." +\ " !"+CHR(34)+"#$%&'()*+,-./0123456789:;<=>?" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" SPEC_CHAR = "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" +\ " !"+chr(34)+"#$%&'()$+$-$/0123456789$$$$$$" +\ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ$\$^_" +\ "`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~" VAR MSG_1, MSG_0 = STRING MSG_0 = "Hit the down-arrow to use this menu, or ESC to quit." MSG_1 = "Hit RETURN to run a program, or ESC to quit. " VAR J, K, L = INTEGER VAR XPL_MAX = INTEGER XPL_MAX = 14 VAR CHOICE_MAX = INTEGER CHOICE_MAX = 6 REM Image for printing menu on screen. DIM STRING:49; SCREEN(20) SCREEN (0) = " " SCREEN (1) = " List S-Basic source programs (*.BAS) " SCREEN (2) = " List S-Basic compiled programs (*.COM) " SCREEN (3) = " Edit a program " SCREEN (4) = " Compile a program " SCREEN (5) = " Run a program " SCREEN (6) = " Compile and run a program " REM Text of explanations. DIM STRING:25; EXPLAIN(20,20) EXPLAIN (0,1) = " Use the arrow keys to" EXPLAIN (0,2) = " move the highlighted bar" EXPLAIN (0,3) = " up and down. When the" EXPLAIN (0,4) = " program(s) that you want" EXPLAIN (0,5) = " is(are) highlighted, hit" EXPLAIN (0,6) = " the return key. " EXPLAIN (0,7) = " " EXPLAIN (0,8) = " A short description " EXPLAIN (0,9) = " of the highlighted item " EXPLAIN (0,10) = " will appear in this box." EXPLAIN (0,11) = " " EXPLAIN (0,12) = " If you wish to exit " EXPLAIN (0,13) = " from this menu, hit the " EXPLAIN (0,14) = " escape key. " EXPLAIN (1,1) = " This option will show" EXPLAIN (1,2) = " you all of the S-Basic " EXPLAIN (1,3) = " source(uncompiled) files" EXPLAIN (1,4) = " in this user group. " EXPLAIN (1,5) = " " EXPLAIN (1,6) = " " EXPLAIN (1,7) = " " EXPLAIN (1,8) = " " EXPLAIN (1,9) = " " EXPLAIN (1,10) = " " EXPLAIN (1,11) = " " EXPLAIN (1,12) = " " EXPLAIN (1,13) = " " EXPLAIN (1,14) = "  z Çvýv}vÑy]ya  ! . ; ? delete? rename? New name? copy from? copy to ? *w vh%:=5!7 8:=508$02=526%:=5!77!6@*Ͷ$:626'%7$!75f#ͶvQv@_#~:w#Ͷwv>;͂y{þ6!4͂$'%Qw!z~Nw4w#Ewz~#$O*&+1*D5"6"6*6͘!ͫ${#Ͷ$~@xy:6GxTxTxMy=wҹw$9nw$8nwywoxwEnwyw!6w8nw>܍&w8nwy>xoxxEnw>x8$I' !1x#~>xEnwͫ$}!&Đ)8~gx#[x$8nw!06ͭx:6ʑx!ͭx!ͭx!7ͭx:%6ʩx!;ͭx:4!;ĭx# ͔8éxկ x=yxy.x#y xͶ7!yy y!yy>  y~,y#.:*? пͶ#~+:Xy~?Q?@##*w"v9w$v]y͂y!6 6 +:%6!4!6ʬz*w&v9w(vʕy'z͂y>2zGOyy*763yx2)6vcLv:2,:2]1%24:6«v 8͍y?%÷v8͓yyI'EvvQyv7v2626:&2C5:B5͐)K-EhNw:6wͥ!4~6 -ww!% E!2v! h%!7:72w!7 swI'͌wswQw!7H*7yCJͦE!7xEKJ`Jy’J`J! "6!7gH*7wC͎Iҡw`Jv:%67-%$ 8.| I':&6:%67-ÿw8w8>25G*$6|!8z:%6z%:=5x!8ͫ$:626̅$!4/x,v2,]1'%$*&+1*D5"6"6*6͘!ͫ${#+w#Ͷ$~ʌxͻxڠxʃx1yڠxGͶ xxGMxͫ$}!&Đ)8~ʳx#çx$8Jxկ x1yxx.x#x xͶ7y y ,2) = " to run a compiled (.COM)" EXPLAIN (5,3) = " program. " EXPLAIN (5,4) = " " EXPLAIN (5,5) = " " EXPLAIN (5,6) = " " EXPLAIN (5,7) = " " EXPLAIN (5,8) = " " EXPLAIN (5,9) = " " EXPLAIN (5,10) = "xxGMxͫ$}!&Đ)8~ʳx#çx$8Jxկ x1yxx.x#x xͶ7y y 5m512z10p2s40t1d2i1l0h