NFlCx\\@NFR</ \ \\ README.MAN% @@RFNiN< i6a܀ F7d@y#4SpHDlظhDi@xM΃dތӦ:a7t@ #I4#N3M3"IL5ՃD5T)ϙ &YA s0MYcTw an1wɔ+[X. M2B͚9.RDq]6Ijт@Y#GCIcy)),4S@׌}[ǐґ+Ǝr9dn=x~}ޤh2Z/l9: ȋ@Ì:-7|X '2;DB:)#;/+ (h bxQGJ7Z(7(#$ⰴ"7(G+c`i4 +,$ !I*. xZ<.<;C!P&* 5ހ(5(r#32< (\6VYcZqU[e]NF6M</ \ \\ BIN/MANcat /ram/man/$1 NF</\\\ MAN/CHKABORTd Ӊ't̿;2c9hçj#V:# \) 3,< # H묣BK*˲( 81ҠCDRmĩ3>3hpR 0RƩPިfHrII0,/E 6TS@87@ʦK2C%=ڱF|B^NQ'NƤ寡DZî $瘃4x"c K*PRikEH,r ) ػFI^7 AmJ^Dd̏!+)+Aʍ3* jٚp6*VtYD/Du cIsBhT21f;F¼ʦ7>Nz8?y& [:1T UՒHuTT#7ߞ,3tvuː<c+ܛ^brL8-lFcƮ"vp;pNuh@"\v4za@aR~Haw=z!O^7Xa{*uP¿swٿ/ ?NF#</\\\ 2MAN/PRTINITg*Q ",'Lcm6.3aiHifoRc3|J-C7  ˜1cRn3k/+ٸϮ z(N*C""9h!( :İ(ʍH ͱ7+7` v!`'@6"Xr6:+=7YM6݌9߬SN;}NFػ</\\\ OMAN/PRTVID*l 6h"0 xI2Z(A2^() .6B:2\.2#|mN9:S;NFb</\\\ ::MAN/VIDINIT VOID _vidinit() /*initialize 80 column video display*/ This function initializes the 80 column video I/O in slot #3 of the Apple II. You should not normally need to do this, but just in case, it has been provided.. . Example: ... _vidinit(); /*re-initialize the 80 column video I/O*/ ... NF3<</\\\ MAN/VIDONLYۼ ΉH oЙ <ǖL ༡Q:o@L9cQ$cv;Υ2 Bnq b Ն)se4AVmeBʥk^9xHqMyԉR1sN"pu7q;q,cYIM Ht 6 2P0L׾G3'6J˯J*\h ,#:k*&7 K ΐȈ/̪r &`2BDj:̼LiD@ 3¨ :D4ll+G(hVΉ'(%O, !oB9 "̥1ʐ̒q)@cF3,16.E2.J"uPЅI +2*Hb *`B"J!ԽvȽ@c%ErXթI%vb=VYcMYNF</\\\ RMAN/ASM65g ic-@PASDA2@3L1li`J7oI364b oTtLs|p4R:i޸ᨲ 9e"4 ҸSA7,@qCv4aJAyuLC:eXaFNbҥC1jz  ѐ4 ;o@ؙEÎ%@6uȔ51H lZ9#4Hycb  1u(Ul2ʙϞ+'qYҧ3gsVL7ü>vn.Rovb#3:CJPj%̤n f+$2 (7ΐ (KMJG $($+ M,6Z1ʲr#6,ìd3#:8)rJ`  γ9># .|I쾳z*JlkH%/@-2s:()ZPPJ+ $1P 6uTdRЭ;9"C56 ?H>KTTQq2iOKO@ѧƲhJ0dc :۰T[O 0I ,X%˭Pk!hn7#׊,'Ȉ#*BCc59{.KjꪱZk[NF</\\\ MAN/ASMCPҦ i3-@PASDCސidΜ2mİ)#A)yܼ3'@H`-l@QN<̤8LJG#u܌, S& 9 A"8uйua"2H*@pΛc)G+7 X #'7rx-.Z߈QSf֝e\PdUajy@1jH,Vǰ30b0&^k4*LMCJ3#M^50,2&ԱX0w^hOx;ӡi!{Q/3ep #*(#p'684t@Ib*|c 3 r @.6x-2²D,j dPP g42˶K,k1.ʍ0lȌ0HR 1dǔhA+!1-4:|K/r:B>ԋ4Ȫ2;iGꪌ([3xPTQ@L" 3&Ҝ<0;uO:Nô2I켵OGU@Ә).2M jN` Ebj,Qu :tjJ2388j# :~-*-X2D?sD7$3$\0&;3ZrCID30P J2;.?tK# Jlȳ'*O vJ:rҸ`SX\Φ-1T]V^A;` g9"Zk(D⮲&osN*ۨ,iD߭N^,`2%Uezڐ.6؉I^S/*K ~Bm 9ҀQV@Я ><]z(6!Z(C},*( MhKlH6 Ӆ9DvHS/Ү3ay6r4G ?/NF</\\\ MAN/ATOIO 8" 7iṔ'6^ƍ2r耠S9tqsf#9E*ETb! ^I3:nIS myE5R$Iݠt  )N9aڔ(e0 T)63jȑg틗n;iذ!l8d !F %[ 7fk4gسΜ[7}zQn3) `wvr\LTפa8EVw1+DxVD hEc4G' KVΛ:CݐfM9qݗo"P@:h-8 M ó`ChH$ xC0[ Ҹ<{b39{9};"Ea; hD 4pd#Z-;H,䤣9 ڐ~ j\ȩ<҂2th!`:i>g&=A @ dF]Q72PPnӣ :4vHޒT@ДxΖ.U4c2z5%tWBEQ}Bm m =0x"n2P!@8@n|C;͸l+ Z#*DBkcJ] P✶7֘=A8NF</\\\ %%MAN/BEEP VOID beep() /*make the console beep*/ Sends a Ctl-G to the current output device. This causes a beep only on the Apple II. This function is really just a macro defined in std.h. Example: ... beep(); /*get his attention...*/ putstr("Error, Error, Error!!!); NF</\\\ MAN/BUYBUF TEXT *buybuf(str, len) /*allocate room for and store a string*/ TEXT *str; INT len; Allocate room and store a string into heap memory, returning the address of the new string. This function calls alloc to obtain the memory, so that if not enough memory is available to store the string, a system error is generated. Example: ... len = getl(myfile, buf, BLKSIZ); /*read a line from the file*/ newstr = buybuf(buf, len); /*and store it in the heap*/ ... NF</\\\ MAN/BYE bye Exit the Hyper C system and revert to ProDOS to begin another ProDOS interpreter. This can be used to restart the Hyper C System, or the BASIC interpreter, or the Filer, etc. NFN</\\\ 11MAN/CD cd Change Directory -- sets the current working directory to the stated path. This command will work regardless of whether or not the path is currently online. File names which are not fully qualified (have a complete pathname) will be assumed to reside in this directory. NF</\\\ AAMAN/CLEOL VOID cleol() /*clear to the end of line*/ This is a macro defined in std.h. It sends the control character necessary to clear to end of line to the video controller card. See also: clreos, page. Example: ... putstr("Status:"); clreol(); /*clear current line from cursor onward*/ ... NFt</\\\ "KMAN/CLOSE$. k̹kAf)9唑˸̘sȉ4 aŽ=#'LСIMS"a36MՕ}3_OKvclmogިqj b".D 1h@=Ri09u7QL{  ̍:@h9c$$3#? #|*/ɍ36⯾/#2 3,0i6z#⭍0SO#4Kpب)<6té 2K@`R<<!h@#,%(*C "`!#)x-4|PR (mr$2\)<QU P9BqL@!a,ҕRCQDy=$2Ή9gD4^E;\IXb61hMm2hVDsQB ;B7Z%`lܒe B5Yb}㌰`#B'9p $r6ˉ;C& H| c8 pBf歱v 7-{IezF+Zhުب B" Сm@ '" !0 m\Ȼ]gDB#:N*i2~!Ӯ)PP(qQ6cW,ivM݆[M{owsށ]xNF></\\\ MAN/CONWRITE INT conWrite(buffer, buflen) /*write a buffer to the console*/ TEXT *buffer; INT buflen; This function writes a string with a specified length to the standard output device(s). If printing is enabled it prints the string. The routine returns the number of characters written, which is always buflen. Null termination of the string has no effect. Example: TEXT nameBuf[82]; ... conWrite(nameBuf, strlen(nameBuf)); /*print the name*/ ... NFo</\\\ MAN/CP cp Copy Files -- copies files in the list of files to the file or directory. If more than one file is present in the list then the file must be a directory path. If the file is a directory, the file(s) are copied into that directory -- they don't overwrite the directory. If the file is a normal file it is overwritten without protest. Be careful! None of the files can be directories NF</\\\ bbMAN/CR VOID cr() /*print a newline character*/ Sends a newline character to the video or printer output. The output routines map this into a carriage return, linefeed pair. This is a macro defined in std.h . Example: ... putstr("hit any key to continue..."); getkey(YES); /*get any key*/ cr(); /*now print a linefeed*/ NFML</\\\ MAN/CREATE $aR9e)Œ0mʤ . oq2w@Iæ 1yLB,E*EP nI3Ge7cyC I1FN0l@ 14n΀@ UXL  3RiXtДi0"H9xdٺ-S˩f̲4+ۂd rt'/Xe 9o<Wz8fL8tˆiR"(:̜snspˢw5z9E妱̙2s;&jRYf%~c". s \c& /- 9x$"+XüN72o)7!(+hƌزB)$X 2 7C9F|쨤V :dqbx˺bjKAXj.h1d#7J E36lDH"$H QfOn48)8@4S ,ЅR)hEGk 6ꈓp t$@ @h#Z FW`]a:PW" C4ʬ >4'a@*9(92c&("BZ(#H 6^ B օu-6^\E|Pc1UDž}6iSH]wC^lm\ifqNFشn</\\\ MAN/CURSORj ] Dump Memory beginning at the stated memory address. Do not specify the "0x" which traditionally preceeds hex numbers in C. If is left off, then the dump begins where it last left off. 256 bytes of interpreted hex dump follow from that address. NFe</\\\ MAN/DUMP5 iD 0MDBa:y48sѸ A0ӰFS( ‘N2e"$A Д"'7f`T}SGΘc!L6u1ۀÜ.ưf0nb„ Uj|D#]:e|":\AַysGheŒAB2s>S3f攡cZ΍amȄ C'LAqg/9)]K0rTCw9;wGN8eH$VA8bnxG^{҃l舂4R3Ƅ"k(63:t[7 (:䨃* 1(Zi'\\6cPˌb N/'"Tj1HQp@9,ƌﳧ0 1HcLQE<ϸ<@H%n@® RZ),M># +³S$7P;?ۭDP,r%0 cE/pxFȲvrѯ0Kͪ@ͦB$ܼ7źO0 2p 60<x IGEqJAp2X*;͘l+M+A Jc@>lu`e0BFJĔhÆ\ Z4pA #ka1) ͬF6r*{HwH2Ey< a¤3XbS.al#F7_;#:jn#tS5ٴk XuUetKJL:9*Yӳkh'XפL tKN.O2q!`z  z+3](=C m p'< NFna</\\\ 8MAN/EDY+ ʐѢ*h,"dy#A)yܼ3' n)Ċ]@0Mq3N7n@" 3uذ1g2e܀С@֑F˟Q$-#'M7g#gB YĐc޴Ӓ+ ̙SUszHm0F߀`'`.@HB'0b:u O2e脩KAyS)N B*DžE3lœ|Tm  )16qj&*Zf8ȉڦ^ I3 ;-La9p؜.c}{Pȍ:껄m j4bc 1#7Ȩ!pӍ7PH1P ʼn`#00kꧺ 4j H:l &\J3ҰC!5( fT,)Jm&B" 6h` j#ɔH6<a ̡4̸- pw!ب<˜˥߂K72;1ѢcV,s@jR i^AV>zYYfiVfNFj</\\\ MAN/ERROR VOID error(str1, str2) /*print error message and abort*/ TEXT *str1; TEXT *str2; Print an error message consisting of up to two parts, and exit the program with an error code. If either str1 or str2 is not needed, they should be sent as NIL. The message consists of the current program name, followed by the two strings (separated with a blank). Example: ... if(nogood) error("bad data", NIL); ... NF</\\\ fMAN/EXEC/u 8 2cP挛0mʰFΙ1+b/Ty E7& "C En*^4R A5B,#@ ݉&c°a5L9eA 27qsĜ!47ƨBrlNw$+ 8vΤ3K:7xа 3ILϮJnGȠe+QN?+3uNr-` " N6€ W]tII2n mc-Hc0̈$g#2BTIv"h,a1t\#$EyB/0\Y0 #2U_D8EouhPZm"Rz׵*:eeLc -+3$zj<lwUnYʐS/j7)nXM#\ENC=-upkN17$+#%rLl@A#݌n vqNmkOY9cxSA W Zd0NR0A$a(AL>`"NHRYL3H즟f, F9}GL"D%*1NF</\\\ MAN/EXITP* LR( u 4rʣtSs2Xp:2BxKc?@#CgkCΎ7vU##ͼkNC<9>l?j$8ں3Om (Q(%xE!"HzNFt</\\\ MAN/FPRINTF INT fprintf(fd, str, arg1, arg2, ...) /*formatted output to file*/ FILE fd; TEXT *str; ANY arg1, arg2, ...; This function is identical to the printf function described in the section on Console I/O except that its output goes to the indicated open file instead of the video screen. Refer to printf for details. Example: #include FILE myFile; ... fprintf(myFile, "Current Balance = %5.2d\n", curBal); NFf</\\\  MAN/FREE $ $H?2ax@"bh#aأ; >s@Zc ;r2 ),+ǣHK/@x@0DBqJg!,2#DrNFoq</\\\  MAN/GETARGHc B3es8pRlq7bIDb؄q2lҴIC  )ㆎT! L34e@̡#qꑎQɐSf>I*2aPeW8aƔa iٲ.32iZ]ӖrV < غ}79W|LfϸhѤfY 7-$&AN2\_"N7-xo S mUL<_~6-Փ)W";e8F߀c5nưgc*+cZʶKk3&Ц+: @0C7ڸj83|cXh.K пxC@| 4 |ʍ:)ˬҸn3$l.p 78ʍ7HA, D:x+[;;8+ !NJ$Ƨ0C4 ꮣbhM;JՔϤ3" 8PJՏӍ4AHCm`""P7ĨÌ-p vZ 0\Yܐ-2PZ3# =,^jM!si=W@@B?MhLx(T0gAH0J 7D`1FYgg_ve9gNFأ1</\\\ -IMAN/GETARGS:_F 8L:A䜙bL2lҸ)Dv*0/TC'Db؄q2ۤSEuڔqCg BPC: v $Qᜥ Y 2]b9X${4DnlF%͛gr L4 a3뛂irbjZŲa"2r̙#3r,|+Xc輑4mFTli޸ fpa Ll0N' UW/h2ܺkVw9I7 $jgXg[m͵]qUNF</\\\ MAN/GETFPOSM2 xC2Bch=0) putchr(ch); ... NFU</\\\ MAN/GETCURS_ۥ \y"3e茩#g@x!tДP2n.vF8o椡/4&f%t *ϸ)CD -Ĭqd1.I92Kl4Y7ct弹s2ʖFm vc3h@3ZeAf7beSQ*I8۽әSn؜;E 3LN68K6ئL1ex|Os|IfvCfT1aƬ Hn8],'L8iuȌH@ AoؐpΎsA@%o@᠄Fzh(7L,+ & pf Ax":p@ܐ1(%#z"$AS d$K&7B# 8D kĈ@E##68]H<m@ PA-4Q+NF?W</\ \\  MAN/GETFLAGSۗ 3ސ#*l x07NC &k 52 5(CV[m@ c89ډ" 4ڠTRH7ʴ ˍǼ;7J7x?ւ#)#<lc؀ u) j;k&d 8> SB67h4OۭP SS :ڨTEWaa2PU5|KH?u I D*C%H1޸ ,̞s7 0( ELԸa/ t!C)3v#r4 b¬'nG>$_B9t?ŮiIl6{]&S64 8d 2UW?aJ|CX;_GF|ss@_G>y'̔õڼ:}\֫];G#\u4&jIh -0h.9M|4.l6 P:CdTHE+CLF D `I:(1 OBS 詎\b-: !KTĜP'z`@3l@O"E*yqLaS9q^JX! !RIOBx@<: , tx&D6;LDb~07`"AA:)܁c @K<(,| @9.-0At1 mԫD<@P|` b ~`D]Q3aBv"k~{@*Cz: #729V>s>29`kc2# 1r"p2th"\K9  Zk~r0]!0P$(b B@@##BL;\z:;i%OV_uYe5[i0NFط</ \ \\ uMAN/GETLPv 8L:lP!:f̔ӰM m֦eԡ6a -1/%3Zѵb÷v! j&N:Ό0PAt"( /˜ H50tC7[+XC 9p|tC-Đ#2hFɲkkΩo3#p{LI9L/ަx*1S=j*#}Mª1 t -K-@8# 몵 K6o86v$7傣lM7@(NtR.{"4ʍ'#=|G9(+1$Ӎ C686Ax3ɨ#25sh#٘oC*ClPm-\P* (v-# [x]0Ð@:sȺ/ӎ0zu9RC#0($70HɊ6b۩xλt Ku݃H'y:+j :l.NBNFn</ \ \\ MAN/INDEX CHAR *index(str, ch) /*get first instance of character*/ TEXT *str; CHAR ch; This function scans the null terminated string looking for the first instance of the indicated character. If found, it returns a pointer to the character within the string. Otherwise, it returns NIL. Example: TEXT filename[32]; ... if(index(filename,':')) /*scan for colon in filename*/ { ... /*drive prefix is present*/ NFؠ</ \ \\ ||MAN/ISALNUM BOOL isalnum(ch) /*test character for alphanumeric*/ CHAR ch; This is a macro defined in std.h. It returns true if a character is alphabetic or numeric... The macro is defined as: #define isalnum(ch) ((ch) in alnumset) where alnumset is a character set residing in the library. It is defined as: bitset alnumset{char} = {'0'..'9', 'A..Z', 'a..z', '_'}; NF</ \ \\ jjMAN/ISALPHA BOOL isalpha(ch) /*test character for alphabetic*/ CHAR ch; This is a macro defined in std.h. It returns true if the character is alphabetic. The macro is defined as: #define isalpha(ch) ((ch) in alphaset) where alphaset is a character set residing in the library. It is defined as: bitset alphaset{char} = {'A..Z', 'a..z', '_'}; NF؟B</ \ \\ TTMAN/ISDIGIT BOOL isdigit(ch) /*test character for digit*/ CHAR ch; This macro is defined in std.h. It returns true if the character is numeric. The macro is defined as: #define isdigit(ch) ((ch) in digitset) where digitset is a character set residing in the library. It is defined as: bitset digitset{char} = {'0'..'9'}; NFQ</ \ \\ uuMAN/ISHEX BOOL ishex(ch) /*test character for hex digit*/ CHAR ch; This is a macro defined in std.h. It returns true if the character is a hexadecimal digit. The macro is defined as: #define ishex(ch) ((ch) in hexset) where hexset is a character set residing in the library. It is defined as: bitset hexset{char} = {'0'..'9', 'A'..'F', 'a'..'f'}; NF</ \ \\ MAN/ISNIL BOOL isnil(p) /*test pointer for NIL*/ ANY *p; This macro is defined in std.h. It returns true if the pointer is NIL. The macro is defined as: #define isnil(p) (p == NIL) where NIL is a constant defined in std.h as: #define NIL 0 The reason for including this macro is to allow you to improve the readability of programs which deal with pointers. NFP</ \ \\ //MAN/ISODD BOOL isodd(val) /*test value for odd*/ ANY val; This is a macro defined in std.h. It returns true if the value is odd. The macro is defined as: #define isodd(val) ((INT)(val) & 1) The type cast is used so that the function can be used on integers as well as supposed pointers. NFؠ</ \ \\ ||MAN/ISSPACE BOOL isspace(ch) /*test character for whitespace*/ CHAR ch; This is a macro defined in std.h. It returns true if the character represents whitespace. The macro is defined as: #define isspace(ch) ((ch) in spaceset) where a spaceset is a character set residing in the library. It is defined as: bitset spaceset{char} = {' ', '\n', '\t', '\f', '\r'}; NFؑ</ \ \\ MAN/KBDREAD INT kbdRead(buffer, maxChars) /*get a line from the keyboard*/ TEXT *buffer; INT maxChars; This function behaves identically to conRead(), except that the keys are not echoed to the screen. Refer to the description provided there for details. Example: TEXT secretBuf[82]; ... putstr("Enter your secret password..."); kbdRead(secretBuf, sizeof(secretBuf); /*get non-echoing line*/ ... NFز</!\!\\ MAN/KEYPRESS BOOL keypress() /*test keyboard for pending character*/ This function returns a boolean truth if the keyboard hardware latch contains a key code. It actually returns the value of the latch anded with 0x80. When a key is pending, the MSB of the latched byte is turned on. Example: ... for(i=0;i < 10000;++i) /*set up long loop*/ { doComputation(); /*perform computation*/ if(keypress()) break; } ... NF?</!\!\\ MAN/LADD VOID ladd(ldst, lsrc) /*add long integers*/ INT *ldst; INT *lsrc; Perform addition with long integers leaving the result in ldst. A long integer here is defined as an array of two integers with the most significant 16-bits stored in the first array element. NF"</!\!\\ o &MAN/LIB  ؤE A@0('< IN7a܌) 4i`J7oI36!c2> niza. xYfFh I )XW i ⍙bԔCR6M]P!Ļli@?@ bi°!b p-<-x„QC/"aƠ+.6o*e~Rl@G3~~ucܖa#9fa8XN9[nfO( Ů7YX7?3Ic9Ñ<Ϯ7`;{-p*68+tp xK@10㍭ Ӫ؀ȿ1RC*Ҩ {+h(:h10޺j9xc80*Q@ M!l) BA!/iJLK7x:%ZJ0hJ,N3欳HB/1K12CD4hk-Ylc,|O k+8 8T0-L8F4QTmWlT SVZ/4b 0x =p<̓ 9°;8r"Ӹ(C EM8u 3L R5D D#GiE2 `[L1JL8MnICܶnqU9c!q cԡLҽdt1fqf&qTs1*ykH'5Sn@5V7g 'rʄY3DžuE #yfMЂ?#o&%H>@H)ӆZ9 4 9X!6@#:(=:Hȃ ^ C7((h*:R,,*꬞ԪB3`:0j- B *p,:h~tm bPR\I&27h( 0"ylƈ`9{A朋Ă*:޴2Ɠ8lO"h:7Zʌ2 C930 9r.C7l v*#L [0+u1U[J^sHt u10P J@rc:}m BAS@(S:94CǤ0@UTBR0TUeR`&XNF8</!\"\\ S' MAN/LNK. ظYE TДD2c0B&iӠ69t ̟h0lH٘J A14FO8C 2(-\j־E"#tR,m}6KBC\:tcds*UU6ɠ`Nyp3 SB,i \J֬Zh+PŐX3M Rp0_!ֲz/)(&3a" t(Nwca,˜Xs*$ǭlKe2!d٣(Fgd`3-m.hsK.enH!).%y2ⴂAuX_Ep} ErЦH@ 2ġa@%"qKL5*(YQIf'̈66xή%,UOCbD%C:[p:4Uv{^f8CI]Ü94*DDϋ1 1G@O2 fDe`Ԥ?Ԣ֓L9jS;j,6)5*Z:Ob٤C?Ju59bP)SQ3  $xWFY7\uԓJ"kLP@̯7D,3Pae@P#N# H8@ 1pS2r4R)/ˀVi[:(hkyZVJmuyR-W7AXc;*1Ljv6:p{#j-'@"CNU$('8]GFi$R8@o c6lhpO]2׆r⎖n՛?G7Ea߿MM7xs__qB1 {@uRVZ 5r Y?><A`C~UM.vNV *Hs*Hx 3#04(C04@@)*LHt CZSAR0r r\AH<B0/?نJ+R,-\NFF</"\"\\ %MAN/LONGJMPJJ۾ l 6rFr-`CjpJ%9jG-WewTxP!}}`apZ.;jH֘4@bP0A ;:`HAUH/H/oȆ2y4Nd=ފˍ tηd6Y D}N?R0yn8QhϦ"D\+_(Bmg|!\r)\NF</"\"\\ :MAN/LS.7I 4lѥAm 0I3#h4o 4nȤN2 &t0)A4N1exc6oƬ0b9/Y2f9.@HRTTMʼ)Ǥʲc輑F!n@afvZM8Iazy'nwͺ0eҮʆ"gzݫ4+ T6v4B-;2.lru 3/D&pASgPF*v̵W3uɔ+[{Ṕ ;o\'pWnpdE`K1h `̍2:^ H#*39râ;Z÷cx PlkI=:*h+,BЫ$Tbɥ9tn1ƨ`#檫=Ʋxz$(I?2pI6P(!O.1H 눫NjSi5 #!h ysc p(Z$)q jAp +gV_uYe5[i}NFQ</"\"\\ $$MAN/LSUB VOID lsub(ldst, lsrc) /*subtract long integers*/ INT *ldst; INT *lsrc; Perform subtraction of two long integers ldst - lsrc leaving the result in ldst. A long integer here is defined as an array of two integers with the most significant 16-bits stored in the first array element. NFخ</"\"\\ MAN/MAC ڄE TДdΜ2mİ)#Drހ(N7d(6h0%7p椙3r F;]@0f#q3N7nF!L2s@8ω ҸAf2Ę7mFd"CNԘ&QQ-bY)K : ޘ:ՅZhtdaBg9pNa$.4V8u kf B?8Q }7AtsfbƏ\x 7ÆMɋUmo>M_86uBƽ|@0z D#"Ox4:l`A2.,롢귄hd12ڨ#(r!)Zz2H2J/ro!7h [h0`2 ,I'A"&pH1K1L吤"*K91hsҍ2( d;/2xvXA4Z, #88~ M;?J 8F+ʄ# ʃ9 7p20V%KưU3d< +Ұ :ƀ2؀Ì*] I:8cTc"K3>JlJa ے"z$r0jJ+2H(E;B!sϷ6Tɬ {c i ӵ\,/:Dݭ?43SȾˌJ &-*4h _mB<.sA4V+j)Q`N1f. s%CaHog>]4+N;3rV˻pA&I97h! ,}<}V8M2s-YM (b) ? (a) : (b)) NF(</"\"\\ <<MAN/MIN INT min(a, b) /*get minimum of two values*/ INT a, b; This is a macro defined in std.h. It returns the minimum of two integers. You must be cautious about using arguments with side effects, as they may occur twice. The macro is defined as: #define min(a, b) ((a) < (b) ? (a) : (b)) NFؿ</"\"\\ MAN/MKDIR mkdir Make Directories -- make subdirectories which have the indicated pathnames. One or more paths may be specified here. If not fully qualified pathnames, the directories are created in the current working directory. NF@</"\"\\ %9MAN/MKSYSZ4 ڬgfҰ)3G@hfMS ) AhEt\LL1a6pAtހ&&(ry21oICSL r (ѤiΜ2f갡F6Y1N-°IzN3r´j7 V#G At09eI8 I#&4!Qqc&sÐ7˙󕍙,@tżsD9}z.L:iGW1F0]BCMoTXyBMӐ%SVZ%$)@O5\x("`#%ε:l1PIؘi #<뷶8 jL19NlDP@+ `h2>|2H!;*C ;:ԍG4PX[pB>J, 7|ɤD%42M : CHC 94#ZZ+xJ!2 #Π2z 8ˌxzS5 *Pr9\h`+K,b`m6j#ɒ`&H 7^ OD(8")smH94N7+N2KΉ7bɡD,p %1D0)KѸĻ6ް#Nа,;4tIHH)6R1bnG_p&Td84 p103@4CaAA.)YRHA=NNgzT>$ÀǼ8)O4dCD/A`3jjЙ*k ""¡0n&{};m) 7Vᢹd(cFU'|'"ʨ/Cl&j/3 .n(Zwg].39{jg/ҫ6@u#Žq,hp$u[a:F9r877( ?A@ L @NFE></#\#\\ 2xMAN/MUSTOPENM7 $aRD:sLN5$$# <*) xbs_ʑΗbZ R:#;2Nͪ ; òlc:xܕ .6bv <*$ 6P ,L3DdArOh :(9Ƹ8˅a_ʫ[LdE 4XX&@hiSsMe9>8f1Ƽ0h H 2 7LL<@P!64nx8x0,;(>")@ C4ll=wID ǜB A( #R(Yh '/729ܰ52˃U=7ȸGuhQ%"GD('#8CH2I:@1K@HJ&I 02x !LÐ#&6CR-3KSR1(c*5 8#3L^8c6Xlr6;xJ RW2 -C$# =ʀRL&$#" CR7ʯ!m.H:fd:DrXنg{Y蠉}NF8a</#\#\\ !hMAN/MV; Ì7m|G@hNFҰ)3D ƼAq&&: ޘ1#Ö/67r@I#rhڦ3 ʄ&4gVaCb3t$Iʎ"٘ ho\<-adA kd <*$\o:7A1S%$FsB74tӧHŽ ,9)@6M2uA6.I& ۨ]qxm ieUT]4iYM8(A 3`#"".if⬣J9ܾ⨵mDK next = listHead; listHead = newp; } else printf("Not enough memory for that...\n"); ... NFQ</#\#\\ uuMAN/NOTNIL BOOL notnil(p) /*test pointer of not NIL*/ ANY *p; This macro is defined in std.h. It returns true if the pointer is not NIL. The macro is defined as: #define notnil(p) !isnil(p) The value NIL is defined in std.h as zero. The reason for including this macro is to allow you to improve the readability of programs which deal with pointers. NFر</#\#\\ MAN/OPEN_& $aR8eܠ0&L2)@B ¸QO9tҸ9L6e@I B hǒu܌ fc:tʴCg:o "HMJdҌ9ZLɓ)唡SG$" 'S3'7]A̜1r0}#$au\8q$7eOs4M9.@Hb&~3fL9,Zųl(aFL6 ~* X3(^rT/ n*Fd:E"F N޾4TgsrK p!8PҡA1ب/x aA vbЅ7$ PzK)Ƌ!D" C0CA!4:2AB] Show or set the execution path expression used by the Shell in locating programs to run. If is present, it becomes the new execution path. If is not present, then the current execution path is displayed. NF Z</$\$\\ -JMAN/PP, Ѣ*hʀ@N9c@4 3FP䔁cqL9si`J7oI36FE<̤aI#u܌25!3Dh@q:y0 NBc޴i laYo<ؖ f~ҀLC6L;emPmS1l4t1a9{'שNq0a7V^}W&˶ V95B?qCt^tެFOnJәUGΩ#fN8u_ \9bȊ`Ś)I-75 #&<('ƮAbF2(υ1i Ɓ˰ ۅe㬒ZH`cN {/7q9=uUoWtixNF؃:</$\$\\  MAN/PRINTFm6Z  84nA1 932 ؘ*̼& :eȀxS*^4R A hI+ŨqΙha1tҼqS$b-y2ʖ/4" )p)ˆ HLSN aSf阩߰R]:hʀٱ +Ή .⻌-2.dlh/4"0 ,0<?7,[?p)xK7ӎgKh@BBj\@;`NM X*3#)N$AFZ+` :H5"?dE:LtQմ RKyA.|ԍ4P)NU3 2s]}SB5Q@ Mc#,j0` H-.d1#6Ht0Șh d$ pA| -Px2J:2:I5ꌚm@ PA-4QBNF</$\$\\ MAN/PUTC VOID putc(fd, ch) /*write a single character to a file*/ FILE fd; CHAR ch; This function writes a single 8-bit character to the indicated open file. Writing beyond the current end of file extends the file. If an error occurs, then the _ioresult will contain the ProDOS error code. Example: #include FILE myFile, newFile; INT char; ... while (0 <= (ch = getc(myFile))) putc(newFile, ch); ... NFY</$\$\\ MAN/PUTCHR VOID putchr(ch) /*print a character*/ CHAR ch; This function displays the character ch on the current output device. Newline (0x0a) is mapped to carriage return/linefeed. On the video screen tabs (0x09) are mapped to 4 spaces. Example: CHAR ch; ... putstr("Enter response (Y/N):"); ch=getkey(YES); /*get fresh response*/ if(ch == 'y' || ch == 'Y') ... NF_</$\$\\ MAN/PUTPRT VOID putprt(ch) /*print a character on the printer*/ CHAR ch; This function prints the character ch, regardless of the current output device setting in the _prtHook vector. Newlines are mapped to carriage return/linefeed. Character codes of blank (0x02) or higher increment the printer line position counter _prtpos. Newline, zeros it. Example: ... putprt(0x1f); /*set Epson 80 compressed mode -- Ctl-O*/ ... NF~</$\$\\ MAN/PUTS VOID puts(fd, str) /*write a null terminated string to a file*/ FILE fd; TEXT *str; This function writes a null terminated string of bytes to an open file. The null termination byte is not written to the file. Writing beyond the current end of file extends the file. If an error occurs, then the _ioresult will be set to reflect the ProDOS error code. Example: #include FILE newFile ... puts(newFile, "Data Point #1\n5.00\t65\n\n"); ... NF0</$\$\\ ~~MAN/PUTSTR VOID putstr(str) /*print a null terminated string*/ TEXT *str; This function displays the string on the current output device. Characters from the string are displayed up to a terminating null character. Newlines are mapped to carriage return/linefeed. On the video screen tabs are mapped to 4 spaces. Example: ... putstr("Hello there!\n); /*send greetings...*/ NFf</$\%\\ MAN/PWD pwd Print Working Directory -- displays the current file prefix used for filenames which are not fully qualified ProDOS pathnames. Useful for when you forget what directory you are in. NF</%\%\\ _MAN/READAt 8BN0dP!:f)&/TD02s@ 0"LT񢁑$L$"Xxh@Դ&MH3u܌捛t>C'$7ǣ$MAS&ę Ҹ blYfi0N9LݜTȊLStqcUpu°N1rA1dVA$M$h3FnA|ijpN6t@Q939er5hfҶ$d oTyCR݋9ӭ[1͖m&ònpkޱ7#&ҡm@ ``@.2\@Ç|)&ʨAnʩ/3%HB.Ll'(x䐀;*z,G!# = R24p#$ :9`#Pp;,I$(ypٳO> A,TPCNFO</%\%\\ OOMAN/REMOVE VOID remove(fname) /*remove a file by name*/ TEXT *fname; This function attempts to remove the named file. If an error occurs, _ioresult will contain the ProDOS error code. The file must not have any access paths to it, or the removal will fail. Example: ... if(done) remove("temp.data"); ... NFj</%\%\\ MAN/REN ren Rename File -- renames the file specified in the path to the indicated newName. The newName should not be a fully qualified pathname, just the name of the file. NF]</%\%\\ MAN/RENAMER7 Remove Files -- deletes the indicated files from disk. The files are deleted without protest, unless they cannot be found, or cannot be removed. NF</%\%\\ YeMAN/SBREAKb 8B1rʄYbN=eRlq4n$lS ɀxcp@yN9*^! ҍH:'AYh(Aԁs'b|x49.@HR K7gjqM6"DŽ3n*$0)e4@1b eaĘ:rzd&9tŒYa@8I¤A2dQFqB: 3q74FG2YA<1*oebr/3v7h歬K9 zE$t| yDc6HcC1jBH! 46xc N1Ԃ8IP( 2Z1>j* KB62K#TKݰҪã 3hG7ː V전 9h48,3* ޸1vJ =ӯ9RrC0ji ,ZӍ0s3h6СpMA $\Ra,"F N?Ҋ(Lx7Cˠ^7rU3MHYꎝκkRKvMbTf 7[i"'Z`IѼYYfC26ڵ<6= QH>~ J<`\(~7E rH6 R޾g&`phX=ʐ $BWC=2 $q.#xڽ] NFZ</%\%\\ 2MMAN/SETEOFu= ύ3KX :ZBAMDH08K+ږr+nZ&./"Ol#EA4#m'Ț1Cét{c): DU9$RFmR-zN.0|B8m;T2'K*FZF߶b)k計ѾN3˹ 3J=3>(#)@Xɢ[/Tɸ4#~ ZhCȸr,zаGbو/e (0/} m (hE_p*4Ȏjj@}CXb/ T`%xΚv&J"5,IJHMR@Ozx6<b$>Y} ڦ UX1!5| xcWp11Ғ޺/6쨠f6  lU*(n9ȃ "@%H1vCwmmm ,UȢ]#ļ,ʧ 6\Ba%i]"+8bHLK "%3(WOHl9i 66v<2RW90ucmOх3kxk 5h :\!y_g4 \Lhҳ0*iS)΁r,nY $,E'A1Axm!!k/ 9 MHlp@ԃ x`l Ȗ9apJЦ8'%;Jb"w密OP 7DX4Bk-T&C} Nvs SR\]8G,l4HȐ- d |A&jB汥!6[DVR% C)C!L0CSz&:\-P蜬d xLh %)GY%f05r,eq"WQQ ,gOȸNȠ6K837(-ٖx.?iav6ErZ(%8S 0A[e}"AF:Lj.1F#VwyT MnJ4`;wD%LhFE%I D*B΋3K̙b6H% W& O*f@{|8uӦtj"(Bl-ҵ:{M\%&,F]{hC/ :yL] R2w/+GIm[:VNhԹ\A4Rcc:HhgY4e*6']Ɛ+4{%!#ʼL'̒ .V.ߴDl)C0lG-x3RFu dȈ%p]^6$! M_)`dXrJ^w 2 ؃ z6nG ք0HlEIEI M]nQYv'LJV @L,fg23 de4YK T++p&v[ 0ytۺqೈ8T6␯\ߜBT7Y-jE%fiiH!`h8?CLA&|Y08 #܌;?|(w`y8"R`VP cpЬ.Y EeR1(lVĄ}<`C:i  Ag nE!Z1Skv2v˝4|f_o΂"ъYYKHTĖmԚY8=9X.AOPބA|3@a0+itNb|StyHa7lƭ :l p(2ͦ9/&dӺ/jΑCr\4hfi 7>lA;e@Iæ-ZNf8z :h2"T4sxcʏ_tgGA&2ci-π(f rҜiьa)ɬ,?lZ2'HSa\q1eǸ r%L 62xp B ZNJ= g1^&Y%0FUJuLgQI"_iʐi4ŹU)I2ONص^ُi87J۔=Rg{rY~4ިC'8Z+@"1+Ì:a ,#|&>$Ӣ-,`k &D4|))2J4aŭ У9xti4J;)=`ìlzA:7ΐ#6z9pATt3:,ۯ4Z)=dQG*{ҵ1{*3?ot2[92;5@kjC 4(r րD<)$.e#ScFuǧR#3C)v1$9D&Vy4j)A00v$X 2F Ln@; 6x1Fo?z77ʶz(X<#?*دMVF|0M"vcq]whNFؖ</&\&\\ MAN/SPRINTF INT sprintf(buf, str, arg1, arg2, ...) /*formatted output to memory*/ TEXT *buf; TEXT *str; ANY arg1, arg2, ...; This function is the same as printf except that it generates a null terminated string in memory beginning at buf. See the description of printf in the section of Console I/O for details. It returns the length of the resulting string (not counting the terminating null byte). Example: TEXT filename[32]; ... sprintf(filename, "%c:work#1", (_curDrive == 1) ? 'a':'b'); ... NFؼ</&\&\\ MAN/SRCHOPENۭ $aR9cx Yh"D4\M5l3N,NF=</&\'\\ ~~MAN/STREQ BOOL streq(str1, str2) /*test two strings for equality*/ TEXT *str1; TEXT *str2; This function compares two null terminated strings for equality. If the strings are equal the routine returns a non-zero value, otherwise it returns zero. Example: TEXT command[32]; ... if(streq(command, "remove")) printf("the command was \"remove\"\n"); ... NF </'\'\\ MAN/STRLEN INT strlen(str) /*get length of string*/ TEXT *str; Return the length of a null terminated string (not including the terminating null byte). Example: TEXT filename[32]; ... if(strlen(filename) >= NAMSIZ) error("invalid filename", NIL); ... NF</'\'\\ ~VMAN/STRNCMP_ 8b9nƴ , M7)0BŘ7 )Ν7qsf;iaL/P) 1vӡ  `H8"IDpeKfeRфqC"1y蔙$fJ!Y˨ ĩ V jM6LASuƥ2r޴Ae.!UyC2e\T ⍙hնzN1ÌtFfn2ia挹H*r2dFq pƜ+A3]W6+è% 9h;,k" h z9Pxc%:64@I >r#7`&; m+>[H:4@r)ϥ <"%Y006&. j"c!th@#v56pC2A.2L(3@SM6@h 3ӅA$ 3P3RJh! 2"s3#r"&HBR(t<84CB(Q5r:p"-̿`;ēsR.!@( V[qtW8FZ.`/XcA]r\rMumWsNFG</'\'\\ MAN/STRNEQBۜ v43}.]iĘUOΑ, t% E 43f+cd(C 78\00 <.#ARX# 8@*"$;*3C Xa $ 6XC 2!bIc "!EȮxt2{Q=*(,h;XIpg@C MEe NF$</'\'\\ MAN/SYM-_۳ iE Sy0bؔ$:e4h8s,n@-4h1tҼq$8rҸ34O.lHbLoE SS'yӦM7d@Zf  H SDlNJFNY݀HC4o=T!CNV}#D0cЀhL{fn<.6RjM3{YEQ@ NzCQ5l2d䔝8*7bk4 fF,s!0s'!(ƺ93N LrvNmԢ͵LC <*c(2!Ƃ76vB$cvj`+*1X1`c9"þ0,:ͱ!3r# 6Xh=8KÎ2ظ߂Dڰc#*J6nU 6r4#Ow-03ڀ[s :,ZA)'cTO:8Wrg疛λNFؕ</'\'\\ MAN/SYNC VOID sync() /*flush dirty file buffers*/ This function calls upon ProDOS to flush to disk, any of its open file buffers which have had data written to them. It is a good idea to call this if you contemplate removing disks, or if a long period of time will elapse before further processing of output files... It will minimize your losses in the event of unforseen catastrophe! Example: ... sync(); /*just in case...*/ ... NFF</'\'\\ MAN/USAGE VOID usage(str) /*print program usage message*/ TEXT *str; Print a usage error message. If the last character in the message string is a newline '\n' then the program is aborted with an error exit. Otherwise, the routine returns. The string traditionally is used to convey proper usage of the program indicating files, flags, etc. Example: ... if(argc < 2) /*if no files present*/ usage("- [b n #] \n"); /*print usage message and abort...*/ NFص</'\'\\ MAN/VIDINV VOID vidinv() /*set inverse video mode*/ This function sends the control code to the video controller to cause subsequent output to be displayed in inverse video. It is really a macro defined in std.h. Calling this function when printing is enabled may have peculiar results. See also:vidnorm. Example: ... vidinv(); putstr("This should be in inverse video!"); vidnorm(); ... NF#</'\'\\ MAN/VIDNORM VOID vidnorm() /*set normal video mode*/ This function sends the control code the video controller to cause subsequent output to be displayed in normal video (as opposed to inverse video). It is really a macro defined in std.h. Calling this function when printing is enabled may have peculiar results. See also: vidinv. Example: ... putstr("This should be in inverse video!"); vidnorm(); ... NFpM</'\'\\ hhMAN/VOLS vols Show Volumes Online -- shows a list of the volume names which are currently mounted. NF</'\'\\ CMAN/WRITE`8Y 8⎜4tʠ0C1u8dSM  ^0< 瀠DfPT񢁑$L$"Xh@Դ&H3u܌c°a# yCɔ%9&cHò I#xLI6 }L9&5#H2* :r܈M6bU+da֑&OtaN1h@A2=R06SsBAOn81c !SA@a˙~=94m<Ƕ;*@u6Z~7(78(ҡm@ ``Aa:CÇ|)&pȍ2$জB&" -`ȪHG\C\#*z0@!DK̡9УPi0:1EiRjy3N8嬓;N=