IMD 1.16: 1/06/2007 13:06:38 FOGCPM.181 --FOGCPM181XWP COM XWP COM^-09-13 87 READ ME XWP CFG XWP DOC!"#$%&'()*+,-./0XWP DOC%12345-CPM181 DOC#XWP PHN6XWP PRN7XWP USR8EDIT COM/9:;<=>EXCLOCK REL?EXCLOCKRRSX @AMAIN CHR.BCDEFGOXEGE RELDHIJKLMNOPOXEGE CHR.QRSTUVPAUSE COMWXWP C XYZ[XWPCAL C \]XWPCLK C ^_`aXWPDATA C bXWPFILESC cdXWPHELP C efghXWPLINK SUBiXWPMENU C jklmXWPMSG C noXWPTERM C $pqrstOXEGE H uNEUTEXECCOMvwxyNEUCHARSDOCz{NEUCHCMPQQ |}~NEUCHREGQQ (NEUTEXECDOCNEUTEXECDOCNTREADME EXRDTRAKOBJEXRDTRAKASMEXRDTRAKWS This is the disk name. ected a hard disk BIOS READ ERROR bug, made it possible to read directory on disks marked R/O, and corrected a random read error bug encountered on large files. GORDON WILK 6707 Springpark Av (213) 645-6419 Los Angeles CA 90056 random read eUNWS EXEqS v WLPARK COMh#wu=SD COMA\r { SEARCH COMK; | }  return "OCTOBER"; break; case 11: return "NOVEMBER"; break; case 12: return "DECEMBER"; break; }acter+1, attribute ); cpoke( bottom, right, character+7, attribute ); fill( bottom, left+1, bottom, right-1, character+3, attribute ); cpoke( bottom, left, character+6, attribute ); fill( top+1, left, bottom-1, left, character, attribute ); cpoke( top, left, character+4, attribute ); } char *MMfrom, *MMto; int MMsize; memmov( from, to, size ) char *from, *to;jkmEXCLOCKRõjMODEMMEXHELP OR ESC-? FOR HELPEDITVDEESC-M FOR HELPSWEEPSWEEP? FOR HELPNEW USER!9"!>q>!>]B7*2i!͓i|?DCo!>%5LE*4!ͭi||:&i|!}2!}2:&i|1!}2x8!}2͗ñ*2i!͍i|U*!i2i!͍i||!}2Ã!}2*!i2i!͍i|ʪ!}2xñ!}2!}2'!}2*!ri.0!!!>!!>!!!{>ͯ$>!9͐oiÙ!>þ} þͯþ þþ$þK þ:"&i!͍i|x!>þ!>]B*!ri͗DCþ͛j&3:AHKRYXWP 1.1PRINT ACTIVE !!!!N!}!>Q;! 9!!!!O!!@>Q;! 9!!!!!u!>Q;! 9!!O!!O!v!>Q;! 9ɯͼ#:"&i!͍i|ʙ!*>!}2_!9!ri!!!!!O> >! 9!>D!/i>Ͱf:&i|*!i!ri*!i!ri!>]B!/!>WPRINT ACTIVE!9!>!F>boi|V!H!!!! >CY! 9!!!/i>:W!T!1!9>CY!9!A!!/i>:W!Z!]!e>CY!9!m!!/i>:W!! !/i>:W> a!>`!A>`!m>`!>`XWP.CFGr%d %d %s %s%s %s%s %s!9!/iri!/i>f!i!}!! !u><0!! !|><0!! !><0!! !><0!! !><0!! !><0!! !><0!! !><0!9!!!!! :&i>i0! 9oi!}2!>q> HELP OPTIONS FILES TELCOM USER SHELL EXIT !! !><0!! ! ><0!! ! ><0!! ! ><0!9!!!!! !>i0! 9oi!>q>!!!!!}!>Q;! 9!]>:_&i|}!}2_!!!e>!!!m>!!]>Ͱf!! >ͧe!>s ͜"͛j_ SWEEP EDIT PRINT RETURN !xwp!1>:_&i|= !}2_!!!P !>>!9!!!b !>>!9!!>A!>ͭa!>]B!">aW!>]B*!i!ri!!!!!O> >! 9DC!!1>Ͱf!!t >ͧe!!">ͧe!!v >ͧe!!!9>!!!A>!>s FILE TO EDIT: !xwp !! ! ><0!! ! ><0!! ! ><0!! ! ><0!! ! ><0!9!! !!! !>i0! 9oi!>q>!! !!!}!>Q;! 9Û :&i!͍i|Z ͇^ ô :&i|s S"w x:&i͏j}2ô |ô ô ô ô ͛jA a     CLOCK CALENDAR RESET PRINTER RETURN !! !& ><0!! !- ><0!! !4 ><0!! != ><0!9!!!!! !>i0! 9oi!!!!(!}!>Q;! 9 +$ '$ !>:_&i|ʶ !}2_!!! >!!!>!!>Ͱf!!F >ͧe!>s$ $ $ ͛j     DIAL TERM TELCOM RETURN !xwp!! !i><0!! !s><0!! !{><0!9!!<!!! !>i0! 9oi!!<!!F!}!>Q;! 9V!!!!<! !>Q;! 9!!!!<!m!>Q;! 9!!!!>>!9!>q>!>]B!!!!!;> >! 9!>aW!!>ͧe!!!>!!!>!>sg!!!>!!!>!!!!!O> >! 9!>]B!>D!>ͺ`ggg͛j P EXECUTE CP/M+ RETURN Enter CP/M command line: !xwp XWPEXECUTING COMMAND...CP/M+ !}2!! !!>͹>!9!! !!>>!9!!/!!>͹>!9!!/!!>͹>!9!!%!!>͹>!9!!%!!>͹>!9!!*!!>͹>!9!!*!!>͹>!9!="ͼ:&i|ɯ[4*'4*͓i|ʀ*#4! 1j!!!>@*#4! 1j!!#>@*%4! 1j!!&>@*%4! 1j!!(>@*'4! 1j!!+>@*'4! 1j!!->@*'4"!}2!! !!/!}!>Q;! 9GOOD MORNINGGOOD AFTERNOONGOOD EVENING[4*#4! ͭi|!!>Ͱf*#4! ͙i|"*#4!ͭi|"!%!|9!!>Ͱf*#4!͙i|W!!>Ͱf!!y>ͧe!!>ͧe!, !!(!!<!!>>!9!!)!!;!!>Q;! 9!!)!>!@>>!9! !)!H!@>>!9! !)!R!@>>!9! !)!\!@>>!9! !)!f!@>>!9!!)!p!@>>!9!9!ri!ͭi|!2!z!>>!9!biÔ! !)! !;!!>Q;! 9!>]B!!3>A!!4>~Y! !3>A!!4>~Y! !3>A!!4>~Y! !3>A!!#4>~Y! !3>A!!%4>~Y!!3>A!!'4>~Y!>]B?5*#4>5"#4*%4>5"%4*'4>5"'4!*!4ri!*#4ri!*%4ri!*'4ri!!(!!A!}!>Q;! 9 SET DATE AND TIME YEAR: MONTH: DAY: HOUR: MINUTE: SECOND: %d%d%d%d%d%dB/:&i͏j}2!!G!!>>!9 !9!ri!!!!7!!>h8! 9!!!!7!!>Q;! 9!!'>?! !!,!>>!9! !!F!>>!9! !!`!>>!9! !!z!>>!9!/i|!0uͭi|!bi+!>0!!!!7!!>h8! 9 THE EXECUTIVE WORKPLACE Version 1.1 Copyright (c) 1987 by Ted A. Campbell !9!/iri%i|%i>͒D!biã!9:&i|~:&i!͍i|!V>!}2_!9!9*ri!9!ri!/i*ͭi|z!!h>Ͱf!>ͧe!/i!!><0!92ini!bi!/i!!j><0!!*!!!>h8! 9!!*!!m!>Q;! 9!!!s!@>>!9!!!!!!@>Q;! 9!!!!@>>!9!9!ri!9!!!*!!/i>i0! 9oi!9!ri!/i*͙i|!!*!!!>h8! 9!9!/i*͠i|M!/i!!!@>͹>!9!9*!i!/i!jni>͔p!9XWP.PRN NOT FOUND RETURN PRINTER: !9!L!T>boi|¨!}2!}2!9!>,e"oi!9!ri!/i!V!>CY!/i>͙a͏j|;!/i!Y!/i!/i >CY!9!92ini!bi!i"XWP.PRNr%s%s %s!!!!O!!>Q;! 9!! !!>͹>!9!!(!!>͹>!9!!F!!>͹>!9! /iB!9!ri!9! riS!9! ri!9!'riS!9!)ri!9!EriSS͛j &!9!ri! /i|t!9!ri!!/i!!/i! /i xi!>Q;! 9!/i|ʽ!9!ri!!/i! /i!>>!9!}2_!!!!(!!>h8! 9!!!! !!>Q;! 9!! !!'!!>Q;! 9!!!!>>!9!! !/i!>>!9!>0!!!!(!!>h8! 9 SORRY !`!/i>Ͱf!9!`ri%i|%i! ͍i| !}!bi!`!i>ͧe!`!n>b|g!!`>Ͱf!!p>ͧe!>ͯ$>.comr NOT FOUND%5!{*!4>ͧ6>6>ͧe!{!r>ͧe*4!>͐d!{!>ͧe!{!t>ͧe!{*4>t7>ͧe!{!v>ͧe*4!>͐d!{!>ͧe !9!9!ri*!i!ri! !!!!m!>Q;! 9! !!!! !>Q;! 9%5*4!>͐d! *4>t7>fi!1j*4>t7!>>!9! *4>t7>fi!1j*4>t7>f!!>>!9!9!ri!"4?5!9*!4>ͧ6oi%5!/i!C4*4!i)+i͠i|Z!!/i!/i!/i!j>`!!bi!͍i|Q!!9!ri!bi!bi !9!9!}!9!}!/i*4͍i|ʛ!!9!}!9!@}!/i! ͭi|!!/i!/i! !>͹>!9"!/i!/i! /i! 1j0!"ixi!"i>͹>!9!/i!/i! /i! 1j0!"ixi!"i>͹>!9*!i!ri! !!!!}!>Q;! 9!!!#!>>!9!!!#!>>!9!!>A!>ͭa!>]B!">aW!>]B!">ͯ$!"!#>b""|T#!!!! !}!>Q;! 9!!!#>Ͱf!!">ͧe!!#>ͧe!!!>!}2"!}2"!!!! !}!>Q;! 9 FILE TO PRINT: rPRINTING ...;:"&i| $3!9*">bb}!͍i|/$~$|$!"i>͒D!"i! ͍i|Y$:"&i#}2":"&i!7͍i||$!}2"! >͒D3! >͒D*"> a!!>!}2"!9!/iri%i|$%i>g}!bi+þ$!/i:$&i|%&:$&i!͍i|,%!&>!}2_!9*$ri!9!ri!/i*$ͭi|ʥ%!!&>Ͱf!>ͧe!/i! !><0!92ini!biB%!/i! !&><0!!2*$!>!!>h8! 9!9!!2!*$! !>i0! 9oi!!2*$!>!!>h8! 9*$͠i|ʰ&!9*$!i!/i!jni>:_&i͏j|ʰ&!>Ͱf!!&>ͧe!>s!}2_XWP.USR NOT FOUND RETURN !xwp!9!'!'>boi|'!}2$!}2$!9!>,e"$oi!9!ri!/i>͙a͏j|ʠ'! !/i>:W !!/i>:W>` >`!92ini!bi.'!i"$XWP.USRr;!9:&i}!}2!"'!!!!O!!>h8! 9!!!!O!!@>Q;! 9!!!+)!@>>!9!!(!9)!@>>!9!!2!@)!@>>!9!!<!G)!@>>!9!!!P)>!!!!!O> >! 9!>]B!>D^)!>]B!!!!O!!>h8! 9!"i}23XWP TERMINAL ECHO EXIT RETURN ESC FOR MENU ;!"'!P"'4+!"'ͥD|ʐ)D!͆i>P+_D!͍i|)!9oD}!"i!͍i|)**'!͍i|)3)!"i>D*'!͍i|)!"i>P+jo)3!>]B!! ! +><0!! !+><0!! !+><0!9!!(!!! !>i0! 9oi!>q>**'͏j"'*'|ʺ*!!F! +!@>>!9*!!F!*+!@>>!9*!"'***͛j***+!>]B ECHO EXIT RETURN ECHO ON !!>A!"'!"'>c|ʟ+Ï+*'#"'+*'+"'#ß+!"'*'+"'#ß+ß+͛jg+ z+ Ë+>D*'#"'+*'*'͙i|+!"'*'#"'+*'*'͙i|+*'"'*'*'>A:'&i|,1.:'&i!͍i|.,!.>!}2_!9*'ri!9!ri!/i*'ͭi|ʧ,!!.>Ͱf!>ͧe!/i! !><0!92ini!biD,!/i! !.><0!!?*'!M!!>h8! 9!!?*'!M!m!>Q;! 9!!@!#.!@>>!9!9!!@!*'! !>i0! 9oi!>q>!!?*'!M!!>h8! 9*'͠i|.!9*'!ioi!'>/!/i!j>/! >DXWP.PHN NOT FOUND RETURN AUTODIALER: !9!.!/>boi|[.!}2'!}2'!9!>,e"'oi!9!ri!/i! /!'>CY!/i>͙a͏j|.!/i! /!/i!/i >CY!9!92ini!biÙ.!i"'XWP.PHNr%s%s %s!9!/iri%i|@/%i>D!bi!/h/c/>e2/>20</:0Š/>fJ/>2020>d2/</:0:0 /b/An unexpected error has occurred. If this error persists, reboot the system and try again.$e/0EXCLOCK _D!͓i|0j0|+0oD!>,e",0*,0!/i!i!/ij!/i>Ͱf!9!/i||0÷1! 9!ri!9!ri!9!ri!9!ri! /i!/iͭi|ʷ1!/i!/iͭi|ʢ1!/i!/iͭi|61!/i! /i!/i!/i! /ij!/i!!@>͹>!9!bi+0!9!ri!/i! /i!/i!/i! /ij*,0!/i! /ij!@>>!9!bi+!bi+ý0!9!ri! bi+è0!9!ri! !/i!/i!/i!/i!/i!i> >! 9!=>͕>!>ͭa_D!͓i|(2j2!9oDoi*3!>͕>!/i! 9c3!9!/i!/iioi寴2!9ric3!9!/i!/ini!/i!/ijͭi|2!9ric3!9!/i!ioi寴2!9ric3!9!/ini!/i!/ijͭi|$3!9ric3c3͛j;2 Z2 Z28Z22 22222422 262!>͕>! !/i! /i!/i1j!/i! /i!/i1j!/ij!/i!/i!/i1j!/i!/i!/i1j!/ij!/i!i> >! 9!=>͕>2! 9;Zx0N!9!ri%i"#4!9!ri%i"%4!9!ri%i"'4*#4>4"#4*%4>4"%4*'4>4"'4!9!/i!1joi!9! j!/i!/ijini!>͐d!!>~^!9!ri2i"!45!9*4!ioi*4!)4*4!i)+imj!1j"!4!1j!͍i|ʼ5*4!͙i|ʼ5!ÿ5!|5*!4#"!4!9*!4!1joi!9*!4!/ii!i!m1joi"4!9*!4!/i!mj!/iioi!"4!/i!)4*4)+i͙i|b6*4#"4=6!/i!)4*4!i)+ii"4*!4!1j|£6!"4!"4!9!/i!1j!ioi寴6!92ini7!;7:7!B7:7!I7:7!Q7:7![7:7!d7:7!k7:7:7͛j6666777SundayMondayTuesdayWednesdayThursdayFridaySaturday7!88!88!88!88!%88!)88!.88!388!:88!D88!L88!U888͛j{777777777 7 7 7 JANUARYFEBRUARYMARCHAPRILMAYJUNEJULYAUGUSTSEPTEMBEROCTOBERNOVEMBERDECEMBER!9!/i|8!/i8!9*^8ri8!9*`8ri8!9*b8ri8!9*d8ri8!9*f8ri88͛j88888Ê9!9!/i!/ii!j!/i!/iij>,eoi!/iq9!/i"^8Ê9!/i"`8Ê9!/i"b8Ê9!/i"d8Ê9!/i"f8Ê9Ê9͛j29>9J9V9b9! 9!/iri!9!/i!/i!/ii!/i!/iijni!9!/iri!>;A!9!/i!/iini!/i͠i|;! 9!/i!j!/ini!9!/i!j!/ini!/i|Ÿ:! /i!/i!/i>=!/i! /i!/i>=!/i!͍i|:! /i! /i!/i>=!/i!/i!/i>=! 92ini!92ini!bi:!/i!͍i|3;!/i>c!>;A!9!/i}2C;}2D;! /i"E;! /i"G;!/i"I;!/i"K;! /i!j! /i"M;!/ii! /i"O;>A!G;V!E;^!!KM; !C;F!D;Npq##*K;z;;*I;{! /i! /i!/i! /i!i! /i! /i>Q;! 9! /i!/i!/i!/i>͹>!9! /i!/i! /i!i! /i! /i! /i>Q;! 9!/i!/i!/i!/i>͹>!9!/i! /i! /i! /i!i! /i! /i>Q;! 9!/i! /i!/i!/i>͹>!9! /i! /i! /i!i!/i! /i! /i>Q;! 9! /i! /i!/i!/i>͹>!9!/i"=!/i"="=*=[=K=!>D!z>D! /i0>D!/i >D!/i >D!/i >D >D!>D!s>D0>D!>D!x>D0>D!/i!/i! /i! /i! /i! /i>Q;! 9!1j| ?!/i>ͣ?!/i!/i! /i! /i! /i>f!i! ! /i>Q;! 9!>;A!/i! /i!j!/i!/i>f>=!>;A!9!ri!/ii|?!/i!/ii!xi}!biï?;!9! /iri!9!/iri!9!}!/i! /iͭi|e@!/i!/i!"i!>͹>!9!Ci!bi@!bi!9!/iri!9!U}!/i! /iͭi|@!/i!/i!"i!>͹>!9!Ci!biÃ@3!/i!/i! /i!j!xi!>͹>!9!/i!/i! /i!j!xi!>͹>!9!/i!/i! /i!j@!xi!>͹>!9!/i!/i! /i!jA!xi!>͹>!9!͍i|A>!͍i|A>A>>A!>D!=>D!/i >D >D! >D>fPi!1j>B>W!>D!.>D0>D! >D! >D!9!ri!/iͭi|B!>D!9niâB!9!ri!/iͭi|C! >D!9niB!9!ri!/iͭi|BC! >D!9niC!>D!>D!)>D!>D!(>D!>D!>D!g>D!>D!G>D!>D!j>D!>D!k>D!>D!l>D!>D!m>D!>D!^>D!>D!q>D!!>W!!>W!!/i>W! !>W!!>W!!/i>W!!/i>W! !>E! >E!͆iɯͥD|DD! >E! !>E! >E!͆i!9!ri!'ͭi|GED|>E! !/i!͆i>E!!bi E!! !>E! !>E! !>E! !D>E! !>E! !>E! !>E! !>E}2E!ENxw:E&i!/i}2E}2E!EN!E~y*F*F!F͖!ͺ`!9!ri!9!9!92i%i!͆iri!ͲVri!!92i-g!F!Fri%i|&H%i.d|]G!9T]2i#ri4G%iH!9!)H!xHri4G%i!>͍i|ʼG!9!+H!xHriG!9!-H!xHri4G*F!ͭi|G!F*F#"F+)ri!9/Hri#H͛jeG<G>G4Graw%i|sH%i.d|cH!}!9T]2i#ri!9T]2i#ri/H!9! 9T]2i#riri!9! 92i/Hri!92i!92iH!͍i|H!Rͺ`!92i!M!92i%i f͏j|H!!VF!92i)!ri*E|(I*E!92ii!92i!MPf|oI!BF!92i)!ri!.F!92i)!ri!92i!92i!MPf|¶I!BF!92i)!ri!.F!92i)!ri!92i!92i!MPf|I!BF!92i)!ri!.F!92i)!ri!92i!92i!MPf|DJ!BF!92i)!ri!.F!92i)!ri!92i!9!jF!92i)2iri|vJ!!$O^J!9!jF!92i)!$!ͲVriri!͍i|J!~F!92i)!!ͲVri!͍i|J!J!|J!!~F!92i)2i!!O^!F!92i)!BF!92i)!F!92i)!ririri!92i%i!:͍i|yK!92i%i!͍i|yK!|K!|#L!!$O^!?! O^!92i%ig!X͓i|K! 92i%ig!@i}!F!92i)!ri!BF!92i)!ri!.F!92i)!ri!92i!92iM͏j|BL!!92i%i~M!W!͍i|nL!!.F!92i)!ri!92i!!U|ʤL!92idVÎM!W!͓i|L!W!W!͍i|L!!.F!92i)!riÎM!W!͍i|"ML!.F!92i)!ri!92i!!͑_!92ibb!͓i|gMLM!.F!92i)!riÎM͛jOLrLwM!92i%i!+͍i|M!.F!92i)2i!xiri!92irwaCON:RDR:PUN:LST:!92i! ! O^!92i%i!:͍i|RN!92i!92i%ig!@i}!9!92iriaN!9!92iri%i|pN!!9!92i!92i!Ori%i!.͍i|ʸN!9T]2i#riN%i|N!!9!92i !92i!Ori%i|N!!!92i%i|3O!O!92i%i f͏j|3O!6O!|O!9T]2i+ri#|yO!9T]2i#ri+!9T]2i#ri+%ig}|OOO!92i<>.,;:=?*[]!92iCVùO!92i͘V!O͛jOOäO!9!VF!92i)2iri!͓i|P!VF!92i)!ri!BF!92i)2iPQ!!W*E|SP*E!92i)2i|SP!VP!|nP*E!92ii!F!92i)2i!ͧi|ʤP!92i͜Q͏j|ʤP!çP!|ʲP!!9!~F!92i)2i!F! 92i)2i#ri+ri%iQ͛jP P0P!9!!Wri͏j|'QQÂQ!ͺ`! U! U!9!ri! ͭi|tQ!^U@U{QUÚQ͛j,Q4Q 4Q FQQQ!BF)2i|=S!9!!W!9!BF! 92i)2i!jF!92i)2iWri!͍i|R! 92idV!!9!BF! 92i)!ri!9!92i!iri!9!92iri!9!92i ri!9!~F! 92i)2iri!9T]2i+ri! }!9T]2i+ri!92ii|S%i! ͍i|RÚR!9T]2i+ri%i}͍i|S!9T]2i+ri!.}ÚR!F! 92i)!92i!~F!92i)2iiri!!9ͭa|OS!͝U!!U|ʔS!~F)2i!!O^dV!!!92iCVüS!92i͘V!S͛jSSSSèS!BF!92i)2iT!92iU!BF!92i)2i!92iW U*E|9T*E!92i)2i|9T!\xb\!/i!9!rioi! Vi#|\!9!/ibboi.d͏j|\!/i!͓i|\!\!|^͏j|(]!/i!-͍i|]!9!riä\(]!9!ri!/i!0ͭi|H]! /i!9!/i!aͧi|o]!92i!Wioiè]!/i!Aͧi|ʖ]!92i!7ioiè]!92i!0ioi!/i!/iͧi|]!/ii|]!]!|]! /i!9!9!/i!/ij! /iniä\!/i!/ijoi8^͛j[c4[så[! biY! /i!9!9T]2i+ri#|}^!9T]2i#ri+!92i}O^!9!ri!/i%i.d|ʧ^!biË^!9! bi+%i͆ioi!0ͧi|T_!aͧi|^!92i!Wioi!_!Aͧi|_!92i!7ioi!_!92i!0ioi!/iͧi|4_T_!9!/i!/ijniç^;!9*Fi|ʄ_!/i|_!Mͺ`!3!9*Fi3! /iCV͏j|_! /ic|_! /iͭa|_!_!|_!!9!jF! /i)+i!ni!92iri!/iK`!#!jF! /i)+iW2i! /ini_`!/iri_`!_`͛j `!`4`B`! /i!!U|ʃ`ri!!F! /i)!ri!VF! /i)!ri! /i~V!!"i|`!"iU!9!ri! ͭi|``!bi+ a``!!WCV͏j|"a!c͏j|waͭa|ka!!jF!/i)+iW!͍i|ka!na!|wa!!.F)!BF!/i)!rioi!.F)+i!͆iCV!͆i|^b*E|a*E)2i|a*F!92ii|a!a!|Ibc͏j|;b!F)2i|;b!(U|;b!>b!|Ib!Lb!|^b͘V!!!9!92i͓Orib!F!92i)2iëb!F!92i)2i+riûb͛jbbÒb!92idV!! b͛jbb b {bcb!9!ri!bi! ͭi|HcCV|Ec!/i!/i!/iH!͓i|BcHcb!!92ièc!!92i͘Søc! !92i͘S! !92i͘Søc!92i!92i͘Søc͛jWckc Ðc!.F)2i!͆i|c!!92i"F!BF)+i!i|d!͍i|d!d!!BF)+i!͍i! ͠i|ʌd! ͍i|~d! ͠i|pd! ͧi|pd!sd!|~d!Ád!|ʌd!Ïd!!9!/iri!9!/irid!9!/ijri!bi+! /i! 1j0Oi!9! /i! 1joieedůe!bi+!-}!}!/i;e!ͲV!9!/i! /if!ioi!/ii|ʤe!9!/i%iri!bi+%i}!Vi#}`e!9!92iri!9T]2i+ri!9T]2i#ri%i|ee!9T]2i#ri+!9T]2i#ri+%i}|fe!92i%i|Lf!92i%i!9%i͍i|)͂j^j͊j^j}o{_zW=gjGjrjrjz/W{/_x/Gy/O{_zW{z|—j.!N#F#xʴj~#~#jj`i*!j"FþF)͂j^j͊j^j}o{_zW=gjGjrjrjz/W{/_x/Gy/OãEXCLOCK EXCLOCK - an RSX for the Osborne Executive by George F Peace - 4/84defg y< s1#~!#^#V#^#VSn!#! Sl (>20[lO:p(y e!_~#(##^#V0"{ {>>< / / [n>:p G[n22pI! $~2D#^#V"H!C3! $=!@ $R [n>I!= $R>2p2[n[n2 sJ1l[*oR:"o*́!{[!{!:mwd!C32{J3"NҠ|ʠ"Æ>ª>2 x!y*>O" <ھG*|/. If you have not updated the date and time, you'll be prompted for them (see detailed instructions below. If your screen looks odd (like, if there are ASCII characters of various shades hanging around in places where they don't seem to belong --especially right braces--}), then OXEGE.CHR has not been installed correctly as the alternative character set. To use XWP, use the Executive arrow keys (either WS or CP/M setups should work) or the numeric keypad (numbers 2, 4, 6, and 8), then select menu options by hitting the key. 2. BASIC XWP OPERATION: ======================= 2.1 Entering the Date and Time If you have not updated the date and time since booting up your Executive, XWP will first promt you for these. All items should be entered as integers; the year should be entered as a full four-digit integer. (XWP can survive the 21st century.) Enter the time in 24-hour ("military") format; this will allow the internal clock to reckon transitions from one day to the next correctly--just in case you're up computing past midnight. 2.2 The XWP Screen If OXEGE.CHR has been correctly installed, the basic XWP screen should appear as a relatively dim area in between two lines of characters on the top and bottom of the screen. The top line is the main menu, which offers several options: HELP -- maybe someday; for now this only displays the sign-on message. OPTIONS -- Several resident XWP utilities are included here, such as a large-character clock, a calendar, a printer setup program, and a routine to reset the system date and time. FILES -- this menu allows several file-related options. SWEEP chains to your SWEEP.COM program for basic file main- tenance. EDIT chains to EDIT.COM (VDE), which allows you to edit files. PRINT is a resident print spooler, which will print out files in the background while XWP is operating. TELCOM -- this menu includes a simple memory-resident terminal program (TERM) and the ability to chain to your own com- munications program (TELCOM). [The next option is currently unused.] USER -- This is a special menu of CP/M Plus command strings that you can define by editing XWP.USR. SHELL -- This menu allows you to access CPM Plus by either exe- cuting a command line, or by dropping into CP/M Plus inside an XWP shell. EXIT -- Choosing this option will completely exit from XWP. These menu options will be explained in more detail later. Use the arrow keys to position the cursor on the option you want, then press to select the option. The last item in XWP menus is itself usually labeled RETURN: select this option to break out of the current menu. The bottom line of the basic XWP screen is the message bar and contains four message areas: The left-most area usually contains the name of the program you're currently running. The next area is the message area per se; when no other message is displayed, it will contain a simple greeting. Sometimes it will display information on how to get help in particular programs to which XWP chains. The third message area always shows the day of the week and date, and the last area shows a current clock. 3. XWP MENU OPTIONS: ==================== 3.1. The HELP Menu Currently, the HELP menu only displays the  sign-on message; perhaps in a future version we'll develop a more elborate HELP system. 3.2. The OPTIONS Menu 3.2.1. CLOCK The CLOCK option uses special OXEGE characters to display a clock at the middle bottom of your screen. This is helpful when you leave the Executive running, but you're not in a particular application program. XWP.CFG as an option that will automatically turn on this clock when you enter XWP. This clock will stop when certain character- entry or file options are selected, and may not "catch up until they're through. Note that the smaller clock on the message bar (utilizing George Peace's EXCLOCK RSX) is constantly updated. The CLOCK option is a toggle: hitting this menu option again will turn the clock off. 3.2.2 CALENDAR Selecting this option will display a calendar for the current month, with current date highlighted, in the middle of your screen. This option, like CLOCK, is a toggle: hitting the option again will turn the calendar off. 3.2.3 PRINTER Selecting this option will allow you to send configuration strings to your printer. But << NOTE >> that this option will probably not work (as supplied) with your printer, so you will have to edit and patch XWP.PRN to install the configuration options appropriate for your printer. As supplied, the configuration strings will work with a Star-Gemini 10X printer. Select the option(s) you want -- options you have selected will be marked with an asterisk. When you've sent all the code you want, place the cursor on RETURN and hit . Use the VDE editor to edit XWP.PRN to set up your own printer. The first line of XWP.PRN should contain the name of your printer -- up to 10 characters, but with no blanks. Each line following should have (a) a label of up to nine characters (no whitespace) and (b) a string to send to the printer (no whitespace). These two items should be separated by whitespace (blanks and/or tabs). Remember to use the ^P sequence in VDE to enter control characters. 3.3 The FILES Menu 3.3.1 SWEEP There's no point in reinventing the wheel, and it's hard to beat the series of SWEEP programs for file-maintenance on CP/M computers. If you have transferred your SWEEP program to your XWP disk and named it SWEEP.COM, this menu option will chain to the SWEEP program. Use this for seeing file directories, erasing, copying, and viewing files, squeezing and unsqueezing files, setting file attributes, and the like. After you exit SWEEP (usually by entering X ), you will be returned automatically to XWP. 3.3.2 EDIT Speaking of not reinventing the wheel, what could beat Eric Meyer's excellent VDE editor for the Executive? When you select this option, XWP will prompt you for a file to edit, then will chain to a special version of VDE named EDIT.COM. This is a version of VDE2C which (a) utilizes one less line so that the XWP message bar is still visible, and (b) shows the top line in dim reverse video to match the general XWP scheme of things. The sequence -M will display a menu of VDE options; for full VDE documentation, see FOG CP/M disk #xxxx. 3.3.3 PRINT PRINT is a simple print spooler that operates in the background of XWP. If you select this option, you'll be prompted for a file to print out. If you enter a valid filename, PRINT then operates in the background. It will issue a formfeed every 55 lines, and at the end of a file. Be sure your paper is set to the top of a page before you begin PRINT. Also, you may want to use PRINTER (under the OPTIONS menu) to configure your printer before a PRINT operation. While PRINT is in operation you cannot chain to other programs or exit from XWP. 3.4. The TELCOM Menu 3.4.1. DIAL DIAL allows you to dial telephone numbers from your computer if your modem has "autodial" capability. DIAL looks for a file named XWP.PHN, and reads a list of up to twenty labels and telephone numbers. It then offers you a menu consisting of the labels from XWP.PHN, and dials the number associated with the label you select. You can then either (a) pick up your receiver and carry on a voice conversation, or (b) go to TERM (see below) from the TELCOM menu in order to communicate through your modem. DIAL sends to your modem a string of characters consisting of a dial prefix and the ASCII digits associated with a telephone number. The dial prefix is set by the first line of XWP.PHN. "ATD" is appropriate for modems with "Hayes standard" or "AT-style" command protocol. The dial prefix can be changed by editing the file XWP.PHN. If you are going to use DIAL, you'll want to set up your own XWP.PHN file. This file can be created with VDE under XWP, and should consist of up to twenty lines of text. The first line should contain your dial prefix (no whitespace). Each line after it should contain (a) a number label of up to nine ASCII characters with no intervening whitespace between them, and (b) a telephone number, consisting of up to 14 ASCII characters w ith no whitespace between them. These two items can be separated by any amount of whitespace (blanks and/or tabs), and each line should conclude with a carriage return. A sample XWP.PHN file is supplied with XWP11.LBR. 3.4.2. TERM TERM is a simple, memory-resident terminal program. It addresses the Executive SIO ports directly. To get the menu under TERM, just hit . Your only options are (a) toggle local echo on or off, (b) exit from TERM, or (c) return to the terminal program. If you have a Hayes or compatible modem, you can dial numbers from TERM by using the ATD#### command. 3.4.3. TELCOM TERM is designed for quick-and-dirty terminal work; for more elaborate work (like setting baud rates and other parameters, XMODEM protocol file transfers, and the like), you'll want a more elaborate communications program. Selecting the TELCOM option will chain to your program (which initially must be named MODEM.COM). The label and help information on the message bar are initially set for MEX, but this can be changed by editing XWP.CFG). After you exit from your program, you'll be chained automatically back to XWP. 3.5 [Unused Menu Area] 3.6 The USER Menu The USER menu can be set up by editing and patching the XWP.USR file. This will allow you to enter up to twenty CP/M Plus command strings and related menu labels which can then be selected from this menu option. The XWP.USR file should consist of up to twenty pairs of lines, and each pair of lines should have a label of up to nine characters, and then on the next line a command string of up to fourteen characters. You can use "!" to separate items in the CP/M Plus command line. XWP will automatically add "!xwp" to the end of your command line to insure your return to XWP. 3.7 The SHELL Menu 3.7.1. EXECUTE EXECUTE allows you to enter a CP/M Plus command string from within XWP, execute the command string, and return to XWP. You can enter any valid CP/M Plus command string, including the use of "!" to delimit separate commands. EXECUTE will automatically add "!xwp" to your string in order to insure a return to XWP. Do not, therefore, add "!xwp" to the end of your command string. 3.7.2 CP/M+ The CP/M+ exits from XWP but retains the XWP message bar at the bottom of the screen, with the small clock active. In this condition, your Executive will operate as normal, except that you are limited to a 23-line screen. Normally this will work ok, but some programs do not work well in this situation (e.g., the Osborne-supplied CHARGEN program). I have reinstalled my Wordstar program for 23 lines, because I like to have the clock on the message bar active. (I've also changed its terminal configuration slightly so that it uses inverse dim for its alternate video, thus matching XWP's general look.) To return to XWP while in CP/M+, simply type XWP as usual. 3.8 EXIT Selecting this option exits completely from XWP, removing the message bar from the bottom of the screen. 4. CONFIGURING XWP =================== Several XWP options can be altered by changing the XWP.CFG file. This file does not have to be on the default disk, but if it isn't you are forced to use the defaults written into the program. The file can be edited with VDE, and it should contain the following lines: 1 - a single digit (0 or 1) indicating whether the big clock should be automatically turned on upon entry to the program (0 = no; 1 = yes; default = 0); 2 - a single digit (0 or 1) indicating whether the calendar should be displayed upon entry to the program (0 = no; 1 = yes; default = 0); 3 - a string of up to seven characters (no whitespace) giving the name of the executable (.COM) file for your telecommunications program (default = MODEM); 4 - a string of up to seven characters (no whitespace) giving the title of your telecommunications program to appear on the message bar (default = MEX); 5 - a line of up to twenty-five characters (whitespace ok) giving a help message for your telecommunications program to appear on the message bar; 6 - a string of up to seven characters (no whitespace) giving the name of the executable (.COM) file for your editor (default = EDIT). If you are installing a different editor than the version of VDE supplied with XWP11.LBR, be sure that it thinks that your screen has only 23 lines (the message bar takes up the 24th line); 7 - a string of up to seven characters (no whitespace) giving the title of your editor to appear on the message bar (default = VDE); 8 - a line of up to twenty-five characters (whitespace ok) giving a help message for your editor to appear on the message bar; 9 - a string of up to seven characters (no whitespace) giving the name of the executable (.COM) file for your file-maintenance program (default = SWEEP); 10 - a string of up to seven characters (no whitespace) giving the title of your file maintenance program to a ppear on the message bar (default = SWEEP); 11 - a line of up to twenty-five characters (whitespace ok) giving a help message for your file maintenance program to appear on the message bar; and 12 - a line of up to ten characters (whitespace ok) giving the name by which you want XWP to refer to you (default = NEW USER). 5. LIVING WITH XWP =================== XWP can serve as a sort of general boot-up disk which you can use to perform several functions which previously required considerable disk-swapping. You can edit and print simple correspondence using VDE and the PRINT spooler. You can maintain simple files of agenda and names and addresses with VDE. You can use DIAL for conveniently accessing frequently called voice and data numbers. TERM is always a few keystrokes away; and you can chain to your TELCOM program for more sophisticated telecommunications. If you want to maintain the message bar (exit by the CP/M+ option under the SHELL menu), you may need to alter some programs so that they think your computer has a twenty-three-line screen. Your Wordstar WINSTALL program will perform this for you (while you're at it, why not change the terminal routine to give inverse dim video for the Wordstar messages, so it'll match the general appearance of XWP?). I have renamed the CP/M Plus directory program (DIR.COM) to XDIR.COM, and have devised a couple of options under the USER menu to call it. I use time- and date-stamping on all files, so occassionally I'll want to see the times and dates with this facility. Also, you might want to place some more commonly-used Executive utilities, like FK, in your USER menu. 6. XWP SOURCE CODE =================== XWP is written in C compatible with Small C, version 2.1. I am releasing all of the source code I have written in a separate file (XWP11SRC.LBR). The source code file contains OXEGE.REL, the relocatable form of OXEGE (the Osborne Executive Enhanced Graphics Environment), but the source code for OXEGE itself is in a third file (OXEGE.LBR). I am not including source code which I have not written. In particular, (a) the source code for VDE2CE is available in the FOG Library; it is Eric Meyer's program, and I'm only including the executable form of the version I'm supplying with XWP; and (b) I've incorporated an RSX and some associated assembly-language code from George Peace's EXCLOCK utility; this I am supplying in relocatable form so that you can link it in with your experiments with XWP, but the source code is available in the FOG library, and you should go back to it if you want to fool with George's program. I've claimed copyright to XWP and OXEGE to discourage illegal use of the source code for profit. You're perfectly welcome to experiment with it, and release new versions; though I'd be very pleased to see these. 7. REGISTRATION =============== I'm not asking for contributions to support this programming project, but I would like the pleasure of knowing who is using it. In turn, I may be able to keep you posted about future developments. Please return this form or something like it to me: NAME ___________________________________________________________________ ADDRESS ________________________________________________________________ ________________________________________________________________ Voice or Data Phone (please indicate) __________________________________ Any bugs noted or suggestions offered: __ (just kidding - send a note!) Ted A. Campbell 7 Winchester Ct. Durham, NC 27707 Voice: 919-493-6523 Email: tcamp@ecsvax t kiddWPDATA C eWPFILESC fWPHELP C h WPLINK SUB lWPMENU C mWPMSG C qWPTERM C sXRDTRAKOBJ xXRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL ATD ECS 549-9403 DEEP 471-6436 OFFICE 684-6365 DDS 684-3234 HOME 493-6523 :xwpuser,b:xwpterm,b:exclock ͍i|ʼG!9!+H!xHriG!9!-H!xHri4G*F!ͭi|G!F*F#"F+)ri!GEMINI-10X ELITE B PICA B CONDENSED B 6-L/I 2 8-L/I 0 ITALIC 4 GOTHIC 5 MARGIN M GIN XXXX  pointWPDATA C eWPFILESC fWPHELP C h WPLINK SUB lWPMENU C mWPMSG C qWPTERM C sXRDTRAKOBJ xXRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL 92i!MPf|DJ!BF!92i)!ri!.F!92i)!ri!92i!9!jF!92i)2iri|vJ!!$O^J!9!jF!92i)!$!ͲVriri!͍i|J!~F!92i)!!ͲVri!͍i|J!J!|J!!~F!92i)2i!!O^!F!92i)!BF!92i)!F!92i)!ririri!92i%i!:͍i|yK!92i%i!͍i|yK!|K!|#L!!$O^!?! O^!92i%ig!X͓i|K! 92i%ig!@i}!F!92i)!ri!BF!92i)DIR A: xdir a:!pause DIR B: xdir b:!pause FK fk :xwpmsg,b:xwpcal,b:xwpfiles .,;:=?*[]!92iCVùO!92i͘V!O͛jOOäO!9!VF!92i)2iri!͓i|P!VF!92i)!JP VDE-2C editor - E.Meyer 12/84 - for Osborne Executive computer only-y1Xz !~P>2) )j FILE: Line 1 Col 1 ESC-M = menu (k =7o$~w# y~w# y>A!] !:\w#6#!]> %!e6#>@6#=9>!] !FNyʔBn ##U>B|4q ##NFyʔ>q}B> 6#=¢'d !"_ɯ2!"h"j"k"|\ʞ:|G:k)$!h4!"j"k"|\{\ž!~{ p j j~`>j>p4p#wz#=\> ʐ#w2ͤ7P!\ ͛ 00000 bytes free>   _:!\ !\!'\\!"h"j"k"|!͠ w#r2\:­! > K|H}HHʐ>w\­\>2Ü>2ÜBAK!>A*>>A*˾>++ w#>A @>^*w#"*w#">û>ʻ+~*+ @+">A> *w#"> *w#"> *w#">"û}ր*(+6 *:Do%",+".:G#6 ¶*.#" BDM*(DM***.*,DM**DM*,++*,+**"*#",**#*,",+"*2**~ C>C7> RE###7?Z#+jS> *,|p7?zƒ7*.+> ##>*+":=:*#"!<:2>:=:=<:!<:2;4*(T]~# 0,~,&>  "**.T]~+ Kgc~c]>B@",o҂҂>2}l**#w"**(͔!"*.> **" ((͙`' `+ͮ*.~ ͮl**~25>6+"**,O~O~7?4+w",  ͙l*,~ʁ5>…#",**š~ʚ~4#w"*  ͮ>  e=¶:!**~ *+">2p:! *#" :*B" :!* ":2++͔ͮͲ: 2 ͱ>2 : =G͠ x = \ ͛ New string: ͸2 ʗ  O!: G͂ Ÿ ! ~ʩ G#~ͅ ´ é >2  >2ͅ ͅ  **~ ~4 >ͅ!) ~*,>  !) ~: 6!Z ? 6!T >A.>Ԡn :) > ͮͅ*,~ʕ 5>7?#",`ҭ *.~ #º +**~ º #",**#"* >2*+"*ò 1 *w#": =2 >P2 : O**>  $ 0" G: =0: =GH> *w#"A : 2 ͹>P2 >A> l >͹>P2 ~#>A >Ä ̈́ 鯹¯ ~#ʲ O > y A͠ ¾ yO*͠  0>Aw># "::O":O> >PG:O͵ xUH**>A>  (>"+*0 "> :_("n͔҄Ë:2(ҡ2<2ͻ:Ox2ں2x22:p"͹*n:=_:=G:O͵ *">P!<G*,$`*.#:_:"_2p>A*P&:o&P*>:\o-\ ͛ Abandon file? (Y/N) _Y)M:ڵ**½>2>2**"*#Ͳ;͓*,)M:**;>2!\ :2(!\ :(2\ ͛ File name: ͸ƀo&>6 #=t!6#6  !::·:Aڰ <2!~. a :A[>#÷>#÷\! 2>2͓\ ͛ Printer setup codes: ͸EO!~# <*,͠ \> Q*.{zQ*,~Ae[ډae{enˮ e:2:ͱ2G:<>_(͠ xG>»һx+6 ͮû:ͤЯG !͂ n x=ͱ:ͤ ʅ! ~w4e͟1 T͂ n  +͂ k͂ +  ʤ¤͂ Íee{ e +>2"!) ~26:2) *,**~> !!!~# .?!:; !) ~* \ ͛ Macro: ͸O\ ͛ Repeat count (0-9,*): yv!6*ʋ0ڋ ҋGx2!™!" *~um6:C2!"u*~g:=2^!"!"u~#"muF#^#V##‘^#VÒ##†>A!>!>Mm\ ͛ T op B lock N ame Z ip | ^B format ^G del rt ^V insert E nd W rite L oad S ave | ^F fast rt DEL " left ^N insert CR F ind Delete P rint Q uit | ^R,^C page ^Y del lin ^A rpt find C hange I nsert R t mrgn X = S+Q | ^P pr code ^T tog case ^Z rpt change >A!>> WW_QTEF ISWNMCm PB D QXXML^RZ">2o>2\ !]6 #l͓yT͙:] M)͠:2:2*MD**#ҷ;q>A*˾> e  eB h ` 9  n  {  *  %q:ʡ\ ͛ ERROR::o&v~_#~Ẅ́ ͛ [Press ESC to continue]háOut of MemoryInvalid CommandI/O FailureNot FoundDisk Full or R/ONot ChangedCannot Reformat\ ͛ I/O working... please WAITG*~x= x!YXNot FoundDisk Full or R/ONot ChangedCannot Reformat\ ͛ I/O working... pXRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL VdD49@IT|e[epf@0@$|faЀepW|d[p#l@P?3 p$#TPMx8LgC)@e9!sf3e2 I@t4Nb)o9Ss:łh(e1Ae'3 0 0&pHe[p ~E,Ʉ,@t"''dD49@IT|e[epf@0@$|faЀepW|d[p#l@P?3 p$#TPMx8LgXRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL ozg j#|/g}/oDM!yjxGyOȯ{_zWjDMzzrjxzj>)͂j^j͊j^j}o{_zW=gjGjrjrjz/W{/_x/Gy/O{_zW{z|—j.!N#F#xʴj~#~#jj`i*!j"FþF)͂j^j͊j^j}o{_zW=gjGjrjrjz/W{/_x/Gy/OãEXCLOCK EXCLOCK - an RSX for the Osborne Executive by George F Peace - 4/84defg y< s1#~!#^#V#^#VSn!#! Sl (>20[lO:p(ymãEXCLOCK EXCLOCK - an RSX for the Osborne Executive by George F Peace - 4/84defg y< s1#~!#^#V#^#VSn!#! Sl (>20[lO:p(ye!_~#(##^#V0"{ {>>< / / [n>:p G[n22pI! $~2D#^#V"H!C3! $=!@ $R [n>I!= $R>2p2[n[n2 sJ1l[*oR:"o*́!{[!{!:mwd!C32{J3"NҠ|ʠ"Æ>ª>2 x!y*>O" <ھG*|/n B3mD dD 6:!`63n 68\꫁@˭f@7(f'X,f0&hrD!@6:!`63j EmVU[ͪL:n!.Q ͯNͨ Lڈr֏|!. dt B\@h@ 68\QP͹@NXͻ Lf@#Օ~ `rm4@.)pK  U!`C@ .0p@ >hB 9D!69D 6!6@e! \ ! !  Vb\@ٷ rCm{rAmuCmf@6e!T ! ! fbkٵ uCm 69GVmuA@! 6XwB _,BKGND44Dh(CCDSGI€4448CCLT44THp CCNEՁd45EϰCCPINT455T(CCSWITd4EECI48ϸCPOKEDTetFFLUSHTDT8HMALLOCDTXMINITe4UDT SPOKEe5E$5ϸ TASKSQM4D5=9Q"YEARRU`DU(5%9UQSECOND`$DQQ%6BCDBINS dtUDDH)Q=CTOJV`e5tDM5=9Q"P5C`KFp <>>bD !{>T B]bR.VmPP9u_m^pYECT >m(EBT(>m(EBT0>m(EC,KB\0:!4fr`ZQ(@k0s!64YE8\KbD |f 9D!|f  %!. ͮ +4P`{6Y,Q9r Bo6܀ CC@ d@epXhw!+b@ ˬB3mD2"(D @6bB*@VU@ ;H!VUP`0Y,V+B\ O. ͯ,j!.QUu@mfpXfݰXf`mpB+8dEA @*Qͻ. ͫ .͠A6o`P ͢@NQ uSZ,(|Z8TH @69D48*@͢MK64YhE@T"]bz@]gū C*`Y,Q9r@mKu@mtu 63hʯZ<Yd"3o d\.V+i%G4 ãb\a1 6dXt| CR@,:>!la6hr ] @PILn2O id0@Cd0@s)e9 'Pu9̆r4 'Lt:rXv C{@,;!l6Kh #%{4(ýba1 d`2Xw CG,;! FKi#%{w Y@ WP0 @ @`p,$g@ L Z0`d$Y"TR,  D`A, ERqJ*  TU)2)@E& @D!`6!6kHDfP E >VU(f XfuC@mfڀ9r@muPmX4fPm |Zf'(fа'(f '(Ͱ B3hB 3i@B3ix|f@V !  !jʱB`Q@`U W6X, ͬNQ ͮNQͯ`NQ aX,YrYB\&`\Vm jD! 6: 6! >@r,$͹Gѕ`\SAm^p!(͡ b+!H "DWB3hD hfҀ7XfXfP0Ȋ@mC@ʹ@.(ͩaZ` +o8y!0AKMK!Da '7NDaAU=/YVx bÂ{^]n_ -0$B 3jB 3nD D!6D 6遺 6D 6@@˔B 3o@|f0'X]b`|ܢ@A@CA Pe!P>3@X]b`G e!!! !!H"\`VA36:    .Q ͰQIAb@ruAmrAm@(fڠG(fPGXf԰G(f@ rAmrˬB3n#B 3o@#B3ox D D 69GFmuA!"\`E\`G]bpI\`M\`N\36:  ڄ  ڪ  ڸ .Q ͬ`QA]b@ru@ " bDVrDVU_] % WjH)q\hh10,hi)i1P<hi hj )ʑZhjj*,tj h`((IP((qސ,)(*I(p*HP ɨ\ɩi+HXꪉ)Р J cJQ`gJ擀QM`dDTetMQ]%:BKGNDMl!|f  Y!D` Gm`Am(ͤ@ ͥ 2Y!" \ 60X.+" \ 60Y">k Bs9Gmo`\.V(D` Gmy`D!|f؀r,&`\Pr,:dc*Z:r$e,!)k|t""+GZ2*JtQM T5XMA=-INVERTSDt %%BANK1PSS1 @A`B`D`F@`H34uA`ZQ@gū @m'r, ږ ڰ ھ  Yu@ hQ0ͮQK@b`ru@(͠lͱQ(͵  e!2 ۊY٠@QA@,( 4 ۚpYjʦ`" ~n(e!,pX } @hþ HXf`m@XfmDX*> 6D 6@EX!!!B9GFmuA!f^ N!.Ͱ`,ڤ!. T} @ mrA m@60!T!!(!#6:  B!rFl $B3ox B3iB 3i8B3mB3i( B9GFmuA! !L"\PVbM@ e!@ !#6:  .QͱNQ(ͳ NͭA2 Q@b@ru@m@(fܐ rA@mu@@m@Xf '( r˭hX2> E |Zh2Y# Ld-0%H)q:c4H)f,hhq hhhq,!hh1,hi)i1hi(hj )ʑ@ j hP)ȪJPɨp jIӀQL4E( 9QJDEFCURMc!|f Y!D@ Gm`\.V(D@ Gm"`D |f bGh !|f  r,QO"p>krB#e>kh(QP hhh1 5hʈQjȈjQ`[jHꑔp 8QL45$ ]:RGTГ448 %6BRT`4u$ IbINVӓ5T 992BLINKPёZ4YB 9Gm`Xr  !  60D pX0XfTB3i86! 60D pXRulb@ˬB3jE!YVUQ\"r`\PͰ@ ;*dC@(͵ H6r,۔@Qu@,lY|! 60Y">o!  60D&p|fР $B9Gm`H(ͣ,H6r,RQMX,lY!5 6Y">j Bl9Gm^`D!|fրr,dC`(ͯ, xY QdX">l I)qؐI0hhh1hj )ʑ hiqphjIh0hK߀-i)BiWjɓQL`48 &AOT$4 >LOU DUE %9BRXU %EQI5%:GLPORTUe\Q 0X, Q B,Hr@hldA`(rL\`D `B9G&m>`Y"0!>3jp@Qͫ`Q X@,HrB(Ͷ ,r,6u@ hWkj´ ;4! 6̀Y"h!6؀X"h>l !\Xf  'fū*ٶeQ 0  ۞@ Hf ;!,4Q l@X,4Q l@X,4Q l@X,4Q l@X,4Q l@X,4@Q l@X,4@Q l@X,4Q l@X,HpXѕِswYh }Y >̀6h2PS#69 M&2,Sc< 1R3S#55 MaR:c` %N:@91Q;2ԕ#`-%9B: 1=UQB;4# IaMQR:@TRS@ Qb;bU#.U =Np1R3S#55 MaR:c`ering X ), you will be returned automatically to XWP. 3.3.2 EDIT Speaking of not reinventing the wheel, what could beat Eric Meyer's excellent VDE editor for the Executive? When you select this option, XWP will prompt you for a file to edit, then will chain to a special version of VDE named EDIT.COM. This is a version of VDE2C which (a) utilizes one less line so that the XWP message bar is still visible, and (b) shows the top line in dim reverse video to match the general XWP scheme :100000000000001F3F3030303030FFFFFFFFFFFFA8 :10001000000000F8FC1C1C1C1C1CFFFFFFFFFFFF66 :1000200000000000010300000000FFFFFFFFFFFFD2 :10003000000000C0E0E0E0E0E0E0FFFFFFFFFFFFC6 :100040000000001F3F300000001FFFFFFFFFFFFF09 :10005000000000F8FC1C1C1C1CFCFFFFFFFFFFFF46 :100060000000001F3F3000000001FFFFFFFFFFFF07 :10007000000000F8FC1C1C1C1CFCFFFFFFFFFFFF26 :100080000000003030303030303FFFFFFFFFFFFF17 :10009000000000707070707070FCFFFFFFFFFFFFCA :1000A0000000001F3F303030303FFFFFFFFFFFFFF9 :1000B000000000F8FC0C000000F8FFFFFFFFFFFF4E :1000C0000000001F3F303030303FFFFFFFFFFFFFD9 :1000D000000000F0F818000000F8FFFFFFFFFFFF2E :1000E0000000001F3F3000000000FFFFFFFFFFFF88 :1000F000000000F8FC1C38387070FFFFFFFFFFFFA6 :100100000000001F3F303030301FFFFFFFFFFFFFB8 :10011000000000F8FC1C1C1C1CF8FFFFFFFFFFFF89 :100120000000001F3F303030303FFFFFFFFFFFFF78 :10013000000000F8FC1C1C1C1CFCFFFFFFFFFFFF65 :1001400000000000003C3C3C0000FFFFFFFFFFFF01 :10015000000000000000007F007FFFFFFFFFFFFFA7 :1001600000000000000000FF00FFFFFFFFFFFFFF97 :100170000000003FFFF0F0FFF0FFFFFFFFFFFFFF79 :10018000000000FFFF0000FF00FFFFFFFFFFFFFF79 :10019000000000E0F87878F878F8FFFFFFFFFFFF35 :1001A00000000000000000000000FFFFFFFFFFFF55 :1001B000000000FF0000FF000000FFFFFFFFFFFF47 :1001C0002424242720203F000000FFFFFFFFFFFF23 :1001D000C0C6CCD8306EC306183FFFFFFFFFFFFF3D :1001E0003C3C3CFFFFFFFF000000FFFFFFFFFFFF65 :1001F000242424E40404FC000000FFFFFFFFFFFFB1 :1002000000000000000000000000FFFFFFFFFFFFF4 :1002100000183C3C181800180000FFFFFFFFFFFF0C :10022000006C6C6C000000000000FFFFFFFFFFFF90 :100230000024247E247E24240000FFFFFFFFFFFF14 :1002400000183E583C1A7C180000FFFFFFFFFFFF1C :100250000066660C183066660000FFFFFFFFFFFFB8 :1002600000386C6C386D673E0300FFFFFFFFFFFF37 :1002700000181830000000000000FFFFFFFFFFFF24 :1002800000183060606030180000FFFFFFFFFFFFC4 :1002900000180C0606060C180000FFFFFFFFFFFF0A :1002A00000185A3C183C5A180000FFFFFFFFFFFFE0 :1002B000000018187E1818000000FFFFFFFFFFFF66 :1002C00000000000000018183040FFFFFFFFFFFF94 :1002D000000000007E7E00000000FFFFFFFFFFFF28 :1002E00000000000000018180000FFFFFFFFFFFFE4 :1002F0000002060C183060400000FFFFFFFFFFFF08 :10030000003C666E7E76663C0000FFFFFFFFFFFF4D :10031000001838181818183C0000FFFFFFFFFFFFF7 :10032000003C66063C60607E0000FFFFFFFFFFFFB1 :10033000003C66061C06663C0000FFFFFFFFFFFF57 :10034000000C1C2C6C7E0C0C0000FFFFFFFFFFFF5D :10035000007E60607C06663C0000FFFFFFFFFFFF41 :10036000001E30607C66663C0000FFFFFFFFFFFF61 :10037000007E06060C1830600000FFFFFFFFFFFF45 :10038000003C66663C66663C0000FFFFFFFFFFFF27 :10039000003C66663E060C780000FFFFFFFFFFFF93 :1003A00000001818000018180000FFFFFFFFFFFFF3 :1003B00000001818000018183040FFFFFFFFFFFF73 :1003C000000C18306030180C0000FFFFFFFFFFFF2B :1003D0000000007E007E00000000FFFFFFFFFFFF27 :1003E000E6E6E6E6E6E6E6E6E6E6FFFFFFFFFFFF17 :1003F00067676767676767676767FFFFFFFFFFFFFD :1004000030303030303F1F000000FFFFFFFFFFFFA4 :100410001C1C1C1C1CFCF8000000FFFFFFFFFFFF62 :1004200000000000000003000000FFFFFFFFFFFFCF :10043000E0E0E0E0E0E0F8000000FFFFFFFFFFFF8A :100440003F303030303F1F000000FFFFFFFFFFFF55 :10045000F80000000CFCF8000000FFFFFFFFFFFFAA :1004600001000000181F0F000000FFFFFFFFFFFF4B :10047000FC1C1C1C1CFCF8000000FFFFFFFFFFFF22 :100480001F000000000000000000FFFFFFFFFFFF53 :10049000FC7070707070F8000000FFFFFFFFFFFF3E :1004A0001F000000303F1F000000FFFFFFFFFFFFA5 :1004B000FC1C1C1C1CFCF8000000FFFFFFFFFFFFE2 :1004C0003F303030303F1F000000FFFFFFFFFFFFD5 :1004D000FC1C1C1C1CFCF8000000FFFFFFFFFFFFC2 :1004E00000000101030307000000FFFFFFFFFFFF03 :1004F000E0E0C0C0808000000000FFFFFFFFFFFFC2 :100500001F303030303F1F000000FFFFFFFFFFFFB4 :10051000F81C1C1C1CFCF8000000FFFFFFFFFFFF85 :100520001F000000181F0F000000FFFFFFFFFFFF6C :10053000FC1C1C1C1CFCF8000000FFFFFFFFFFFF61 :1005400000003C3C3C0000000000FFFFFFFFFFFFFD :10055000007F007F000000000000FFFFFFFFFFFFA3 :1005600000FF00FF000000000000FFFFFFFFFFFF93 :10057000F0FFF0FFF0FF3F000000FFFFFFFFFFFF75 :1005800000FF00FF00FFFF000000FFFFFFFFFFFF75 :1005900078F878F878F8E0000000FFFFFFFFFFFF31 :1005A000FF00001F3F3030303030FFFFFFFFFFFF04 :1005B000007C60606060607C0000FFFFFFFFFFFF69 :1005C00000406030180C06020000FFFFFFFFFFFF35 :1005D000007C0C0C0C0C0C7C0000FFFFFFFFFFFFED :1005E00000183C66420000000000FFFFFFFFFFFF15 :1005F000000000000000007E0000FFFFFFFFFFFF83 :1006000000303018000000000000FFFFFFFFFFFF78 :100610000000003E6666663E0000FFFFFFFFFFFF32 :100620000060607C6666667C0000FFFFFFFFFFFFE6 :100630000000003E6060603E0000FFFFFFFFFFFF24 :100640000006063E6666663E0000FFFFFFFFFFFFF6 :100650000000003C667E603E0000FFFFFFFFFFFFE2 :10066000001E307C303030300000FFFFFFFFFFFF06 :100670000000003E6666663E067CFFFFFFFFFFFF50 :100680000060607C666666660000FFFFFFFFFFFF9C :1006900000001800181818180000FFFFFFFFFFFFE8 :1006A00000000C000C0C0C0C4C38FFFFFFFFFFFF90 :1006B000AA55AA54A852A8428822FFFFFFFFFFFFB5 :1006C00088218A258A15AA55AA55FFFFFFFFFFFF3B :1006D000C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFA0 :1006E00003030303030303030303FFFFFFFFFFFFF2 :1006F000FFFF00FF000000000000FFFFFFFFFFFF03 :10070000000000000000FF00FFFFFFFFFFFFFFFFF2 :10071000FFFFC0FFC0C0C0C0C0C0FFFFFFFFFFFFA2 :10072000FFFF03FF030303030303FFFFFFFFFFFFBD :10073000C0C0C0C0C0C0FFC0FFFFFFFFFFFFFFFF82 :10074000030303030303FF03FFFFFFFFFFFFFFFF9D :10075000C8C2C8C2C8C2C8C2C8C2FFFFFFFFFFFFED :1007600083238323832383238323FFFFFFFFFFFF51 :10077000FFFF00FF002288228822FFFFFFFFFFFF0C :10078000882288228800FF00FFFFFFFFFFFFFFFF96 :10079000FFFFC0FFC0C2C8C2C8C2FFFFFFFFFFFF0C :1007A000FFFF03FF032383238323FFFFFFFFFFFFDD :1007B000C8C2C8C2C8C0FFC0FFFFFFFFFFFFFFFFE6 :1007C000832383238303FF03FFFFFFFFFFFFFFFF5D :1007D00088228822882288228822FFFFFFFFFFFFCD :1007E000AA55AA55AA55AA55AA55FFFFFFFFFFFF14 :1007F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0602 :00000000 WPMENU C mWPMSG C qWPTERM C sXRDTRAKOBJ xXRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL !! >c! !H>c! !>c|8!!!>cPress RETURN to Continue $&o)sNWPDATA C eWPFILESC fWPHELP C h WPLINK SUB lWPMENU C mWPMSG C qWPTERM C sXRDTRAKOBJ xXRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL tespace) giving the title of your editor to appear on the message bar (default = VDE); 8 - a line of up to twenty-five characters (whitespace ok) giving a help message for your editor to appear on the message bar; 9 - a string of up to seven characters (no whitespace) giving the name of the executable (.COM) file for your file-maintenance program (default = SWEEP); 10 - a string of up to seven characters (no whitespace) giving the title of your file maintenance program to a/* XWP.C ** ** The Executive Workplace */ #include "a:stdio.h" #include "b:oxege.h" #define FLAGLOC 57 char FLmenu; /* print menu? */ int *FLchain; /* chain flag location */ extern char FLbclock, FLcalendar, FLerror, FLprint; extern char stdate[]; extern int year; extern char FLIclock, FLIcalendar, FLdial; extern char Tcom[], Tlabel[], Thelp[]; extern char Ecom[], Elabel[], Ehelp[]; extern char Scom[], Slabel[], Shelp[], GLname[]; main() { int choice; FLchain = FLAGLOC; setwindow( 0 ); defcursor( 0 ); setup(); if ( *FLchain != 255 ) /* Initialize */ { cls(); ascrn(); initmsg(); signon( 1 ); getdate(); terminit(); if ( year < 1986 ) { reset(); } if (FLIclock) { initclk(); FLbclock = 1; } else { FLbclock = NULL; } if (FLIcalendar) { FLcalendar = 1; calendar(); } else { FLcalendar = NULL; } exclock(); } else { if( *( FLchain ) == 255 ) /* Reinitialize */ { ascrn(); } if ( *(FLchain-1) == 255 ) { initclk(); FLbclock = 1; } else { FLbclock = NULL; } if ( *(FLchain-2) == 255 ) { FLcalendar = 1; calendar(); } else { FLcalendar = NULL; } } FLdial = NULL; FLmenu = 1; *FLchain = 255; getstd(); minit(); message( 1, 0, "XWP 1.1" ); message( 2, 0, greeting() ); message( 3, 0, stoupper( stdate ) ); while( 1 ) { choice = mainmenu(); switch( choice ) { case 1: signon( NULL ); break; case 2: optmenu(); break; case 3: filemenu(); break; case 4: telmenu(); break; case 5: break; case 6: user(); break; case 7: shellmenu(); break; case 8: if( FLprint == 1 ) { error( "PRINT ACTIVE " ); break; } defcursor( 3 ); *FLchain = 0; exclock(); cls(); return; } } } ascrn() { fill( 1, 1, 22, 78, FILL1, ATTDIM | ATTALT ); fill( 0, 0, 0, 79, ' ' | ATTINV, ATTDIM | ATTUND ); fill( 1, 0, 22, 0, OUTDIM, ATTDIM | ATTALT ); fill( 1, 79, 22, 79, OUTDIM + 1, ATTDIM | ATTALT ); } /* TASKS ** ** Multi-tasking operations for XWP */ tasks() { bclock(); print(); } execl( cmndstr ) char *cmndstr; { char *dmaptr; if ( FLprint == 1 ) { error( "PRINT ACTIVE" ); FLerror = 0; return; } dmaptr = 128; defwindow( 1, 0, 0, 22, 79 ); co( 26 ); strcpy( dmaptr, cmndstr ); if (FLbclock ) { *(FLchain-1) = 255; } else { *(FLchain-1) = NULL; } defcursor( 3 ); Ubdos( 47, 0 ); } setup() { int sdatfile; if( (sdatfile = fopen( "XWP.CFG", "r" ) ) == NULL ) { return; } fscanf( sdatfile, "%d %d %s %s", &FLIclock, &FLIcalendar, Tcom, Tlabel ); fgets( Thelp, 25, sdatfile ); fscanf( sdatfile, "%s %s", Ecom, Elabel ); fgets( Ehelp, 25, sdatfile ); fscanf( sdatfile, "%s %s", Scom, Slabel ); fgets( Shelp, 25, sdatfile ); fgets( GLname, 10, sdatfile ); fclose( sdatfile ); xcr( Thelp ); xcr( Ehelp ); xcr( Shelp ); xcr( GLname ); } xcr( string ) char string[]; { char *pointer; pointer = string; pointer[ strlen( string ) - 1 ] = 0; }  ); } xcr( string ) charWPMENU C mWPMSG C qWPTERM C sXRDTRAKOBJ xXRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL ing - send a note!) Ted A. Campbell 7 Winchester Ct. Durham, NC 27707 Voice: 919-493-6523 Email: tcamp@ecsvax t kiddto make a $20 contribution. You will thereby become a registered user. This will entitle you to notice of updates and other information. Moreover, if enough users contribute useful NEUTEXEC character sets, I will distribute them to registered users for a small charge to cover materials, handling, and modest honorariums to the contributors. If you send a charact #include "a:stdio.h" #include "b:oxege.h" extern int day, month, year, jdate; extern int dm[], dpm[]; extern int *FLchain; char stdate[35], scratch[50], FLcalendar; getstd() { getdate(); strcat( stdate, swkday( nwkday( jdate ) ) ); strcat( stdate, " " ); itoa( day, scratch ); strcat( stdate, scratch ); strcat( stdate, " " ); strcat( stdate, smonth( month ) ); strcat( stdate, " " ); itoa( year, scratch ); strcat( stdate, scratch ); } #define CLINE 11 #define CCOL 1 calendar() { int line, cday, wday, ly; line = 0; *(FLchain - 2) = 255; outline( CLINE, CCOL, CLINE+10, CCOL+23, OUTBLK, ATTDIM | ATTALT ); fill( CLINE+1, CCOL+1, CLINE+1, CCOL+22, ' ' | ATTINV, ATTDIM ); fill( CLINE+2, CCOL+1, CLINE+9, CCOL+22, ' ', ATTBRT ); getdate(); itoa( year, scratch ); spoke( CLINE+1, CCOL+1+((25-(strlen(smonth(month))+7))/2), smonth(month), ATTDIM ); spoke( CLINE+1, CCOL+2+((25-(strlen(smonth(month))+7))/2)+strlen(smonth(month)), scratch, ATTDIM ); cday = 1; day = 1; ctoj(); /* Now we have first of month */ wday = nwkday( jdate ); getdate(); /* Restore current date */ while ( cday <= dm[ month - 1 ] ) { putnum( cday, CLINE+3 + line, CCOL+2 + (wday * 3) ); ++wday; if (wday == 7) { wday = 0; ++line; } ++cday; } } putnum( n, l, c ) int n, l, c; { char att1, att2; att1 = NULL; att2 = ATTBRT; if (n == day) { att1 = ATTINV; att2 = ATTDIM | ATTUND; } if (n < 10 ) { cpoke( l, c, ' ', ATTBRT ); } else { cpoke( l, c, ((n / 10) + '0') | att1, att2 ); } cpoke( l, c+1, ((n % 10) + '0') | att1, att2 ); } clrcal() { *(FLchain - 2) = 0; fill( CLINE, CCOL, CLINE+10, CCOL+29, FILL1, ATTDIM | ATTALT ); } t1, att2 ); } clrcal() { *(FLchain - 2) = 0; fill( CLINE, CCOL, CLINE+10, CCOL+29, FILL1, ATTDIM | XRDTRAKASM y XRDTRAKWS } DIT COM XCLOCK REL /* XWPCLK - Executive Workbench Clock ** */ #include "a:stdio.h" #include "b:oxege.h" #define CLOCK_LINE 20 #define CLOCK_COLUMN 32 extern int hour, minute, second, year, month, day, jdate; extern char scratch[], GLname[]; int oldsec; char FLclock, FLbclock; initclk() { FLbclock = 1; cpoke( CLOCK_LINE, CLOCK_COLUMN, 62 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE+1, CLOCK_COLUMN, 62 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE, CLOCK_COLUMN+15, 63 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE+1, CLOCK_COLUMN+15, 63 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE, CLOCK_COLUMN+5, 20 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE+1, CLOCK_COLUMN+5, 84 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE, CLOCK_COLUMN+10, 20 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE+1, CLOCK_COLUMN+10, 84 | ATTINV, ATTDIM | ATTALT ); oldsec = 61; bclock(); } bclock() { if (FLbclock == NULL) { return; } gettime(); if ( second != oldsec ) {  bigdigit( hour/10, CLOCK_LINE, CLOCK_COLUMN+1 ); bigdigit( hour%10, CLOCK_LINE, CLOCK_COLUMN+3 ); bigdigit( minute/10, CLOCK_LINE, CLOCK_COLUMN+6 ); bigdigit( minute%10, CLOCK_LINE, CLOCK_COLUMN+8 ); bigdigit( second/10, CLOCK_LINE, CLOCK_COLUMN+11 ); bigdigit( second%10, CLOCK_LINE, CLOCK_COLUMN+13 ); } oldsec = second; } clrclk() { FLbclock = NULL; fill( CLOCK_LINE, CLOCK_COLUMN, CLOCK_LINE+1, CLOCK_COLUMN+15, FILL1, ATTDIM | ATTALT ); } char pm[] = "GOOD MORNING"; char pa[] = "GOOD AFTERNOON"; char pe[] = "GOOD EVENING"; greeting() { gettime(); if ( hour < 12 ) { strcpy( scratch, pm ); } if ( ( hour > 11 ) && ( hour < 18 ) ) { strcpy( scratch, pa ); } if ( hour > 17 ) { strcpy( scratch, pe ); } strcat( scratch, ", " ); strcat( scratch, GLname ); return scratch; } reset() { int line; outline( 5, 40, 15, 60, OUTDIM | ATTINV, ATTDIM | ATTALT ); spoke( 6, 41, " SET DATE AND TIME ", ATTDIM | ATTUND ); fill( 7, 41, 7, 59, FILL3, ATTDIM | ATTALT ); spoke( 8, 41, " YEAR: ", ATTDIM | ATTUND); spoke( 9, 41, " MONTH: ", ATTDIM | ATTUND); spoke( 10, 41, " DAY: ", ATTDIM | ATTUND); spoke( 12, 41, " HOUR: ", ATTDIM | ATTUND ); spoke( 13, 41, " MINUTE: ", ATTDIM | ATTUND ); spoke( 14, 41, " SECOND: ", ATTDIM | ATTUND ); line = 8; while ( line < 15 ) { spoke( line, 50, " ", ATTBRT | INVATT ); ++line; } fill( 11, 41, 11, 59, FILL3, ATTDIM | ATTALT ); defcursor( 3 ); adr( 8, 51); scanf("%d", &year ); adr( 9, 51); scanf("%d", &month ); adr( 10, 51); scanf("%d", &day ); adr( 12, 51 ); scanf("%d", &hour ); adr( 13, 51 ); scanf("%d", &minute ); adr( 14, 51 ); scanf("%d", &second ); defcursor( 0 ); ctoj(); hour = binbcd( hour ); minute = binbcd( minute ); second = binbcd( second ); *( DATELOC ) = jdate; *( HOURLOC ) = hour; *( MINUTELOC ) = minute; *( SECONDLOC ) = second; fill( 5, 40, 15, 65, FILL1, ATTDIM | ATTALT ); }  exclock() { doclock(); FLclock = !FLclock; spoke( 23, 71, " ", ATTDIM ); } LL1, ATTDIM | ATTALT ); } XWP DOC !RXWP PHN 6XWP PRN 7XWP USR 8EDIT COM 9EXCLOCK REL ?EXCLOCKRRSX @MAIN CHR BOXEGE REL H"OXEGE CHR QPAUSE COM WXWP C X M | ATTALT ); cpoke( CLOCK_LINE+1, CLOCK_COLUMN+15, 63 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE, CLOCK_COLUMN+5, 20 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE+1, CLOCK_COLUMN+5, 84 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE, CLOCK_COLUMN+10, 20 | ATTINV, ATTDIM | ATTALT ); cpoke( CLOCK_LINE+1, CLOCK_COLUMN+10, 84 | ATTINV, ATTDIM | ATTALT ); oldsec = 61; bclock(); } bclock() { if (FLbclock == NULL) { return; } gettime(); if ( second != oldsec ) { /* XWPDATA.C ** ** User-definable data fields for XWP */ /* Initialization flags */ char FLIclock = 0; /* Big clock displayed? */ char FLIcalendar = 0; /* Calendar displayed? */ /* Telecommunications data fields */ char Tcom[8] = "MODEM"; char Tlabel[8] = "MEX"; char Thelp[28] = "HELP OR ESC-? FOR HELP"; /* Editor data fields */ char Ecom[8] = "EDIT"; char Elabel[8] = "VDE"; char Ehelp[28] = "ESC-M FOR HELP"; /* SWEEP data fields */ char Scom[8] = "SWEEP"; char Slabel[8] = "SWEEP"; char Shelp[28] = "? FOR HELP"; /* User NAME field */ char GLname[10] = "NEW USER";  "SWEEP"; char Slabel[8] = "SWEXWP DOC !RXWP PHN 6XWP PRN 7XWP USR 8EDIT COM 9EXCLOCK REL ?EXCLOCKRRSX @MAIN CHR BOXEGE REL H"OXEGE CHR QPAUSE COM WXWP C X /* XWPFILES.C ** ** File Utilities for XWP */ #include "a:stdio.h" #include "b:oxege.h" char FLprint; /* Flag for print active */ char GLpline; /* Print line */ char filename[15]; /* Filename to print out */ int prnfp; /* Printout file identifier */ extern char scratch[]; initprn() { spoke( 2, 15, " FILE TO PRINT: ", ATTDIM ); spoke( 3, 15, " ", ATTBRT | INVATT); adr( 3, 16 ); fflush( stdin ); defcursor( 3 ); gets( filename ); defcursor( 0 ); stoupper( filename ); if ( ( prnfp = fopen( filename, "r" ) ) == NULL ) { fill( 2, 15, 3, 32, FILL1, ATTDIM | ATTALT ); return 0; } strcpy( scratch, "PRINTING " ); strcat( scratch, filename ); strcat( scratch, "..." ); message( 2, 0, scratch ); FLprint = 1; GLpline = 1; fill( 2, 15, 3, 32, FILL1, ATTDIM | ATTALT ); } print() { char c; if ( FLprint == NULL ) return; if ( (c = getc( prnfp )) == EOF) { endprn(); } else { lo( c ); if ( c == LF ) { ++GLpline; } if ( GLpline == 55 ) { GLpline = 1; lo( FF ); } } } endprn() { lo( FF); fclose( prnfp ); message( 2, 0, greeting() ); FLprint = 0; } stoupper( string ) char *string; { char *character; character = string; while ( *character ) { *character = toupper( *character ); character++; } return string; } racter = string; while ( *character ) { *character = toupper( *character ); character++; } return ing - send a note!) Ted A. Campbell 7 Winchester Ct. Durham, NC 27707 Voice: 919-493-6523 Email: tcamp@ecsvax t kidd #define VIDEO_RAM 49152 #define VIDEO_ATT 53248 #define SMALL /* for compilation with Small-C */ #ifdef SMALL #define DOS Ubdos #else #define DOS _bdos #define CR 13 #define LF 10 #endif lation with Small-C */ #ifdef SMALL #defi"NҠ|ʠ"Æ>ª>2 x!y*>O" <ھG*|/ GLprnums ) { savewindow( 2, 1, 6+GLprnums, 16, 1, 1 ); return; } if( choice <= GLprnums ) { cpoke( 4+choice, 15, '*' | ATTINV, ATTDIM | ATTUND ); pointer = GLprinter-15+( choice*25); los( pointer ); } } } prntinit() { int pdatfile, counter; char *pointer; if( ( pdatfile = fopen( "XWP.PRN", "r" ) ) == NULL ) { FLprstat = 127; return; } FLprstat = 1; pointer = GLprinter = malloc( 500 ); counter = 0; /* Get printer name */ fscanf( pdatfile, "%s", GLprname ); while( !feof( pdatfile ) ) { fscanf( pdatfile, "%s %s", pointer, pointer+10 ); pointer += 25; ++counter; } GLprnums = counter-1; /* subtract the last (null) line */ } pointer, pointer+10 ); pointer += 25; ++counter; } GLprnums = EDIT COM 9EXCLOCK REL ?EXCLOCKRRSX @MAIN CHR BOXEGE REL H"OXEGE CHR QPAUSE COM WXWP C X ); spoke( HLINE+5, HCOL+2, " THE EXECUTIVE WORKPLACE ", ATTBRT | INVATT); spoke( HLINE+6, HCOL+2, " Version 1.1 ", ATTBRT | INVATT); spoke( HLINE+7, HCOL+2, " Copyright (c) 1987 ", ATTBRT | INVATT); spoke( HLINE+8, HCOL+2, " by Ted A. Campbell ", ATTBRT | INVATT); if ( timeout ) { while ( count < 30000 ) { count++; } } else { wait( 1 ); } savewindow( HLINE, HCOL, HLINE+10, HCOL+29, 1, 0 ); } los( string ) char string[]; { char *pol80 CUmaxright ) { CUcolumn = 0; CUline++; } if( CUline > CUmaxdown ) { CUline = CUmaxdown; } } CUrestore() { adr( CUline, CUcolumn ); } /* DIAL -- Dial a telephone number ** ** FLdial = status of dial initialization: ** 0 = not initialized ** 1 = initialized and ok ** 127 = attempt to initialize failed ** ** GLphone data structure: ** 10 possible fields of: ** 10 bytes identifier string ** 15 bytes phone number ** GLpnums = number of phone numbers found by dailinit() */ dial() { int counter, choice; char *pointer; /* First check FLdial status and initialize if necessary */ if( FLdial == NULL ) { dialinit(); } if( FLdial == 127 ) { error( "XWP.PHN NOT FOUND" ); FLerror = 0; return; } /* Now set up menu areas */ pointer = GLphone; counter = 0; while( counter < GLpnums ) { strcpy( scratch, " " ); strcat( scratch, pointer ); setmenu( counter+1, 13, scratch ); pointer += 25; ++counter; } setmenu( counter+1, 13, " RETURN " ); /* Save the environment */ savewindow( 2, 63, 5+GLpnums, 77, 0, 1 ); /* Draw menu area */ outline( 2, 63, 5+GLpnums, 77, OUTBLK, ATTDIM | ATTALT ); fill( 3, 64, 3, 76, ' ' | ATTINV, ATTDIM | ATTUND ); spoke( 3, 64, " AUTODIALER: ", ATTDIM | ATTUND ); /* accept choice from menu */ choice = menu( 4, 64, 1, GLpnums+1, 13, 1 ); setwindow( 0 ); /* restore environment */ savewindow( 2, 63, 5+GLpnums, 77, 1, 1); /* execute the choice */ if( choice <= GLpnums ) { pointer = GLphone-15; txstring( GLdialpr ); txstring( pointer + ( choice * 25 ) ); tx( CR ); } } dialinit() { int pdatfile, counter; char *pointer; if( ( pdatfile = fopen( "XWP.PHN", "r" ) ) == NULL ) { FLdial = 127; return; } FLdial = 1; pointer = GLphone = malloc( 500 ); counter = 0; /* read dial prefix */ fscanf( pdatfile, "%s", GLdialpr ); while( !feof( pdatfile ) ) { fscanf( pdatfile, "%s %s", pointer, pointer+10 ); pointer += 25; ++counter; } GLpnums = counter-1; /* subtract the last (null) line */ } txstring( string ) char *string; { char *pointer; pointer = string; while( *pointer != NULL ) { tx( *pointer ); ++pointer; } }  *string; { char *pointer; pointer = string; while( *pointer != NULL ) { hoice ) { case 1: FLecho = !FLecho; if( FLecho ) { spoke( 0, 70, " ECHO ON ", ATTDIM | ATTUND ); } else { spoke( 0, 70, " ", ATTDIM | ATTUND ); } break; case 2: FLtret = 1; break; case 3: break; } CUrestore(); defcursor( 3 ); } CUinit() { adr( 0, 0 ); CUline = 0; CUcolumn = 0; } CUout( character ) int character; { if( iscntrl( character )) { switch( character ) { case LF: CUline+/* OXEGE.H ** ** Definitions for OXEGE. */ #define ESC 27 #define FF 12 #define CREADY 1 #define AREADY 255 #define ATTDIM 0 #define ATTBRT 128 #define ATTUND 64 #define ATTBLK 32 #define ATTALT 16 #define ATTINV 128 #define INVATT 1 #define OUTDIM 117 #define OUTBLK 109 #define BLOCK 125 #define BLANK 32 #define FILL4 127 /* Full block for fill */ #define FILL3 (125 | ATTINV) /* 3/4 block for fill */ #define FILL2 126 /* 1/2 block for fill */ #define FILL1 125 /* 1/4 block for fill */ #define DATELOC 63732 #define HOURLOC 63734 #define MINUTELOC 63735 #define SECONDLOC 63736 #define VIDEO_RAM 49152 #define VIDEO_ATT 53248 #define SMALL /* for compilation with Small-C */ #ifdef SMALL #define DOS Ubdos #else #define DOS _bdos #define CR 13 #define LF 10 #endif lation with Small-C */ #ifdef SMALL #defiOXEGE REL H"OXEGE CHR QPAUSE COM WXWP C X ɀ NT mZ~_"k!]~ 39e_!_9e*ks#wZI؇G#Iذ~0? ?  ZZNEUTEXEC Copyright (c) 1986, Walter D. Neumann $LOADED $NOT LOADED. Are you using CP/M Plus? $Wrong parameter format. Format is XXYY where XX and YY are hex bytes for the command characters. The default XXYY = 1111 has been used. $INEUTECH L -3AJNSQU!/IRijlpsxKLYZ  yX !*'|g+"' :$qK:%{:ˆ>2%>“>2$>ž>2G>©> 2G>·>K2:H!A{#>L2 ]:> 2%ɯ2%:ʈ{!^҈)2>!:G^ #=&o:G @))DM) IDM) ) 9 T{UCk{h>2'>2(SDuB~{hXbˆ>BU!=#^ʠ*¥>KUW{³>2H>K2S!+S#%>`:>`&>U/@> 2G>2H>L2S>2$q:!2!"{2&X{2':&2(S:#2#A{2&X{!&<}&))DM) "'>2$ :% Ž:t>2%X{!^ڄ>2%È)")2%͹_*):"2"ʧ{w~w:%=2%*)#"){0  """"8TTTT8`0 ʒ€8D|:8DD8DĪD8>~~>"66"~~8|THHHH~~HHHHT|82zNNz22bb28||88``8DTTTTTDD<$$< 00 @8l(((((**********(((((l8 Rr2 8Ȉt~~~lxR꺒FB~<xR꺲H솂Ⲻx|O†|d`Ȁ,08LƂB~†~ b 􆂂|8r|x 􆂎|>t~Bd撚V\bt~xtB||֒ry}ADY&******* r@>**""2<'4$<#%?0N⢖x<> > ?>8 2"$Lx 0 ??<> >>0 <$$<&<8 <>" ,8  """<#" ! 8< 8$%EGB@8mEEEEEEEEEEEEEEEEm8JJJ***J""""8TT8B>Ң8DD:8DD8DD8~~"66"~8THHH~HHHT8T8T82NN2bb||``DTTTDƪD$$00@(l(((*******(((l( R2 Ȉt~lxRFB0$$&8 <" 4VP@""$ "$8 "$8 <$""# ! 88$%B@8mEEEEEEEEEEm8JJ**J!D$B D! BH$@H !!$!!A! !B! !"DBD! H i d,trkbuf ;(de)=addr of track # buffer mvi c,10 ;get console input buffer call 5 ;bdos call ; convert to binary track number xra a ;clear a sta tracknum ;make sure we start with 0 lxi h,tracknum ;point to binary val for track number lda trkbuf+2 ;get first byte that was input ani 00000011b ;use only last bits jz byte2 ;1st byte was zero call add10 ;add binary ten to trkbuf sui 1 ;subtr 10 from first byte jz byte2 ;first byte was 10 call add10 ;add bin ten to trkbuf sui 1  The NEUTECH characters by keyboard position: ! @ # $ % ^ & * ( ) _ + ! @ # $ % ^ & * ( ) _ + 1 2 3 4 5 6 7 8 9 0 - = 1 2 3 4 5 6 7 8 9 0 - = __________________________________ Q W E R T Y U I O P { } Q W E R T Y U I O P { } q w e r t y u i o p [ ] q w e r t y u i o p [ ] ___________________________________ A S D F G H J K L : " ~ A S D F G H J K L : " ~ a s d f g h j k l ; ' ` a s d f g h j k l ; ' ` ____________________________________ | Z X C V B N M < > ? | Z X C V B N M < > ? \ z x c v b n m , . / \ z x c v b n m , . / ! 1C,22,22,1C,22,22,1C" 38,54,92,FE,92,54,38# FE,42,3E,10,08,04,FE$ 86,8A,96,AA,D2,A2,C2% 38,44,FE,82,8A,44,3A& 38,44,FE,82,82,82,44' 38,44,AA,92,AA,44,38( FC,06,02,02,06,FC,00) 7E,C0,80,80,C0,7E,00* 22,36,1C,1C,36,22,00+ 12,12,12,7E,12,12,12, 00,10,38,54,10,10,10- 48,48,48,7E,48,48,48. 10,10,10,10,10,54,38/ 10,10,54,38,10,54,380 32,4E,84,80,84,4E,321 82,FE,82,80,80,80,C02 06,1A,62,82,62,1A,063 7C,BA,92,92,92,BA,7C4 06,1A,60,80,60,1A,065 EE,44,54,54,54,44,EE6 82,FE,80,80,80,FE,827 82,C6,AA,92,82,82,448 18,24,A5,FF,A5,24,189 30,08,8A,FE,8A,08,30: 00,00,00,7F,80,80,40; 02,01,01,FF,00,00,00< 10,28,6C,AA,28,28,28= 2A,2A,2A,2A,2A,2A,2A> 28,28,28,AA,6C,28,10? 80,FF,80,80,80,FF,80@ 0C,92,52,32,12,0C,00A 06,18,A8,C8,88,FC,8AB 74,82,7E,92,92,92,6CC 78,86,52,AA,92,82,84D 46,84,FE,82,82,42,3CE 78,86,52,BA,A2,A6,A4F 48,E4,82,E2,B2,AC,A0G 7C,82,82,82,94,95,5EH 42,84,F8,10,10,7C,82I 64,92,82,82,BE,C0,80J 60,92,85,85,89,FE,88K 86,FE,20,30,48,84,82L 42,FC,82,82,02,02,04M C0,82,FC,80,FE,80,FEN 60,82,FC,80,80,8C,72O 0A,F4,86,82,82,44,38P 72,81,7F,88,84,84,78Q 0A,F4,86,82,8A,44,3BR 74,82,7E,90,98,A4,42S 64,92,92,8A,92,54,88T 62,94,82,F2,8E,82,82U 84,FC,02,02,04,FE,02V 74,82,7E,02,02,84,78W 70,86,FA,02,FE,02,FCX 42,92,D4,38,54,92,96Y 62,81,79,05,05,41,FEZ 02,44,82,91,91,59,26[ 18,24,42,42,42,42,42\ 00,00,FE,00,FE,00,00] 42,42,42,42,42,24,18^ FE,82,FE,98,94,96,62_ 10,10,10,10,10,10,10` 00,02,01,FF,80,40,00a 1C,32,22,24,1C,22,00b 0F,32,42,92,9C,60,00c 1C,2A,2A,2A,2A,2A,00d 0C,12,72,92,8C,40,00e 14,2A,2A,22,22,10,00f 18,25,06,1C,24,18,00g 13,25,1F,08,10,20,00h 10,1C,62,92,8A,7C,00i 00,3C,02,02,04,00,00j 10,20,1E,20,20,1F,00k 0E,38,08,14,22,22,00l 82,44,28,10,08,06,00m 3F,02,02,3C,02,02,00n 20,3E,04,08,30,00,00o 00,18,24,24,18,00,00p 12,26,38,20,3C,22,00q 0C,34,D5,56,50,40,00r 0F,10,22,22,24,18,00s 0C,12,22,24,38,20,00t 10,22,24,38,20,20,00u 10,3C,02,02,24,18,00v 10,08,04,02,04,08,10w 1C,22,04,0E,22,1C,00x 23,14,08,0C,12,21,00y 20,38,04,FF,04,38,00z 18,24,25,C5,42,40,00{ 38,6D,45,45,45,45,45| 00,00,00,FE,00,00,00} 45,45,45,45,45,6D,38~ 4A,8A,8A,4A,2A,2A,4A! 1C,22,22,14,08,08,14,22,22,1C,00,00" 38,54,54,92,FE,FE,92,54,54,38,00,00# FE,82,82,FE,60,30,18,0C,FE,FE,00,00$ 82,86,8A,92,A6,CA,92,A2,C2,80,00,00% 38,44,82,FE,82,82,8A,C6,7C,3A,00,00& 38,44,82,FE,82,82,82,82,C6,44,00,00' 38,44,C4,AA,92,92,AA,C4,44,38,00,00( F8,FC,06,02,02,02,02,06,FC,F8,00,00) 3E,7E,C0,80,80,80,80,C0,7E,3E,00,00* 00,22,36,1C,08,1C,36,22,00,00,00,00+ 12,12,12,12,7E,7E,12,12,12,12,00,00, 00,10,38,7C,54,10,10,10,10,10,10,10- 48,48,48,48,7E,7E,48,48,48,48,00,00. 10,10,10,10,10,10,10,54,7C,38,10,00/ 83,C7,ED,B9,91,81,81,81,81,C3,C3,000 32,7A,4E,84,80,80,84,4E,7A,32,00,001 82,FE,FE,82,80,80,80,80,C0,00,00,002 06,0E,1A,32,62,C2,62,32,1A,0E,06,003 38,7C,00,BA,92,92,BA,00,7C,38,00,004 06,1E,38,60,C0,60,38,1E,06,00,00,005 EE,44,54,54,54,54,54,44,EE,00,00,006 82,FE,FE,80,80,80,80,FE,FE,82,00,007 82,C6,EE,BA,92,82,82,82,44,00,00,008 18,3C,24,A5,FF,FF,A5,24,3C,18,00,009 20,30,18,8A,FE,FE,8A,18,30,20,00,00: 00,00,00,00,7F,FF,80,80,C0,40,00,00; 02,03,01,01,FF,FE,00,00,00,00,00,00< 10,38,6C,EE,AA,28,28,28,28,28,00,00= 2A,2A,2A,2A,2A,2A,2A,2A,2A,2A,00,00> 28,28,28,28,28,AA,EE,6C,38,10,00,00? 80,FF,FF,80,80,80,80,80,FF,FF,80,00@ 00,0C,9E,92,52,72,32,1E,0C,00,00,00A 06,1E,38,E8,C8,88,FC,FE,82,04,00,00B 12,74,E6,82,7E,7E,92,92,92,7E,6C,00C 78,FC,86,52,EA,BA,92,82,86,84,00,00D 46,84,FE,BA,82,82,42,7E,3C,00,00,00E 78,FC,86,52,EA,BA,B2,A2,A6,A4,00,00F 48,EC,86,82,E2,B2,BA,AE,A4,A0,00,00G 78,7C,82,82,82,94,95,DF,4F,00,00,00H C2,86,FC,F8,10,10,10,7C,FE,82,00,00I 64,96,92,82,82,BE,FC,C0,80,00,00,00J 60,92,87,85,85,89,BF,FE,C8,80,00,00K 84,F2,FE,2C,30,38,4C,C6,82,00,00,00L 42,7E,FC,82,82,02,02,06,04,00,00,00M C2,86,FC,F8,86,FE,F8,80,FC,7E,02,00N 20,E2,86,FC,F8,80,80,9C,FE,62,00,00O 0A,FE,F4,86,82,82,C6,7C,38,00,00,00P 10,72,81,FF,7F,88,84,84,7C,78,00,00Q 0A,FE,F4,86,82,8E,C6,7C,3E,02,00,00R 12,74,82,FE,7E,90,98,AC,E6,42,00,00S 02,64,E6,92,9A,8A,D2,56,5C,88,00,00T 62,96,84,86,B2,FA,8E,82,82,82,00,00U 84,FC,FE,02,02,06,04,FC,FE,06,00,00V 12,74,82,FE,7E,02,02,86,FC,78,00,00W 12,74,8E,FA,F2,02,FE,FE,02,FE,FC,00X 42,92,92,D6,7C,7C,D6,92,92,A6,00,00Y 12,72,E1,81,79,7D,05,05,41,FF,FE,00Z 02,44,C6,83,81,91,91,59,7F,26,00,00[ 18,3C,66,42,42,42,42,42,42,42,00,00\ 00,00,FE,FE,00,00,FE,FE,00,00,00,00] 42,42,42,42,42,42,42,66,3C,18,00,00^ FE,82,82,FE,98,98,94,94,F2,62,00,00_ 10,10,10,10,10,10,10,10,10,10,10,10` 02,03,01,01,7F,FE,80,80,C0,40,00,00a 0C,1C,32,22,26,1C,3C,22,02,00,00,00b 0F,3C,72,42,92,92,9E,EC,60,00,00,00c 1C,3E,2A,2A,2A,2A,2A,2A,2A,00,00,00d 0C,0E,12,12,72,F2,9E,8C,40,00,00,00e 14,3E,2A,2A,22,22,32,10,00,00,00,00f 18,3C,27,0E,1C,34,24,3C,18,00,00,00g 18,10,23,25,3F,1E,08,18,30,00,00,00h 08,10,1C,4E,E2,A2,96,FC,78,08,00,00i 00,00,3C,3E,02,02,04,00,00,00,00,00j 10,20,3E,1E,00,20,20,3F,1F,00,00,00k 0E,3E,38,0C,14,32,22,24,00,00,00,00l 82,86,4C,78,20,30,18,0C,06,02,00,00m 3F,3F,02,02,02,3C,3E,02,06,04,00,00n 20,3E,3E,04,04,08,18,30,20,00,00,00o 00,00,18,3C,24,24,3C,18,00,00,00,00p 12,26,3C,38,20,20,3C,3E,22,20,00,00q 00,0C,3C,F4,D5,56,52,40,00,00,00,00r 07,0F,1C,32,22,22,26,3C,18,00,00,00s 0C,1C,12,22,22,26,3C,38,20,20,00,00t 10,30,22,26,3C,38,20,20,20,20,00,00u 10,20,3C,3E,02,02,06,2C,38,10,00,00v 00,10,18,0C,06,06,0C,18,10,00,00,00w 1C,1C,22,22,04,0E,02,22,3C,1C,00,00x 23,22,14,1C,0C,0A,12,11,21,20,00,00y 20,38,3C,04,0F,FF,F4,04,0C,38,00,00z 18,1C,24,25,C5,45,47,42,40,00,00,00{ 38,6D,45,45,45,45,45,45,45,45,00,00| 00,00,00,00,FE,FE,00,00,00,00,00,00} 45,45,45,45,45,45,45,45,6D,38,00,00~ 4A,8A,8A,8A,4A,4A,2A,2A,2A,4A,00,00 N E U T E X E C Technical character generator for CP/M PLUS and Epson-compatible dot-matrix printers Version 1.0 USER MANUAL (C) Copyright Walter D. Neumann, 1986 All rights reserved Walter D. Neumann 1F Southway Greenbelt MD 20770 (301) 345-7017 USER SUPPORTED SOFTWARE: SUGGESTED CONTRIBUTION $20 SEE APPENDIX FOR DETAILS NEUTEXEC USER GUIDE Page 1 1. General description of the program. NEUTEXEC is also available for IBM PC compatible computers under the name NEUTECH. NEUTEXEC is a memory-resident technical character generator for CP/M Plus computers and for Epson printers or compatible equipment (IBM Graphics printer etc.). It is designed to be invisible to applications that do not specifically try to use it. Its effect is to add a set of technical or other user-defined symbols to the set of fonts of your printer and to make them easily accessible to application programs (word-processors, etc.) which do wish to use them. Individual characters or complete character sets can also be "downloaded" to the program from the document being printed or from the operating system. The built-in character set consists of a Greek alphabet plus a set of Gothic capitals plus a set of mathematical symbols, each one in a regular (pica) size and in a compressed size. This character set can be replaced (in whole or part) by the user. NEUTEXEC keeps track of whether the printer is printing in compressed and/or wide mode and adjusts its characters accordingly. Several copies of NEUTEXEC with different symbol sets can be loaded and accessed at once. Each copy takes up about 3K of memory.  The NEUTEXEC character set can be printed for reference by installing NEUTEXEC and printing the file NEUCHARS.DOC. NEUTEXEC works by watching the character stream sent to the printer for its own one-character "attention command." When it sees its attention command, it replaces the next character sent to the printer by the corresponding character from an internal alphabet, using graphics mode. A secondary one-character command is used to initiate downloading a character to NEUTEXEC. The attention command and secondary command both default to ^Q ("control-Q" or ASCII 11h) but can be changed by the user (see section 2; this is necessary for using multiple copies of NEUTEXEC or using it with programs that cannot send a "^Q" to the printer). Thus, using the defaults, "^Qa" would print the NEUTEXEC character corresponding to "a" (a greek "alpha") and "^Q^Qa" initiates downloading a new character to NEUTEXEC to be printed by "^Qa". NEUTEXEC must keep track of all printer commands being sent, since if the NEUTEXEC attention command occurs as part of an Epson printer command, it must be ignored by NEUTEXEC. For this reason the program is relatively printer-specific. It is designed to work with any printer that uses the Epson FX80 printer protocol or a subset of it (e.g. earlier Epson printers, the IBM graphics printer, Centronics GLP, and many others). NEUTEXEC will work with any printer that uses Epson graphics commands, so long as the software never uses a non-FX printer command containing a NEUTEXEC command character. In the following, "^a" and "^s" will denote the NEUTEXEC attention command character and secondary command character respectively. As already described, the default is ^a = ^s = ^Q (ASCII 11h). NEUTEXEC USER GUIDE Page 2 2. Loading and unloading the program. NEUTEXEC is loaded into memory by running the program NEUTEXEC.EXE (enter "NEUTEXEC" at the CP/M command prompt, or include it in your PROFILE.SUB file). Once loaded, it remains resident in memory, taking about 3K of memory space and can be unloaded only by rebooting. The two NEUTEXEC command characters can be set to other values than the default by adding a parameter on the command line when loading NEUTEXEC . The format is "NEUTEXEC XXYY" where: XX is the hex representation of the NEUTEXEC "attention character" ^a (default is XX = 11); YY is the hex representation of the NEUTEXEC "secondary command character" ^s (default is YY = 11). NEUTEXEC will accept ANY value of XX and YY for ^a and ^s; if ^a is also a printer command it will then always be intercepted by NEUTEXEC and will be unavailable to the printer, so changes to the default should be chosen with care (see Section 7). 3. Accessing NEUTEXEC. Once NEUTEXEC is loaded, printing "^ax" will print the current NEUTEXEC character corresponding to "x". Here "x" represents any printable character other than , ^a, or ^s. (If neither ^a or ^s has been installed to a printable character, then only is excluded). The character printed by "^ax" will be compressed and/or wide according as the the printer is in compressed and/or wide mode. (At present NEUTEXEC only changes character width on seeing one of the width-change commands that is common to all Epson printers, namely one of the 1-character commands or the W commands. Most software uses only these, to ensure compatibility. The FX and later printers have an additional command which should be used only if constant NEUTEXEC character width is desired). Printing "^a^sx" followed by a sequence of 12 hex bytes (7 bytes in compressed mode) will download the character represented by this byte- sequence to the NEUTEXEC character corresponding to "x"; see Section 4 for details. Again, "x" should be a printable character other than a space, ^a, or ^s. NEUTEXEC USER GUIDE Page 3 4. Downloading to Neutech Printing "^a^sx" followed by a sequence of 12 hex bytes will send nothing to the printer but will download the character represented by this sequence to the NEUTEXEC character corresponding to "x". For example, when using the defaults ^a = ^Q and ^s = ^Q, then printing "^Q^Q/,FF,81,02,04,08,10,08,04,02,81,FF,00" would download an extra-large "W" to the NEUTEXEC character corresponding to "/". Characters other than 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F are ignored until all 12 hex bytes have been received, so puncuation and comments can be included for clarity. Thus the following download commands have the same effect as the above example: "^Q^Q/FF810204081008040281FF00" "^Q^Q/: large W FF810204081008040281FF00" . If NEUTEXEC is in compressed mode, then the character being downloaded will be sent to NEUTEXEC's compressed symbol set, so only 7 hex bytes should be included in the command. See your printer manual for an explanation of how a sequence of bytes is interpreted as a sequence of vertical columns of eight dot positions each to form a character. 5. Installing user fonts. A file of "^a^sx" download commands can be printed at any time to change NEUTEXEC's character set. For example, a command PIP LST:= can be included in a PROFILE.SUB file to change NEUTEXEC's default set on start-up. Two files, "NEUCHREG.QQ" and "NEUCHCMP.QQ," which can be printed to restore the regular and compressed default character sets in a default installation of NEUTEXEC, are included and can be edited as desired. They can also be combined into one file which restores both character sets at once. 6. Using multiple copies of NEUTEXEC. Several copies of NEUTEXEC can be loaded and used simultaneously with one printer by defining different attention characters for each of them. Each can be loaded with a different symbol set as described in Section 5. Two (or more) copies of NEUTEXEC can also share the SAME attention character if the secondary command ^s is NOT equal to ^a. In this case, the copy loaded last acts as usual, but printing "^a^a" sends a single "^a" to the previously installed NEUTEXEC which will therefore act as if "^a^a" is its attention command (if there are three copies then the first loaded one would have attention command "^a^a^a^a", and so on). NEUTEXEC USER GUIDE Page 4 This technique is particularly useful if NEUTEXEC is to be used with a word-processor or other user program which limits the number of different non-printable characters that can be embedded in text to be printed. A typical installation of two copies of NEUTEXEC might use ^a = ^Q and ^s = | (ASCII 7Ch) in both. Then the character corresponding to "|" is unavailable in both copies of NEUTEXEC, but the only non-printing symbol that need be sent by user software is "^Q". If user software cannot send any non-printing symbols, one might replace "^Q" by "\" (ASCII 5Ch) in this installation. 7. Recommended installation. It is recommended that the default installation be used unless there is good reason to do otherwise. As already pointed out, installing a value for ^a which is a printer command (e.g. ^a = = 1Bh, ^a = = 0Fh, etc.) will cause problems. Choosing a printable value for ^a is necessary if your software cannot send non-printing characters in text, but it disables the corresponding NEUTEXEC character (the character ^a itself can still be sent to the printer by using "^a^a", unless ^a = ^s). If only one copy of NEUTEXEC is used at once, then any choice of ^s is safe, but choosing a printable value for ^s disables the corresponding NEUTEXEC character. If more than one copy of NEUTEXEC will be used at once, then ^s should NOT be a printer command since this would confuse the subsequently installed copies of NEUTEXEC. The default ^Q for ^a was chosen for two reasons: (i) ^Q is the first of the Wordstar "user commands" and thus gives particularly easy compatibility with Wordstar. Install the ^Q user command (USER1) in Wordstar to send a ^Q to the printer. ASCII files containing ^Q commands will then be compatible between Wordstar and other print utilities (e.g. "PIP LST:="). Wordstar counts ^Q as being of zero length, so line-length count and formatting by Wordstar remains correct. (ii) ^Q IS in fact a printer command on later Epson printers than the MX -- it is the "Printer enable" command. Since there is no reason ever to DISable the printer, this command is never needed and never used by standard software. Since it is unlikely to be used for other purposes in future printer upgrades, future compatibility is probable. Currently unused characters such as ASCII 00h to 06h and 15h to 19h are also possible choices for ^a but have less certain future compatibility. 8. Using NEUTEXEC with Wordstar. I originally wrote NEUTEXEC for my own use with Wordstar. I was encouraged by friends who found it useful to distribute it more widely. The following is the installation of Wordstar which I use with NEUTEXEC and an Epson MX80 or a Centronics GLP. This installation may be done from the standard menus in Micropro's installation program Winstall which comes with Wordstar. A simpler installation, if your printer allows it, is to install Wordstar to use reverse and forward half line feeds to enable sub- and superscripting. NEUTEXEC USER GUIDE Page 5 I install user key ^Q to send a ^Q (ASCII 11 hex or 17 decimal), the user characters ^W to do "wide print to end of line" (ASCII 0Eh), ^E as Escape (1Bh), ^R as 00h. I install the width commands ^A and ^N to start and end compressed mode (0Fh and 12h) and the ribbon color toggle ^Y to start and end italics (1Bh,04h and 1Bh,05h respectively). Finally, Wordstar's sub- and super-scripts are enabled by installing half line feed as 0Dh,0Ah and full line feed as 0Dh,0Ah,0Dh,0Ah and installing the printer initialisation sequence of 1Bh,41h,06h to set half line feed at 1/12 inches. A termination sequence of 1Bh,40h should then be installed to reset the printer after use. I double space normal text and use single spacing for special effects. This installation permits sending most Epson commands to the printer. The one I use most often is ^EE to start emphasized print. Line height can be changed to some extent using ^E3-commands; for example, with the above installation of ^A and ^N, printing "^A^E3^N^A^N" returns to the default line height of 1/12 inch per half line (the extra ^A's and ^N are needed to make sure Wordstar sends  the "^N" after the "3"; Wordstar is smart enough not to act on a normal width command "^N" if it thinks it is not in alternate width). Epson's built in sub- and super-scripts have vertical alignment problems on early Epson printers and are superfluous with this set-up, though they are available for use if desired (e.g. ^ES^R for subscripts). Wordstar is clever at knowing how to handle control characters in conjunction with sub- and super-scripting but it has trouble with backspacing at the same time. This is not often a problem, but it will surface if you want simultaneous sub- and super-scripts using special characters (e.g. to create a large integral sign using the NEUTEXEC characters for ;, |, and :). However, it can be avoided in several ways, for instance by installing "overprinting" in the installation menu to use backspacing (08h -- not available on the IBM graphics printer). Wordstar then uses backspacing also for underlining and boldface, which is a bit slow, but no matter. The Epson MX has a bug: it cannot backspace back over anything printed in graphics mode. Again rarely a problem, and usually avoidable by interchanging the order of characters being overprinted. This bug appears to be fixed in later printers. If you have modified Wordstar with ANYCHAR -- a modification to allow sending any code to the printer, then ^R must be set to send FFh. 9. Error handling. NEUTEXEC makes certain assumptions to recover from user errors: if "^a" or "^a^s" precedes a non-printing character, then the "^a" or "^a^s" is ignored; the same is true if "^a" or "^a^s" precedes a "^a" (unless ^a = ^s). If NEUTEXEC appears to behave erratically, check the file that you are printing: the most common cause is an accidental "^a^sx", making NEUTEXEC swallow everything until the download it thinks you wanted is completed. For example, editing in Wordstar with control-character display off can put control characters in unusual places: make sure control-character display is on if you are inserting or deleting text or doing a search-and-replace. NEUTEXEC USER GUIDE Page 6 10. Incompatibilities. Some Epson printers with NLQ capability seem unable to correctly mix NLQ printing and graphics on one line. Since NEUTEXEC prints in graphics mode, NEUTEXEC characters cannot mix with NLQ mode in such cases. The Centronics GLP does not have this problem. If a memory-resident print spooler is used, it should be loaded after NEUTEXEC. This is for two reasons: it optimizes use of the spooler's buffer, and some spoolers will not work correctly if any other memory resident program which captures the printer interrupt is loaded over them. No incompatibility of NEUTEXEC with other software is known to date; if you find any, please inform me, and I will try to fix it. However, programs such as Microsoft Basic (CP/M version), which do not use standard operating system calls to access the printer, will bypass NEUTEXEC. 11. Design considerations. NEUTEXEC is designed for printing occasional special characters in regular text. It puts the printer into graphics mode for each such character. If several special characters occur in sequence, this is much slower than if NEUTEXEC buffered them and then printed them all at once in graphics mode. A buffered version will be made available if there is sufficient demand. NEUTEXEC intentionally does not use the download capability of the FX and other Epson printers. Such use would make NEUTEXEC incompatible with other programs which simultaniously use this feature. Moreover, downloaded characters have marginally lower quality than NEUTEXEC characters, since they may not have adjacent horizontal dots, and they are lost if the printer is turned off. NEUTEXEC USER GUIDE Page 7 APPENDIX: USER SUPPORTED SOFTWARE Permission to copy: Individuals may copy this software and documentation for their own use or to share with others, so long as no price is charged. Computer clubs and other non-profit organizations may copy this software and documentation and share it with their members so long the software and documentation are distributed unmodified and together, no price is charged other than cost of distribution, and members are encouraged to support the user-supported concept with their donations. If you find this program useful you are encouraged to make a $20 contribution. You will thereby become a registered user. This will entitle you to notice of updates and other information. Moreover, if enough users contribute useful NEUTEXEC character sets, I will distribute them to registered users for a small charge to cover materials, handling, and modest honorariums to the contributors. If you send a charact!er set, please do so in the format of the files NEUCHREG.QQ and NEUCHCMP.QQ and include a printout of the file NEUCHARS.DOC with your characters installed. Disclaimer: In no event will the author be liable to you for any damages of any kind arising out of the use or inability to use this program. The original version of NEUTEXEC is a MS-DOS program called NEUTECH designed for the IBM PC and compatibles. It is available on request. Walter Neumann January, 1986 1F Southway Greenbelt, MD 20770 (301) 345-7017 XWP DOC !RXWP PHN 6XWP PRN 7XWP USR 8EDIT COM 9EXCLOCK REL ?EXCLOCKRRSX @MAIN CHR BOXEGE REL H"OXEGE CHR QPAUSE COM WXWP C X To print the NEUTECH manual, ready your printer and then enter: PIP LST:=NEUTECH.DOC 000006C6C6C000000000000FFFFFFFFFFFF90 :100230000024247E247E24240000FFFFFFFFFFFF14 :1002400000183E583C1A7C180000FFFFFFFFFFFF1C :100250000066660C183066660000FFFFFFFFFFFFB8 :1002600000386C6C386D673E0300FFFFFFFFFFFF37 :1002700000181830000000000000FFFFFFFFFFFF24 :1002800000183060606030180000FFFFFFFFFFFFC4 :1002900000180C0606060C180000FFFFFFFFFFFF0A :1002A00000185A3C183C5A180000FFFFFFFFFFFFE0 :1002B000000018187E1818000000FFFFFFFFFFFF66 :1002C00000000000000018183040FFFFFFFFFFFF94 :1002D000000000007E7E00 >ͤT 2X!X:V9͵9͵9͵:W2X>'FT 2Üͤͤ:X ͮ>ͮq>|!`Ҝ҈ w# xˆ x§°W 4x¸z Place disk to be read into drive B and then enter the two-digit (dec) track number to be read, then . $ Track number error -- Sorry! $F27 :10039000003C66663E060C780000FFFFFFFFFFFF93 :1003A00000001818000018180000FFFFFFFFFFFFF3 :1003B00000001818000018183040FFFFFFFFFFFF73 :1003C000000C18306030180C0000FFFFFFFFFFFF2B :1003D0000000007E007E00000000FFFFFFFFFFFF27 :1003E000E6E6E6E6E6E6E6E6E6E6FFFFFFFFFFFF17 :1003F00067676767676767676767FFFFFFFFFFFFFD :1004000030303030303F1F000000FFFFFFFFFFFFA4 :100410001C1C1C1C1CFCF8000000FFFFFFFFFFFF62 :1004200000000000000003000000FFFFFFFFFFFFCF :10043000E0E0E0E0E0E0F8000000FFFFFFFFFFFF8A :100440003F3; EXRDTRAK.ASM ; Assemble this program using MAC with the Osborne ; Executive and load it using HEXCOM. Use it with SID ; to read all the information on a floppy disk track. ; See documentation for further details. ; Paul Woodie ; Woodie.CPE at dockmaster.arpa ; (301) 859-6044 day ; (301) 974-0650 eve org 100h mvi c,9 ;print msg lxi d,msg ;point to msg call 5 ;call bdos mvi a,0d0h ;force interrupt out 8 ;send to fdc call loopl ;long delay lxi d,trkbuf ;(de)=addr of track # buffer mvi c,10 ;get console input buffer call 5 ;bdos call ; convert to binary track number xra a ;clear a sta tracknum ;make sure we start with 0 lxi h,tracknum ;point to binary val for track number lda trkbuf+2 ;get first byte that was input ani 00000011b ;use only last bits jz byte2 ;1st byte was zero call add10 ;add binary ten to trkbuf sui 1 ;subtr 10 from first byte jz byte2 ;first byte was 10 call add10 ;add bin ten to trkbuf sui 1  ;subtr 10 from first byte jz byte2 ;1st byte was 20 call add10 ;add bin 10 to trkbuf ;now we've done first (tens) byte, now do units byte byte2: lda trkbuf+3 ;get 2nd byte that was input ani 00001111b ;use only lower nibble add m ;add trkbuf to reg a sta tracknum ;put back in tracknum mvi a,39 ;ensure that trkbuf < 40 mov b,m ;get trkbuf cmp b ;compare reg b with reg a jnc cont ;ok, continue mvi c,9 ;write error msg lxi d,error call 5 ;write error msg jmp fini ;end program cont: in 2 ;get pia status ani 11111001b ;set drive bits to zero ori 00000010b ;turn on drive b out 2 ;send to pia to turn drive on call loopl ;long delay call loopl ;another delay (approx .4 sec) lda tracknum ;load binary for desired trk num out 0bh ;send to fdc track reg call loops ;short delay mvi a,1bh ;seek command out 8 ;send to fdc call loops ;short delay loop test: in 8 ;is seek command finished? rar jc test ;loop to test if not finished di ;dis"able interrupts mvi a,0e0h ;read track command out 8 ;send to fdc t3: in 8 ;get status rar jnc t3 ;wait until fdc says it's busy lxi b,0ffffh ;set up counter for # bytes to record lxi h,6000h ;place to put bytes t2: in 8 ;get fdc status rar jnc fini ;is command finished yet? rar jnc t2 ;is a byte ready? in 0bh ;yes, get it! mov m,a ;put byte in memory inx h dcx b mov a,b ora c jnz t2 ;test again for command complete fini: in 2 ;get pia status ori 00000110b ;set drive bits to 1 (off) out 2 ;send to pia to turn drive off ei ;enable interrupts rst 7 ;return to sid ; long delay loop loopl: lxi b,0ffffh ;loop count bb: dcx b mov a,b ora c jnz bb ret ; short delay loop loops: mvi b,7 lp1: dcr b jnz lp1 ret add10: mov d,a ;store a temporarily mvi b,10 ;number to add add10a: inr m ;increment trkbuf dcr b mov a,b jnz add10a mov a,d ;get back a reg ret ; msg: db 1bh,1ah,0ah,0ah,0ah db 'Place disk to be read into drive B and then enter',0dh,0ah db 'the two-digit (dec) track number to be read, then .' db 0dh,0ah,'$' error: db 0ah,0ah,0ah,'Track number error -- Sorry!',0dh,0ah,'$' trkbuf: db 2h,0h ds 2 tracknum: db 0 end EDIT COM 9EXCLOCK REL ?EXCLOCKRRSX @MAIN CHR BOXEGE REL H"OXEGE CHR QPAUSE COM WXWP C X 2Y# Ld-0%H)q:c4H)f,hhq hhhq,!hh1,hi)i1hi(hj )ʑ@ j hP)ȪJPɨp jIӀQL4E( 9QJDEFCURMc!|f Y!D@ Gm`\.V(D@ Gm"`D |f bGh !|f  r,QO"p>krB#e>kh(QP hhh1 5hʈQjȈjQ`[jHꑔp 8QL45 EXRDTRAK.ASM (OSBORNE EXECUTIVE) Paul Woodie (Woodie.CPE at dockmaster.arpa) March, 1986 Th followin assembl languag progra fo th Osborn Executiv ca b used i conjunctio wit SID t rea AL o th informatio o an trac o standar 40-trac flopp dis whic use th sam typ o Flopp Dis Controlle tha th Executiv doe (i.e. WD179 Flopp Dis Contro Chip) Tha include BOT dat an formattin information Fo example th standar Executiv flopp i singl side doubl density containin 1024-byt dat sector pe track I addition i als contain quit fe mor byte fo formattin information This program reads both the data AND the formatting information. T us this yo shoul b somewha familia wit SID th Symboli Instructio Debugge tha come wit th Executive Th EXRDTRAK progra i ru fro withi SI becaus i i mos usefu tha way althoug ther i n reaso tha i coul no b ru directly from CP/M. To use, follow the instructions below. CAUTION MAK BACKU COPIE O AL DISK THA YO WIL B USING UNTIL YOU ARE SURE THAT THE PROGRAM WORKS CORRECTLY. 1 Ge th EXRDTRAK.AS progra an compil i wit MA (o ASM) whic generate 'HEX file. 2 Conver thi fil t 'com file prefe t nam i EXRDTRAK.OB instea o EXRDTRAK.CO s won' b tempte t ru i fro CP/M. 3. Issue the following command from CP/M: sid exrdtrak.obj Thi wil loa si an th exrdtra program read t run. 4 Onc si i ready i wil issu th '# prompt Issu the following command to sid: g100 Thi wil ru th exrdtrak program includin th promp fo yo t selec th desire trac o th flopp dis i driv t b read Afte th trac ha bee read yo wil b returne t sid wher yo ca the examin AL o th dat jus rea fro th selecte trac (startin a 6000 i memory). EDIT COM 9EXCLOCK REL ?EXCLOCKRRSX @MAIN CHR BOXEGE REL H"OXEGE CHR QPAUSE COM WXWP C X 0088228822882288228822FFFFFFFFFFFFCD :1007E000AA55AA55AA55AA55AA55FFFFFFFFFFFF14 :1007F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0602 :00000000 ; char *pointer; if( ( pdatfile = fopen( "XWP.PRN", "r" ) ) == NULL ) { FLprstat = 127; return; } FLprstat = 1; pointer = GLprinter = malloc( 500 ); counter = 0; /* Get printer name */ fscanf( pdatfile, "%s", GLprname ); while( # This is the release date of the disk. PAUSE COM WXWP C X XWPCAL C \XWPCLK C ^ XWPDATA C bXWPFILESC cXWPHELP C e XWPLINK SUB iXWPMENU C jXWPMSG C nXWPTERM C pOXEGE H uNEUTEXECCOM vNEUCHARSDOC zEXCLOCKR.RSX AF 78 1280 10 MAIN .CHR 33 AC 5888 46 OXEGE .REL 60 54 8704 68 OXEGE .CHR D0 90 5888 46 PAUSE .COM A3 42 128 1 XWP .C 41 C8 3328 26 XWPCAL .C 87 85 1920 15 XWPCLK .C 33 9C 3200 25 XWPDATA .C A9 3A 640 5 XWPFILES.C 23 6C 1536 12 XWPHELP .C 12 6B 3328 26 XWPLINK .SUB 1E 1E 256 2 XWPMENU  Fog Library Disk FOG-CPM.181 Copyright (1987) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Executive WorkPlace and ExecReadTrack are Osborne Executive specific programs. Neutexec will run on most CPM+ systems. Filename Description -09-13 .87 This is the release date of the disk. -CPM181 .DOC This is the description of the disk contents. XWP .COM B014 28K ver. 1.1 [ExecutiveWorkplace 1 of 25] A graphics environment similar to Framework on MS-DOS computers. Uses the Osborne Executive alternate character set to produce amazing graphics on screen. Integrates your standard utilities into menu selections on screen. READ .ME 3F16 1K ver. 1.1 [ExecutiveWorkPlace 2 of 25] XWP .CFG 9042 1K ver. 1.1 [ExecutiveWorkPlace 3 of 25] XWP .DOC B527 21K ver. 1.1 [ExecutiveWorkPlace 4 of 25] XWP .PHN 2530 1K ver. 1.1 [ExecutiveWorkPlace 5 of 25] XWP .PRN 0CE0 1K ver. 1.1 [ExecutiveWorkPlace 6 of 25] XWP .USR 7447 1K ver. 1.1 [ExecutiveWorkPlace 7 of 25] EDIT .COM 021B 6K ver. 1.1 [ExecutiveWorkPlace 8 of 25] EXCLOCK .REL C605 1K ver. 1.1 [ExecutiveWorkPlace 9 of 25] EXCLOCKR.RSX AF78 2K ver. 1.1 [ExecutiveWorkPlace 10 of 25] MAIN .CHR 33AC 6K ver. 1.1 [ExecutiveWorkPlace 11 of 25] OXEGE .REL 6054 9K ver. 1.1 [ExecutiveWorkPlace 12 of 25] OXEGE .CHR D090 6K ver. 1.1 [ExecutiveWorkPlace 13 of 25] PAUSE .COM A342 1K ver. 1.1 [ExecutiveWorkPlace 14 of 25] XWP .C 41C8 4K ver. 1.1 [ExecutiveWorkPlace 15 of 25] XWPCAL .C 8785 2K ver. 1.1 [ExecutiveWorkPlace 16 of 25] XWPCLK .C 339C 4K ver. 1.1 [ExecutiveWorkPlace 17 of 25] XWPDATA .C A93A 1K ver. 1.1 [ExecutiveWorkPlace 18 of 25] XWPFILES.C 236C 2K ver. 1.1 [ExecutiveWorkPlace 19 of 25] XWPHELP .C 126B 4K ver. 1.1 [ExecutiveWorkplace 20 of 25] XWPLINK .SUB 1E1E 1K ver. 1.1 [ExecutiveWorkplace 21 of 25] XWPMENU .C 046A 4K ver. 1.1 [ExecutiveWorkplace 22 of 25] XWPMSG .C 95FC 2K ver. 1.1 [ExecutiveWorkplace 23 of 25] XWPTERM .C 66E3 5K ver. 1.1 [ExecutiveWorkplace 24 of 25] OXEGE .H A23A 1K ver. 1.1 [ExecutiveWorkplace 25 of 25] NEUTEXEC.COM FDA4 4K ver. 1.0 [NEUTEXEC 1 of 6] A memory resident technical character generator for CPM+ computers and for Epson or compatible dot matrix printers. It contains a Greek alphabet, a set of Gothic capitals, and a set of mathematical symbols in both pica and compressed size. The character set can be replaced in whole or in part by the user. It allows you to create custom characters and print them by using a special "attention" character. NEUCHARS.DOC 5B0B 2K ver. 1.0 [NEUTEXEC 2 of 6] NEUCHCMP.QQ 0458 3K ver. 1.0 [NEUTEXEC 3 of 6] NEUCHREG.QQ 145B 5K ver. 1.0 [NEUTEXEC 4 of 6] NEUTEXEC.DOC E013 19K ver. 1.0 [NEUTEXEC 5 of 6] NTREADME. 5822 1K ver. 1.0 [NEUTEXEC 6 of 6] EXRDTRAK.OBJ 7080 1K [Exec Read Track 1 of 3] Us$e this with SID on and Osborne Executive to read any single sided disk (including foreign formats). ASM source is included. EXRDTRAK.ASM 7B7C 4K [Exec Read Track 2 of 3] EXRDTRAK.WS 1A25 3K [Exec Read Track 3 of 3] C 4 of 6] NEUTEXEC.DOC E013 19K ver. 1.0 [NEUTEXEC 5 of 6] NTREADME. 5822 1K ver. 1.0 [NEUTEXEC 6 of 6] EXRDTRAK.OBJ 7080 1K [Exec Read Track 1 of 3] Us%&'