IMD 1.16: 28/05/2007 17:10:37 -FOG/UTL043         -FOG/UTL043/UTL#043DOC*+CCHECK COM CCHECK MANB CCREF COM}CCREF DOCOSCHG COM)PCPIP2 COMc"#$%&'(PCPIP2 LBR !/UTL#043CRC,0ͫ!"\K!"^K!!9s#r!9^#V!W !9^#V)!9~#fo^#V^!-! !9^#V)!9~#fo^#V͍@}*^K#"^K+! !9^#V)!9~#fo^#V͍@¦!"\K! !9^#V)!9~#fo^#V͍@!"\K!9~#fo#s#r+!9~#fo+s#r#!"J!!9s#r!"ZK"J!"NK!"JK!"J!"J"VK"TK"RK"PK!"J*\KK!"\K!͟!9^#V!r!I"HK!"@K! !9^#V)!9~#fo^#V !"HK|!9^#V)!9~#fo^#V!9^#V^#V! !I !9Ô !9^#V)!9~#fo^#V"@K DMʲ *^K  ʗ*XK!9s#r$!9~#fo+s#r#!9^#V!ʗ!9^#V! ͪ !9^#V!͚I^#VI!9^#V!͚I^#V! 9^#V!͚I^#V! ͪ `ih *HK! u'*`K^#V!!*`K"`K!*XK"XKé*`K^#V!!*`K"`K!*XK" `i'(*HKu'*RKͼ"RK!"PKï *HK͞#DM`iV!͇S!%ͪ ü`i ʙ!9~#ƒ!͇ʃ*NK!Yͪ !!9s#r*NK#"NK+ñ`i\ʱ! DM*HK͞#`i"+!!9s#rï *XK|*`K##^#V*JK!͇*NK!ͪ !XK ï DM`i=5*HK`i -! /`iu'ï *`K^#V!^*`K^#V!ʣ DM`i=ʣ*HK`i ʃ! Å`iu'!͇ʣ*NK! ͪ ï DM`iû DM`ifr*HK͞#DMKrAr*HKu'!͟ DM `i ͟ï !B*`K^#V!? !*`K"`K!*XK"XK *`K^#V!m !*`K"`K!*XK"XK ï *XK|ʤ *`K##^#V*JKʤ !͇ʤ *NK!ͪ !͟ï !B*`K^#V! !*`K"`K!*XK"XK!͟ *`K^#V! !`i(J!͇+*NK!C ͪ !*`K"`K!*XK"XKR!͟*HK`i g! i`iu'Ï*HK`i ʇ! É`iu' DMhX DMiX DMlX DMeX*HK͞#DMKXAX*HKu' DM `i *`K"`K!*XK"XKï *XK|O *`K##^#V*JKO !͇O *NK!ͪ !͟ï !Bï ï !   !"+'!(p ) *;<=8>[ ]Z {} e *HK̈́%*XK[ !͇!I!"*`K^#VI*`K^#V! ͪ *`K^# `i(0!͇-*NK!c ͪ 8!͟*HK`i M! O`iu'u*HK`i m! o`iu'*HK`i ʍ! Ï`iu' *HK`i ʰ! ò`iu'! iwexï DM`i/*HK`i ! `iu'ïV) *J#"J+< *VK#"VK+< *TK#"TK+< < !    & !*`K"`K!*XK"XKú *RK| *J| *VK| *TK| !Ä !!9s#rz™ *J|ʬ !͇!!ͪ *@K| !I*@K"!I!+"!.ͪ *RK| !3ͪ *J| *J !j !͇*JK*NK! ͪ ï *HK͞#DM\s`i'R*HK͞#DM'p!͇j*NK! ͪ !"PK*HK͞#DMA³*HK͞#DM'ʰ!͇ʰ*NK! ͪ *HK͞#DMA*HK͞#DMA*HK͞#DM`i'!͇*NK!  !r*J!Rͪ *VK|@ *VK. !1 !*VK!zͪ *TK|m *TK[ !^ !*TK!ͪ *J|ʇ !9~#‡ !ͪ !I! #!9~#fo#s#r!9~#foV *J|ʿ ! *ZKe3-v-q-sr%s: Can't access %s %c %d: type , indent %d  , line %d. Assignment instead of equals in conditional, line %d. Bad if (no condition) line %d. Bad while (no condition) line %d. Line %d: Comment close without open, indent %d Bad character constant line %d Bad character constant with \ line %d Bad *JK#"JK+e`i 5*JK)))"JKe`i W*NK#"NK+!"JK!"PKe*HKu'! *HK͞#DM`i ˆ`i *HK͞#DM`i ˆ`i ˆ`i *HKu'! `iComment opened line %d unclosed by end of file. Nested c character constant with \0 line %d Error: '"' quoted string not ended by end of file. Warning: '"' quoted string not ended by end of line %d. Indent jumps backwards line %d. Indent jumps backwards line %d. Indent jumps backwards line %d. Unclosed bromment: line %d, indent %d. First open: line %d, indent %d Indent of comment close doesn't match open: lines %d, %d, indents %d, %d ͫ*PK|ʘ!*^K|0*XK!9s#rÿ!9~#fo+s#r#!9^#V!0!9^#V!'ͪ !9^#V!͚I^#VI!9^#Vak at EOF: opened on line %d. Summary: : OK Odd number of single quotes. %d too few %s braces. closingopening %d too few %s square brackets. closingopening %d too few %s parentheses. closingopening Possible error(s), but no net delimiter!͚I^#V!9^#V!͚I^#V!1ͪ î! 9^#V!O!"J!"J! 9~#ʒ!"J*Jp!*J ʏ!"J!Hͪ !!"ZK*\Kʩ!*J*\K !"\K!p~"!*@K|!I*@K"!I!"! 9~#!I!* imbalance. ͫ*HK͞#DM`i/*HK͞#DM`i*J*HKu'!/*NK"J*JK"J!|*HK͞#DM`iʎ!͇ʋ*J!ͪ `i/*HK͞#DM*!͇*J*J*JK*NK!!I ! 9*HKu'`i*Y*HK͞#DM/#! 9~#*J#"J+#*\K#"\K+!%d: type , indent %d, line %d. Other error messages being suppressed. Further warning messages being suppressed. : ͫ!9~#½!I"`K!"XK*`K"`K*XK#"XK+*XK(!͇*NK!,ͪ !e3L*JK*JI*JK+*JI!͇I*JK*J*NK*J!=ͪ ! 9*HKu'`i `i z*JK#"JK+õ`i ʜ*JK)))"JKõ`i ʵ*NK#"NK+!"JK*HK͞#DMͶAd*HKu'V! `i *Jr!"J!|r`i!9^#V*`Ks#r*JK*`K##s#r*NK*`Ks#r***stack overflow, line %d. ͫ!9^#V!I!}#!I!)#!I!]#!I!"!I!"!I!!"!I!&"!I!+"!I!;"! Yiy  ifif-conditionthenelsewhile-condition'NULL'ͫ!!9s#r!9s#r*`K^#V!9^#Vʜ*`K##^#V*JKʜ!*`K"`K!*XK"XK!9~#?!9~#fo#s#r*XK?!9^#V!͚*`K##^#V*JK?!9^#V!͚*`K^#V!NK!ͪ ó*`K##^#V*JK##L!͇I*NK*`K^#V!ͪ ó*`K##^#V*JKʳ!͇ʳ!I!"*`K##^#V*JK++ʚ!I!"*NK*`K^#V!)ͪ *`K^#V!!*`K"`K!*XK"XK!͟å*HK!9^#V! ! 9^#V<!9^#V!͚*`K##^#V*JK<!!9s#rÜ!9~#H!͇|*NK!9^#V!n!tq!v!Pͪ !9~#fo+s#r#|)!͇!I!w"*`K^#VI*`K^#V!ͪ *`K^#V*J#"J+ *VK#"VK+ *TK#"TK+  !  !9^#Vu'*HK! u'*`K^#V!ʥ!*`K"`K!*XK"XK*`K^#V!w!*`K"`K!*XK"XKI*`K^#V!ʥ!*`K"`K!*XK"XK Else with no if line %d. Dangling else -- bound to wrong if? "if" line %d, "else" line %!*`K"`K!*XK"XK|!*`K"`K!*XK"XKO*`K^#V!9^#V*`K##^#V*JKʽ!͇ʽ!I!"! 9^#VI*JK*`K##^#V*NK*`K^#V!ͪ ! 9!*`K"`K!*XK"XKO! 9^#V *J+"J#*VK+"VK#*TKd. Wrong indent for else (missing if?). "if" line %d, "else" line %d. ͫ!9^!ap!9^!z–!9^!Aʐ!9^!Z–!Ù!|g}o|/g}/o^#V#DM!99`iͪ|z2EG:E}`}}|!}|!}+"TK#! !͇O!I!"! 9^#VI*NK!ͪ Missing closer%s detected line %d: s Missing closing opened line %d. Mismatched indent on closing lines %d, %d; indents %d, %d. Muddle detected at unmatched closing |}|?>o&zo&|.}|>o&|o&z2EG:E||R/g}/o#z`/W{/_`DM!>2E))s#}o|gҋ :E=2Ek}:E=2Ek}DM!>))Ҫ =¢}}/o|/g#}||g}o{_|k |7g}o{_)}}o|gline %d. ͫ !9s#r! 3!9^#V! 6!9^#V!e !9s#r!l !9s#r!s !9s#r!e*HK͞#!9s#rK!9^#VA*HK!9^#Vu'*`K^#V!!*`K"`K!*XK"XK*`K^#V!!͇ *N#F# N#F#z { ##^#VBK^#VzA #y; ###) #x6 #~#fo}|>?o&}|>o&{_|g}ok |g}o~# x€ !9E~#— ! |ɧͫ!I"E! 9! 9^#V! 1)ͫ!9^#V"E! 9! 9^#V! 1)ͫ*E!   9^#V#ͫ!IDM`i~:!`i DMIH 7!!!! 9^#V#^!+!9s#r! 9^#V^="!9~#s!!v!!! 9^#V3! s!ʗ!!P"!9~#ʪ!!í!!! 9^#V3! s!!!P"!9~#!!!!! 9^#V3!Vs#r! ^#V"I!! s!9^#Vͫ! 9N#F! ^!͚ʘ&! ^#V`i^#V!9s#r!9^#V! ^#V! ^];ʘ&!`in&s!! 9^#V!&!`in&͚s!`is#r! s#r!`i~#&'! ^#V!'!!9! ^ s!"!!BBoB! ^g>!9P"!">K!! rc!w!a!3"!! s!! s#r!`is#r! s#r! s#r`iͫ!9N#F`i~ʴ"!I`i#DM+^#ʱ"!Ê"!I! #ͫ!9N#F`i~"! 9^#V`i#DM+^#"!"!];&! 9^#V! ^#V`is#r! ^#V! ^#V! s#r!`in&s! 9^#V`i~#fo#s#r+s!͚ͫ! 9N#F!9^#V!¥'! ^#V`i^#VI ʩ'!!9^#V`i~#fo+s#rs!9^#Vͫ! 9N#F! ^#V!'`i! s#r*I|(*Iͫ!9N#F!PY͚DM`i ?#! 9^#V! $?#!! 9^#V$ͫ! 9^#V͞#DM‡#! 9^#V͞#!9s#r!ʋ#!!9^#V!PYͫ! 9N#F! ^#V`i^#VH m$! ^!͚#!!`in&͚s`i~##'! ^#V!9s#r*I^#V"I<(! ^#V`(!9s#rz<(!! s#r'!`in&s!9^#V! s#rͫ*E|{(!0"E"E*EDM!9^#V*E"EPYV ʠ(`i"E!*E*EW (*E*E͚!9s#r0ʗ(!9^#V*E"E`iͫ!9^#V"E! 9! 9^#V!! ^#V! ^7!9s#r!P$!9~#7$!:$!`in&s!! ^#V`is#r!9~#fo! s#r`i~#fo#s#r+^!͚ͫ!)I! 9^#V$ͫ!9N#F! 9^#V$$!! 9^#V`ic $$!`iͫ! 9N#F! ^#V)1)!*Esͫ!9^#V*E#"E+s!͚ͫ!L9N#F!N9~#fo#s#r+^!F9s#rz.!F9^#V!%ʽ.!!9s!!D9s#r! !B9s#r!!@9s#r!N9^#V^!F9s#r!-)!!D9s#r!N9~#fo#s#r+^!F9s#r!F9^#V!0)!0!B9s#r!!>9s#r!N`i^#VH "%!9^#V!͚#&!9^#V`i~#fo#s#r+s!͚ͫ!! 9^#V#&ͫ!IDM`iIV ʃ%`i DM̈́%c%ͫ! 9N#F!!9s#r`i~&! ^!͚%!#&!9s#r! ^5!9~#fos#r! ^!͚&*I! ^#9~#fo#s#r+^!F9s#r!0X*!F9^#V!9X*!>9^#V! ͚!F9~#fo!>9s#r)!F9^#V!.*!!@9s#r!N9~#fo#s#r+^!F9s#r!0*!F9^#V!9*!@9^#V! ͚!F9~#fo!@9s#rs*!F9^#V!l+!N9~#fo#s#r+^!F9s#r!:9!R  9~#fos#rIB\B+!F9^#V!dT+!:9!R9~#fo##s#r++^#V͹E\B+!F9^#V!e„+!F9^#V!f„+!F9^#V!gʪ+!9!R9~#fos#rEE+!:9!R9~#fo##s#r++^#VͫE\B!F9^#VÉ-!9!!>9IBoB5/!9!49s#rð-!:9IBoB.!9*$10͋ .0͋ *EDM*Eo&͋ L0o&͋ *E*+++*EDM*E!9N#F#^#Vkb6#> 6 #=w0>6#=€0 : >³0 A0[Ҥ0@ð0a0{0`w# .00ʶ00w#÷0{o|g 00w#0!!|a{ !9IB4B́EQ,!9! !>9IBͪBoB.!9!49s#r!-!69~#fo+s#rst,!9! !>9IBoB.!9!49s#rð-!9! !>9IBoB5/!9!49s#rð-!9!!>9IBoB5/!9!49s#rð-!:9IBE!49s#r@!89s#r-!F9^#V!e,!,!!9^#V*E!9}|1*E"E|!ͫ!!!5FQ@!:o&͚5Fs!@3"E!5FDM!"F*F-3`i^! ‹1`i^! ʓ1`i#DMo1`i^z-3`i^!>ʹ1!!9s#r1`i^!<2!!9s#r`i#DM^! 1`i^! 11`i!9s#r`iB9^#V!-!-!B9^#V!9! 9EEE!9! 9!49s#r@!89s#r!!@9s#r-!:9IBE!F9s#r!F9^#V!9!69s#rsð-! o+d+uw,x,s,e,f,c]-o-!9!49~#fo!89s#r!89^#V!@9~#fo-!@9^#V!89s#r!D9~#&.!>9~#fo+#DM~62`i^! $2`i^! 32!`i#DM+s621!9^#V5!9~#h2!!9^#V3!9s#rÁ2!!9^#V3!9s#r!9^#V!2!A3!@!9^#V!1A!c3!1A!@!!];! e3*3`i*F#"F+)Es#r`i#DM~*3`i^s#r#!89~#fo&.!B9^#V`iͪ-!!69s#rC.!69~#fo#s#r!49^#V~ʃ.!69^#V!@9~#foʃ.!49~#fo#s#r+^`iͪ4.!D9~#º.!>9~#fo+s#r#!89~#foʺ.! `iͪÍ..!F9^#V`iͪ=)ͫ! 9N#F`i͹EoB! 9IB͇B/DEE^!9! 3`i^! '3!`i#DM+s*32b1!E*Fe3Can't open file for redirection: ͫY%!9~#3!3+@0A:$$$.SUBͫ!">K!ͫ!con:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:ͫ! 9^#V!! 9^#V3ͫ!J~#fo+s#rs!9`i͹E͛BIBC\BͺB.!9^#Vͫ!9N#F! 9IB4B́E/! 9IBE͚!9s#r! 9! 9IB4BͬC4B1C\B`i͹EoB!9IB͇B/DE)!9~#foE^!9~#fo+s#rs! 9`i͹E͛BIBC\B!9^#V!! 9s#r!!9s#r64! 9~#fos#r!9~#fo#s#r!9^#V! `4! 9^#V!^#V!3j44!">K!!JDMz4`iDM`i~#ʛ4!9^#V`i^#V͍@ʛ4r4! ^#V!9s#r!9^#V!͚#!9s#r!9^#V!͚4!9^#V^! 9^#Vsz4!">K!!9^#V!͚  +5!9^#V#^! 9^#V#sz+5!">K!! ^#V! 9^#V!s#r!9^#V##^! 9^#V##s!9^#V###^! 9^#V###s!7! 9^#V!s#r! 9^#V!9^#V!9^#V!9^#V!9^#V!^#Vͪ! 9!5!!9^#Vͫ!9^#V!5!9^#V!  6!:`i!~#fo#s#r!ͫ:Go&| :!}2G!}2G}2G!G! +0! !+0:Go&n:!}2G!! :Go&#}2GG#s! :Go&#}2GG#s!"H:Go&DM! 9~#fo:! 9^#VBK*HG!9^#VQ@`i*H"H`i:Go&}2G`iͫ! 9N#">K!!9^#V)))JDM! ^#V! ^#Vͪ!9s#r!! s! s! s`is!3! s#r!9^#Vͫ!FDMu6`i&DM`iGV ʐ6!% ^zʚ6m6!">K!! 9^#Vd0ʵ6!">K!! 9^#V!͚6!+0!+07! 9^#V!͚7!+0F!!9s#r;!9~#fo#s#r!9^#V!9~#foT;! 9^#V+0`i#DM+s!T;;!9^#Vͫ!9^#V!‚;!9^#V! ʌ;!">K!!9^#V)))JDM! 9^#V! 9^#V! ^#V! ^)H^#Vͪͫ!DM!9^#V!9s#r!9^#V!$~DK!27! 9^#V!͚27!">K!!!! s#r!# s!$ s`i!9^#V!s#r! 9^#V!͚#!% s!͚ʌ7!7!9^#V!s#rß7!7!9^#V!s#r!ͫ!! 9^#V!%s!ͫ!9N#F!+0!!% s!ͫ!ͫ!9^#V!8!^!DM!9~#foW &K!!9^#V)))JDM! 9^#V! 9^#V! ^#V`i^)G^#Vͪͫ!DM!9^#V!9s#r!9^#V!$~8!9^#V!$^!DM!9~#foW ʰ8!9^#VBK!9^#V! 9^#V͑98!!9^#V`ic !9s#rz99!9^#V!9^#V`i9^#Vͫ!9N#F!!+0!!+0">KB=*>K]=!">K!!!q@i=*>K|i=!! 9^#V! 9^#V!$ ^!Q@!"+0">K|ʡ=!!$ ^! 9~#fo͚!$ sz=`i!~#fo#s#r!ͫ!9N#F!!9s#r>!9~#fo#s#r! 9^#V?!9s#rz99!9^#V!9~#foPY!9^#V!PYDM`i!9~#foV ʈ9!9^#V`i!9^#V`i! 9^#V͑9ʈ9`i!9^#Vͫ!9N#F!!+0!!+0">K|9!! 9^#V!$ ^!!9^#VQ@!$ ^! 9~#fo͚!$ sz!9^#V!9~#fo^>`i#DM+^!9s#r!9^#V! F>! !9^#V+0!9^#V!9^#V+0=!9^#Vͫ!9^#V!£>!9^#V! £>!9^#V)))J^z±>!">KBB!9^#V)))J^#VBK!9^#VR?!+0>!">KBB!#+0!!  $ s! 9!! ^#VͫE4B~CoB!$ ^͹E͇BC͛BIBC\Be?!">KBB! >?A?D?!!# s! 9IB4B́Eʠ?!!! s#r!$ s!">KBB! 9IBE͚!$ s! 9IB4BͬCE!! s#r! 9IB͋ !?͋ "*E!"E*E2I*IIC:I2IbDI*Iw#D:IB*IICy2I*IICbD I*Iw#QD:IB! Iw#hD> 2I!I~w#yDO I!I#ŽDy©D!I4!I5sD!I5D!I~w#¶DO I!I#Dy©DÝD I!I#D*II~#D* @*E!4@#4*E+"E}?o&">K*Eͫ!9!.9^#Vd0!9!+0! 9F+N+V+^+~+ngxo@w# b@!9^#V#N#F#nxʋ@s# À@!9^#V#~#foxʱ@¶@ʱ@# Ý@!@!}!}!9^#V#~#fox@~@# @!9~#foA#@I I~#E!Iw#E> 2I!I~w#&EQEI!I#:EQEEE!I5 E*IIw#`EB{E!BpE!w#°B*I~{E#¿BpE=ɯ<*I*I###BBBBBB+3W8::B*I*I#C*I*I#&C*I*I#;C*I*I#PC*I*I#eC*I~/w#uC*I~?G*I^#V#~#fo))ҚC#’CDM*Is#r#q#p*I~?W*I###~C~w+C¿C7~w+CC~#COíB*IICy3;==  HI773333333333338K38K3J3J3J3J3J3J3J3JBK7`6773333333333338K38K ccheck CP/M 2.x ccheck NAME ccheck - C program checker SYNOPSIS ccheck [-q] [-v] [files ...] EXAMPLE ccheck foo.c >foo.err DESCRIPTION Ccheck checks C programs for correctly matching brackets of all kinds, including quotes and comment brackets, checks that the indentation of matching brackets also matches, and checks for symptoms of 3 kinds of errors that the C compiler allows without warning: "dangling else" error  s where an else is bound to the wrong preceding if, nested comments, where the first close-comment bracket prematurely ends the outer comment, and the use of assignment ('=') where equality-test ('==') was meant. It is meant to be run as aen warnings and errors is somewhat arbitrary. Because C allows certain errors it would be inappropriate here to make the distinction between compilable and non-compilable programs. Basically only indentation mismatches are warnings, and t pre-check on C programs before calling the compiler. Its virtues are that it allows you to weed out some trivial syntactic errors faster; for the errors it detects it produces better error messages than the compiler; and it detects the erhe symptoms of dangling elses or using assignment ('=') instead of equality ('==') are treated as errors. The program will always print some message if you have an error involving mismatched brackets of some kind, and will pass any legal prors mentioned above that the compiler ignores. The indentation rules it applies are that the indentation of the first non-white character on the line holding an opener should match that on the line holding the matching closer. These rogram if its indentation is also correct, unless '=' is used in the top level of a condition expression. For cases in between it tries hard but may make mistakes, though if you are aiming for a properly indented program you can be sure tharules are fairly weak (e.g. they are compatible with but do not enforce the Ingres format standard), though they may still conflict with your own habits. The -q (quiet) option suppresses messages classed as warnings, which includes those at an error means that something is wrong. Page 1 (printed 1/9/83) ccheck CP/M 2.x ccheck When it detects signs of a bracket mismatch it makes a decision on the spot about the most likelybout mismatched indentations. The -v (verbose) option prints more information -- it shows what is on its internal stack at the time an error is detected. It is probably only of real use for debugging ccheck itself. The distinction betwe underlying cause. It does not wait for more evidence to disambiguate this, so on the occasions it is wrong, not only are the messages inappropriate to some degree, but several messages may be produced concerning what is really a single (un  recognized) error. The most common example of this is if you have the wrong indent on a closing brace such that it matches an earlier opening brace, ccheck assumes first that there is a missing closing brace, and then when it finds the secates the original poor design choice. These are: a) Not supporting nested comments (nor warning about them in the compiler). b) Not having an "endif" (or "fi") closer to terminate if statements, thus leaving users open to the danond closing brace that this has no matching opening brace (this having been already wrongly accounted for). The summary it gives at the end tells you whether there was really a net imbalance of brackets, which may help sort out these casesgling else problem. (This is the problem that if you have nested if statements the following else will get bound to the nearest preceding one, which is not always the intuitively reasonable one.) This is especially troublesome, as it . Ccheck was written as a result of the following observations. 1) In Unix, modularity suggests that it is appropriate to have different programs with different special expertise where other systems would cram them all into one progmeans among other things that if you modify a program by adding an else clause to an existing if statement, you may have to modify (by adding braces) not the if statement to which you are attaching the else, but a nested if statement actingram. Thus lint incorporates special knowledge about type-checking and portability considerations that would be inappropriate in a compiler. Ccheck like lint takes advantage of the fact that since it is not the compiler it can be wrong some as its "then" clause. c) The use of '=' for assignment, following Fortran's bad usage. It seems to be the case that both '=' and '==' get seen and mentally read as "equals" so that it is hard to spot if you write '=' for '==' in cond of the time without preventing anyone from doing anything. 2) C has, in my opinion, some bad choices in its syntax that cause frequent errors by users. It turns out, though, that these can largely be checked for cheaply, which alleviitionals, an error that may happen either because of the language-promoted confusion itself, or because of a typing slip (which is then hard to spot). 3) The C compiler produces outstandingly unhelpful error messages as a rule, from th  e point of view of a user who wants to make corrections as fast as possible. Once past Page 2 (printed 1/9/83) ccheck CP/M 2.x ccheck the beginner stage however, a user can usually do all righe remaining code. However its relatively fast running time means that correcting only the first error in each cycle is not too time consuming. BUGS It inflicts its own idea of good indentation, which neither matches a recognized stht by ignoring the text of the error message, which almost never tells her/him what to correct, and attending to the line-number: generally when your attention is directed to only a line or two you can tell what is wrong. This breaks dandard exactly nor your own practices. It can generate several error descriptions where there is only one error -- one that it does not describe. It does not deal with the preprocessor intelligently. There are two kinds of case to note:own when the compiler fails to generate anything like the helpful line number. This is usually however in cases of failure to match brackets of some sort -- something which is easy for another program to check. Furthermore attending to the 1) defines may themselves not be good C e.g. #define ctrl(letter) ('letter' & 077) will work ok in the program but will draw "bad character constant" from ccheck. Similarly, though more questionable, you might define your own ope user's indentation usually allows accurate diagnoses and helpful messages to be generated in just these cases. Ccheck, then, attempts to address these points largely by checking bracket matches and using indentation to guess what the reaner and closer e.g. #define then { #define endif } 2) Some uses of #ifdef will confuse ccheck, for instance if alternative if-condition lines are given, controlled by #ifdef ... #else ccheck will see them both. Similarly usl problem was -- whether a missing opener, a missing closer, wrong indentation, or some other mistake such as a spurious character. Like the compiler, it has only a fair chance of recovering after an error and commenting intelligently on ting "#ifdef comment" to comment out parts of the text in order to overcome the lack of nested comments in C will draw fire if the commented out section is not legal C. Do-while loops within an "if" clause result in the "if" being forg  otten. AUTHOR Steve Draper PROVIDER Jeff Martin Page 3 (printed 1/9/83) `$! 9^#VBK!9^#V!9s#r!9^#V!9s#rG`i#DM+!9~#fo#s#r+!9^#V^k6`i^k6 ʊ!9^#V^k6`i^k6%`i~ʨ!9~#fo+s#rzʨ0! 9^#VBK!9^#V!9s#r!9^#V!9s#r`i#DM+!9~#fo#s#r+!9^#V^`i^ !9^#V^`i^%`i~3!9~#fo+s#rz3!!9N#F`i^#V^!\ ``i^#V^`i^#V#~p!\`i~#fo#s#r`i^#V^}2,:`i^#V^!-:":^! 9N#F!!9s#r`i!9s#r!9^#VBKx`i^#V!9s#r!9^#V`is#r!9^#V  !9^#VͭDM! 9^#V`is#r`i!9N#F3`i#DM! 9~#fo#s#r+^`i^b`i~_!.!! 9N#F!9^#V!9s#rÒ!9~#fo+s#r!9~#ʼ! 9~#fo#s#r+^`i#DM+sÃ!9^#V! 9N#F! 9~#fo#s#r+! 9^#V~>`i!9s#r!s#r!9^#V!9^#Vf!9s#r!!9^#V!9~#fos!9^#V" > *s?#"s?*>!!8:,!8:!9N#F`i^#V^! ¤`i^#V^! ʨ!`i^#V^!/A `i^#V#^!*A `i~#fo#s#r^!/ = `i~#fo#s#r^!* :9~#fo#s#r+!9^#V~;! 9^#V^!9^#Vsz>!9^#V`i%! 9N#F!!9s#rt!9~#fo#s#r`i#DM+~ʂe!9^#V! 9^#VK#!9s#r!9^#VͭDM!9^#V! 9^#Vf`i! 9N#F`i!9s#r!9~#fo#s#r`i~!9 `i^#V~7 R`is#r~+ `i~#fo+s#r7 !E !!!unexpected eof in white space ! 9N#Ftʈ `i~#fo#s#rp `i^#V^!a1ʯ `i^#V^!z1 `i^#V^!A1 `i^#V^!Z1 `i^#V^!_ʋ !a!9s`i~#fo#s#r+^#V^! 9n& !9^#V`i%! 9N#F`i~#ʨ!`i^#V!^#V!9^#V!9s#r!Kʃ! 9^#V`i^#V##$DMè!9^#V!Lʨ! 9^#V`i^#V$DM`i!ͭDM!!;4!! s#r! s#r! 9^#V! s#r`i! 9^#Vs#r!^! 9~#fo#s#r+s`i^#V^C6 `i^#V^!a1O `i^#V^!z1 `i^#V^!A1v `i^#V^!Z1 `i^#V^!_  `i^#V^!"¯ `i^#V^!' `i^#V^!9s7`i~#fo#s#r`i^#V~ R`is#r^z `i^#V^!9n& 9N#Fx?! 9^#V! ^#V! 9^#V! 9^#V`i^#V!9^#V!u?$!9s#r~#!9^#V͋!9^#Vͫ!9^#V!9^#V^#V!$!9s#r~#!9^#V!i?$!9s#r~#!9^#V͋! 9^#Vͫ!9^#V^#V!^#V!9^#V `i~#fo#s#r `i^#V^C6 `i~#fo#s#r^!9s!9^k6!9s!0!9n&1l !9^!91# !a!9n&1ʍ !9^!f1# !A!9n&1ʮ !9^!F1# !9^!x# !9^!l# !9^!.# !0!9s `i^#V^!9s`i~#fo#ͫ!9^#V^#V!DM`i~#7`i^#V##^#V!9~#fo ``i^#V!`is#r!9^#V`i^#V##s#r! 9N#F`i^! ‰`i^! ʑ`i#DMm`i^! ʶ!9^#VK!9s#r?`i^!"!H!9s#r`i#DM`i^!<!K!9s#r`i#DM!N!9s#r!! 9^#Vs!9^! 9N#F!:!9s#rF !9~#fo##s#r!9^#V~#z !9^#V^#V!9s#r!1z 6 !9^#V!autobreakcasecharcontinuedefaultdodoubleelseexternfloatforgotoifintlongregisterreturnshortsizeofstat  icstructswitchtypedefunionunsignedwhileu!9N#F!"s?R!9s#r~!9!9d !9s!#  !9^!  !9^!aʫ !9 « *s?!9@!9!9d !9so !9!9d a!!9!9!9^#Va::}͏}}|*!}*|!}|C}|?>o&zo&|]}|>o&|o&z2:v::||/g}/o#z/W{/_ÏDM!>2:))Ң#}o|gҺ ::=2:š}::=2:š}DM!>)) =}}/o|/g#}|*|g}o{_*s?!9@!!9G!9!9d *s?!9@!!9[!!9o!!9‘!!9ʳ!9!9d *s?!9@!9!!J>@ includedefineendifelseifdefifndef? can't parse t"||7g}o{_")}}o|gN#F# N#F#zF{J##^#VBK^#Vzp#yj###X#xe#~#fo}|>?o&}|>o&{_"|g}oš|g}o~# x¯!9:~#!|ɧ!?>":! 9! 9^#V!$~oken = %s !!9s#r! 9^#V~^!?>! 9^#V^͢! 9~#fo#s#r!9~#fo#s#r!9^#V!9N#F!m ! 9s#r! ^#V ! 9~#fos#r! ^#Vͧ! 9s#r! 9^#V^#V! 9s#r! 9~#T! 9~#!r ! 9s#r!z ! 9~#fo!9^#V":! 9! 9^#V!$~*:! 9^#V͢!4>DM`i~i`i DM>wf!E! 9^#V#^!+!9s#r! 9^#V^l!9~#ʢ!å!! 9^#VD(! s!!!9~#!!! 9^#VD(! s!!s#r! 9^#V##^#V!~!! 9~#fos#r! 9^#V!F͆Q! !! 9s#rö! 9^#V!͆l!  %4d !9^#V!^#V ! !g! 9^#V!^#V !9N#F`i1!|k`i+DMLk!! 9~#fo!9~#!!! 9^#VD(! s!@!!͏6ͼ6! ^ʹ2!9!"#?!Prwab!! s!! s#r!`is#r! s#r! s#r`i! 9^#VBK!4>!9s#r! !9^#V! !9^#V`i#DM+sû!`is!##s#r^#V;">|6! 9^#V^#V!!J>h! 9^#V^#V!!J>! 9^#V^#V. *>&!*u?Ͳ'Use: cref file1 file2 file3... r? can't open file %s Processing file: %s |g}o|/g}/o^#V#DM!99`i|z2:v9^#V!#`i! 9~#fo#!! 9^#V! 9^#V!9s#r! 9~#fo+s#r!Lʒ!9^#VDM ʒ`i!9~#fo#s#r+s`i ’?!!9^#Vs`i!9^#V! 9~#fo!! 9^#V! 9N#F@!9s#r`i~#fo+s#r!  P !9^#V!9N#F`i~V!?>`i#DM+^͢S!,!?>! ͢!9N#F`i~ʞ! 9^#V`i#DM+^͢ʛ!p!!9N#F!PYDM`i ! 9^#V! ͏!! 9^#V͏! 9^#V@i~#fo#s#r+s!! 9N#F! ^#V!B`i! s#r*>|b*>!9s#r*>^#V">É! ^#Vͭ!9s#rz‰!! s#r3!`in&s!9^#V! s#r*;|!J%";";*;DM!9^#V*;";PYͅ`i";!*;*;͆,*;*DM)! 9^#V@!9s#r!-!!9^#V!PY! 9N#F! ^#V`i^#Vw! ^!t!!`in&s`i~#š! ^#V! ^#V! ^6,!9s#r!1!9~#!!`in&s!! ^#V`is#r!;%!9s#rJ%!9^#V*;";`i!9^#V";! 9! 9^#V!`~!*;s!9^#V*;#";+s!!L9N#F!N9~#fo#s#r+^!F9s#rz#!F9^#V!% #!!9s!!D9s#r! !B9s#r!!@9s#r!N9^#V^!F9s#r!-%!9~#fo! s#r`i~#fo#s#r+^!!J>! 9^#V͏!9N#F! 9^#V͏Kg!! 9^#V`i͒͏Kʌ!`i! 9N#F! ^#V`i^#Vw!9^#V!!9^#V`i~#fo#s#r+s!!! 9^#V!D9s#r!N9~#fo#s#r+^!F9s#r!F9^#V!0@!0!B9s#r!!>9s#r!N9~#fo#s#r+^!F9s#r!00ʥ!F9^#V!91ʥ!>9^#V! !F9~#fo!>9s#rK!F9^#V!.!!@9s#r!N9~#fo#s#r+^!F9s#r!00!F9^#V!91!@9^#V! !4>DM`i>ͅ%`i DM&! 9N#F!!9s#r`i~ʳ! ^!j!!9s#r! ^'*!9~#fos#r! ^!ʳ*>! ^#Vs#r! ^#V">!! s!9^#V! 9N#F! ^!:! ^#V`i^#V%!9s#r!9^#!F9~#fo!@9s#r!F9^#V!lk!N9~#fo#s#r+^!F9s#r!:9!R9~#fos#r͖6ͩ6 !F9^#V!dʡ!:9!R9~#fo##s#r++^#V:ͩ6 !F9^#V!e!F9^#V!f!F9^#V!g!9!R9~#fos#r!:!: !:9!R9V! ^#V! ^ͪ/:!`in&s!! 9^#V!s!`in&s!`is#r! s#r!`i~#„! ^#V!ʽ!!9! ^ͪ/!! 9^#V! ^#V`is#r! ^#V! ^#V! s#r!`in&s! 9^#V`~#fo##s#r++^#V9ͩ6!F9^#V!!9!!>9͖6ͼ6͂#!9!49s#r!!:9͖6́69ʞ !9! !>9͖66ͼ6#!9!49s#r!-!69~#fo+s#rs !9! !>9͖6ͼ6#!9!49s#r!!9! !>9͖6ͼ6͂#!9!49s#r!!9!!>9͖6ͼ6͂#  !9!49s#r!!:9͖6:!49s#r85!89s#r"!F9^#V!eH!!K!!!B9^#V!b!!j!!B9^#V!9! 9!:!:!:!9! 9!49s#r85!89s#r!!@9s#r"!:9͖6:!F9s#r!F9^#V!9!69s#rs!Po% dK u x s!e2!f2!c!!!s#r&`i^!<+'!!9s#r`i#DM^! >&`i^! A&&`i!9s#r`i#DM~ʃ&`i^! q&`i^! ʀ&!`i#DM+sÃ&K&!9^#V'*!9~#ʵ&!!9^#V$(!9s#r&!!9^#VD(!9s#r!9^#V!('!'!5!9^#V!~5!'9!49~#fo%!89s#r!89^#V!@9~#foL8"!@9^#V!89s#r!D9~#s"!>9~#fo+s#r#!89~#foLs"!B9^#V`iB"!!69s#rÐ"!69~#fo#s#r!49^#V~"!69^#V!@9~#foK"!49~#fo#s#r+^`iÁ"!D9~##!>9~#fo+s#r#!89~#foL#! `i!~5!85!!ͪ/! Ͳ'w'`i*;#";+);s#r`i#DM~w'`i^! e'`i^! t'!`i#DM+sw'?'ï%!;*;Ͳ'Can't open file for redirection: !9~#'!'x4g$A:$$$.SUB!"#?!!con:CON:lst:"#!F9^#V`iÊ! 9N#F`i:ͼ6! 9͖66|8:;^!9~#fo+s#rs!9`i:6͖6B8ͩ67(#!9^#V!9N#F! 9͖6́69B$! 9͖6:!9s#r! 9! 9͖6́67́6~7ͩ6`i:ͼ6!9͖66|8:)!LST:prn:PRN:pun:PUN:rdr:RDR:! 9^#V!! 9^#VD(!>! 9s#r!!9s#rÃ(! 9~#fos#r!9~#fo#s#r!9^#V! Kʭ(! 9^#V!^#V!'·(b(!"#?!!%?DM(`iDM`i~#(!9^#V`i^#V4(ÿ(! ^#V!9s#r!9^#V!9~#fo;^!9~#fo+s#rs! 9`i:6͖6B8ͩ6!9^#V!9͖6ͼ6#!9*q%g$ͺ{$ͺ*:DM*:o&ͺ͙$o&ͺ*:*+++*:DM*:!9N#F#^#Vkb6#> 6 #=$>6#=$ : >% A:%[$@$a:%{:%`w#!9s#r!9^#V!A)!9^#V^! 9^#VszA)!"#?!!9^#V!x)!9^#V#^! 9^#V#szx)!"#?!! ^#V! 9^#V!s#r!9^#V##^! 9^#V##s!9^#V###^! 9^#V###s!-,! 9^#V!s#r! 9^#V!9^#V!9^#V!9^#V!9^#V# .%4%%A%w#%{o|g 4%A%w#%%!!|a{ !9^#V*;!9}|l%*;";|!!!!V;͞4!:o&V;s!'";!V;DM!";*;Kz'`i^! %`i^! %`i#DMü%`i^zz'`i^!>&!!9!^#V! 9!K*!!9^#V!9^#V!KL*!9^#V! LV*!"#?!!9^#V)))>DM! ^#V! ^#V!9s#r!! s! s! s`is!'! s#r!9^#V!;DM*`i&DM`i=ͅ*!% ^z*ú*!"#?!! 9^#Vͱ$+!"#?!  ! 9^#V!+!x$!x$_+! 9^#V!R+!x$\+!"#?!+! 9^#V!+!"#?!!!! s#r!# s!$ s`i!9^#V!s#r! 9^#V!#!% s!+! ,!9^#V!s#r+!+!9^#V!s#r!!! 9^#VV! ^)>^#V!DM!9^#V!9s#r!9^#V!$~ʑ0!9^#V!$^!%DM!9~#fo͆s0!9^#VBK!9^#V! 9^#VT1ʑ0!!9^#V`i%͒!9s#rz0!9^#V!9^#V`i! 9^#V/4!9s#rz0!9^#V!9~#fo%PY!9!%s!!9N#F!x$!!% s!!!9^#V!K[,!9^#V! Le,!"#?!!9^#V)))>DM! 9^#V! 9^#V! ^#V`i^)=^#V!DM!9^#V!9s#r!9^#V!$~-!9^#V!$^!%DM!9~#fo͆,!9^#VBK!^#V!PYDM`i!9~#foͅK1!9^#V`i%!9^#V`i! 9^#VT1K1`i!9^#V!9N#F!!x$!!x$"#?1*#?ʪ1!"#?!!!;4ö1*#?|ʶ1!! 9^#V! 9^#V!$ ^!͞4!"x$"#?|1!!$ ^! 9~#fo9^#V! 9^#V--!!9^#V`i%͒!9s#rzʆ-!9^#V!9^#V`i! 9^#V'4!9s#rzʆ-!9^#V!9~#fo%PY!9^#V!PYDM`i!9~#foͅ-!9^#V`i%!9^#V`i! 9^#V--`i!9^#V!9N#F!!x$!!x$!$ sz 2`i!~#fo#s#r!!9N#F!!9s#rM2!9~#fo#s#r!9^#V!9~#foKʫ2`i#DM+^!9s#r!9^#V! ʓ2! !9^#Vx$!9^#V!9^#Vx$>2!9^#V!9^#V!K2!9^#V! L2!9^#V)))>^z2!"#?͏6!"#?| .!! 9^#V!$ ^!!9^#V͞4!$ ^! 9~#fo!$ sza.`i!~#fo#s#r!:=o&|.!}2=!}2=}2=!=! x$! !x$:=o&ʻ.!}2=!! :=o&#}2==#s! :=o&#}2==#s!">:=o&DM! 9~#foL9^#V)))>^#VBK!9^#Vß3!x$>3!"#?͏6!#x$!!$ s! 9!! ^#V9́67ͼ6!$ ^:6R76͖6R7ͩ6ò3!"#?͏6P3Q333!!# s! 9͖6́693!!! s#r!$ s!"#?͏6! 9͖6:!$ /! 9^#VBK*>=!9^#V͞4`i*>">`i:=o&%}2=`i! 9N#F!!9s#rk/!9~#fo#s#r!9^#V!9~#foKʡ/! 9^#Vx$`i#DM+s!¡/\/!9^#V!9^#V!K/!9^#V! L/!"#?!!9^#V)))>DM! 9^#V! 9^#V! ^# s! 9͖6́67:!! s#r! 9͖6ͺ!44ͺ"*:!":*:m4*:!4_4#4*:+":}54o&"#?*:!9!.9^#Vͱ$!9!x$! 9F+N+V+^+~+ngxʼ4w# ï4!9^#V#N#F#nx4s# 4!9^#V#~#fox454# 4!   5!}!}!9^#V#~#fox55~55# $5!9~#foM5#D5}!9^#V#^#V#N#F4!9^#V#^#V#N#F$5!9^#V#~#fox55~ʟ5# Ð5$5!9^#V#^#V#N#FÐ5!9^#V#n~55#5!|!9^#V#n5#5x5 +~56#6*>s#r#z:6#6*>^#V v (!)^btvfnr(!)^     ( 5!9~ )6 )6 )6>6!9~A>6[>6!}!9~a>6{)6!!9~0>6:>6)6!9~af6{f6 o&!9~A|6[|6 o&!*>Ú6!*>w#w#w#w*>~#~#~#~">*>V+^+V+^*>">*>s#r#s#r*>*>*>">">*>>0123456789abcdefw?w#6*>~9# 7ý9=ɯ<*>*>###;77?7777+A7*>*>#]7*>*>#s7*>*>#ˆ7*>*>#7*>*>#²7*>~/w#7*>~?G*>^#V#~#fo))7#7DM*>s#r#q#p*>~?W*>###~8~w+8 87~w+"88~#38O6*>(>08y2&>*>0>08:&>2&>ͯ8(>*>w#k8:&>6*>(>08y2&>*>0>08ͯ8,>*>w#ž8:&>6!,>w#µ8> 2'>!(>~w#8O,>!0>#8y8!(>4!'>58!'>5(9!(>',e.B/~w#9O,>!0>#9y88,>!0>#19*>0>~#D9*>,>~#T9!(>w#b9> 2'>!(>~w#s9Ҟ9(>!0>#‡9Ҟ9’9!'>5m9*>(>w#­9!79!!7ʽ9!s#r#'0$2$2>">-,-,'''''''  ''''-,'?'?'>(>(> (>(>(>(>(>m?*>">-,-,'''''''ile named output.fil. The symbol > followed immediately (with no spaces) by the output filename must appear as the last item on the command line. With either command form, it takes considerable time for the program to complete. If the second form is used, there will normally be no output sent to the terminal; therefore, CCREF may be detached using the MP/M signal , freeing the terminal for additional activity. Sample output from CCREF is listed below. This sample was pro- duced CCREF.DOC CROSS-REFERENCE C PROGRAM SOURCE FILES CCREF will generate a cross-reference listing for a program written in the C language. (Actually, CCREF may be used to cross-reference any text file, but C by typing the command CCREF MODEM.C MODEMF1.C MODEMF2.C >MODEM.REF The first three lines list references to #include statements, although this fact is not identified in the output. Remaining lines indicate first the variable name, then lin keywords and operators will be ignored.) At the > prompt, type CCREF filname1.typ filname2.typ ... to produce a global cross-reference of the C source files named filname1.typ, filname2.typ, etc., and display results on the terminal. e numbers where that variable appears, grouped by source file name. Sample output follows: MODEM.C 43 46 MODEMF1.C 31 33 MODEMF2.C 37 39 abort MODEM.C 62 72 MODEMF1.C 394 One or more source files may be included on the com- mand line. It is normally desirable to record results for later use; therefore, use the command CCREF filname1.typ filname2.typ ... >output.fil to cross-reference and save results in the f ACK MODEMF1.C 53 MODEMF2.C 530 533 675 711 allrights MODEM.C 39 This is the end of CCREF.DOC.    ͥ$}!+ĄALL SUBASSEMBLESUBBIOSCALLCQ COMPILE SUBDUMP CQ  END MAC!LINK SUB"$ k`}˴=I2S (SV[&Q-(D ("3GĢ^t#L6.yl&Q)t M (D (ܖiW\N=Mci4kӍgme>I~SϴQ^B4gzdb$/7~e#\̙DFL%LЯcPLi,˓zFVA<)a(a׵#O1dX)PCLIB CQ #PCPIP CQ 6X!)h?!9"8!9Ûo!\= \7?b:xsub ERA PCPIP.BAK b:C -m b:pcpip=a:PCPIP m80 pcpip=b:pcpip era b:pcpip.mac l80 /p:100,clib,printf,dump,bioscall,pcpip,p"q E&Qp\=I\Ikns2gڕvTi f8:7ݥoO3ʲ'VY1͘v:KbAYLLLbonDFL%LЯcPLi\8baV9r/5L%LI>(a(a2=0Jbn'G810U5OCI ԍL;]1,DsG&&Mclib,end b:pcpip/n /e m80 pcpip=b:pcpip era b:pcpip.mac *ogqtGzvGs&Q-(D ("3GV c{bS}GF(aEfq=;>:)`8wP$ .Q$5ez`׳83Jbʧ>Ip4烟Gh&.}}:0Mwӌo,bS1tv6͙6&nL([820\L\#p[&Qp&QױE(f&46&82:C (\vRBIOSCALL.CVW o !"#$%&'()*+,-./0123456789:;<=>?@ABC,ʠ&Qp&Q-Ӄ7\LҮ~_||tq GY:9qtt=͘*Ο|[e}վc(/mf!3=21Ym^X4Ee#s&Q-(D ("3GV /pw%L0)E4gq\8rOE{I]h:o%L\#p[oaδ+튩ӶOy35gGhDEFGHIJKLMNOPQRSTUV\#L%LpYOx½O}^t?j(a(ao/~F.EmqDߡI4xQﻋ~JGJD%JD2 e:M)]vZoP&.}{1U}meӶg(/mf!3=21-WA-(ܖI\Iul#¬5P"hEt %LCYk Oeì5 &Q@A[ %L%`2=0JbiOy3%ͧQO݈#4ʲ<2_jQ^B4gzdbZޯgIkn$ .Q$ :đmayl  wq4f6½Q$ 0kh3 ќI1 %Lrԟ&&tՓ=A3.41*0jdۡ$Ǫ ,fe1ZvY9o-әJҮdPfrXgϙ?1 ``~S̫vZ0:\9mkS݄*uV媀mmYXTwwa"R zScGm-{b^xtb)vTw7aJyU*`tyUaJyU:N1?A.LDxH-+|`aߣ‹Tw:U&" _E`0]}ADQ,mR^A.LQ,ERA PCPIP.BAK b:C -m b:pcpip=a:PCPIP vOjDUMP.CO  !"#$o2hyh<7??A.pxfu?ajyh| QbS1tv6͙6&nL([820\L\#p[&Qp&QױE(f&46&82:C (\$END:: DS 1 END %&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNRR=?Cjz:s3 j:_>N <7SZ"b:xsub l80 /p:100,clib,printf,dump,bioscall,pcpip,pclib,end b:pcpip/n /e vKPCLIB.CQ  !"#ozA'ԇr#)QFxS⇇P_o߰4<7Xv j(7›ǫwjClvެa>4oFxSnˍW0)oMOS|ǩA5X.OSW0]>N .)?SΟ?A7(7yn0= T)Sl7KQ]s"No?ci!Sl7K~[cSZA]> %/xj:$88 L$%&'()*+,-./o0123456789:;<=>?@ABCDEFGHIJKLMNOPm›W| kMx͗78eejW:ck<78i&Zv z6(a&LD:6@D: 8mk0Ѳk+8A㗠 LD7a"ǫpjwy*:6ʛbny*jH-N1ݶv0MR^gU 8aJyU:N1E Zb <:mks SUUSm*uV0p0:<A.LDjAoty,9 FgNcu}jΜ<3cu7⌢\Ѩ'r5EKr_š %>LՄ+OX(񈩚0cz6ybۻPI@ j48VX 9! FgN'j4r5Ŝ=(NV}c5J| WW(LO=`%1UfL&O,n%9!`zxbG@6LXD<nE1^`zqמXD0gO,""Ҙh/m&O,'%&>Y];mZw-?ۄϯ~5}jۄ&m۽W:cQilԨP;sZZߧM(UJM\{?bU-X+N@jۄ&{S>Mm'=+X0㱰 H-cv/XLس&oGg#LNa n~Y_r5UDM-2*Ek0ti(c6]P.Zm (\FR>`pS>`ɞXk0ti(c6]'rƞX eqybP&| ybpKL&<3[Ժ@MX3Rd.{b):mZw-8([O,%NV}k00=pui'%J̘ MX(=bI@[*'ѠķmZ?~sy˧~{}!$9*}!9# p!"*!CpR*+"#6*##!9!9*}G!96A!9#6:!ĒRX5MmG@=3VMS[Ō#?@ABCDEFGHIk<ih*ŌUV{O,E44bƪij{O,('u(:O,W˞Xݜ=b'buXݜ=b'P'sum>xb1 S>X {}ʇk0ti(c6]P.Zm쉱gm"u/ar0'`P.ZmlOX=gms0/R>`ɞX1سֶ=-1jљӰfQkJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqBDu՟p}q7q}q{x''=|rt洨;XZ}Qktt^jXQŃ'r_Ewv=4!`biwpsEnEUmD@FpXUm"RkttYZsfx[bTG;4:څva*1^:žro[z;Uqd` }AGv5TǑm5 4+1p8kUqd` jG hvd5@U+qX@L+Lij +dX[r?j%#kXǫ&rA 9Fh'Ǥ?j%JG0l G.Jr>+M iY]3xC!$j%VW^7GW%h.,]Jq&udY[ybkyԕǓOޜ?y7 zO{Tj%uM4;/W_PJ {1p-UпK? ޥD )Ol䁪VRW%NpVP?<:PBB6j%uWqq!8P#U5.-opIF<$l6j%u=]G7x%iaD a5w/^%qd` 9[E*J8 (+8 Qy}Iz%V%~p3,fkfkfkfkfkfkfkfkfkfkc?kk:t\5p!%Nfkf9(񳶆ayq!j\_ܼyXGҘضW[?kk%y O xfGzkfkcQn+H3.?Dnk$[lr,JfXf4YVRWuvz{p8kWa?zUV++G:ZZ| j%u͛L&3ڜضHVSW ڒC6j%uADӡ%8(!Y`!дvƪBma2#d)pBnn !8!7 U7oCc[m/I㻯r=PJ ۛh4E&inmLHVSW ڒC6j%uyCy=${7߼zH&`u{X%l,Ǣn/,COڀ3B6lD[aG cQ:;u`Z7d0 ZBfjxo0p"7OFaj!m= vUGԠCl~z,@]a7);$)p+T5!m뱠[WMMdߩj%JSLxc5zlp}d@U+sHV[3EB6|HfB@U+J d&L&00%4yUädu5Y6AO 6Lj(+߱ƑfkvH{r ͓o~[sSԕyb5;Dƚ̄dƕo}YU++ h PJ?D߬ >/-Qc 7OJGa5aj+ y4TP8 Q%SS|]ss@V8 Q5VmlKpB'V gm 7rk˓&k<~!t.0w N#^'5˱x%@@q64EWRW{u 8Cj%m0tNQGIVcQ<RJ<`:J<3sƢģ$%W{rhFnfGWJ<`:QGV xfm 7b͎;D M%;ⴎS08 8(!Y'fZ9լc؟nr,J8z]G%Q(A/BntMQ^x`4W>xV z5 7y:g%$L l(-HGGi^$Ȱ^ŔWē:_=(jt8:{RxC(MȰ^q+|!Ym5n Ȱ^J֫:$Ss>a>8'G *2W1{`%|сtt%|!Yo(.IJ]2iW[n%oGGgHVSW ڒCԄYEfm 7Ѷ,Ǣɺ=ft8I'E zIjF\K^%%Y(YQ^fZU>8nQ^{tx^G!C8 i(%6B;9&Ç*A/ayz5ldݞiQ]:,Ǣa |Ȧ]73#ML:?/J;dɤ֫XxxkINqzhd҂ ULiTb ɓIEID UL(UaVLngćMԈ- {/t/^,JayQwĎ55-Ȱ^ŔƢēa)֫(;bښxA*4%5 kZ]XF2W1%(~FPpQgkȰ^ŔpE4YM^mr,J<0kkuѶ,Ǣɺ=ft8q'E zIjF\K>:+JKQ@$ʹF.J:^5ჯϊ(ޣ(vrpTG!7 :|(o F7*A/ayz&OldݞiQ]:lr,J<0kk' phlK`kH;l4PQ⧹d{|IQgm 7rk"+kvhlKxp}Ǹpk 4%!F7a :45E _t8x^0kkC#c5Eh'ǤǢx-ahHE#|-B;9&WMQ )!ccQm08]fpFv u {D(pWxGFGFEw6:%6u{^:Q zU⁰G1Q(m0a/: =*J'tt854"ccQ7͎&lNē6Eɝ%s1Q5NI%u՟p}q?`ǣg^%3 yワG%GaCxM~7̴)&4lf9%aCh'ǤǢ6'ayNIqZDx5Eh'Ǥ&u8+FD1S6'a0O&D4"qښ"c7GcQf0tUneUUOHLm[U,ǢhH((xfX;%J(Qؖ5J&j4&ˢz VvrLno!+lؚɚ,%a ē6 [3,Ǣ#Î8ƢNo &F%J&k FG.p8N%S=/>?Vm0$:L;tNV'#fm 7bf!a gik 1;j].x~`~,J<G( Q)C05烣ozΞ%#N88 1(RW菫ZI]Ӎuybky&Bc[IcNMBQU++6ja)VB\J?zk(a5qd^}(+ՎpD :vTJ[thLfhL\bcQm8xJ<&`Ǣ5 ˇ%Еu w_mr,J*@2qM/KthL\ (58~'NL\ӋpIQ-:4y&34&i|o ?M*.(QrHt9f:L"kɌEwJY[Ͱ|brM1-FEi6:#m,ASLNIEo i5x,JV fGCh'ǤǢX=%״p5/Z2;ތEG2h8Z0dux%fXnEWy=Ĵ5˱((Mh hƢkIJ㞒ՃkZ8-oF%a5L\ӋE5 8-oWo(0{1(c؏EBLC05(p7jGaΞE8(ĔƢ{G( g=%އy=Oyp8y~>*"%:%Gm!Xp\x UQ&jL҂tt.I/*2W1Ee:T%F'o br g?E5[E[%JfX~ $)p+a:==ݚXY[ͰI\:(+<:L\8#i{IxUdq^QG2qM/Kt0qM/ˢGL\ӋW'A֫Q zSBdaj2WgcQ(CE*Txo ((`{EwJ>ɏd C@ ZdqGŞJ

lF(JfX^/DFDk<MYvr-yqJl!aڡp:1kkז;dmcqYqښu ǢDC˱x%#fXǰ; ǢpbJ:L(GE:BLi,J<0片(xCW;bCWwN<!Ms 6#6 ~+† s#r{{ ڧ!ͦ#^!!/w#w!M~<6 !b~rG!T}*Kxu>w#%{=͛box h&{ !~~!TN#FwG+wO#s{ ک+!9~ !i~b!5> 6> *K w`i#᯾%,!|!*+%"'%"%%"# "t "r "py 6"E+6+!^6*F+N+:I3!!9~#ʖ QO"j'j +}|+#~ʁt6#~#<ʶ>!4Q6#6*!* |ʳ͉!ͼ"r!ͼ" Q Can't open > or < f!9n&:ʗɯ2>D`:!9!=:w!/xw;#4>2>2:Gexʰ:O}! DMR:° !öWrite error - Disk full $`iͭ!9~=+͛V+^+F+N~og~#fos#r}o|g}o|gile.$çw*4 y'! 9k!"42*}ʝ4::D<*E 2D ̓H  ‚> _*E~+#4N s> > !ͦ:G¼H2D_~ÿ   >  ʚ!* }͗>}o|g|!,|}!%%,ɯ|!|}!-N|N}zc!_--{!-ze{eze{e!||g}oÉ|g}o×)ä{ozg+|/g}/oDM!z>S\)) =ɯz|MD!x<z>jS\> !ͦ}  > _ !"# con:rdr:pun:lst: ڸ_~O7!  #i& ~!N~#)) #  =ʹôN#F#x9~#~#"" "> w+ Cw w##w w #~+:n~##͓@~#.͓n*++͓w#Å*a O!p ~_#V!$ r+sbk#| !9"*++"Z *!9y *++"  2 *++"}2:*++"l *++""**++"ͅ !!9l !9}2!9"͡ !9"!!9l * ʺ *   *#"+ á :! !91 *#"+!9}*60* )#!9!H9}!F9# 2!F9##' d* )!9!H9}* )#!9!H9#}!F9# ~!F9##  ʑ!F9###' ʻ* )!960* )#!9!H9##}!F9# !F9##  !F9###  * )!9!H9##61 !9:͗1 1   *#"+'D !"*!0Ci *!9D ʖ u J * ͼ*#"+"r ! }2! ""!"*#"+R !"!9 o !0}2!"!9 o !0}2!"!9}* )#!9!H9###}!O9* }!O9! CM!O9!zD k* "!9!Q9}!O9! NŒ!O9!z? ʡ* "!96.ú !!9M !!N9͸1}" " " " " " " " !@9Memory dump  o !9 o !9|D !9#+ *+" ! ͨ o o  d u o x c s͡ !9! Nʓ !90â !9A *+"!C : è 0* !9" *+"#*' * .|g| *+"#at %x %s %x%s Hit return to continue  !9M:2B:2L!9DM:2_$!9M:2q!9M:2!:2':2*!#!$!*$!N$!p$!* ʹ" !"* *z( * !k L ͨ *|A !- * s ú *'f * !͖Ê *'ʀ * ! Ê * !͖ *'ʪ * ! õ *+* s " !9* * * * * * * * !" !O9$!$͸1"*}2! "! "! "* !$͸1"*'q*'ʇ!c"*'ʯ!$͸1"*}2*'ʿͱC!#%ͧ***,!"*! DO** }!!V9!!T9!" * ))))!X9NʸW * #" 4 * ))))!T9" !" * !3Nʙ Ë * #" p !9* 6 Á !936!" * !Nʤ * #" é * * " !F9! * 3 !F9#'* )!9#"+!"*2!"*a*ͼ*"*N*sͅ!?}2!*n."*'ʵ!=%!s}2!"!"! "!@"!:"!"!"!"*'0!i%!%!%!%!&!d}2  !"!"! "!P"!<"!"!"! "*'ʕ!#&!O&!t&!s}2!"!"!"!@"!`"! "!"! "*'!&!%!&!&!'!,'!d}2!"!"!"!@!_(!9!9*+'S!s(!(!(! 9͸1}*+ *"**!*NË*#"+c:'ʰ!(***2*a*s**ͪͼ*"*NͅÀ""""""!c"! "!"! ":'I!;'!^'*ͧ!v'*"**+*!DÄ*#"+Z!"*2!"*a**ͪͼ*"*N*sͅy!'"""***!96**!9++"**ͼ"**"**"**ͼ*ͪ"*))"!":'ʢ*!"*)*1ʕ!"*!"""***!"!"**N2*#"+**n."!(*!96.!96!"**+Dʪ/*#"+*)))))*"! 9*}!9! 91t!9! 91 ʌ!9! 91 ʧ*#"+**$"""!9****!"!!9!+9/!'9!)9**'*#"+*!#?/*""""*C*A*?:'u!)! 9!9"C*C ʗ!9*D !9*n."C!9:'!0)! 9**+'!"C!9#!! 9!+9/!9!9! 9{0!'9"*"!'9"*"!'!9**!'!$9͸1}!$9'ʰ!9*""""!9;*!96 !'! 9!"!9^"*++:'+!F)! 9+*C E!`)!"!9+"?"A"C!9*\!"\*\! DʪÉ*\#"\+m*\##!9!9*\}~!96A!9#6:!9!|)ͼ"\*\!?*\"\!9!~)!9!" ! (!9*+ 3!9*N ʺ!9*'ʁ***"**1ʁ!(!"!9!9*n.!E(!9! 9*͉"3*****!":'!9**!"!)!)!9*@+!9Ͷ!)""!9*e*c*a*_*"**+*!Dç*#"+}!"a*a2!"*a**ͪͼ*"e*eN*s͏Ü*))"c!"_*!  _*cDʗ"*_*c"_*_"**_+*cDʔJ*#"+(!"a*a2!"*a**_ͪͼ*"e*eN*s͏?"_"a"c"e!9*******!96 !"*!D*#"+!9* }*! #"! !9* ';"* "! !9* 'S"V"ÿ!:'x"! * !* " " " "! "# "% "' ") 3;!*!*!9!9!*&,3;*"*"*"*":'#9*!$9*}!9# p!"*!CpR*+"#6*##!9!9*}G!96A!9#6:!"*!Dß*#"+Ã!"9**##!9}Ô!)!9!"!9!)ͼ"*'!)"!+! 9!""! 9*""*"*!*Nʴ#Q#*"#""+)#:'v#!+**"*"2*a*"s*"*ͪͼ*""*"N͏F#! 9#E""! 9*"*&,*"""""""""3 """"""!9!E"!$*"!"***="*!?i*' ! *!!9****"*""**"***="U!6****'*͜"!"9**+  Program PCPIP - Osborne Rev 2.0 CPM / PC-DOS file transfer utility Developed by Eric Leininger Insert CPM disk in drive A, PC disk in drive B Hit return to continue... Source for copy? (c=CPM, p=PC, r=reset, e=EXIT) Change dig!g**͉;*) *' *% *# *! * * * !w*!*!9!*!9!*!9!96!96!" * !?D! * #" +ç * )))))*" !9* }!9!9!!9!sks and hit return to continue... *** End of PCPIP *** ..Single sided diskette, 8 sectors/track.. ..Double sided diskette, 8 sectors/track.. Note that PC to CPM file transfers will fail if any data is on side 2. Also only 80 of the 112 dir9 !!ø !" * !DC!6!* #" +!* * 6+!* ") *) !9* ") *) !9!" * ! Dʢ!Õ!* #" +y!* * 6 Ê!* "! !" * ! DV"!* #" +î!!9*  !!9*   "*! !ectory entries are available. ..Single sided diskette, 9 sectors/track.. Note that only the root directory is available. ..Double sided diskette, 9 sectors/track.. fail if any data is on side 2, only 64 of the 112 root directory entries "  are available (sub-directories are not supported). *** ERROR - UNRECOGNIZED DISK *** First fat entry = %x Please wait - reading IBM directory... Thank you. File = %s ; %d bytes ; %d = 1st cluster Copy to disk A:?(y/n) Copying file %s 96"<+">+;*$,*",* ,*,*,*,*,*,*,*,*,!",!",!9!!9",!9!9*,}!9!9*,#}!9",!9",!,",*,#",*,6!,",*,#",*,6*,!",*,!"",*,))PC => CPM First cluster=%d *** WRITE ERROR, COPY ABORTED *** %c Next cluster=%d Reading cluster %d ***OOPS - attempt to read flip side*** ---Cluster skipped, copy continuing-- Hit return to continue Reading Osborne track %d sector %d F))*,ͪ" ,*",))))*,ͪ"$,!9!",*,ͼ!9ͪ!",*,ͼ!9ͪ*,))))ͪ",!9!)!!9ʭ-*,))))*,",*",))))*,",!9!)!!91-*,))))* ,",*,))))*,",!9*,}!9*,}!AT of %d = %d Looking for free cluster at %d Cluster %d, side %d Found free cluster at %d ***ERROR - PC disk full*** wCan't Open: %s OK, CPM to PC file transfer Enter file name:...Copy complete Copying file %s (CPM => PC) rb*** Can't ope9*,!9}!9*,#!9}",",",",",",","," ,"","$,3*l.*j.*h.*f.*d.*b.*`.*^.*\.!"j.!"l.!9!!9"\.!9!9*\.}!9!9*\.#}!9"j.!9"l.!j."n file *** %c Have read %d, cluster = %d, next = %d End of read, last read was %d, last write to %d Copy complete Make PC directory entry... Name = %s First Sector = %d Length = %d New dir entry = Close PC fat chain... Last Sector = `.*`.#"`.*`.6!l."`.*`.#"`.*`.6*j.!"b.*l.!"f.*b.))))*j.ͪ"d.*f.))))*l.ͪ"h.!9!)!9ʖ/*h.ͼ*b.))))*d."^.!9!)!91/*f.ͼ*h.))))*b."^.*^."\."^."`."b."d."f."h."j."l.*%d Writing cluster %d Writing Osborne track %d sector %d *>+*<+!">+6"<+*<+!aCm+*<+!zD ʁ+*<+A"<+*<+ ʝ+*>+!9N +!9*<+}!9! 9#*>+#">+6"<+*<+!aC+*<+!zD +*<+A"<+Á+!/*/*/!"/*/!9NX000*/#"/0!9*/"/! 9*/*/}&0! 9! 96"/"/"/*y0*w0!"y0!"w0*w0!N1ê0*w0#"w0Ï0!9*w0 0!9*w0  1! 9*y0! 9*w0}*y0#"y#  0à0!"w0*w0!Nʝ1%1*w0#"w0 1!9*w0 P1!9*w0  ʚ1*w0't1! 9*y06.*y0#"y0! 9*y0!9*w0}*y0#"y01! 9*y06"w0"y0*1*16"1*1!AC1*1!ZD 1*1a"1*1"1*1 26"11*1"1"1! 9*y06"w0"y0*1*16"1*1!AC1*1!ZD 1*1a"1*1"1*1!9*w0}*y0#"y01! 9*y06"w0"y0*1*16"1*1!AC1*1!ZD 1*1a"1*1"1*1!]~WdCN125(8- ʉÎ>D>D>D>!w N!ww!^#Vbk6 #6 #6 #6w!^#Vbk6#6#6#6 ʉ!m~ ʉͤ!͚7~ͮ#Ú> ͮ> î_Format OSCHG x1 (x2) ---------------------- Where x1 = 1 104 column 5 52 column 8 80 column (x2 =) W wordstar keys C CPM keys  ʉͤ!͚7~ͮ#Ú> ͮ> î_Format OSCHG x1 (x2) ---------------------- Where x1 = 1 104 colum$   DISK.DOC FOG/UTL.043 First Osborne Group (FOG) Utilities Disk CCHECK will check a C language source file for balanced punctuation of all kinds { }, [ ], ( ), " ", ' ', and /* */. Indentation is compared against CCHECK's rules, which may conflict with your own but are recommended by many. Nested comments are identified, as is use of = where == might have been intended. Place the file to be checked (normally of type C) in drive B and CCHECK.COM in drive A. At the A> prompt, type B: At the B> prompt, type A:CCHECK filename.C >output.fil where filename.C represents the file to check and >output.fil (optional) indicates that output normally displayed on the screen should be directed to a file named output.fil. More than one source file may be specified on the command line. Refer to CCHECK.MAN for details. CCREF will cross-reference all words used in a file with the exception of C language keywords and o%  perators. Place the file to be cross-referenced (normally of type C) in drive B and CCREF.COM in drive A. At the A> prompt, type B: At the B> prompt, type CCREF filename.C >output.fil where filename.C represents the file to be cross- rL.040. It will permit a double-density Osborne 1 to read and write PCDOS or MSDOS formatted disks. This version adds DOS 2.0 (9 sector/track) capability. Place PCPIP2.COM in drive A. At the A> prompt, type PCPIP2 Then place an Osborne dieferenced and >output.fil (optional) indicates that output normally displayed on the screen should be directed to a file named output.fil. More than one source file may be specified on the command line. See CCREF.DOC for further information. Osk in drive A and a DOS disk in drive B. PCPIP2.LBR is a collection of C/80 language source files and SUBMIT files associated with PCPIP2; besides C/80, the M80 assembler is required. LU found on FOG/UTL.017 or LSWEEP on FOG/UTL.041 may be usedSCHG, for Osborne 1's with the 80-column Screen-Pac option, will set the screen to 52, 80, or 104 columns and optionally set the arrow keys to CP/M or WordStar mode (using for left arrow). Place OSCHG.COM in drive A. At the A> prompt, ty to extract each file from PCPIP2.LBR. Also, see PCPIP.DOC on FOG/UTL.040. Jim Woolley FOG Disk Librarian June 1984 pe OSCHG x y where x is 5 for 52 columns, 8 for 80 columns, or 1 for 104 columns, and y is C for CP/M or W for WordStar arrow keys. If no y is included on the command line, arrow keys will not be changed. If neither x nor y is specified, the system will default to 80-columns and CP/M arrow keys. Also, see TO found on FOG/UTL.033 and WID on FOG/UTL.040. PCPIP2, submitted by Eric Leininger of Columbus, Ohio, and Eric Pearson of Santa Cruz, CA, is an update of PCPIP found on FOG/UT&   --> FILE: -FOG/UTL.043 CRC = 00 00 --> FILE: /UTL#043.DOC CRC = 20 28 --> FILE: CCHECK .COM CRC = 8E CA --> FILE: CCHECK .MAN CRC = 4F BC --> FILE: CCREF .COM CRC = AB 3E --> FILE: CCREF .DOC CRC = BC 0F --> FILE: OSCHG .COM CRC = 05 9E --> FILE: PCPIP2 .COM CRC = EF 20 --> FILE: PCPIP2 .LBR CRC = C9 A1 ---------------------> SUM OF CRCS = 24 5A '