IMD 1.16: 28/05/2007 16:27:44 -FOG/UTL010   åååååååååå  åååååååååå  åååååååååå  -FOG/UTL010OTERM COMROTERM DOCX OTERM LTRUNSPOL30DOCFUNSPOL30ASM !"#CV ASM@$%&'UNSPOL30COM (åCV COM)CV DOC*DISK DOC +ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÃgOTERM -- Terminal Emulator Copyright 1981, 1982 Michael M Rubenstein Version 2.20 11 Mar 82 í{Ík:lï2#:%2lï:2$æÃö2!9í[×(·íRðDMÍ "="8 +"?Í "ë!? í°—2!2:2“:Áï2":/O.<ÍõÝ*×͸Í"ÍdÍdÍdÍ^Íüøõ:gñéþÂmåÍ^þ ÈGþ?   Í÷ ÉÍÎ(þB DÍ^þ Èþ?  Í÷ îÍÎ(þQ(%þW(!þC(þD(þE ×*="8—2:>ÿ2<É—2<ÉÖQ2;ÉþC MÍ^þ Èþ? × Í÷ îÍÎ(þC("þF(þL( þM(þW(þX(þB(þD ËÖB2(ÉÖF2&ÉÖM2-ÉÖX2)ÉþD lÍ^þ Èþ? Í÷ îÍÎ(!ÿÿþB(4,þC(/!ÿþL((,þN(#þP(#þQ((þS('þT(#þW(%þX(!͵(8¶Ö02  7É"3ÉÍ^ö€22É—ùÖT21ÉÖW25ÉþF ,Í^þ Èþ? ‘Í÷ îÍÎ(þH(þL(þM ßÖL20É—2“ÉþL =ÅÍ^Áþ Èþ?(þ (͵(8ëÖ0Ox‡‡€‡�Gß+Í÷ Õx·Èþ�8>€2lï2%ÉþMÂ*Í^þ Èþ? ¢Í÷ îÍÎ(þ1(8þ2(4þ7(Cþ8(?þE(FþN(FþO(FþR(KþS(GþL(RþM(NþF(þG(þH ³2'É/æO:/æü±O2/.<ÃõæO:/ÿ:7!5N·(‡ÆGÅÍÜÁ>ÿ26Í68Å͹ÁÈÈ Èí(éçÉÅÍÜÁÐ!6:iï¾w(ð7É>>!”N6ÅÍmÁy2”ÉÍÜÍh·Àö:“·ÊÏ͹*‘|µ :1·( ÍHÍ õÍLñÍ ͨþ À:0· Õ> É>Í!+"‘Ý!•ÍÀ82”ÉÍÏþÀ—2“ÉÍ}—2“2”É.Íõ>È. ÃõÍOØ_—2”:'þG{ÊmÕÍ@ ÑC:<·ÈÕí[8*?æïë :/æóÚÖR/æO:/æ¿ËÖM2.ÉþQÊ7þSÂWýÍ÷ >42lï‘ ͸:'o ÖF( =(#Í /Í:%o&ÍšÍ 9ÍE:-Í' N:(Í' Í ÍV:&Í' Í Í^:)Í' Í hÍE:.Í'  tÍ:/õæ@z €͸Í Í †ÍñõæöÿíR0í[=Ÿ2:xíS8Ñ:;·È,-À%À—2“Õ:1·ÄHÅÍò >ÍÁòÑ·É{þ :-·Êî Íò  Ãî þ :&·Êî Ãî þ :(·Êî ÕÍî  Íî Ñs:)·(m*Zï{þ (þ }æ \!,~sþ Èþ ÐS:,þ!0"*C}æ >:,þ!87**|·(0}æ(+G+~þ!8ø+#:lïG•æ(¸(ÕG^6 ÅåÍò áÁ#óÑ—2+!,sÃÕÍÿ Ñ>Æ7OÍ´Í ŒÍñõæ =( ”=(™ÍÍ Í �Íñæ§ £ÍÍ ¬Í¸:0Í' Í  ÂÍ:5·( ÍÏ:4Í' É:3Í' Í ÍÕ͸:2·(æ&oþ 0Æ@g.^"ååÍà:1Í' Í Í çÍ:7ö0OÍ´Í42lïÕ‘ Ý*×͸Ñ͸Ž Í¸:%2lïÉ‹ ͸Éõ Íñ·ÂÃ:*É )Write file name? )Read file name (* to continue)? Log written ()Cannot openOTERM COMMANDS b -- log commands c -- console mode commands d -- delay mode commands f - î:<Í' ó:;Í' Í Í ùÍ*?í[=·íR#å::· *8·íRÍš͸áÍšÍ Í Ã þRÊuþW(cþZxÂmÃ@ ” Ý*×͸Z Ý*×͸ èÝ*ÕÍÄ—2“þ*(þ!8}!"‘Ý!•Í}Í&8ÀÍÖ8¹>ÿ2“]” Ý*×͸C Ý*×͸ èÝ*ÕÍÄÝ!AÍ&8Ö(1ͼ)ÍÖ8Êí[=::·(í[8Í!- file processing commands l -- set line size m -- transmit mode commands q -- return to CP/M r -- read file s -- display status w -- write log to disk z -- local clear screen ? -- display this message space to cancel. Any other charact(OÍ´0õÍ}€ Ý*×͸Ž Ý*×͸É*?·íR0í[=*8·íRÈÉ:"O.<Íõ:#2lï:$2Ã�!!~6· í[.6Íõæ7È.ÍõæÉ_Õí[.6ÍõæÑ ÕÍOÑ8êö€2!{þ :.·(Í™ :'þF( ÕÄ@ ÑÕÍóÑÕK.ÍõÑ:”·È:.·> (> » 5:2·(æõÍÜ0͹ öñÉñ» ïÉ:3·(Í:'þFÀ:-·À:.·À :4·Èer is transmitted. OTERM LOG COMMANDS c -- clear & enable log d -- disable log e -- enable log q -- no warn when log full w -- warn when log full space to cancel Any other character is ignored. OTERM CONSOLE MODE COMMANDS b -- no de  lete char on backspace c -- set clear on ff mode d -- delete char on backspace f -- reset clear on ff mode l -- auto lf after cr m -- no auto lf after cr w -- word wrap on x -- word wrap off space to cancel Any other character is ignored. RM STATUS full duplexhost modehalf duplexline sz: console --auto lf:bs del:ff clr:wordwrap:transmit --port:RS232modembits:parity:evenoddrate:3001200file --suppr lf:delay:line:char:ln prmpt: ^S/^Q:time: log:warn:using:  OTERM DELAY MODE COMMANDS b -- both char & line delay c -- char delay l -- line delay n -- no delay s -- remote handles ^S/^Q t -- remote does not handle ^S/^Q px -- set line prompt "x" q -- disable line prompt w -- delay unt of chartime: onoffnone4ÿFÿÿVÿÿÿ .;122B8' å�PÿûÛ!dil char x -- delay for time 0 -- infinite delay 1 - 9 -- short - long delay space to cancel. Any other character is ignored. OTERM FILE PROCESSING MODE COMMANDS h -- halt file read l -- process lf m -- suppress lf space to c OTERMíKROi<NKM MGNÕL’MÇL=MZMUNÜM N�O R•K K«K¶KÁKªLÕPÌKLIS×KâKdLùKLíK¹LîOöT¦WpLgNÙÿ÷t2[6ÙÙøØøØš`�� š` ÜÙQAQBQCQDQEQHQLQMbSPcPSWQIQR bBCbDEbHLbAFancel Any other character is ignored. OTERM LINE COMMAND Enter desired line size followed by return space to cancel Any other character is ignored. OTERM TRANSMIT MODE COMMANDS 1 -- 300 baud 2 -- 1200 baud 7 -- 7 bits 8 -- 8 bits e jIXDjIYdrNZqZrNCqPrPOrPEÀÜ MOTERM REL--OTERM PRNOTERM MAC€L #$%&'()*+L TERM MACRELCRFPRN: ¦¨ˆŠ¤¥Òªjˆ‰)Ñ�pœ¦¨ˆžª©Êj-- even parity f -- full duplex g -- host h -- half duplex l -- auto lf after cr m -- no auto lf after cr n -- no parity o -- odd parity r -- RS232 connector s -- modem connector space to cancel. Any other character is ignored. OTEŠIˆ©ÑšP,¨žª  ¥ЍjÈ“–@ž7ĉ¨©ªK1” j\а’©iÅÊhªŠª˜  †H¨šŠ›§Èeʨ)ˆqœ |Œ\†˜ž§ÖÈÅȉ)Ê‘ž€ Œ\ЦЩ®ÈÅÈ誈q�P\Œ\ŽŠ¨™èÈÅÉê©Ñ� lŒ\ ª¨‡: ÈÅÊ ªˆÑ’œŒ\ ª¨™IÈÅÊ ªŠ±ž0\Œ\¤¦Š©ÜÈÅÊiÈ)±€ ’¦‚˜ ‘‰*h)Ñ–0*’¦ˆ’�dªjˆ*J‘€  þ ÊÛC¯2=2 ÍÃT'!2 ÍSØ*×(|µÌJ*×(q#p#å "×(á—ÉÍ#'+F+Nå## ë*×(·íR|µáÀ"×(Éå*Õ("×(áÉåÕë!·íR9?8í[×(íRÑá>ÉÑ!�åÕÍÊÍJÝ*ÙÍÖÉͬÇ2 =Ö 2 =Â~D:=Æ@2=å!7=Í;Eáyþ=7ÀÍdEcon Ûƒ=‡!=ÜE‡!………·ÊÖD@=¾=>õ ñ=ÂÌDñÜE: =·ÂëD: =·àlogwrn: db 0 ;nz if warn wÂëD: =2 =Íõ Íñ_ͯ2€ÍäGÍ…GÍ›Gá*=##: =2=GÉõ¯= ~·Â5E·ú5Ew# Â+EñÉ #Ã+E w#>7É^Í#':)=¹ØxæW!) ~怲wÉÍ#'͸Í)ë`i·íRØ ÈÍ´+|µ÷Õ¦ÍÙ(͸ÑÉÔ­Fxþ Í#'*E |µx>È¿ÿåÝáÍ}Ÿ°Gçå—gh"E 2D áÉÍ ':D ·ÄÊ—ÝË6~ÀyæÝw6Ýåáå6#T]í°á$hen log full logenb: db 0ffh ;nz if logging enabled logbuf: dw 0 ;start of log buffer logend: dw 0 ;end of log buffer ; logout: dcb ;output dcb ; rdcnt: dw 0 ;count char read rdflag: db 0 ;nz if reading file flflag: db 0 ;nz if char from f~ÍÎ(w#øÍiÝ~%þ !f (Ýåá$ë!G ~·>7ÈåÕ¾ /#øÑÑ~ÝwC#~ÝwD>Íר*E ÝåÑ!Aí[E "E s#rÝË6þ—ÉÑá »Í#'—Ýw=Ýw>Ýn7Ýf8Ýu;Ýt<ÉÍ 'ÝåáADM!E ^#Vë|µ( íB óí°—ÝË6~È>Í×õÍæ%ñÝË6¾É>>> > > >Í 'ÝË6~ >7ÉåÕÝnCÝfD_~#foÑãÉÍçÀÝN=ÝF>x± >Íרîile ; infile: dcb ;input dcb dcb BUF,inbuf dcb BUFLN,linbuf ; linbuf equ 2048 inbuf: ds linbuf ; wkst2: db 0,0,0 ;work len 2 str ; inlinl equ 32 inline: ds inlinl+3 ; end start P=B:OTERM Ýn;Ýf<~# Ýq=Ýp>Ýu;Ýt<ÍøÔ.åÕÅ> Í×ÁÑá0·7À1.þ ( x± áÕ> Í×Ñþ (Ýw@Õ> Í×Ñþ (Ýw@G—xÉÍ“%ØÍiÝN9ÝF: x>ØÅë> Í×áØíBÝu=Ýt>—ÉÍ“%ØÅÝN=ÝF>Ýn9Ýf:·íB>Ì×ÁØÝ^=ÝV>Ýn;ÝfÝu;Ýt<—É·ÈÕO>Í×Ñ0òÉÍix±È~# åÅ>Í×ÁáïÝ~?·Ý6?À݆@Ý6@Éþ( ÝË2fÖB?Command error?File not found?Can't enter file~æÈÍNG#ÃOC!CÃiC!-CÃiC!=CÍOCÃÛCCOMSCNuC"¯=uC·Ê¿C:ŽCG:�CO*.¾ÂµC# §CÿC µCÈÞC¯2uC*+ù++*¯=å:=·Â2=*=ùÍÎF:ÌB(ÝË6nÌÓ!ÝË3F þ ÝË6öÍi—7áÉæÈÝË4fÄÎ(·áÉ—7É>7ÉÝË6v>ÀÍ“%ØÝp=Ýp>ÉÿCON$"LSTbPUNbRDRbDUMl MEM€ ‚%ÂÂÂÂÂ+ + + ÂÂê2 ŒÄ. ÝË6î—ÉÝË4~ÊêÍçÀÍ« Ô!ÔÐ É—7ÝË6vÀÝåÿÍÝá·(ñþÀ:4"·>ÈÍ"Û·ÝË3nÀÝË3f(þ Èþ ÈWÝË3F þ > Wþ ÕÍÓ!Ñ> ÕÍÓ!Ñ  z·É·ÝË3FÀÝË4fÄÎ(·þ (þ > Ý6@ þ ÝË6ö—7É·ÉÅÕÅÍç Í« Í!ÁÑáØåþ (uþ (qþ áåíB(Ü þ 3áåíB(Ð!å ãåÕÝå 7"ÍÝáÑáþ (þ >ÿ8ä+|µ ÞÁ£x±( ÕÅÍÐ ÁÑÝË2n(Žx± Š"ÕÅÝåÍÝáÁÑÃ-!ÕÅÍÐ ÁÑ Íç øá—ÉyWÝË2V(Wþ (þ (þ ( þ 0>^Íë!Æ@_ÕÝåÍÝáÑz·É:4"·È:—Ýw7Ýw8á—ÝË6^ÈÝw9Ýw:ÝË6žÉåÕÅÝåá$6  T]í°#6T]í°ÁÑáåÅþ (úþ (öÕͲ&þ: >!$ÍÒ&8QͲ&y·>!'ÄÒ&8Aþ. Ͳ&>!/ÍÒ&8.þ/ Íí&8õ¶wöþ\ Íí&8ç/¦wõþ!8þ á—íRµÁáÉáÁá>7ÉÕþ!8!' í±(îëÑ·íRÿ$%ÀMÉ¹Ø ( ‘ÅÝåÁ Áëí°ë·È6 #=øÍÀ(ØÍÎ(ÖAÝåá2 Gæ^ïËÈþƒÀ—2^ïÍ#'*5"é—íS5">ÿ24"Ƀ� ” Ë!ÄÓ– ,!dÿ $Ý~$þ :ÆAÖ@G:’%¸>ØÝpÝË6F Ͱ$Íî$—Ýw!Ýw"Ýw#ÝåÑÝåÍÝáÆ>ÉÝË6F(4ÝåÑÝåÍÝáÆ>ØÝË2^ÈÝåÑÍ…$(2 ËÞ—ÉÝåÑÝåÍÝá—ÉÝË2^ ìÝ~'þ (åÝË3FÌŒÝN=ÝF>ÍÎ#ÝåÑÝåÍÝáÆ>ØÝåáå%$í°á'% øOx æ,=;*?[]7·ãÕÅÝåýåå!L'0!A'ãåõ!9~#foñÉýáÝáÁÑáÐÃT'ýáÝáÁÑáÉÐã"5(ãÍ#'_! (:)=»8bk) ~Wæ{7ÈÕ(Íõ'ãå&7(ÍÙ(Íõ'Íò'áã#^#Vz³Äõ'Áxæ€( Í=(Íõ'ëÍõ'(Íõ'*5(ÍÉ'Íò'xæy7ÈåÍþ'*3(ãÉ|ÍÎ'}õÍ×'ñæÆ0þ:8ÆåÕÅ_ÝåÍÝáÁÑáÉ(·ÈÍá'÷í°ÝË2N(6!%\$í°ÝåÍÝá<(!%6%$í°!%?%í°!%6%Í$Ýåá%Í#$—É—7ÝË6vÀÍ“%ØÝn9Ýf:åÍiÑååëÝåÑ€ÿ ã>0%åÕëÝåÍÝáÑÕ!Í¢#Ñá· € ã×ÝË6ö—ÁÑ·íRÝu=Ýt>7È—ÉÝË4N(ÝåÍÝáÉÝåHÍÝá·ÀÝåá!·>Žw>#ùÉÍiÝåÑå`i|µ(&ãåÕëÝåÍÝáÑÕ"Í¢#Ñá· € ã·íB(0!% ý- ùô ***ERROR ERROR OCCURED AT WF€ÅÝåá$ë!�(Í}((6:#Í}(6.#Í}( +6�(Á!ž(ÝË6FÈ!§(ÝË6NÈ!¯(Éþ!8w# ó ÉFCNOUTTQD (OUTPUT)(INPUT)(I/O)þ0Øþ:?É͵(ÐþAØþ[?ÐþaØþ{?ÉÍÇ(ØÖ ÉÐ)åÕÅ—7õ —íj�‘0�?öíjÆ0õ|µ êñ0ûÁÑáÉÚá·È>7ÉÍ#$ØåÕëÍ…$( ëáå í°ÑáìÑáÉåÕÍ…$(%2ËÞáåZ%$í°ÝåÝ!Z%Ͱ$ÝáZ%áåÍ$ ÑÕÝåÍÝááål$í°ÑáåÕ\ í°—2l\ÝåÍÝáÑáÆÉÕ!E ~#fÑo´ÈÕåõÿËFá(ïå¿ÿ  Íü$á áÑ¿ÿ öÉÝ~2\! %>94¾060+÷!%] í°Ýå\ÍÝáþÿ8ÕÝåÑ!] í°ÉÝåÑ!' í°Éí¡ÀÕÅë—GOí±‘o˜•gÁÑÉ€<)ƒJ)ƒ_)ƒo))‰)ƒ‰)Ÿ)«)ƒ«)FILE NOT OPENBUFFER TOO SHORT -- WRITE ERROR -- CLOSE ERROR -- INSUF MEMFUNCTION NOT LOADED ZERO DIVIDEINVALID ARGUMENTåÕÅ:õ Íñ2ÁÑáÉ TOO SHORT -- WRITE ERROR -- CLOSE ERROR -- Ièø$$$$0000$$$BAKLFNAMEyQE LFEXT-MF(À &F$FSETC(MëDCBF(ÀNÂF$CALLD(`*‹OPENE(ÀÉÍCLOSE¼MD(àx€;""ŒÄÎ#êI#Í#'ÝË6~>7ÈÝ~7ݶ8ÀÝË6^ ÝN9ÝF:x± ÝnCÝfD+F+Nx±7ÈÝq9Ýp:ÝË6ÞÍ8Ýu7Ýt8ÝË6æÍiÉõÍæ%ñÉ—ÝË6~ÈÝË6f(åÝn7Ýf8Í0ÝË6¦å  ååå..------!-!----------------------------------------- .he OTERM.DOC -- OTERM Terminal Simulator page # .op .po 0 Copyright 1981, 1982 Michael M Rubenstein Version 2.20 11 Mar 82 Abstract. OTERÍ allowó thå useò tï communicatå wiåtè timå shar� inç  services¬  computeriseä  bulletiî  boards¬  anä � otheò computers® Speciaì featureó oæ OTERÍ include: - á  circulaò  loç oæ thå sessioî  ió  kept® �           Thió loç ió undeò thå controì oæ thå user. - aî  optiåonaì warninç ió provideä wheî  thå �           loç ió almosô full®  Iæ thå remotå devicå �           supportó it¬  transmissioî wilì bå  halteä �           witè  á  controì S®  Iæ á filå  ió  beinç �           sent¬  thå transmissioî ió interrupteä (iô �å           caî bå restarted.) - fileó maù bå senô tï thå remotå computer. - anù  commanä whicè caî bå entereä froí thå �           keyboarä maù alsï bå entereä froí á  file® �           Thió"allowó automatiã settinç oæ modeó foò �             transmissioî oæ thå file. - filå  tranmissioî maù bå interrupteä  froí �           thå  keyboarä oò froí á commanä  containeä �           iî  thå  file®  Transmissioî maù  bå  re�           starteä withouô losó oæ data. - fu � maù  bå confusing®  Sincå therå ió nï  checkinç  oæ � data¬ Programs¬ particularlù iæ noô iî sourcå form¬ � whicè arå transmitteä shoulä bå checkeä carefully. OTERÍ  caî  handlå  onlù ascié data®  Biô ·  oæ  alì � characteró ió seô tï zero® Bù chalì  duplex¬  halæ duplex¬  anä hosô modå �           (communicatioî  witè á dumâ terminaì  pro�           graí oî anotheò computer© arå supported. - lineó  arå  wrappeä tï keeð  datá  oî  thå �           screen®   Optionallù   thå  displaù  linginç transmissioî � mode¬  biô maù bå useä foò parity¬  buô iô cannoô bå � aî informatioî bit. .pa ŠNew features/corrections in version 2. File transmission has been implemented. Warning on buffer full has been implemented. Thå probleí witè losônå �           lengtè  maù bå seô tï anù sizå uð  tï  12¸ �           characters. - optionallù  lineó maù bå wrappeä sï aó  tï �           keeð wordó oî á singlå linå (worä wrap) - forí feedó optionallù cleaò thå screen. -  characteró wheî á characteò ió � senô  whilå  thå  remotå ió alsï  sendinç  haó  beeî � reduceä considerably. Selectioî  oæ thå seriaì  interfacå  characteristicó � haó beeî implemented® (2.10) Thå  sizå  oæ  thå loç haó beeî increaseä  tï  abouô � commandó  tï  OTERÍ arå entereä aó  escapå �           sequences® Helð menuó arå availablå usinç �           thå "?¢ key. .pa ŠLimitations of OTERM. OTERM will run only on an Osborne 1 computer. No printer support is provided. OTERÍ  caî  takå41,50° characters® (2.10) Oterí  no÷  workó properlù witè upgradeä  Osbornå  ± � systemó (2.11). Word wrap is now implemented. (2.20) .pa ŠKnown deficiencies. Testinç oæ hosô modå haó beeî limited® Transmissioî � oæ fileó iî hosô modå haó noô be  advantagå oæ thå  uså  oæ  controì � S/controì  Ñ tï halô outpuô froí manù  timå  sharinç � systems®  However¬  nï formaì transmissioî protocoì � ió  supported®  Iô  shoulä bå possiblå tï  transmiô � successfullù  iî almosô alì cases¬  buô thå  displaùeî tested. Occasionallù á characteò senô bù thå remotå wilì  bå � losô iæ á characteò ió senô aô thå samå time. Testinç oæ 120° bauä operatioî haó beeî limited® Iô � ió   likelù  thaô  iô  wilì  bå  difficulô  iæ   noô � impossiblå  tï  maintaiî  á    coherenô  displaù  wheî � transmittinç aô 120° baud® Uså oæ characteò oò linå � delaù  wilì probablù makå thå transmissioî toï  slo÷ � tï bå economical. No testing of use of the modem port has been done. .pa ŠUsing OTERM (summary). Thå  modeí sh esc bc -- cleaò loç anä starô logging         esc bd -- suspenä logging esc be -- resumå logging esc bq -- nï warninç oî loç full esc bw -- warî wheî loç full Console handling commands: oulä alwayó bå iî fulì dupleø modå  foò � uså witè OTERM® Follo÷ thå modeí manufacturer'ó anä � thå  Osbornå instructionó foò connectinç thå  modem® � Notå thaî almosô alì modem'ó wilì requirå thaô piî ² � oî  thå modeí bå connecteä tï piî ³ oî thå  comp esc cb -- reseô deletå oî bó mode esc cc -- set clear on ff mode esc cd -- set delete on bs mode esc cf -- reset clear on ff mode esc cl -- set console lf w/cr mode esc cm uteò � anä  piî ³ oî thå modeí bå connecteä tï piî ² oî thå � computer. Oî  exitinç OTERÍ thå RS23² interfacå wilì bå  reseô � tï thå samå optionó aó aô entry. Aó distributed¬  oî startuð OTERÍ ió seô tï  commun� icatå witè mosô timå sharinç service -- reset console lf w/cr mode esc cw -- set word wrap on esc cx -- set word wrap off Delay mode commands: esc db -- seô  botè linå ¦ chaò  delaù �                         mode esc dc -- ses®  Thå defaulô � characteristicó  maù bå changeä temporarilù oò OTERÍ � caî  easilù bå modifieä tï starô uð  witè  differenô � characteristics. Establisè  communicationó followinç thå modeí  manu� facturer'ó anä thå remotå service'ó instructions. t char delay mode esc dl -- set line delay mode Š esc dn -- reseô botè linå ¦ chaò delay esc dpx -- set line prompt char to x esc dq -- clear line prompt char esc ds -- set remote ^S/^Commandó  tï OTERÍ arå entereä aó escapå  sequences® � Thå followinç commandó arå recognized: Display command summary: ..------!-----------!---!--------------------------- esc ? -- display command summary Logging commands: Q esc dt -- reset remote ^S/^Q esc dw -- set delay until char esc dx -- set delay until time Input file mode commands: esc fh -- halt file read esc fl -- send lf from file    esc fm -- suppress lf from file Set line size: esc ln -- set line size nnn Transmission mode commands: esc m1 -- set 300 baud esc m2 -- set 1200 baud esc m7 -- set 7 bit transoæ thå optionó availablå ió displayed®  Thå � commanä  sequencå ió noô terminateä anä thå  desireä � optioî characteò maù no÷ bå entered. Thå loç ió alwayó cleareä wheî OTERÍ ió started. Tï  modifù OTERÍ tï uså ne÷ defaults¬  simplù  enteò � thå desmission esc m8 -- set 8 bit transmission esc me -- set even parity esc mf -- set full duplex mode esc mg -- set host mode esc mh -- set half duplex mode esc ml -- setireä commands¬  exiô witè thå esã ñ  command¬ � anä savå thå prograí witè thå CP/Í command: save 41 oterm.com Thå followinç sectionó describå iî detaiì thå uså oæ � theså commands. .pa ŠLogging commands. Á loç oæ thå sessioî ió kepô iî me xmit lf w/cr mode esc mm -- reset xmit lf w/cr mode esc mn -- set no parity esc mo -- set odd parity Quit OTERM: esc q -- return to CP/M Send a File: esc r -- read filemory®  Aó distri� buted¬  thió loç ió enableä aô starô up® Thå loç ió � circular»  thaô  is¬  wheî thå loç ió filled¬  char� acteró  aô  thå beginninç arå deleteä aó  ne÷  char� acteró arå added® Thå exacô sizå oæ thå loç dependó � oî  thå version®   Display status: esc s -- display status Write log to disk: esc w -- write the log to disk Clear screen: esc z -- locaì  cleaò screeî (nothinç �                         transmitted ŠCommand Iî currenô versionó iô  ió  abouô � 41,50° characters. Becauså  thå  Osbornå ± seriaì  interfacå  generateó � falså  characteró iæ noô connecteä tï á livå device¬ � thå  loç  wilì  starô fillinç aó sooî  aó  OTERÍ  ió � starteä unlesó thå modeí ió connó arå entereä withouô spaces® Á spacå maù bå � useä tï canceì mosô commands®  Alì commandó maù  bå � entereä aó uppeò oò loweò case. Iæ  á  "?¢ ió entereä afteò thå firsô letteò oæ  anù � commanä  whicè requireó morå thaî onå  character¬  á � summarù ecteä anä turneä on® � Iô  ió  noô  necessarù tï actuallù  connecô  tï  thå � telephonå immediately® Iæ OTERÍ ió starteä witè thå � modeí off¬ simplù typå esã bã tï cleaò thå log. Iî fulì dupleø mode¬  onlù characteró receiveä  froí � thå  remotå devi  cå arå entereä iî thå log®  Iî halæ � dupleø  modå  alì characteró senô  oò  receiveä  arå � entered®  Iî  hosô  modå onlù characteró  senô  arå � entereä iî thå log. Sincå  OTERÍ  doeó noô recognizå deletioî  oæ  char� acteró  oò lines¬  iô usuallùï keeð � ió finished¬  typå esã bd® Iæ morå datá yoõ wisè tï � keeð ió abouô tï bå received¬  typå esã bå tï  starô � thå loç again. Wheî  listinç á lonç document¬  onå doeó noô wanô tï �Šloså  thå beginninç simplù becauså thå loç ió  full® � Tï preve wilì bå necessarù  tï � ediô  thå loç afteò writinç iô tï disë tï  eliminatå � errors®  Thå loç maù bå editeä witè WordStaò oò ED® � Thió  ió  alsï  usefuì  foò  eliminatinç  extraneouó � materiaì  froí  thå loç (e.g®  commandó oò  messageó � wheî á pronô this¬  typå thå commanä esã bw® Wheî 25¶ � characteró remaiî iî thå log¬  yoõ wilì bå warneä bù � á serieó oæ threå beeps®  Iæ á filå ió beinç trans� mitted¬  iô  wilì bå halted®  (Iô caî  bå  continueä � withouô  losó oæ data.© Also¬  iæ thå remotågraí sourcå filå ió listeä anä logged.) Á commoî (anä thå simplest© methoä oæ usinç thå  loç � ió  tï simplù ignorå iô untiì somethinç ió  receiveä � whicè onå wantó tï save®  Thå loç ió theî saveä anä � lateò editeä tï eliminatå unwanteä material.  devicå � respondó  tï controì Ó - controì Ñ foò stoppinç  anä � startinç transmissioî (seå delaù modå  commands)¬  á � controì Ó wilì bå sent. Tï  returî tï simplå logginç withouô warninç oæ  loç � overflow¬ uså thå commanä esã bq. .pa ŠConsole handliIî  somå cases¬  however¬  onå maù wisè tï loç  onlù � partó  oæ  á  sessioî oò tï keeð  datá  whicè  mighô � overflo÷  thå log®  Iî theså caseó thå logginç com� mandó arå used: esc bc -- cleaò loç anä starô logging         esc bd ng commands. Thå consolå handlinç commandó controì thå displaù oæ � informatioî  senô oò received®  Theù havå nï effecô � oî thå loç oò oî thå datá transmitted: esc cb -- reseô deletå oî bó mode esc cc -- set clear on ff-- suspenä logging esc be -- resumå logging esc bq -- nï warninç oî loç full esc bw -- warî wheî loç full Simplù  typå esã bã thå firsô timå yoõ wisè tï  keeð � thå followinç data®  Wheî thå datá yoõ wisè t mode esc cd -- set delete on bs mode esc cf -- reset clear on ff mode esc cl -- set console lf w/cr mode esc cm -- reset console lf w/cr mode esc cw -- set word wrap mode   esc cx -- reset word wrap mode Manù timesharinç serviceó uså á backspacå (controì è � oò   lefô  cursor©  foò  deletioî   oæ   characters® � Normally¬  thå  Osbornå ± simplù backspaceó buô doeó � noô deletå thå character®  Thió ió harmlesó buô mcinç tï thå � nexô line® Tï returî tï normaì handling¬ nï advancå � aó oî á teletypewriter¬ uså thå commanä esã cm. .pa 14 ŠMosô  timesharinç serviceó formaô thå outpuô foò  7² � oò 8° characteò terminals® Thå linå sizå maù bå seô � tï 5² characteró (aù � bå confusinç iæ severaì characteró arå deleted®  Tï � causå á characteò tï bå deleteä wheî á backspacå  ió � displayed¬  enteò  thå commanä esã cd®  Tï causå  á � backspacå tï simplù movå thå cursor¬ uså thå commanä � esã db. Somå timesharinç serseå below)¬ buô iæ wordó arå spliô � aô thå enä oæ thå line¬  thió maù bå confusing®  Tï � helð  keeð á coherenô display¬  worä wrað maù bå seô � (esã  cw)®  Thió wilì keeð wordó oî á linå iæ  pos� sible® Foò thå purposeó oæ oterm¬ á worä ió defineä �viceó anä bulletiî boardó senä á � forí  feeä  tï signaì enä oæ  page®  Normallù  thió � moveó  thå cursoò righô onå positioî oî thå  Osbornå � 1®  Tï  cleaò  thå screeî wheî á forí feeä ió  dis� playeä  uså thå commanä esã cc®  Tï returî  tï  thå � no aó  anù sequencå oæ characteró noô includinç  spaceó � oò controì characters®  Notå thaô thå worä wrappinç � ió baseä oî thå linå sizå seô foò oterm¬  noô oî thå � physicaì  dimensionó oæ thå screen®  Iî  ordeò  foò � thió tï bå verù useful¬ thå linå sirmaì Osbornå handlinç (necessarù foò systemó whicè � uså forí feeä foò cursoò positioninç ratheò thaî ne÷ � page© uså thå commanä esã cf. Mosô  timesharinç serviceó anä bulletiî boardó  wilì � senä  á  "free¢ linå feeä iî responså tï á  carriagå � returzå musô bå seô nï � greateò thaî thå physicaì screeî size. Tï  keeð thå displaù lookinç aó normaì aó  possible¬ � oterí doeó noô displaù spaceó oò tabó aô thå  begin� ninç  oæ  á linå thaô waó starteä  automaticallù  bù � worä  wrap®  Sincå worä wrað n®  Therefore¬ normallù thå displaù shoulä noô � advancå á linå wheî á carriagå returî ió  displayed® � Tï  handlå thå occasionaì systeí whicè doeó noô pro� vidå linå feeds¬ typå esã cl® Thió wilì interpreô á � carriagå returî aó oî á typewriter¬ advanió operativå oî  char� acteró  yoõ  enter¬  iô maù appeaò thaô  thå  remotå � servicå  ió noô responding®  Iæ thió appearó tï  bå � thå case¬  trù typinç á printinç character®  Á com� promiså  waó needeä here¬  sincå iô ió noô  possiblå � foò  oterí tï   determinå whetheò á characteò receiveä � froí  á fulì dupleø systeí ió aî echï oæ  thå  char� acteò yoõ typeä oò not. Worä  wrað  maù causå problemó wheî  transmittinç  á � filå  (althougè thió shoulä bå verù rarå unlesó  yoõ � arå  usinç 120° baud)® set delay until char esc dx -- set delay until time OTERÍ maù bå seô tï delaù afteò eacè characteò  (esã � dc)¬  tï  delaù afteò eacè linå (esã dl)¬  tï  delaù � afteò  eacè characteò anä eacè linå (esã db© oò  noô � tï delaù (esã dn).  Tï turî ofæ worä wrap¬  uså � thå commanä esã cx. .pa ŠDelay mode commands. Wheî sendinç á filå tï á remotå computer¬  iô maù bå � necessarù  tï givå thå remotå somå timå  tï  procesó � thå  data®  Thió  ió  particularlù  importanô  wheî � accessinç Thå delaù timå maù bå seô tï anù digiô 1-9®  Iæ thå � delaù  timå ió n¬  therå wilì bå á delaù oæ approxi� matelù (n+1)/3° second®  Thió timå ió doubleä foò á � linå  delaù unlesó linå feedó arå beinç supplieä  oî � thå screeî (esã cl© oò oî thå transm   bulletiî   boards®   Mosô   timesharinç � serviceó requirå littlå oò nï delay® However¬ sincå � thå  remotå maù bå transmittinç aô thå samå timå  aó � OTERM¬  somå characteró maù bå losô froí thå displaù � oò  thå displaù maù bå garbled®  Iî manù casissioî (esã ml). Iæ  thå delaù timå ió 0¬  OTERÍ wilì delaù  untiì  á � characteò ió received. Usuallù  iô wilì bå sufficienô tï delaù onlù untiì á � characteò  ió received®  Tï causå thå delaù  tï  bå � terminateä bù á character¬  typå esã dc®  Tïeó  thå � delaù  modeó  maù bå useä tï generatå coherenô  dis� plays. esc db -- seô  botè linå ¦ chaò  delaù �                         mode esc dc -- set char delay mode esc dl -- set line delay mode  alwayó � delaù  foò thå specifieä time¬  uså thå commanä  esã � dx® Thió haó nï effecô iæ thå delaù timå ió ° -- iî � thaô  caså  delaù  ió alwayó untiì  á  characteò  ió � received. Iî  somå caseó iô maù bå possiblå tï simplù  senä  á � linå  anä the esc dn -- reseô botè linå ¦ chaò delay esc dpx -- set line prompt char to x esc dq -- clear line prompt char esc ds -- set remote ^S/^Q esc dt -- reset remote ^S/^Q esc dw -- î waiô foò á prompô beforå sendinç  thå � nexô line®  Thió ió almosô mandatorù wheî sendinç tï � halæ  dupleø systems®  Tï seô OTERÍ tï waiô afteò á � linå untiì á specifieä characteò ø ió received¬  uså � thå  commanä esã dpx®  ø maù bå anù  characteò    in� cludinç  space®  Thå caså oæ ø ió significant®  Tï � cleaò thå linå prompô character¬ uså thå commanä esã �Šdq. Foò example¬ manù bulletiî boardó wilì alwayó prompô � witè á questioî marë wheî inpuô ió desired®  esã p¿ � wilì  prevenô  á  ne÷ li file esc fm -- suppress lf from file Thå esã fè commanä ió usefulì onlù iæ includeä iî  á � filå beinç sent®  Iô suspendó transmittinç thå filå � anä  returnó controì tï thå keyboard®  Thå filå maù � bå continueä withouô losó oæ datá (nå froí á  filå  froí  beinç � transmitteä untiì thå questioî marë ió received. Thå linå prompô characteò overrideó anù linå  delay¬ � buô noô thå characteò delay. Wheî  sendinç á file¬  OTERÍ musô periodicallù  reaä � froí thå disk®  Thió maù takå seå Reaä File). Standarä  CP/Í fileó contaiî á linå feeä afteò  eacè � carriagå  return®  Sincå mosô timesharinç  serviceó � anä bulletiî boardó supplù linå feeds¬  onå  usuallù � doeó  noô  wanô tï transmiô them®  Tï  ignorå  linå � feedó froí fileó oveò á second® OTERÍ � wilì delaù beforå readinç thå disk¬ buô eveî sï somå � receiveä  datá  maù bå lost®  Iæ thå remotå  devicå � respondó  tï controì Ó bù haltinç  transmissioî  anä � respondó  tï  controì Ñ bù restarting¬  thió caî  bå � preventeä  bbeinç sent¬ uså thå commanä esã fm. Somå  timesharinç serviceó providå á "tape¢ modå  iî � whicè linå feedó arå noô provided® Transmissioî maù � bå morå satisfactorù iæ fileó arå senô iî thió mode® � Tï  uså sucè á modå oò foò serviceó whicè dï requirù sendinç controì Ó beforå  readinç  thå � disë  anä  controì Ñ wheî readù foò morå  data®  Tï � inforí OTERÍ thaô thió ió possible¬  enteò thå  com� manä esã ds® Tï inforí OTERÍ thaô controì S/controì � Ñ maù noô bå used¬ enteò thå commanä esã dt. Nå � linå feeds¬ uså thå commanä esã fl. .pa ŠSet line size: esc ln -- set line size n OTERÍ  caî  senä  oò receivå lineó  oæ  anù  length® � Usuallù  iô wilì bå morå convenienô iæ thå datá  alì � fitó oî thå screen®  Thereforå OTERÍ OTE:  thå  controì Ó maù alsï bå useä  tï  prevenô �         overrunninç  thå log®  Nï controì Ñ ió senô �         automaticallù iî thaô case. .pa ŠInput file mode commands. esc fh -- halt file read esc fl -- send lf fromió distributeä � witè á defaulô linå sizå oæ 5² characters®  Aô  thå � enä  oæ á line¬  thå displaù wilì skið tï thå begin� ninç oæ thå nexô line. Tï  changå  thå  linå  size¬  enteò  esã  . Linesizå  wilì bå takeî moä 256®  I  æ  greateò  thaî � 128¬  12¸ wilì bå used® Iæ zero¬ thå linå sizå wilì � noô bå changed. Iæ á questioî marë ió entereä afteò thå l¬ instruct� ionó wilì bå displayed® Anù previouó digitó wilì bå � ignored. NOTE: Thå linå sizå affectó onlù thå dis seriaì   (modem© �                         connector Thå  datá ratå musô matcè thaô oæ thå remotå device® � Seô  30°  bauä  (esã m1© oò 120° bauä  (esã  m2©  aó � required. OTERÍ  anä  thå remotå devicå musô agreå aó  tï  thå � numbeò oæ bitó tï båplay® Thå �         loç anä thå transmissioî arå noô affected. NOTE: Thå linå sizå seô iî OTERÍ ió iî effecô onlù �         iî OTERM®  Wheî OTERÍ ió endeä thå linesizå �         ió  restoreä tï thå valuå thaô waó seô  wheî �         CP/Í  waó  loade transmitteä foò eacè  characteò � anä  thå  paritù oæ eacè character®  Selecô ·  bitó � (esã  m7©  oò ¸ bitó (esã m8© anä paritù  eveî  (esã � me)¬  paritù  odä (esã mo© oò nï paritù (esã mn©  aó � required. Mosô  serviceó  wilì accepô 30° bauä ¸ bitóä oò whicè waó lasô  seô  bù �         SETUP. .pa ŠTransmission mode commands. Severaì  characteristicó musô bå seô tï matcè  thoså � oæ thå remotå device. esc m1 -- set 300 baud esc m2 -- set 1200 baud esc m7   anä  nï � parity®  120° bauä operation¬ iæ available¬ wilì bå � fasteò anä iî manù caseó morå economical. OTERÍ supportó á modeí connecteä tï eitheò thå RS23² � oò  thå modeí connectoò oî thå fronô oæ thå  Osbornå � 1®  Tï uså thå RS23² connector¬ u -- set 7 bit transmission esc m8 -- set 8 bit transmission esc me -- set even parity esc mf -- set full duplex mode esc mg -- set host mode esc mh -- set half duplex mode så thå commanä esã � mr®  Tï  uså thå modeí connector¬  use thå commanä � esã ms. Iî fulì dupleø mode¬  characteró transmitteä arå noô � automaticallù displayed®  Thió modå ió useä tï com� municatå witè mosô timesharinç serviceó anä bulletiî � boardó esc ml -- set xmit lf w/cr mode esc mm -- reset xmit lf w/cr mode esc mn -- set no parity esc mo -- set odd parity esc mr -- modem on rs232 connector esc ms -- modeí   oî   (theså serviceó automaticallù senä bacë  anù � characteró  sent.© Tï enteò fulì dupleø  mode¬  uså � thå commanä esã mf. Á fe÷ serviceó uså halæ dupleø mode®  Iî thió mode¬ � thå  terminaì (OTERM© ió responsiblå foò  displayinç � thå characteró iô s  ends®  Tï enteò halæ dupleø modå � uså thå commanä esã mh. Tï communicatå witè á terminaì oò á computeò usinç á �Š"dumb¢  terminaì program¬  uså thå commanä esã mç tï � enteò hosô mode®  Iî thió mode¬  characteró senô bù � OTERÍ  arå  displayeä anä  cce®  Yoõ �    arå  iî hosô modå anä thå remotå  assumeó  yoõ �    arå iî fulì dupleø mode® Enteò esã mf. Characteró  senô arå noô  displayed®  Characteró �    receiveä  arå  displayed®  Yoõ  arå  iî  fulì �    dupleø  modå  buô thå remotå aharacteró  receiveä  arå � echoeä bacë tï thå remotå device. Manù  serviceó offeò á choicå betweeî fulì anä  halæ � dupleø  mode®  Thå mosô commoî probleí iî  communi� cationó ió noiså oî thå phonå line® Iæ yoõ uså fulì � duplex¬  á correctlù displayssumeó yoõ  arå  iî �    halæ dupleø mode® Enteò esã mh. Thå  displaù doublå oò triplå spaceó oò doeó  noô �    skið  betweeî lines®  Linå feedó maù bå  sup�    plieä oî thå screeî onlù bù esã cl¬  maù bå auto�    maticallù  transmitteä bù esãeä characteò ió evidencå � thaô  thå  remotå devicå receiveä youò  transmissioî � properly®  Therefore¬  fulì  dupleø ió  recommendeä � wheneveò possible. Full/half/hosô arå seô independentlù oæ thå handlinç � oæ  linå feeds®  Iî hosô modå iô wilì alm ml¬  oò maù bå pro�    videä  bù thå remotå device®  Iæ morå  thaî  onå �    sourcå ió providinç linå feeds¬  thå displaù wilì �    multiplå  space®  Iæ  nonå is¬  theî lineó  wilì �    overwrite. Characteró  receiveä  arå  noô displayeä  oò  aråosô alwayó � bå necessarù tï senä á linå feeä afteò eacè carriagå � return® Tï dï thió uså thå commanä esã ml® Tï stoð � automatiã sendinç oæ linå feeds¬ uså thå commanä esã � mm. Thå  followinç  possiblå problemó maù bå  causeä  bù � impropeò settinç �    garbled®  Thå  datá rate¬  numbeò  oæ  bits¬  oò �    paritù  arå  incorrect®  Checë witè  thå  remotå �    servicå  foò thå correcô settings®  Iæ  receiveã �    characteró arå noô displayed¬ iô ió possiblå thaô �    thå modeí ió noô connecteä  oæ modes: Characteró senô arå displayeä twice®  Characteró �    receiveä  arå  displayeä once®  Yoõ arå iî  halæ �    dupleø  modå  anä thå remotå assumeó yoõ  arå  iî �    fulì duplex® Enteò esã mf. Characteró senô oò receiveä arå senô twiaó OTERÍ expects® Seô �    OTERÍ  tï  uså  thå RS23² oò modeí  connectoò  aó �    required®  Iæ  thió happenó  occasionally¬  youò �    modeí  ió noô workinç properlù oò therå ió  noiså �Š   oî thå phonå line. .pa ŠQuit OTERM: esc q --    return to CP/M This command returns to CP/M. .pa ŠSend File: esc r -- read file Thió  commanä sendó á filå previouslù prepareä  witè � WordStaò  oò  ED®  Foò propeò  transmission¬  delaù � modeó oò filå modeó maù havå tï bå set. õ dï noô wisè tï reaä á file¬  simplù  responä � witè return. Iæ  yoõ  wisè tï continuå sendinç á filå  whicè  waó � halted¬ responä "*¢ return. .pa ŠDisplay status: esc s -- display status Thió  commanä  displayó thå currenô setti Thå  filå beinç transmitteä maù contaiî  OTERÍ  com� mands® Theså wilì bå processeä aó iæ entereä aô thå � keyboard®  Iî  facô iæ yoõ ofteî musô switcè modes¬ � iô  maù bå desirablå tï creatå fileó witè  thå  mosô � commoî  combinationó oæ modeó anä nç  oæ  alì � modes® Thå displaù witè alì modeó seô aó originallù � distributeä is: OTERM -- Terminal Emulator Copyright 1981, 1982 Michael M Rubenstein Version 2.20 11 Mar 82 OTERM STATUS full duplex line sz: 52 console -- auto lf:nï datá tï  trans� mit. Iæ  aî OTERÍ reaä commanä ió encountereä iî á  file¬ � thå  ne÷ filå wilì bå reaä anä transmitted®  Aô thå � enä  oæ  thå  ne÷ filå controì wilì  returî  tï  thå � keyboard¬ noô tï thå previouó file® Iî otheò words¬ � readinç  off bs del: on ff clr: on wordwrap: on transmit -- auto lf: off port: RS232 bits: 8 parity: none rate: 300 file -- suppr lf: on delaoæ fileó ió chained¬ noô nested. Tï stoð transmissioî oæ á file¬ typå esc® Anù otheò � keù ió ignored. Afteò enterinç thió command¬ OTERÍ wilì ask: Read file name (* to continue)? Enteò á legaì CP/Í filå namå (witè devicå iæ noô  oî � y: char char: on line: off ln prmpt: none ^S/^Q: on time: 1 log: on warn: off using: 0 of 41500 .pa ŠWrite log to disk: esc w -- write the logthå defaulô disk© followeä bù return® Iæ entereä iî � loweò  caså thå filå namå wilì bå converteä tï uppeò � case. Iæ thå filå cannoô bå found¬  OTERÍ wilì displaù thå � message: Cannot open and will ask for the file name again. Iæ  yo to disk Thió commanä writeó thå loç tï disk®  Thå loç  filå � maù  theî  bå editeä witè WordStaò oò EÄ oò  maù  bå � printed. After entering this command, OTERM will ask: Write file name? Enteò  á  legaì CP/Í filå namå (witè devicå  i  æ  thå � filå ió noô tï bå oî thå defaulô CP/Í disk© followeä � bù  return®  Iæ entereä iî loweò caså thå filå namå � wilì bå converteä tï uppeò case. Iæ  thå filå cannoô bå created®  OTERÍ wilì  displaù � thå message: Cannot open and wilål ask for the file name again. Iî  somå  caseó á filå systeí messagå  maù  alsï  bå � displayed® Theså indicatå disë fulì oò i/ï errors. Thå loç wilì bå writteî tï thå disk® Iæ therå ió aî � i/ï  erroò oò therå ió noô enougè rooí foò thå file¬ � á å filå systeí messagå wilì bå displayed®  Iî  thió � case¬ thå filå maù havå beeî partiallù oò completelù � written®  Iô  maù appeaò oî thå disë witè thå  namå � $$$$nnnn.$$¤ (nnnî ió á number)®  Thå safesô courså � ió tï changå diskó anä trù again. .paå ŠClear screen: esc z -- local clear screen(nothing transmitted Thió  commanä clearó thå screen®  Thió ió  á  locaì � operation® Nothinç ió transmitteä oò logged. .pa ŠEnd of Document The programs oterm disassem hanoi were written by Michael M Rubenstein 4503 Rena Rd #201 Forestville, MD 20746 They may be distributed freely provided no fee is charged. åå  åååUNSPOOL.ASM 81-11-21 for CP/M 2.0 and up. AUTHOR: Gary P. Novosielski Rutherford, NJ (201) 935-4087 INTRODUCTION: UNSPOOL (Ver 3.0) is a program to send a standard CP/M file such as a .PRN or .ASM file to the system's list or punåch device, while still allowing other system operations to take place. The file is transferred during periods when console is waiting for input. SYNTAX: UNSPOOL [d:]filename.ext [dev] or UNSPOOL dummy OFF [square brackets denote optionalå parameters] Where d: is an optional drive spec such as A: or B:. If not entered, the current default drive is assumed. filename.ext is the name of the CP.M file to be printed/punched dev is the symbolic name of the å output device to be used. Valid devices are LST and PUN. Note that the colon (:) usually present in these names is NOT entered. If not specified, the LST: device is assumed. OFF If OFF is specified instead of a de  vice name, the operator will be offered the option of cancelling UNSPOOL if it is already running. dummy Because the word OFF is the second parameter, a filespec is still needed. A dummy name of "." will suffice as a plac entries. If an error is detected, the program will display an error message on the console and attempt to warm-boot CP/M. If found, the BIOS vector table is copied into the program segment which will remain active during unspooling so that subsequee holder. Examples: UNSPOOL TEST.PRN will send the file TEST.PRN from the current default drive to the current LST: device. UNSPOOL A:TEST.PRN LST is exactly equivalent to the above, assuming drive A is the default drive. Note that tnt application programs running concurrently with UNSPOOL will still have access to the BIOS. This table is modified to trap attempts to warm boot the system or perform direct console input. The address of the old BIOS vector table, the BDOS entry ahe device name has no trailing colon. UNSPOOL B:ZINGER.HEX PUN will send the file ZINGER.HEX from the B drive to the current PUN: device regardless of which drive is currently the default. Note that the device is "PUN" not "PUN:". UNSPOOL .ddress, and the CCP return address (from the top of the stack on entry) are saved in memory. The "dev" parameter from the command line is checked. If not valid, an error message is typed and control returns to the CCP. If the "dev" parameter is the  OFF UNSPOOL *.* OFF UNSPOOL OFF OFF all cause an operator prompt: "Do you want to cancel UNSPOOL?" A single "Y" or "N" (Yes or No) is accepted from the console as a response. Any other character is assumed to mean "No". UNSPOOL OFF causliteral OFF, the program executes a BDOS funcion 0 (System Reset) and terminates. The file named in the command line is opened for input. If not present, the command is echoed to the console followed by a "?" and control returns to CCP. If the drives the file "OFF. " to be sent to the list device. OPERATION: Upon loading, the program checks to see that the the BIOS vector table pointed to by the word at location 0001H is valid, i.e. is a table of JMP instructions containing at least 16e is not explicit, the current default drive number is recorded internally in case the default drive is changed while UNSPOOL is active. The current user number and IOBYTE values are checked and stored internally so that if the user number is changed,   UNSPOOL will still be able to read the input file. If the device is changed (using STAT LST:=TTY: for example) unspool will continue to use the physical device in effect at the time the program was initiated. Any application programs will, however,ce until the console becomes ready, i.e. a key is actually pressed. At that time the BDOS function or BIOS call is executed normally, and control returns to the application program. If a jump to BOOT is attempted, this is also intercepted by the UNS use the new values of the user number and the new physical device assignments. If no errors were detected, the active program segment which monitors all calls to BDOS is relocated into high memory just below the CCP. This reduces the available user POOL supervisor segment. The message "Unspooling in progress" is displayed on the console, and no actual boot takes place. Control is returned to the protected copy of the CCP instead. Before returning, a disk reset is performed and the default DMA program area by 3 K: 4 pages for the UNSPOOL supervisor segment, and 8 pages for the CCP which is commonly overwritten by user program buffers. The BOOT and BDOS jumps in low memory are modified to protect the CCP and UNSPOOL supervisor segment. Coaddress is reset to 0080H to simulate a true warm-boot as closely as possible. If warmboot is attempted using BDOS function 0, the program will prompt the operator with the option to cancel. If the response is "Y", warmboot is performed using BDOS funtrol is then returned to the console. Normal CP/M operation will then be possible. Characters will be sent from the input file to the output device whenever the console is idle. Whenever an application program or the CCP requests console input usnction 0 as requested. Otherwise the request is handled as with normal warmboot, above. When the input file is completely transferred, or a 1AH end-of-file character is detected, the supervisor becomes inactive, and passes on all previously interceing BDOS functions 1 or 10, or a direct call into the jump table at C(BOOT + 1) + 6, the supervisor segment intercepts these requests and checks to see if the console is idle. If it is, characters are transferred from the input file to the output devipted requests immediately, without checking console status. When the next warm-boot request is detected, the supervisor removes itself from memory by executing a true warm-boot, and informs the operator with the message "UNSPOOL completed.". NOTES:   While UNSPOOL makes every effort to restore the values of the DMA address, USER number, IOBYTE, and default disk drive before returning control to the program, a hardware reset may leave these values in an undetermined state if unspooling was actueed typing may cause one or more characters to be lost. This effect will vary depending upon the program being run, the types of input reqests (character or line) it uses, and the relative locations on disk of the spool file and any files in use by theally taking place at the time. When function 10, Read Console Buffer is used, UNSPOOL will transfer characters only until the first key is pressed. At that time, no characters will be transferred until the input line is completed by pressing a carriag program. As a result, heads-down typing is not reccommended while UNSPOOL is running. Some experience with UNSPOOL will teach the user when caution is required. INSTALLATION: The source file is written for assembly with the MAC assembler. Thee return. UNSPOOL requires that the List Status function in the BIOS was properly implemented at system installation time. UNSPOOL will not send characters to the LST: device unless it recieves a ready condition from the List Status routine. If the  .HEX file produced is LOADed to a .COM file and executed just as any normal program. Relocation is done at execution time as described above. If the assembly option EXPAND is set to TRUE, tab characters in the input file will be expanded to spaces wPUN: device is used, no status check is provided for by CP/M, so a not-ready condition on the punch may cause the system to hang up if PUN was specified on the command line. See the CP/M Alteration Guide for a discussion of the BIOS List Status routineith assumed tab stops at every eighth print position. This option should be set to FALSE if the printer driver or the printer itself can properly handle the tab character. If the option PHYSBS is set to TRUE, a backspace character will cause the tab. Although the console is polled frequently during the unspooling of the file, some of the diskette operations may take a second or two to complete, for example when a new extent is opened. Since the console is not polled during this period, high sp expansion algorithm to recognize backspace characters and decrement the column count when a backspace is encountered in the input file. This option should be set to FALSE if backspace characters are ignored by the printer. All other control codes ex  cept carriage return are assumed to be non- printing, and are ignored by the algorithm. If tab expansion is included, the version number in the signon message will be followed by "/T". Gary Novosielski åå TITLE 'UNSPOOL Disk to device background process' ; VERSION EQU 3$0 ;Version number ; ;Author: ; Gary P. Novosielski ; ;NOTE: This source file requires MAC for assembly. ; Due to the complexity of operations performed by ; the macros which generaåte the relocation table, the ; assembly process will be significantly longer than ; normal for a program of this size. Be prepared for ; a long period of no disk activity on each pass before ; pressing the panic button. ; ;Revisions: (in LIFO orderå) ; ;3.0 81-11-12 ; New release. Relpaces 2.3. ;Version 3 ; Now continues to run during direct BIOS input. ; The device name "off" has been implemented as ; a method of cancelling an already running ; UNSPOOL. It causes a BDOS function 0 reset. å; Function 0 reset now trapped. Prompts operator ; with option to cancel. Optional tab expansion ; support at assembly time. Disk reset (login) ; occurs during simulated warm-boot. Various ; cosmetic and sowrce revisions. ;Version 2 ; Copy BIOS ta  ble so application programs will ; still have BIOS access by using word at BOOT+1. ; Preserve USER and IOBYTE values as of startup. ; ; BDOS Functions: ; @SYS SET 0 @KEY SET 1 @CON SET 2 @RDR SET 3 @PUN SET 4 @LST SET 5 @DIO SET 6 @RIO SET 7 op of the Transient Program Area, overlaying ;the Console Command Processor. ; SAVECCP SET TRUE ;MUST remain true for UNSPOOL OVERLAY SET FALSE ;(initially) ; Macro Definitions ; ; Perform a standard BIOS function: CPM MACRO FUNC,OPERAND IF NOT @SIO SET 8 @MSG SET 9 @INP SET 10 @RDY SET 11 @VER SET 12 @LOG SET 13 @DSK SET 14 @OPN SET 15 @CLS SET 16 @DIR SET 17 @NXT SET 18 @DEL SET 19 @FRD SET 20 @FWR SET 21 @MAK SET 22 @REN SET 23 @CUR SET 25 @DMA SET 26 @CHG SET 30 @USR SET 32NUL OPERAND LXI D,OPERAND ENDIF ;not nul operand IF NOT NUL FUNC MVI C,@&FUNC ENDIF ;not nul func CALL BDOS ENDM ; ; Generate a label of the form ??Rnn to tag an ; address requiring relocation: RTAG MACRO LBL,VAL ??R&LBL EQU VAL ENDM  @RRD SET 33 @RWR SET 34 @SIZ SET 35 @REC SET 36 ; ;System equates: CPMBASE EQU 0 BOOT SET CPMBASE BDOS SET BOOT+5 TFCB EQU BOOT+5CH TFCB1 EQU TFCB TFCB2 EQU TFCB+16 TBUFF EQU BOOT+80H TPA EQU BOOT+100H CTRL EQU ' '-1 ;CTRL CHAR MASK CR SE; ; Flag as a relocatable instruction ; is of the form: R MACRO INST @RLBL SET @RLBL+1 RTAG %@RLBL,%2+$-@BASE INST-@BASE ENDM ; ; During bit map construction, get the next R-tagged ; address value: NXTRLD MACRO NT CTRL AND 'M' LF SET CTRL AND 'J' TAB SET CTRL AND 'I' FF SET CTRL AND 'L' BS SET CTRL AND 'H' EOF SET CTRL AND 'Z' FALSE EQU 0 TRUE EQU NOT FALSE ? EQU -1 NVECTS EQU 16; ;Number of BIOS vectors FCBLEN EQU 33 ;Length of input FCB ; ; AssemblN @RLD SET ??R&NN @NXTRLD SET @NXTRLD + 1 ENDM ; ; ; Enter here from Console Command Processor (CCP) ; CCPIN ORG TPA JMP INTRO ; SIGNON: DB 'UNSPOOL',TAB,TAB,TAB DB 'Ver ' DB (VERSION/10)+'0' DB '.' DB (VERSION MOD 10)+'0' IF EXPANy options EXPAND SET TRUE ;True to expand tabs IF EXPAND PHYSBS SET TRUE ;True to recognize backspace ENDIF ;The flag SAVECCP should be made true if ;the program segment should load below the CCP. ;If false the segment will load in the extreme ;tD DB '/T' ENDIF ;expand DB '$' ; INTRO: CPM MSG,SIGNON CALL SETUP ;initialize. LXI H,BDOS+2 ;find top of memory MOV A,M ;page address ;Form destination... SUI PAGES+1 ;...address in MOV D,A ;DE pair. MVI E,0 PUSH D ;save o  n stack LXI H,@BASE ;source address LXI B,SEGLEN ; MOVLOOP: ;Move (HL) to (DE) for (BC) bytes MOV A,B ORA C ;test for (BC) = 0 JZ MOVDONE DCX B ;count down MOV A,M ;move a byte STAX D INX D ;bump the pointers INX H JMP MOVLOOP ;on 8-byte boundry? JNZ NEXTBIT ; NEXTBYT: ;Get another byte of relocation bits XTHL MOV A,M INX H XTHL MOV L,A ;save in register L ; NEXTBIT MOV A,L ;remaining bits from L RAL ;next bit to CARRY MOV L,A ;save the rest JNC NEXT ; MOVDONE: ;The segment is now moved to high memory, but not ;properly relocated. The bit table which specifies ;which addresses need to be adjusted is located ;just after the last byte of the source segment, ;so (HL) is now pointing at it. POP ADR ; ;CARRY was = 1. Fix this byte. LDAX D ADD H ;(H) is the page offset STAX D ; NEXTADR INX D JMP FIXLOOP ; FIXDONE: ;Finished. Jump to the first address in the new ;segment in high memory. ; ;First adjust the stack. One garbage woD ;beginning of newly moved code. LXI B,SEGLEN;length of segment PUSH H ;save pointer to reloc info MOV H,D ;offset page address ; FIXLOOP: ;Scan through the newly moved code, and adjust any ;page addresses by adding (H) to them. The word on ;trd was ;left by fixloop. INX SP INX SP ; ;(HL) still has the page address MOV L,A ;move zero to l PCHL ;Top-of-stack is CCP return SETUP: ;First, check environment to see if BIOS vectors ;are accessible. LDA BOOT ;Location BOOT should Cop of the stack points to the next byte of the ;relocation bit table. Each bit in the table ;corresponds to one byte in the destination code. ;A value of 1 indicates the byte is to be adjusted. ;A value of 0 indicates the byte is to be unchanged. ; PI ( JMP ) ;have a JMP instruction JNZ VECTERR LHLD BOOT+1 ;Location one points MVI C,NVECTS ;to the table of jumps ;which we move into ;the code. LXI D,BIOSV XCHG VLOOP: LDAX D CMP M ;another JMP? JNZ VECTERR INX D INX H;Thus one byte of relocation information serves to ;mark 8 bytes of object code. The bits which have ;not been used yet are saved in L until all 8 ;are used. ; MOV A,B ORA C ;test if finished JZ FIXDONE DCX B ;count down MOV A,E ANI 07H  LDAX D MOV M,A INX D INX H LDAX D MOV M,A INX H INX D DCR C JNZ VLOOP ; Save old vectors and CCP return address ;Patch up new vectors as required. LHLD BOOT+1 SHLD OLDBOOT; Save the BOOT vector ; LXI H,2; Retrieve the CCP D  AD SP; return address from MOV A,M; down the stack a ways. INX H MOV H,M MOV L,A SHLD CCPRET+1; Save the CCP re-entry ; point. ; LHLD BDOS+1 SHLD GOBDOS+1; Save the BDOS entry ; point. ; LHLD CONIN+1; Save the direct call SHLD user number in effect at time of entry CPM USR,? STA ENTUSR ; SETUPIOB: ; Save IOBYTE in effect at time of entry CPM RIO STA ENTIOB ; RET ; SCOMP: LDAX D CMP M RNZ INX D INX H DCR B JNZ SCOMP RET ; DEVERR: CPM MSG,DEVER REALCON+1; to console input. SETUPDEV: LXI D,TFCB2+1 LDAX D CPI ' ' JZ SETUPFIL ; LXI H,LSTLIT MVI B,4 CALL SCOMP JZ SETUPFIL; Use default ; LXI D,TFCB2+1 LXI H,PUNLIT MVI B,4 CALL SCOMP JNZ CKSYS MVI A,@PUN STA DEVICE JRMSG POP H; Adjust stack RET; Exit to CCP VECTERR: CPM MSG,VCTERRMSG JMP BOOT ;try re-booting. ; LSTLIT: DB 'LST ' ;Note trailing blank PUNLIT: DB 'PUN ' ;Note trailing blank OFFLIT: DB 'OFF ' ;Note trailing blank DEVERRMSG: DB CRMP SETUPFIL CKSYS: LXI D,TFCB2+1 LXI H,OFFLIT MVI B,4 CALL SCOMP JNZ DEVERR CPM SYS ;Request system reset SETUPFIL: LDA TFCB1 ORA A JNZ OPENIT ;The drive has been defaulted. Make it explicit ;in case the default drive is changed whi,LF,'Invalid device.$' VCTERRMSG: DB CR,LF,'Error in system table. ' DB 'Attempting re-boot.$' PAGE ;Align location counter to next page boundry @BASE ORG ($ + 0FFH) AND 0FF00H @RLBL SET 0 ; one label for relocating ; TRAPCON ; ; The segle the ;file is being unspooled. CPM CUR; Returns A: as 00 INR A; Open needs A: as 01 STA TFCB1 OPENIT: CPM OPN,TFCB1 INR A JNZ COPYFCB ;Error. Can't open input file. LXI H,TBUFF MOV A,M ADD L MOV L,A ADC H SUB L MOV H,A INXment to be relocated goes here. ; Any position dependent (3-byte) instructions ; are handled by the "R" macro. ; For readability, the macro name "R" is placed in ; column 2. The preceding blank must be present to ; distinguish it from a label. ;**** H MVI M,'?' INX H MVI M,'$' CPM CON,CR CPM CON,LF CPM MSG,TBUFF+1 POP H; Adjust stack RET; Exit to CCP ; COPYFCB: LXI H,TFCB1 LXI D,FCB MVI C,FCBLEN COPY1 MOV A,M STAX D INX H INX D DCR C JNZ COPY1 ; SETUPUSR: ; Save********************************************* BDOSV: ;During operation, this location will point ;to INTERCEPT and will be jumped to by BDOS. ;It must be at the lowest location ;in the protected segment of code. R ;complete installatio  n BIOSV: REPT NVECTS JMP ? ENDM CONSTAT EQU BIOSV +(1*3) CONIN EQU BIOSV + (2*3) LSTSTAT EQU BIOSV + (14*3) ; INTERCEPT: ;This routine intercepts all BDOS calls. MOV A,C; Get function CPI @SYS; Is it a system reset? R CPIng for a key ;to be input. We will use this opportunity to print ;some characters to the device until a key is ;actually pressed. R ;The A register tells type ; of input request. LXI H,0 DAD SP R PUSH H; Save  @KEY; Is it single key input? R CPI @INP; or buffered input? R WAITING: ;Wait for actual keypress before honoring input ;request. Unspool characters in the meantime. R ORA A; See if finished. R R PROC1: R ; Check for keypress. R R ;Check device being used CPI @LST R ;If itOCESS>; Note that A <> 0 R ; Honor the input request ; CKDMA CPI @DMA; If the DMA address is being ; changed, we have to know. R XCHG R XCHG ; GOBDOS JMP ?; Patched on entry ; points to "real" BD is LST: R ORA A R ;Loop if not ready ; PROC2: IF EXPAND R ; In a tab sequence? ORA A R ENDIF ;EXPAND ; R MOV A,M ORA A R R INR AOS routine. ; TRAPCON: ; The application has done a direct BIOS call for ;console input. We can be confident that this was not ;as a result of a BDOS operation, since BDOS knows ;nothing about our local jump table. Thus we will not ;need to be con MOV M,A MOV C,A MVI B,0 DAD B; Point to the buffered char. MOV A,M CPI EOF R IF EXPAND R ; Print head position. ; CPI TAB; Is this a tab? R ; Process it. ; IF PHYSBS CPI BS; Backspace? cerned with the non-reentrancy of BDOS. ; R ORA A; See if active. MVI A,0; Flag BIOS-type request. R ; Unspool a while if so. REALCON: JMP ?; Patched during setup. ; PROCESS: ;The application program is now waiti R DCR M; Back up 1 column R PROC3: ENDIF ;PHYSBS CPI CR; End of line? R MVI M,0; Reset column count. R PROC4: CPI ' '; Other ctrl char? R ; Dont change column. PROC5: IN  R M; Increase column. PROC9: ENDIF ;EXPAND MOV E,A PUSH D ;SAVE CHARACTER ;Set the IOBYTE as it was when UNSPOOL was ;started. R MOV E,A MVI C,@SIO R POP D ;RESTORE CHARACTER MVI C,@LST; Default DEVICE EQU R XCHG; Restore DMA address MVI C,@DMA; to old value. R R MOV E,A; Restore User number MVI C,@USR; to old value R POP PSW; Read return code POP H; Buffer pointer ORA A; How wen $-1; Device code patch R R ; Restore active IOBYTE MOV E,A MVI C,@SIO R R ; IF EXPAND HNDTAB: R ; Set the flag SPCOUT: MVI A,' ' R ; TABSEQ: R MVI A,7 ANA M; Check if more blanks needed R R ; Clear the flag R ENDIF ;EXPAND ENDFILE: ; An EOF has been reached on the input file. ;Mark this program as inactive, and de-install on ;the nexf via direct BIOS, a ;direct BIOS call is used. This distinction in made ;necessary by the one-character input buffer which ;BDOS may fill during console output. (Yes output.) ; R ; Type of input which ORA A; was requested. R ; PROCEXIT: POP D POP B POP H; Restore SP SPHL RET ; ; FILLBUFF: ;Fill the buffer from the file PUSH H INX H XCHG; Buffer address to DE MVI C,@DMA; Set DMA address R MVI E,? KEY0> MVI C,@RDY; Use BDOS if non-zero R ORA A RET CKKEY0: R ; Use BIOS otherwise ORA A RET ; SYSREQ: ;The application process has requested a warm-boot ;by invoking BDOS function 0. Inquire whether the ;sp MVI C,@USR R ; Get current user R ; Save it R ; Change to user at entry MOV E,A MVI C,@USR R R MVI C,@FRD; Read a sector R PUSH PSW; Save read return code ool writer should be terminated. If not, treat ;as a normal warm-boot request. ; LXI SP,CCPIN; Set up a valid stack R ; If not active ORA A; then don't ask. R R R MVI C,@MSG R ; CPM KEY ;Get reply ORI 'a'-'A' ;Force lower case CPI 'n' ;Note lower case n. JZ BOOT CPI 'y' ;Note lower case y. JNZ BOOT ;Default = No ; ; Do a real BDOS function 0 which will terminate ; the spool writer. R ' DB '$' CNCLMSG: DB CR,LF,'UNSPOOL Cancelled.' DB '$' OLDBOOT DW ? DMAHOLD DW TBUFF ACTIVE DB TRUE IF EXPAND TABFLAG DB FALSE LINEPOS DB 0 ENDIF ;EXPAND USRHOLD DB ? ENTUSR DBG> SYSRQ9: MVI C,@MSG ;Inform the operator R ; MVI C,@SYS R ;Reset system BOOTREQ: ;The application process has requested a reboot ;by jumping to location 0. If we are no longer ;active, we will honor the request ? IOBHOLD DB ? ENTIOB DB ? ITYPE DB ? FCB DS FCBLEN BUFFER DB ? ; ONESHOT: ; This one-shot code patches TRAPCON into the local ;jump table. It is then overlayed by the file buffer ;on the first read, so it takes up no extra memory. R ORA A R ;Jump to old boot address as read from memory ;word 1 before we chaRAPCON> R R ; Start the program. ; OVERLAY SET $ ;Bit table may start here ; Nothing past here but DS's. DS 128-$+BUFFER DS 32; LOCAL STACK AT LEAST 16 WORDS ; PLUS WHATEVER'S LEFT OVER LCLSTACK EQU ($+0FFH) ANDnged it. R MVI C,@MSG R R PCHL ; NOTYET LXI H,TBUFF R MVI C,@LOG R R MVI C,@MSG R R R R SHLD BDOS+1 R R R SHLD BOOT+1 CCPRET: JMP ?; Patched on startup ; ACTMSG: DB CR,LF DB 'Unspooling in progress.' DB '$' DONEMSG: DB CR,LF,'UNSPOOL Completed.' DB '$' CNCL?:  down into ;unused DS area: SEGLEN EQU OVERLAY-@BASE ORG @BASE+SEGLEN ELSE ;relocation bit map starts here: SEGLEN EQU $-@BASE ENDIF ;overlay PAGE ; Build the relocation information into a ; bit map following the code. ; @X SET 0 @BITCNT   SET 0 @RLD SET ??R1 @NXTRLD SET 2 RTAG %@RLBL+1,0FFFFH ;define one more symbol ; REPT SEGLEN+8 IF @BITCNT>@RLD NXTRLD %@NXTRLD ;;next value ENDIF IF @BITCNT=@RLD @X SET @X OR 1 ;;set low bit ENDIF @BITCNT SET @BITCNT + 1 IF @BITCNT MåOD 8 = 0 DB @X ;;DEFINE THE BYTE @X SET 0 ;;clear hold variable for more ELSE @X SET @X SHL 1 ;;not 8 yet. move over. ENDIF ENDM ; END CCPIN åååå;CV.ASM - DUAL SCROLLING COMPARE ROUTINE FOR VDM ; ;05/06/79 BY WARD CHRISTENSEN ;07/09/79 MODIFY FOR VDM AT 0CC00H ;10/04/79 PUT IN CP/M DIRECT I/O ; ADD PRINTING HEX FOR NON-PRINTABLES ;09/04/82 Set VDM to 0F00H for Osborne ; by Jim Woolley,å FOG Disk Librarian ; ;PROGRAM TO SCROLL 2 FILES AT ONCE, 1, 4, OR 7 ;LINES AT A TIME. ALSO CAN COMPARE THE FILES ;WITH CONTINUOUS SCROLLING UNTIL A DIFFERENCE ;IS FOUND ; ;COMMAND FORMAT: CV NAME1 NAME2 ; ;NAME1 WILL BE SCROLLED ON THE TOP HALF   OF THE VDM ;NAME2 WILL BE SCROLLED ON THE BOTTOM HALF OF THE VDM ; ; TOP CHAR BOT CHAR FUNCTION ; ; Y H CONTINUOUS SCROLL ; U J 1 LINE SCROLL ; I K 4 LINE SCROLL ; O L 7 LINE SCROLL ; ; C SCROLLS CONTINUOUSLY, COMPARING THE FILES ; STOPSSTART OF PROGRAM EXECUTION ; MOVE FCB2,MYFCB,12 ;SAVE FILENAME CPM OPEN,FCB INR A JZ OPENER1 CPM OPEN,MYFCB INR A JZ OPENER2 LXI H,VDM MVI B,4 ;# PAGES MVI A,' ' ;CLEAR CHR CLRLP MOV M,A INR L JNZ CLRLP INR H DCR B JNZ CLRLP ON A MIS-COMPARE. ; VDM EQU 0F000H ; MF SET 0 ;SHOW MOVE NOT REQUESTED ; ;(FROM EQU8.LIB...) ;DEFINE SOME MACROS TO MAKE THINGS EASIER ; ;DEFINE DATA MOVE MACRO: MOVE from,to,length ; from may be addr, or quoted string ; MOVE MACRO ?F,?T,?L  CALL TOP ;SHOW FIRST.. CALL BOT ;..TWO LINES ; LOOP CALL KEYIN ANI 5FH ;MAKE UPPER CASE CPI 'Y' JZ TOPCONT CPI 'H' JZ BOTCONT CPI 'U' JZ TOP1 CPI 'J' JZ BOT1 CPI 'I' JZ TOP4 CPI 'K' JZ BOT4 CPI 'O' JZ TOP7 CPI 'L' JIF NOT NUL ?F IRPC ?C,?F ?Q SET '&?C&?C' ;;TEST FOR QUOTE EXITM ENDM IF ?Q EQ '''' LOCAL ?B,?Z CALL ?Z ?B DB ?F ?Z POP H ;GET FROM LXI B,?Z-?B ;GET LEN ELSE LXI H,?F ENDIF ENDIF IF NOT NUL ?T LXI D,?T ENDIF IF NOT NUL ?L Z BOT7 CPI 'C' JZ COMPARE CPI 'Q' JZ EXIT JMP LOOP ; TOP CALL RDTOP PUSH PSW CALL SCRTOP POP PSW CPI 1AH RZ CPI 0AH JNZ TOP RET ; BOT CALL RDBOT PUSH PSW CALL SCRBOT POP PSW CPI 1AH RZ CPI 0AH JNZ BOT RET ; TLXI B,?L ENDIF CALL MOVER MF SET -1 ;;SHOW EXPANSION ENDM ; ;DEFINE CP/M MACRO - CPM FNC,PARM ; CPM MACRO ?F,?P PUSH B PUSH D PUSH H IF NOT NUL ?F MVI C,?F ENDIF IF NOT NUL ?P LXI D,?P ENDIF CALL BDOS POP H POP D POOP1 CALL TOP JMP LOOP ; BOT1 CALL BOT JMP LOOP ; TOP7 MVI B,7 JMP TOP4LP TOP4 MVI B,4 TOP4LP PUSH B CALL TOP POP B DCR B JNZ TOP4LP JMP LOOP ; BOT7 MVI B,7 JMP BOT4LP BOT4 MVI B,4 BOT4LP PUSH B CALL BOT POP B DCR B JNZ BP B ENDM ; ORG 100H CALL START DB 'CV.COM' DB ' AS OF 05/06/79' DB 0DH,0AH,'$' START POP D ;GET ID MVI C,PRINT CALL BDOS ;PRINT ID ; ;INIT LOCAL STACK ; LXI H,0 DAD SP SHLD STACK LXI SP,STACK CALL INIT ;GET CONST, CONIN ; ;OT4LP JMP LOOP ; TOPCONT CALL TOP CALL STAT JZ TOPCONT JMP LOOP ; BOTCONT CALL BOT CALL STAT JZ BOTCONT JMP LOOP ; ;COMPARE FILES, SCROLLING, STOP AT DIFFERENCE ; COMPARE CALL STAT JNZ LOOP CALL RDTOP ;GET TOP BYTE PUSH PSW CA!  LL SCRTOP ;SCROLL IT POP PSW CPI 1AH ;EOF? JZ LOOP PUSH PSW ;SAVE FOR COMPARE CALL RDBOT ;GET BOTTOM PUSH PSW CALL SCRBOT POP PSW POP B CPI 1AH JZ LOOP CMP B JZ COMPARE CALL PRTOP CALL PRBOT JMP LOOP ; ;READBYTE FOR TOP FIVI A,0DH CALL TYPE MVI A,0AH CALL TYPE RET ; ;TYPE ROUTINE. PRINTS [HEX] IF NOT PRINTABLE ; TYPE CPI 9 JZ TYPEIT CPI 0DH JZ TYPEIT CPI 0AH JZ TYPEIT CPI ' ' JC DOHEX CPI 7FH JC TYPEIT DOHEX PUSH PSW MVI A,'[' CALL TYPE LE ; RDTOP LXI H,TOPFCB CALL RDBYTE RET ; ;RDBYTE FROM BOTTOM FILE ; RDBOT LXI H,BOTFCB CALL RDBYTE RET ; OPENER1 CALL ERXIT DB '++CAN''T OPEN FILE 1++$' OPENER2 CALL ERXIT DB '++CAN''T OPEN FILE 2++$' ; ;SCROLL TOP HALF OF SCREEN ; POP PSW PUSH PSW CALL LNIB CALL TYPE POP PSW CALL RNIB CALL TYPE MVI A,']' CALL TYPE RET ; TYPEIT PUSH B PUSH D PUSH H MOV E,A MVI C,2 CALL BDOS POP H POP D POP B RET ; LNIB RAR RAR RAR RAR RNIB ANI 0FH SCRTOP PUSH H LHLD TOPLPTR MOV M,A INX H SHLD TOPLPTR LXI H,TOPLCT INR M POP H CPI 0AH JZ PRTOP LDA TOPLCT ORA A RP PRTOP PUSH H LDA TOPLCT MOV B,A INR B INR B INR B LXI H,TOPL CALL PRLINE LXI H,TOPLINE SHLD TOP ADI 90H DAA ACI 40H DAA RET ; ; FROM EQU8.LIB: ; ;RDBYTE, HL POINTS TO EXTENDED FCB: ; ; 2 BYTE BUFFER ADDR ; 2 BYTE "BYTES LEFT" (INIT TO 0) ; 1 BYTE BUFFER SIZE (IN PAGES) ; 2 BYTE FCB ADDRESS (33 BYTES) ; RDBYTE MOV E,M INX H MLPTR XRA A STA TOPLCT POP H RET ; ;SCROLL BOTTOM HALF OF SCREEN ; SCRBOT PUSH H LHLD BOTLPTR MOV M,A INX H SHLD BOTLPTR POP H CPI 0AH JZ PRBOT LDA BOTLCT INR A STA BOTLCT RP PRBOT PUSH H LDA BOTLCT MOV B,A INR B IOV D,M ;GET BUFFER ADDR INX H MOV C,M INX H MOV B,M ;BC = BYTES LEFT MOV A,B ;GET COUNT ORA C JNZ RDBNORD ;NO READ ; INX H ;TO BUFFER SIZE MOV A,M ;GET COUNT ADD A ;MULTIPLY BY 2 MOV B,A ;SECTOR COUNT IN B INX H ;TO FCB PUSH H ;SNR B INR B LXI H,BOTL CALL PRLINE LXI H,BOTLINE SHLD BOTLPTR XRA A STA BOTLCT POP H RET ; ;PRINT LINE POINTED TO BY HL, B=COUNT ; PRLINE MOV A,M CALL TYPE INX H DCR B JNZ PRLINE DCX H MOV A,M ;WAS IT LF? CPI 0AH RZ MAVE FCB POINTER MOV A,M ;GET.. INX H ;..FCB.. MOV H,M ;..ADDR.. MOV L,A ;..TO HL ; RDBLP MVI A,1AH ;GET EOF CHAR STAX D ;SAVE IN CASE EOF PUSH D ;SAVE DMA ADDR PUSH H ;SAVE FCB ADDR CPM STDMA ;SET DMA ADDR POP D ;GET FCB CPM READ OR"  A A POP H ;HL=DMA, DE=FCB JNZ RDBRET ;GOT EOF MOV A,L ADI 80H ;TO NEXT BUFF MOV L,A MOV A,H ACI 0 MOV H,A XCHG ;DMA TO DE, FCB TO HL DCR B ;MORE SECTORS? JNZ RDBLP ;YES, MORE RDBRET POP H ;GET FCB POINTER DCX H ;TO LENGTH MOV A,P D POP B RET ; ;FOLLOWING FROM 'EQU8.LIB'----> ; ;MOVE, COMPARE SUBROUTINES ; IF MF ;MACRO EXPANSION FLAG SET? MOVER MOV A,M STAX D INX H INX D DCX B MOV A,B ORA C JNZ MOVER RET ENDIF ; ;EXIT WITH ERROR MESSAGE MSGEXIT EQUM ;GET LENGTH DCX H ;TO COUNT MOV M,A ;SET PAGE COUNT DCX H ;TO LO COUNT DCX H ;TO HI FCB DCX H ;TO EFCB START JMP RDBYTE ;LOOP THRU AGAIN ; RDBNORD INX H ;TO LENGTH MOV A,M ;GET LENGTH (PAGES) XCHG ;BUFF TO HL ADD H MOV H,A ;HL = EN $ ;EXIT W/"INFORMATIONAL" MSG ERXIT POP D ;GET MSG MVI C,PRINT CALL BDOS ;EXIT, RESTORING STACK AND RETURN EXIT LHLD STACK SPHL RET ;TO CCP DS 40H ;STACK AREA STACK DS 2 ; TOPFCB DW TOPBUF ;BUFFER ADDR DW 0 ;CHARS IN BUFFER DB 16 ;BUFD OF BUFF MOV A,L SUB C MOV L,A MOV A,H SBB B MOV H,A ;HL = DATA POINTER MOV A,M ;GET BYTE XCHG ;EFCB BACK TO HL CPI 1AH ;EOF? RZ ;YES, LEAVE POINTERS DCX B ;DECR COUNT DCX H ;BACK TO "BYTES LEFT" MOV M,B DCX H MOV M,C ;STORF SIZE IN SECTORS DW FCB ;FCB ADDR BOTFCB DW BOTBUF ;BUFFER ADDR DW 0 ;CHARS IN BUFFER DB 16 ;BUFF SIZE IN SECTORS DW MYFCB ;FCB ADDR ; MYFCB DB 0,'XXXXXXXXYYY',0 DS 19 DB 0 ; TOPLPTR DW TOPLINE BOTLPTR DW BOTLINE TOPLCT DB 0 BOTLCT DB E BACK COUNT RET ; ;----> INIT GETS CP/M CONSOLE STATUS AND CONSOLE ; OUT VECTORS ; INIT LHLD 1 ;GET WARM BOOT ADDR LXI D,3 ;LENGTH OF 1 "JMP" DAD D ;POINT TO CONS. STAT SHLD VSTAT+1 DAD D SHLD VKEYIN+1 RET ; ;CP/M CONSOLE STATUS VIA 0 TOPL DB '1: ' ;COLON TAB TOPLINE DS 128 BOTL DB '2: ' ;COLON TAB BOTLINE DS 128 TOPBUF DS 16*256 ;4K BUFFER BOTBUF DS 16*256 ;4K BUFFER ; ;BDOS/CBIOS EQUATES (VERSION 8) ; RDCON EQU 1 WRCON EQU 2 PRINT EQU 9 CONST EQU 11 OPEN EQU 15 CLOSE DIRECT BIOS CALL ; STAT PUSH B PUSH D PUSH H VSTAT CALL $-$ ;ADDR MOD. BY "INIT" POP H POP D POP B ORA A RET ; ;CP/M CONSOLE INPUT VIA DIRECT BIOS CALL ; KEYIN PUSH B PUSH D PUSH H VKEYIN CALL $-$ ;ADDR MOD. BY "INIT" POP H POEQU 16 SRCHF EQU 17 SRCHN EQU 18 ERASE EQU 19 READ EQU 20 WRITE EQU 21 MAKE EQU 22 REN EQU 23 STDMA EQU 26 BDOS EQU 5 FCB EQU 5CH FCB2 EQU 6CH FCBEXT EQU FCB+12 FCBRNO EQU FCB+32 #  ÃUNSPOOL Ver 3.0/T$ ÍÍg!~Ö WÕ!xx±Ê? ~#Ã2Ñxåbx±Êc {æÂVã~#ão}oÒ_„ÃE33oé:þÃÂb*ë¾Âb#w#w# Âx*"A!9~#fo"Ð*"X* "dmþ Êå!mÍNÊåm!qÍNÂÒ>2ÜÃåm!uÍNÂXÍ:\·ÂõÍ<2\\Í<Â*å!€~…oŒ•g#6?#6$ Í Í� ÍáÉ!\M!~# Â2ÿÿ Í2IÍ2KɾÀ#ÂNÉy ÍáÉ‹ ÍÃLST PUN OFF Invalid device.$ Error in system table. Attempting re-boot.$Êåm!qÍNÂÒ>2ÜÃåm!uÍNÂXÍ:\·ÂõÍ<2\\Í<Â*åÃoÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿÃÿÿyþÊ[þÊCþ ÂM:E·ÄfÃWþÂWë"CëÃÿÿ:E·>ÄfÃÿÿ2L!91åÅÕÍW2JÍHÂ:ÜþÂ�Í-·Ê{:F·Âô!n~·ü Ú ÃÎ!G>¦Âï2FåÃ{¯2EÑÁáùÉå#ëÍWÿ ÍW2H:I_ ÍWMÍWõ*CëÍW:H_ ÍWñá·È7É:L·ÊV ÍW·ÉÍ·É1:E·ìÊ„ ÍWÍö þnÊþyÂ, ÍWÃW1:E·Â¤ì ÍW*Aé!€"C ÍWÒ ÍW!3"!"!Ž"!"Ãÿÿ Unspooling in progress.$ UNSPOOL Completed.ÍCV.COM AS OF 05/06/79 $Ñ Í!9"313͹!lC ÍÝÅÕå\ÍáÑÁ<ÊXÅÕåCÍáÑÁ<Êq!ð> w,Âe$ÂeͯÍÀÍÓæ_þYÊþHÊþUÊÑþJÊ×þIÊâþKÊõþOÊÝþLÊðþCÊþQÊîÃuÍJõÍŠñþÈþ ¯ÉÍQõͼñþÈþ ÂÀÉͯÃuÍÀÃuÃäÅͯÁÂäÃuÃ÷ÅÍÀÁÂ÷$ Do you want to cancel UNSPOOL? {Y|N} ?>$ UNSPOOL Cancelled.$ÿÿ€ÿÿÿÿÿÿV ÍW·ÉÍ·É1:E·ìÊ„ Íÿ!Z" ÃŽ „$HD �$�‘"B@„"„A ’ "$‚B �@"€‰!„! BBI�IÃuͯÍÈÊÃuÍÀÍÈÊÃuÍÈÂuÍJõÍŠñþÊuõÍQõͼñÁþÊu¸ÊÍ¢ÍÓÃu!5ÍTÉ!<ÍTÉÍè++CAN'T OPEN FILE 1++$Íè++CAN'T OPEN FILE 2++$å*dw#"d!h4áþ Ê¢:h·ðå:hG!jÍí!m"d¯2háÉå*fw#"fáþ ÊÓ:i<2iðå:iG!íÍí!ð"f¯2iáÉ~Í#Âí+~þ È> Í$  > ÍÉþ Ê:þ Ê:þ Ê:þ ÚþÚ:õ>[ÍñõÍGÍñÍKÍ>]ÍÉÅÕå_ÍáÑÁÉæÆ�'Î@'É^#V#N#Fx±Â£#~‡G#å~#fo>ÕåÅÕåÍáÑÁÑÅÕåÍáÑÁ·á˜}Æ€o|ÎgëÂjá+~+w+++ÃT#~ë„g}‘o|˜g~ëþÈ +p+qÉ*"Ì"×ÉÅÕåÍáÑÁ·ÉÅÕåÍáÑÁÉ~# x±ÂÝÉÑ Í*3ùÉÂí+~þ È> Íå> ÍÉþ Ê:þ Ê:þ Ê:þ ÚþÚ:õ>[ÍñõÍGÍñÍKÍ>p\pCXXXXXXXXYYYÎ@'É^#V#N#Fx±Â£#~‡mð1: ÕåÅÕåÍáÑÁÑÅÕåÍáÑÁ·á˜}Æ€o|ÎgëÂjá+~+w+++ÃT#~ë„g}‘o|˜g~ëþÈ +p+qÉ*"Ì"×ÉÅÕåÍáÑÁ·ÉÅÕçÍáÑÁÉ~# x±ÂÝÉÑ Í2: Documentation of various original programs written by Ward Christensen ----CV.ASM---- OVERVIEW: A split screen video compare program for use with the VDM or other memory mapped video boards. Consists of two hard-coded scroll routines, one for eåach half (top/bottom) of the VDM. Allows independently scrolling each half, or doing a "full speed" file-file compare. USAGE: CV fn1.ft1 fn2.ft2 Chars to press to run: TOP BOTT ----Function---- Y H CONTINUOUS SCROLL U J 1 LINE SCROLL å I K 4 LINE SCROLL O L 7 LINE SCROLL C SCROLLS CONTINUOUSLY, COMPARING THE FILES STOPS ON A MIS-COMPARE. Q QUITS (EXITS) THE PROGRAM. (MUST BE USED. CTL-Z IN THE FILE COULD BE AN ERROR, SO CV STOPS BUT YOU MUST EXPåLICITLY Q) DEPENDENCIES: VDM or other memory mapped video board. "Could" be modified for 24x80. Works as is if you have a VDM at CC00H. %  åles may be compared in detail with this utility. See CV.DOC for instructions. OTERM was received from the Osborne Users Group (OUG) of the Washington, D.C. area. It is another terminal emulator utility. (Also, see MODEM7 on -FOG/UTL.001.) åI have not tested so cannot verify proper operation of this program. For information, see OTERM.DOC and OTERM.LTR. UNSPOL30, also from OUG, permits printing an ASCII file as a background activity while simultaneously performing other functions åat the console. To print the file filename.typ inserted in drive d, place UNSPOL30.COM in drive A. At the A> prompt, type UNSPOL30 d:filename.typ Make sure the printer is turned on. Drive d must nov be opened before the file has been compleåtely printed. Any other printing (e.g., ) initiated while UNSPOL30 is still working will result in mixed lines sent to the printer. For more detailed information, refer to UNSPOL30.DOC. Jim Woolley  DISK.DOC -FOG/UTL.010 First Osborne Group (FOG) Utilities Disk CV, from -CPMUG.040, permits simultaneously viewing and comparing two separate files. The files do not have to be ASCII, so .COM fi FOG Disk Librarian September, 1982 nt to the printer. For more detailed information, refer to UNSPOL30.DOC. Jim Woolley &  åååååååååå'  åååååååååå