cc t^+vo8:"":40054v:17,2:"":7:11 ,2;"Save to Microdrive 1 (y/n)?"; a$=:a$=""3 f0,0:a$="y"*"m";1;"cc"16:*"m";1;"cc.code"25200pb,25600d X(d/8):23693\,a:23694\,b:23695\,a:23697\,c:25200l ]d=23624H\:a=23693\:b=23694\:c=23697\:2:7:2: 811 ,8;1;"Loading Hisoft C";0 113 ,8;"  1984 HISOFT ":2: 58:n=23766\:*"m";n;"cc.code":5 lcmAyncc_ v^& @!. z[~( (#F##%????? 0000?000 00000 000`g`00 0000π0pp 00 `000 000G`g`00ppppp ?00`Ϗ0?? 00`000 000c30000000 ?000??? 00000 00000000008000 0000 ?008800?0 00000000s`300 00g000 ?00`0Ϗ0?0 ppppp000g0g`00 00c000 0000π000 0000g`00 001000 0000?000 ?????O w???<???~|<????x??????<>??>?|>><??~<|<|~x?=<??<????<?BG$GE@BG$GE@ BD@'E@ B$D`'!"E@#F`'F G @@G C @B @DB!$E@B@DBE@Mhcc. dpbtdÀtÀtjiviwjõhCihUihhüj_iejÀtÀtÀtAw;e i"iheh0?:}o|g}o|g}o|g)<,+|/g}/o|!#|7c|b c|M!)8 08|7c|b=cbbBK>)8= ){z_cW{_,= #c=cɯRgooc7#?+oc#7~cc+?+?͆c#7oc#͝c#7!{ͫc͸b#ͫccͫcA?[#ͫcͫcc# ͫcc oͫcco+w#xR8  ~#fo n& s#r ss#r^#V r+s^#V r+s-dN#F#x( ~#~# `i!99*nh90!d!ͩbpbstack overflow^V9DMɷR!͸b0)]T))_YP=c{0:8+w} |(bdz+6-*lw#"lo*l|b!e!eMf !b"l9^#V++>2l(% % l*l>e'g! "log"l-> 2l0 2l͸b0d"l. 2ld"lbf!lpd(u(( o("x(s(c( Ree sd# s :l( *l͝c0*l+R#f!DM*lCf{(~#l*lCf++x|l "l9^#VSl+++a0 l a0 V+^ *l~#"l*lyb}*l+w"lo&*l͚b!ff!ffSlMf!f"l!f"l!"l9^#V++>2l2l!"l( c lc(l%(ol(l[l9!*2l ͸b0d"lbfh(0d(, o(&x( c(us(l0 lx(XlPYKl!x(/ l͸b00c(a8 A8& 0!O c l:l(Ss>h(<#r8lo:l(8}$Kllc lo:l(} x .*l#"l++f!yb}**m~#"*mo&$Pehͬb(Ͳb} (<(>P(>Ͳb!l6"*m!6]T!N#F#^#V#x ͂bp to ch_!#l06R6õb}6R!h dlh ~o&$ ~|\{}[]  >LdlCi>> >}!ihn(:\&o͎!#!>:Ci!}շ }h( fl}M*h~# (!###^#V+!R̺is#rqi&>*l}!5m_W(^w{'h((fl*=\!9"=\!j&oS=\!*h#^#V#N#F>#~s#r# q#p&o*h~####(w+w+++!~(+>>l8#w#w j{z}!5mw}շ!(#(!6(|!"\2!*h~o(w####+ͺi!5m>6= :{j:{j:>(: >2lw( r(!{#~:+™k~1869020&o"\##"\͢h"\1"8(F(0#!!8#$:l's#r!(#wo&fl F(C!,m~#CV(:(j>2k*h> > w###w#w! +!l6# (w#6 #-m!l*l!l>l !l> 6+ (!lͭh !,m6#6ZlZl7V0(>v>*\*\"\"\*l~{j*?*W\#"S\"K\6#"Y\6 #6#"a\"c\"e\*\"?!ob"\6>++6+6"=\>2k\k pbS{t!Gt~ 7~  (#(`iXs 7Kqt>sKst>sѷR!ut%/)Ö9-,9[9!9DM!M'!QmÝmÌmco*wt[ı| bk"wt͌mR[رRDMÄrmͩb%5u > òb*ı"yt"~t!ut[ytͫmSyt*wtR+!ut^(˞S~t &on{l͇sgo"l"l,n!m +:pt!s߾(####^#Vsl͇sTm!5t o!>t~Ͳb#͂b͎b!)m6 >>Ͳb n!ln2pt͸b0n "l"lnrnȸ(n"qt"lnȸ nȸ(n"st"lnȸ H#~(Gtͫn8 +nȸ #[t> ~# 7 #:vtG~# (+ d| <|*qtum nr*st|Kly*l}n>s>sXsRKwt:oSwtbDMÄr`iRDMR8 :Gt 2vtn*wt[ıR!m*~t^#VSl ͇mKl>s##͖swstsNoA DI >Lͯb!t m>*ͯb  !pF_!l1sQDM *lT]:o>+ͯb(1 *l_~ s*l~ Ͳb#"l*l~ )mT]#:o*llR+>Ͳbp p[{t3q0!Gt1s=_![t1s=POnp!l1s+Qp*{t :oH [{t(0qLq[{t>2lKlx  >s:}tGN#F*l| !B8`i:lum#~o[l gW|b +Xs:l( ͗b|ͅb*l|> } >2}t͇m*lr͖s Fiq!o[{twsts*lѷR#pKqt>s^#V#͖s*stRSllS{t!Gt~ 7~  (#(`iXs 7Kqt>sKst>sѷR!utqqnͫm| *l|b*lbrw!Gt> +# 6vb"l|6 ?> (̀rw#+̈́r"wtqq8*wtKıB +(/> B (+ #^#V*lyb| }̀rw ̀r! s̀rr#ͦbn͡r*l*ıbsV(s#r+KlJXsKqt>s##͖s*stms*llBK1s_>s( ##1sD_8BKx̄rKwt:oSwtxĄrs#r#> yD*ıbs ^#VB+Xs##> [wtRp ms!l"l*lumÇm͂b!utw2ll~ *ıum*wtum:vtͲb*qtum*stum͇m!Gt~(Ͳb# ~# (+.UBsCsbDnEoFDqG'rInLpKqMrNrPqSYoVsWp p !pC4p rFpI>pKpLtsQsSIpRoX9pZCp edit: Pardon? I , 1hbÌtvxÉtoQvÉtvvvvvvvvvvvkeep stre^#V#*t~#fo^#*t~#fo^#V#*tn^#*tn^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|luz7|su|7zuuͩu|/g}/o#| vu|/g}/o#ɯ2#wuuu:#w|/g}/o#|/g}/o#:#w<2#wuDM!xxGyOv)u|v`i| v)vx]v7vz/W{/_ѯzW{_=yOxG&v2#wuu vu|}ȯ|g}ofv)tv|/g}/o#z/W{/_!9~#fo!Ív!Ív! Ív! Ív!Ív!Ív w!9~#v"%w!!2)w2v*%w! <!Eͷ~P !ͷ’P͌Q!ͷªP}QxQ!ͷ͓G@!9DMu )ر~#fou`is#ru #)ı~#fo! s#ru )ı~#fouuzv! s#ru|/u! s#rzwu|{xu|xu|w! 6#6u*sux!<=!âxuuu*ֱuzvҭ*uzv"u #! s#ru{xu)ı~#fous#r! ^#Vr+sHxu )ı~#fo+u )رus#râx!9!9DMu)ر~#fozvuAw>2A!">2BYK{P{| y͟|yzK{ yyyvyP{|*yY!HmCxvy*|sy3">2B!e͋!e!e>2Bfz*O*;vytxn!qh"**t++s#r!th"*!lC#*tzvs#r!h"**ȱs#r!h"*xJ#~#fos#rfz*A}z*3*ܱ2zvs#ŕGz!Qz!bC|,z?z!cz!phOz!sbO!C Type y to run: !nh"*ֱ2zvs#r* "*"*+|£z!KmC" îz*v" * #|z*+|z*k*|z*+"*}z!5n&)~#fo"Ìz {*| {*| {*| {* * |g}on&"*|I{*#"ɯ2ñW{&o:ñ m{:2ñ!:( x2go" 8 ͫ{#( ((}ͷ{:*:G2: O x( zL-|D.Iʟ|"k}y (>'U}#(.(\(͠} : zyz:D.Fß|z: z2z!l: wz:L(D 8|#> [|#w)"w>}2!DT: O:D y0Lya0 WO c z}F(V: 0 z: a0 x zn|"n|": . z: a0 e(: a0 lzz&:o\z&:. (n. t.b. r. fo:D}0o: 0O}ozz|"z:'z!9:Bή3": "( |eoeȮzz !}:# 0: *> 2 z:* : / zz>M2#:/*==!=++--&&||<=<<>=>>->ͫ{L ͧ!"~>(A = define include diagnostlist direct error translato&)~!! :A(!: - 5+ 4:!9z!4n&)[s#r} Nm!"!9!~`#}+ r '( ?( w#z6::L*w| gG[αO ![ R0 S*R~#2L( D('(" ^#V#S"7: zK{ͼ:!^#W{(K{#!sW{K{missing ' '^#r͔;K{Ô&W{lK{!^#W{K{ͼ;͔b!ͫx!"! " ! "go22"""2222ñ2#""!~*[б (, R8!Aw*бR( ~ [б^#V{ [бs#rÓ[б2lCl^#V"ll("*R(  *R8S!ls#rË*#s#r">Ë*Vz+"*b^ ( {( ( z { *V+^+"*b#~#fo cDM>!bͯ}l#wx*nͣc*lͤc"l}2l"l}2l*l̯đp0d*lR(N:l(($(( (,y((6#Ȯɹyy 6ɹ #^#V*vR !"l:l*l( ( (>~ :l 3"ls[l*pR8!lSl*l͎}*l#^#V/*v"l*l#~#fo"v͇:l t}(:l  *lR:l!(( }*l#^#V*xR"x"ls[r*vR !l*l͟"r[l}( :lw###s#r*걷R8"*tR"l"tRT]͇}bkwh|~DM͇}( ~ !*v[rR `i͟6 "rxR2l#~#K* p0~ (  #~#(B 8:lgo> òb!*б>2l ERROR - 27 - undefined symbol ,9N!"!{"*[䱷R!Aw!"p*r"l!g"n!"z.!.x͋!~)main [r*tR8 #q#p###! "V!"T"x!"x!x"v!r"r!m"t*бK DMů^w#Vw !>B 8undefined label: *\|=*\|H!==f*\++|f*\++++|f!>=*d###~#fon&|ڜP{|ʜP{|ʜ!A=*d#~#fo"O*d#~#fo*d###~#foņ!9DMun`is#6u#~#fo! s#ru|uu ujau|4uu uͮau|Yuu u/a!?=!9!9DM!{ͩ`is#ru u'u|ʥ!}r!9!9DMu###~#fo#~#fo! s#ru|uu v!! s#r!{ͩ! s#rP{|Žu###~#fon}Ž3! s#r*! s#run}k!! ^#Vr+s! ^#Vr+sn&6u*zv#`is#ru ;K{`iw#wuu###~#foņ! ~#fous#r`i^#Vr+suulu|”u#|*d#u#uuus#r+s#r"Ou|&!}r! 9!9DMuu! s#r!{ͩ! s#r'`is#ru/uw!z!! s#ruuu! ~#fous#ruusuĉ!@=uueu׉߉|Zu|!}r!9P{|!,rP{|#u!9DMu u*Ozv*ޱzv! s#ru!Awu*ʱ*ޱuzvG*ʱ*ޱuzv! s#ruu ͩusu++|ʊ! ^#Vr+su  vs!9!"E"I*t####"G*G#"C!ͫx!ͫx!9DM*E*C*Ozv*ޱzv"E*O*ޱ"C*ޱ*E)uI!L*E! s#r*ܱ`is#ru!Aw*ȱu*ȱuҭu*ޱzv*ȱ*ޱG*ȱ*ʱ*ޱҭ*ޱ"Ku"M!ͫx*K|;*C+"C*K+"K*ȱn! s#6u|*E#"Eˋ*Ě*E+"E#|)!̈́!"Eǘˋ*M*ܱzvzv! s#r*ȱ*ȱ*Muҭ*Mzv!Aw!9!9DM*M+"M*ȱus*I#"I!9DMuev̈́ǘ!9DM*I`is#r*Guzv#ͪuͪ*C"G!"I!"E!9!!Aw*ȱ####*ȱ*ܱ++++ҭ!"M̌!9DM! ^#Vr+szr! ^#Vr+s6Oͳʀ(%ͱ( (!>ͼ=$ʀ( ͼ,(0ͺ!W{!kK{:z  ~2\ 1> ͯW{L *z*l! *͋K{͔{:\*v!"v> 2\ͼ}(B*l"l>ͱ*l[buc05{(*v͜c0!"vͼ,(͞} *v*l#s#r"v2\*l"`!׏ W{{ (> *b~( ( (- *}(*^w}( ~ #~# >*z[b>  -*\*^͋"dͼ*(ͼ( ׏͔)W{L *"^K{6"y( >ͼ((ͼ[(Pͼ)(9(:(6(2>W{L +!!!*͋K{ͼ,(͔)>78 >W{]'W{] go'͔]ͼ[(*`"b\*d(9ͼ! #[d> "X>2zGͼ{ ͇>2z2Ba*xͫ!!d͋ͼ} ͑2B<2zͶK{ͼ{ W{{ }  K{y Ͷͼ>2\>ͱͼ,(ÞU(W{!}t W{!*ͧ(BͰ(Þinline M6ipL ȒʔK{;{Lͣ(ͼ)'| eͯͼ,(^#V#***CS{>(<2"""BKK{3͋_ !Ȯ͔(!9!#͔)!Ȯ=Þ3!ͯ!Ԯ!Ȯ=ͣ(!+͔)͋ͣ(SlBKʀ(͞3ʀ(2!9!9DMu###~#fon`isu#~#fo! s#run! s! n&|g}o|͵u!!!͆ç! n&|g}o|)͵u!!ѕç! n&|g}o|T͵u`in&ߗç! n&|g}o|͵u`in&8ç! n&|g}o|ʧu`in&ç>2!9*}Ɯ!e>2*͞*͞!9DMR*n&|g}o`is#r*#~#fo"̞|+؜*!!͆|F؜*!ѕ ֞|c؜**& ۞|ʲu|„؜!e>2͵**&8!eu|ʯ>2؜ ў|**&u|ݝ!e>2؜ !eu|!e >2؜!9@͜ͅÈ( *#^#Vͅ'!"!"w2*"2"2* E8 "R*"ууууͪn*wS#s#r#s#r2J>>>>>*度!#*V(6ڮ6>2###ͯ:$o&)^#V-*6:8 880*###s#rͅ6(((:((:( :(}͋[!SE8 SJ00  >J*N:ͤX*N:ͤK[22Wx 2x (y ({8 0 8_:(Y{_SxW($ I<2C[*(5[*()#{(J(F(((((( { H(:( {  {2X( I(! +H('Y(#` a ͉*T]   X(**R}c<2 F( #~# #s#rR###~#fo~O*!>ͪ: >>*w>2Ë2:ͤ:$(&('()( *( %(#(XP(H2!*###T]s#r͔(} &͔)*^ "W{*R}(9~ 4#^#V~( #N#F r+s ͉ͫ###s#r͋JK{#*Ȣ2lW{!(#>K{ 80 ͼ= 2l>  _z{( ͼ:> >o&>( )ͼU>*Ë>-K{+ ͣ*#[`s#r">+͋W{[D!('!("!((((*L(2$>ͪK{K{ͣ*`#^#V!>ͪK{͔)R}(K{#!!!*͋K{W{((%x8 ~(> > #^#V#F#fhͪ͋: W{((~ *6#s#rͼ[(ͼN(:ͼ.(?ͼ(ɯ͔͋]>!͋>͋*~2(ѧ+">!2͋ѧͷ![*&$)^#V*#^#V*-:(*###^6#V6#^#V#c*6#s#r!9DMu|ʟ!â!'`is#r!}e!eu|uu !! !!9~#fo uu !!(!!9~#fo!9!9DM*},!(=`i6#6֞|GP{|J͵P{|ʄ͜*"`i~#fo##s#r͵!,ͩ|V!)r֞|un} µu!ѕ!euWFu++|u++!!ѕ!9e!!un} u!ѕ!e3!ѕ!e!eu++|F!e'*###*###~#fo###~#fos#r>2!9!9DMu>Œ>ʿ>˜>ʿ>¤>ʿ>°> >¼>dÿ*#"*#*ss͜*!u|u͈>2*#"*"ÿ*n}!)=͜>2*++`is#ru~#fo! s#ruw#wu ! і*+"ÿў|t!*=u |ʼ֞|•۞|•!en**!ҭu ̀! 6,#6ÿù!9R*&|ş*&|**&|**n&|g}o|*|*;;*}8;G*+"n!9DM*}#### ### # # # ##########)RRcc,שwʐ+ʛ$Ū#Ū%Ū!x"ͫ&ӫ')*|L*#~#fo+|L*"!e-!e!Rͯ-*}ԩ*###s#r!*###~#fo###~#fo#~#fo!!!!͐*s{2O**+ns*+6*#"N*"'͜3`is#r`i!!͈*}=!!!ѕ*++"*і*}c!!!ѕ'*###s#r͜*++"*і-!+=*++"! s#r*###u~#fos#r͋|<*#~#fo`is#r*}$#%&u|u`is#r&uzv`is#r&u}/o|/g`is#r&*6*#us#rU͜*&)$~#fo?'*}g*}$u*###s#r*&e|!,=|ʟ*6 ç͜*6*###*###~#fo###~#fos#r͋R!!$!!$!!$!!$!-=!9!9DM**}‘u|N!~eu|b!5ej!4eu|~!oeÆ!ne!&ͯ*&e|ʿ*###~#fo###~#fo#~#fo`is#rƬ`i6#6u|ܬuzv`is#ru!ѕu|!_d?!Td?'!9!.=>4!,*\"\ HISOFT-C Compiler V1.1 Copyright  1984 HISOFT vbbyb*ܱ[ȱ[ƱRDM "-mpbS/m!!Эvb}!ʭ*ƱHm‰l>Âlphwd~(Ͳb#G~Ͳb#"lSlͩb*lb9*l}òb͎bþcccM*t͘l"t[ֱR"Tmπӊ͂b Ͷ@^#e^#V#ͯ^#eÓ_eͯ^eі ?~ #^#V!/(_*|(*Ա{(# !<!ͩbYͅbQmsb ERROR %d %s }2H:~#o&)`^#Vnnnnnn|z: z2z!l: w!9DM͐~#fo͐~#fo!͐~#fo͐~#fo!!!9DM*w#w!pb!I h !b!V h !t!_ h !h!i h !Hm!t h !! h !! h !!\* \͉! s#r͐?D! s#r͐| ! !͐\! s#r͐?͐͐͐! ! w E RPW !"#$%&'()*+,-./DDDDDDDDDD:;<=>?@LLLLLLLLLLLLLLLLLLLLLLLLLL[\]^L`LLLLLLLLLLLLLLLLLLLLLLLLLL{|}~|uc~cccccbbbbbddb#ceccccc=cbddjc !"bbb&'()*+,-|b|bbybvbcccccccdd f f f .e 3e ;ebbbbg $$=? STXW<>RP|^&OQ+-*/%*&-!~VU   auto break case cast char continuedefault double do else entry extern float for goto if int long registerreturn short sizeof static struct switch typedef union unsignedwhile keyhit grawin bputchar ]getchar Xprintf Sfprintf Nsprintf Iscanf Dfscanf ?sscanf :swap 5move 0isalpha +isdigit &islower !isupper isspace tolower toupper fopen getc ungetc putc fclose RESTRICTION : floats not implementedbad character constantnot a preprocessor commandmacro buffer fullcan only define identifiers as macrosRESTRICTION: macros may not have parameterscannot open fileRESTRICTION: cannot nest includesmissing 'while'not in loop or switchnot in loopnot in switchLIMIT : too many case statementsmultiple default statementsgoto needs a labelmultiple use of identifierdirect execution not possible when translatingLIMIT : name table fullLIMIT : too many typesduplicate declaration - type mismatchduplicate declaration - storage class mismatchLIMIT : global symbol table fullLIMIT : too much global dataduplicate declarationLIMIT : local symbol table fullthis variable was not in parameter listundefined variable(s)bad function return typeno arrays of functionsLIMIT : expression too complicated - too many argumentsLIMIT : expression too complicated - too many operatorsbad type combinationbad operand typeneed an lvaluenot a defined member of a structureexpecting a primary hereundefined variableneed a type nameneed a constant expressioncan only call functions : does not follow a ? properlyDestination of an assignment must be an lvalueneed a : to follow a ? - check brackettingneed a pointerillegal parameter typeRESTRICTION: Floating Point not implementedcannot use this operator with float argumentsbad declarationstorage class not valid in this contextRESTRICTION: can't manage initializers yetduplicate declaration of structure taguse a predeclared structure for parametersstructure cannot contain itselfbad declaratormissing ')' in function declarationbad formal parameter listtype should be functiongenerated code area is fullneed an lvalueLIMIT: no more memoryRESTRICTION: use assignment or move() to initialise automaticsCannot initialise this (disallowed storage class)Cannot initialise this (disallowed type)too much initialisation datahe wrong file, find another header ret ;**CC-lib I /*****************************/ /* Hisoft C */ /* Standard Function Library */ /* Version for ZX Spectrum */ /* */ /* Copyright (C) 1984 Hisoft */ /* Last changed 20 Nov 1984 */ /*****************************/ #list- /* Some arithmetic functions */ /* min and max are in "stdio.h" because they are variadic */ int abs(n) { return n<0 ? -n : n ; } int sign(n) { return n ? ( n<0 ? -1 : 1 ) : 0 ; } /* An illustration of how to grub around in the store */ typedef char * __char_ptr; int peek(address) { return * cast(__char_ptr) address; } void poke(address, value) { * cast(__char_ptr) address = value; } /* Input and Output */ int out(data,port) { reg_bc=port; reg_hl=data; inline(0Xbed,®_bc, 0X2a, ®_hl, 0X69ed); } int inp(port) { inline(0Xe1dd, 0Xe1, 0Xc1, 0xe5, 0X68ed, 0X26, 0, 0xc9); } /* Format conversion routine - ASCII to binary integer */ int atoi(s) char *s; { static int c, value, sign; while (isspace(*s)) ++s; value = 0; sign = 1; if (*s == '-') { ++s; sign = -1; } else if (*s == '+') ++s; while (isdigit(c = *s++)) value = 10 * value + c - '0'; return sign * value; } /* Sorting function - a Shell sort */ void qsort(list, num_items, size, cmp_func) char *list; int num_items, size; int (*cmp_func)(); { static unsigned gap, byte_gap, i; static char *p; for (gap = num_items >> 1; gap > 0; gap >>= 1) { byte_gap = gap * size; for (i = gap; i < num_items; ++i) for (p = list + i * size - byte_gap; p >= list; p -= byte_gap) { if ((*cmp_func)(p, p + byte_gap) <= 0) break; swap(p, p + byte_gap, size); } } } /* String Handling Functions */ char *strcat(base, add) char *base, *add; { static char *result; result = base; while (*base) ++base; while (*base++ = *add++); return result; } int strcmp(s, t) char *s, *t; { while (*s == *t) { if (! *s) return 0; ++s; ++t; } return *s - *t; } char *strcpy(dest, source) char *dest, *source; { static char *result; result = dest; while (*dest++ = *source++) ; return result; } unsigned strlen(s) char *s; { static unsigned length; length = 0; while (*s++) ++length; return length; } /* Character Test and Manipulate Functions */ /* NB - the common ones are built-in for efficiency */ int ispunct(c) char c; { return isprint(c) & ! isalnum(c); } int isalnum(c) char c; { return isalpha(c) | isdigit(c) ; } int isascii(c) char c; { return c < 0x80 ; } int iscntrl(c) char c; { return c < ' ' | c == '\177' ; } int isprint(c) char c; { return c >= ' ' & c < '\177' ; } /****** FILE SYSTEM ******/ char *fgets(s, n, fp) char *s; int n; FILE *fp; { static int c; static char *cs; cs = s; while (--n > 0 && (c = getc(fp)) != EOF) if ((*cs++ = c) == '\n') break; *cs = '\0'; return ((c == EOF && cs == s) ? NULL : s); } char *gets(s) char *s; { static int c; static char *cs; cs = s; while ((c = getchar()) !=EOF && c!='\n') *cs++ = c; *cs = 0; return ((c==-1 && cs==s) ? NULL : s ); } void fputs(s, fp) char *s; FILE *fp; { static int c; while (c = *s++) putc(c, fp); } void puts(s) char *s; { while (putchar(*s++)); } /* Storage Allocation and Freeing (Heap Management) */ char *calloc(n, size) unsigned n, size; { static HEADER *p, *q; static unsigned nbytes; nbytes = (n * size + (sizeof(HEADER) - 1)) / sizeof(HEADER) + 1; if ((q = _allocp) == NULL) /* no free list */ { _base._ptr = _allocp = q = &_base; _base._size = 0; } p = q->_ptr; while (TRUE) { if (p->_size >= nbytes) /* big enough */ { if (p->_size == nbytes) q->_ptr = p->_ptr; /* just right size */ else {  /* split block and allocate tail */ p->_size -= nbytes; p += p->_size; p->_size = nbytes; } _allocp = q; return cast(__char_ptr) (p+1); } if (p == _allocp) /* wrapped around free list */ { if ((p = cast(HEADER_PTR) sbrk(nbytes * sizeof(HEADER))) == ERROR) return NULL; p->_size = nbytes; free(p+1); p = _allocp; } q = p;  p = p->_ptr; } /* end while TRUE */ } void free(block) char *block; { static HEADER *p, *q; p = cast(HEADER_PTR) (block - 1); for (q = _allocp; !(p > q && p < q->_ptr); q = q->_ptr) if (q >= q->_ptr && (p > q || p < q->_ptr)) break; if (p + p->_size == q->_ptr) { p->_size += q->_ptr->_size; p->_ptr = q->_ptr->_ptr; } else p->_ptr = q->_ptr; if (q + q->_size == p) { q->_size += p->_size; q->_ptr = p->_ptr; } else q->_ptr = p; _allocp = q; } #define HEAPSIZE 1000 char *sbrk(n) unsigned n; { static char p, heap[HEAPSIZE], heap_ptr=heap; if (heap_ptr+n > heap+HEAPSIZE) return ERROR; p=heap_ptr; heap_ptr += n; return p; } /* Pseudo-Random Number Generator */ /* Adapted from "Learning to Program in C" by Thomas Plum. */ char _rnum[4]; void srand(n) { long_init(_rnum, 0,n); } int rand() { static char k[4]; long_init(k, 0x41c6,0x4e6d); long_multiply(_rnum, _rnum, k); long_init(k, 0,0x3039); long_add(_rnum, _rnum, k); return (_rnum[1] << 8) + _rnum[0]; } /* Some Functions for 32 bit integer arithmetic */ void long_multiply(c, a, b) char *a, *b, *c; { static char x[4], product[4]; int i, j; long_set(product, 0,0); for (i = 0; i < 4; ++i) for (j = i; j >= 0; --j) { long_set(x, a[i-j] * b[j], i); long_add(product, product, x); } long_copy(c, product); } void long_add(c, a, b) char *a, *b, *c; { unsigned u, i; u = 0; for (i = 0; i < 4; ++i) { u += *a++ + *b++; *c++ = u & 0xff; u >>= 8; } } void long_init(a, n1, n0) char *a; unsigned n1,n0; { a[0] = n0 & 0xff; a[1] = n0 >> 8; a[2] = n1 & 0xff; a[3] = n1 >> 8; } void long_set(a, n, d) char *a; unsigned n, d; { static int i; for (i=0; i<4; ++i) a[i] = 0; a[d] = n & 0xff; if (d < 3) a[d+1] = n >> 8; } void long_copy(c, a) char *a, *c; { move(c, a, 4); } /*** System Interface ***/ exit(n) { inline(0xcd,25236); _exit(n); } _exit(n) { inline(0xe1,0xe1,0xe1, 0x2b,0xc3,0x55,0); } /* Spectrum Graphics and Sound Functions */ plot(on,x,y) { _setover(on); inline(0xdd,0x46,4, 0xdd,0x4e,6, 0xcd,0x22e5); } line(on,dx,dy) { static sx,sy,de,bc; _setover(on); sx=sy=1; if (dx<0) { dx= -dx; sx= -1; } if (dy<0) { dy= -dy; sy= -1; } de= (sy<<8)+sx; bc=(dy<<8)+dx; inline(0xed,0x5b,&de, 0xed,0x4b,&bc, 0xcd,0x24ba); } beep(duration,pitch) unsigned duration,pitch; { static ft; if ( ! pitch) for(ft=0;ft7) return -1; putc(h,2); putc(i,2); return i; } #list+ /*****************************/ /* Hisoft C */ /* Standard Function Library */ /* End */ /*****************************/ return _colour(16,i); } cls() { inline(0xCD,0xD6B); } _setover(on) { printf("\025%c",on?0:1); } _beep(DE,HL) { static de,hl; de=DE; hl=HL; inline(0xdd,0xe5, 0xed,0x5b,&de, 0x2a,&hl, 0xcd,0