12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 1999-2014 by the Free Pascal development team.
- Basic OS/2 constants, types and functions implemented (mostly)
- in DOSCALL1.DLL. Only functions available in all 32-bit OS/2
- versions (i.e. starting with OS/2 2.0) are included here
- to make sure that programs using this unit could still run on
- these old versions. Certain functions supported in later versions
- which could be emulated on older versions are provided in unit
- DosCall2 (using dynamic loading of the respective entry points).
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit DosCalls;
- {***************************************************************************}
- interface
- {***************************************************************************}
- uses Strings;
- type PString = PShortString;
- {$PACKRECORDS 1}
- type TByteArray=array[0..$fff0] of byte;
- PByteArray=^TByteArray;
- TCharArray=array[0..$fff0] of char;
- PCharArray=^TCharArray;
- TWordArray=array[0..$7ff8] of word;
- PWordArray=^TWordArray;
- {****************************************************************************
- Thread related routines.
- ****************************************************************************}
- type TThreadEntry = function (Param: pointer): cardinal; cdecl;
- ThreadEntry = TThreadEntry;
- const dtSuspended =1; {Thread is started suspended instead of
- started at once.}
- dtStack_Commited =2; {Allocate all stack space at once. The
- operating system normally allocates more
- memory to the stack if the stack grows with
- the given stacksize as limit. This has the
- restriction that you cannot create a stack
- frame > 4 kb. at once. If you want to do
- this, or for other reasons you can allocate
- the complete stack at once with this flag.}
- (* The following for compatibility only *)
- CREATE_READY =0; { defect 65437 }
- CREATE_SUSPENDED =dtSuspended;
- STACK_SPARSE =0;
- STACK_COMMITTED =dtStack_Commited;
- { Wait option values }
- dtWait =0; {Wait until termination.}
- dtNoWait =1; {Do not wait. Return with error if not yet
- terminated.}
- (* The following for compatibility only *)
- DCWW_WAIT =dtWait;
- DCWW_NOWAIT =dtNoWait;
- {Create a new thread.
- TID = Thread ID of new thread is returned here.
- Address = Thread entry point. The new thread starts executing here.
- AParam = This one is passed to the thread entry procedure.
- Flags = Flags. Either dtsuspended or dt_stackcommited.
- StackSize = Size of the stack of the new thread.}
- function DosCreateThread(var TID:longint;Address:TThreadEntry;
- AParam:pointer;Flags,StackSize:longint):cardinal;cdecl;
- function DosCreateThread (var TID: cardinal; Address: TThreadEntry;
- AParam: pointer; Flags, StackSize: cardinal): cardinal; cdecl;
- (* Overloaded version for compatibility. *)
- function DosCreateThread(var TID:longint;Address:pointer;
- AParam:Pointer;Flags,StackSize:longint):cardinal;cdecl;
- function DosCreateThread (var TID: cardinal; Address: pointer;
- AParam: Pointer; Flags, StackSize: cardinal): cardinal; cdecl;
- {Suspend a running thread.}
- function DosSuspendThread(TID:cardinal):cardinal; cdecl;
- {Resume a suspended thread.}
- function DosResumeThread(TID:cardinal):cardinal; cdecl;
- {Terminate a specific thread.}
- function DosKillThread(TID:cardinal):cardinal; cdecl;
- {Wait until a specific thread has ended.
- TID = Thread to terminate. Can also be zero. In that case we
- wait until the next thread terminates. Its thread ID is
- returned back.
- Option = Flags. Either dtWait or dtNoWait.}
- function DosWaitThread(var TID:longint;Option:longint):cardinal; cdecl;
- function DosWaitThread(var TID:cardinal;Option:cardinal):cardinal; cdecl;
- {All other threads in the same process are suspended until a
- DosExitCritSec.}
- function DosEnterCritSec: cardinal; cdecl;
- {Resume the other threads again.}
- function DosExitCritSec: cardinal; cdecl;
- { DosExit codes }
- const deThread=0; {Terminate thread only.}
- deProcess=1; {Terminate the whole process.}
- (* The following for compatibility only *)
- Exit_Thread = deThread;
- Exit_Process = deProcess;
- {Terminate the thread or the program. Never returns, so it's defined as
- procedure.}
- procedure DosExit(Action,Result:cardinal); cdecl;
- type PThreadInfoBlock=^TThreadInfoBlock;
- PPThreadInfoBlock=^PThreadInfoBlock;
- PSysThreadIB=^TSysThreadIB;
- PProcessInfoBlock=^TProcessInfoBlock;
- PPProcessInfoBlock=^PProcessInfoBlock;
- TThreadInfoBlock=record
- Exh_Chain, {Head of exception handler chain.}
- Stack, {Pointer to the thread's stack.}
- StackLimit:pointer; {Pointer to the thread's stack-end.}
- TIB2:PSysThreadIB; {Pointer to system specific thread info.}
- Version, {Version of this datastructure.}
- Ordinal:cardinal; {Thread ordinal number.}
- end;
- ThreadInfoBlock=TThreadInfoBlock;
- TSysThreadIB=record
- TID, {Thread ID.}
- Priority, {Low byte of low word: thread priority.
- High byte of low word: thread class
- 1 = Idle
- 2 = Regular
- 3 = Time critical
- 4 = Server}
- Version:cardinal; {Version of this datastructure.}
- MCCount, {Must complete count. ??? Info wanted!}
- MCForceFlag:word; {Must complete force flag. Info wanted!}
- end;
- SysThreadIB=TSysThreadIB;
- TProcessInfoBlock=record
- PID, {Process ID.}
- ParentPID, {Parent's process ID.}
- HMTE:cardinal; {Module handle of executable program.
- ??? Info wanted!}
- Cmd, {Command line options.}
- Env:PByteArray; {Environment strings.}
- flStatus, {1 means that the process is in exit list
- processing.}
- tType:cardinal; {Type of process:
- 0: Full screen protected mode.
- 1: DOS emulation.
- 2: Windowable full screen protected
- mode program.
- 3: Presentation manager program.
- 4: Detached mode process.}
- end;
- ProcessInfoBlock=TProcessInfoBlock;
- {OS/2 keeps information about the current process and the current thread
- is the datastructures TProcessInfoBlock and TThreadInfoBlock. All data
- can both be read and be changed. Use DosGetInfoBlocks to get their
- address. The service cannot fail, so it is defined as procedure. The
- second version of the call might be useful if you only want address of one
- of those datastructures, since you can supply nil for the other parameter
- then - beware, omitting one of these parameters (passing nil) is only
- supported on newer OS/2 versions, and causes SIGSEGV on e.g. OS/2 v2.1!!!}
- procedure DosGetInfoBlocks(var ATIB:PThreadInfoBlock;
- var APIB:PProcessInfoBlock); cdecl;
- procedure DosGetInfoBlocks(PATIB:PPThreadInfoBlock;
- PAPIB:PPProcessInfoBlock); cdecl;
- {Wait a number of milliseconds. Cannot fail, so it is defined as procedure.}
- procedure DosSleep (MSec:cardinal); cdecl;
- {Beep the speaker. You do not need to check for an error if you can
- guarantee that the frequency is correct.}
- function DosBeep(Freq,MS:cardinal):cardinal; cdecl;
- {****************************************************************************
- Process handling routines.
- ****************************************************************************}
- { User's Debug Buffer structure }
- type PDbgBuf = ^TDbgBuf;
- TDbgBuf = record
- Pid: cardinal; { Debuggee Process id }
- Tid: cardinal; { Debuggee Thread id }
- Cmd: longint; { Command or Notification }
- Value: longint; { Generic Data Value }
- Addr: pointer; { Debuggee Address }
- Buffer: pointer; { Debugger Buffer Address }
- Len: cardinal; { Length of Range }
- index: cardinal; { Generic Identifier Index }
- MTE: cardinal; { Module Table Entry Handle }
- EAX: cardinal; { Register Set }
- ECX: cardinal;
- EDX: cardinal;
- EBX: cardinal;
- ESP: cardinal;
- EBP: cardinal;
- ESI: cardinal;
- EDI: cardinal;
- EFlags: cardinal;
- EIP: cardinal;
- CSLim: cardinal;
- CSBase: cardinal;
- CSAcc: byte;
- CSAtr: byte;
- CS: word;
- DSLim: cardinal;
- DSBase: cardinal;
- DSAcc: byte;
- DSAtr: byte;
- DS: word;
- ESLim: cardinal;
- ESBase: cardinal;
- ESAcc: byte;
- ESAtr: byte;
- ES: word;
- FSLim: cardinal;
- FSBase: cardinal;
- FSAcc: byte;
- FSAtr: byte;
- FS: word;
- GSLim: cardinal;
- GSBase: cardinal;
- GSAcc: byte;
- GSAtr: byte;
- GS: word;
- SSLim: cardinal;
- SSBase: cardinal;
- SSAcc: byte;
- SSAtr: byte;
- SS: word;
- end;
- { DosDebug Command Numbers
- *
- * These numbers are placed in the Cmd field of the uDB on
- * entry to DosDebug.
- *
- * These numbers identify which command DosDebug is requested
- * to perform.
- *
- }
- const DBG_C_Null = 0; { Null }
- DBG_C_ReadMem = 1; { Read Word }
- DBG_C_ReadMem_I = 1; { Read Word }
- DBG_C_ReadMem_D = 2; { Read Word (same as 1) }
- DBG_C_ReadReg = 3; { Read Register Set }
- DBG_C_WriteMem = 4; { Write Word }
- DBG_C_WriteMem_I = 4; { Write Word }
- DBG_C_WriteMem_D = 5; { Write Word (same as 4) }
- DBG_C_WriteReg = 6; { Write Register Set }
- DBG_C_Go = 7; { Go }
- DBG_C_Term = 8; { Terminate }
- DBG_C_SStep = 9; { Single Step }
- DBG_C_Stop = 10; { Stop }
- DBG_C_Freeze = 11; { Freeze Thread }
- DBG_C_Resume = 12; { Resume Thread }
- DBG_C_NumToAddr = 13; { Object Number to Address }
- DBG_C_ReadCoRegs = 14; { Read Coprocessor Registers }
- DBG_C_WriteCoRegs = 15; { Write Coprocessor Registers }
- { 16 is reserved }
- DBG_C_ThrdStat = 17; { Get Thread Status }
- DBG_C_MapROAlias = 18; { Map read-only alias }
- DBG_C_MapRWAlias = 19; { Map read-write alias }
- DBG_C_UnMapAlias = 20; { Unmap Alias }
- DBG_C_Connect = 21; { Connect to Debuggee }
- DBG_C_ReadMemBuf = 22; { Read Memory Buffer }
- DBG_C_WriteMemBuf = 23; { Write Memory Buffer }
- DBG_C_SetWatch = 24; { Set Watchpoint }
- DBG_C_ClearWatch = 25; { Clear Watchpoint }
- DBG_C_RangeStep = 26; { Range Step }
- DBG_C_Continue = 27; { Continue after an Exception }
- DBG_C_AddrToObject = 28; { Address to Object }
- DBG_C_XchgOpcode = 29; { Exchange opcode and go }
- DBG_C_LinToSel = 30; { 32 to 16 conversion A001}
- DBG_C_SelToLin = 31; { 16 to 32 conversion A001}
- {------ Constants -------------------}
- DBG_L_386 = 1;
- DBG_O_OBJMTE = $10000000;
- {------ Notifications ---------------}
- DBG_N_SUCCESS = 0;
- DBG_N_ERROR = -1;
- DBG_N_ProcTerm = -6;
- DBG_N_Exception = -7;
- DBG_N_ModuleLoad = -8;
- DBG_N_CoError = -9;
- DBG_N_ThreadTerm = -10;
- DBG_N_AsyncStop = -11;
- DBG_N_NewProc = -12;
- DBG_N_AliasFree = -13;
- DBG_N_Watchpoint = -14;
- DBG_N_ThreadCreate = -15;
- DBG_N_ModuleFree = -16;
- DBG_N_RangeStep = -17;
- DBG_X_PRE_FIRST_CHANCE = 0;
- DBG_X_FIRST_CHANCE = 1;
- DBG_X_LAST_CHANCE = 2;
- DBG_X_STACK_INVALID = 3;
- DBG_W_Local = $0000001;
- DBG_W_Global = $0000002;
- DBG_W_Execute = $00010000;
- DBG_W_Write = $00020000;
- DBG_W_ReadWrite = $00030000;
- {You need a heavy manual if you want to know how this procedure works. Used
- for writing debuggers.}
- function DosDebug (DebugBuf: PDbgBuf):cardinal; cdecl;
- function DosDebug (var APDbgBuf: TDbgBuf): cardinal; cdecl;
- { codeTerminate values (also passed to ExitList routines) }
- const TC_exit = 0;
- TC_harderror = 1;
- TC_trap = 2;
- TC_killprocess = 3;
- TC_exception = 4;
- { DosExitList options }
- const ExLst_Add = 1;
- ExLst_Remove = 2;
- ExLst_Exit = 3;
- type TExitProc=procedure(Reason:cardinal); cdecl;
- {Add/remove an exitprocedure to the exit list. Also used to terminate an
- exit procedure. An exit procedure will be called on exiting of the program.
- OrderCode = One of the EXLST_XXXX constants.
- Proc = Address of the exit procedure.
- An exit procedure is called with one of the TC_XXXX constants. When it is
- done it must call DosExitList with ExLst_Exit.
- Exit procedures are called in random order.}
- function DosExitList(OrderCode:cardinal;Proc:TExitProc):cardinal; cdecl;
- { DosExecPgm options }
- const deSync = 0; {Wait until program terminates.}
- deAsync = 1; {Do not wait.}
- deAsyncResult = 2; {Do not wait. DosWaitChild will follow to
- check if process has been terminated. If
- you use this, you must use DosWaitChild,
- because OS/2 will not free memory that is
- allocated for the result codes if you don't.}
- deTrace = 3; {For debugging.}
- deBackground = 4; {Do not run as child. Run in a separate
- session.}
- deSuspended = 5; {Child will be loaded, but not executed.}
- deAsyncResultDb = 6; {Similar to deAsyncResult, but for debugging.}
- (* The following for compatibility only *)
- EXEC_SYNC =deSync;
- EXEC_ASYNC =deAsync;
- EXEC_ASYNCRESULT =deAsyncResult;
- EXEC_TRACE =deTrace;
- EXEC_BACKGROUND =deBackground;
- EXEC_LOAD =deSuspended;
- EXEC_ASYNCRESULTDB =deAsyncResultDb;
- type TResultCodes=record
- case byte of
- 0: (
- TerminateReason, {0 = Normal termination.
- 1 = Critical error.
- 2 = Trapped. (GPE, etc.)
- 3 = Killed by DosKillProcess.}
- ExitCode:cardinal); {Exit code of child.}
- 1: (CodeTerminate: cardinal); {For compatibility only}
- 2: (PID: cardinal); {Process ID returned for asynchronous execution}
- end;
- {Execute a program.
- ObjName = If a DLL cannot be found, its name will be returned here.
- ObjLen = Size of your ObjName buffer.
- ExecFlag = One of the deXXXX constants.
- Res = See TResultcodes.
- Args = Arguments. ASCIIZ strings. End of Args given by an empty
- string (#0). First arg must be filename without path and
- extension. nil is also allowed.
- Env = Environment. ASCIIZ strings. A variable has the format
- NAME=CONTENTS. End of Env given by an empty string (#0).
- nil is also allowed meaning inherit parent's environment.
- FileName = Filename with full path and extension. Is not sensitive
- for the PATH environment variable.}
- function DosExecPgm(ObjName:PChar;ObjLen:longint;ExecFlag:cardinal;
- Args,Env:PByteArray;var Res:TResultCodes;
- FileName:PChar):cardinal; cdecl;
- function DosExecPgm(var ObjName:string;ExecFlag:cardinal;
- Args,Env:PByteArray;var Res:TResultCodes;
- const FileName:string):cardinal;
- const
- DCWA_PROCESS = 0;
- DCWA_PROCESSTREE = 1;
- {Wait until a child process terminated. Sometimes called DosCWait.
- Action = 0 = Wait until child terminates (DCWA_PROCESS).
- 1 = Wait until child and all its childs terminate
- (DCWA_PROCESSTREE).
- Option = Flags. Either dtWait or dtNoWait.
- Res = See TResultCodes.
- TermPID = Process ID that has been terminated. Usefull when
- terminating a random process.
- PID = Process ID of process to terminate. Use a zero to
- terminate a random process.}
- function DosWaitChild(Action,Option:longint;var Res:TResultCodes;
- var TermPID:longint;PID:longint):cardinal; cdecl;
- function DosWaitChild(Action,Option:cardinal;var Res:TResultCodes;
- var TermPID:cardinal;PID:cardinal):cardinal; cdecl;
- const dpProcess = 0;
- dpProcessChilds = 1;
- dpThread = 2;
- dpSameClass = 0;
- dpIdleClass = 1;
- dpRegular = 2;
- dpTimeCritical = 3;
- {Set priority of a thread or all threads in another process.
- Scope = 0 = Set for all threads of a process.
- 1 = Set for all threads of a process and its childs.
- 2 = Set for a thread of the current process.
- TrClass = 0 = Do not change class.
- 1 = Change to idle time class.
- 2 = Change to regular class.
- 3 = Change to time-critical class.
- Delta = Value to add to priority. Resulting priority must be in
- the range 0..31 (Delta itself must be within -31..31).
- PortID = Process ID when Scope=0 or 1, thread ID when Scope=2.}
- function DosSetPriority(Scope,TrClass: cardinal;Delta:longint;PortID:cardinal):cardinal; cdecl;
- {Terminate a process. If the process isn't a child process, it can refuse
- to terminate.
- Action = 0 = Terminate process and all its childs.
- 1 = Terminate process only.
- PID = Process ID of process to terminate.}
- function DosKillProcess(Action,PID:cardinal):cardinal; cdecl;
- const AppTyp_NotSpec = $0000; {Apptype is unknown.}
- AppTyp_NotWindowCompat = $0001; {App cannot run in a window.}
- AppTyp_WindowCompat = $0002; {App can run in a window.}
- AppTyp_WindowAPI = $0003; {App uses PM}
- AppTyp_Bound = $0008; {App uses Family API.}
- AppTyp_DLL = $0010; {File is a DLL.}
- AppTyp_DOS = $0020; {App is a PC-DOS program.}
- AppTyp_PhysDrv = $0040; {App is a physical device driver.}
- AppTyp_VirtDrv = $0080; {App is virtual device driver.}
- AppTyp_ProtDLL = $0100; {File is a protected mode DLL.}
- AppTyp_WindowsReal = $0200; {M$ Winslows app, real mode.}
- AppTyp_WindowsProt = $0400; {M$ Winslows app, protected mode.}
- AppTyp_32bit = $4000; {App is 32 bit.}
- {Get the application type of an executable file on disk.
- FileName = Name of file to get type from.
- Flags = Receives a bitfield using the AppTyp constants.}
- function DosQueryAppType(FileName:PChar;var Flags:longint):cardinal; cdecl;
- function DosQueryAppType (FileName: PChar; var Flags: cardinal): cardinal;
- cdecl;
- const diPrinter = 0; {Get number of printer (parallel) ports.}
- diRS232 = 1; {Get number of serial ports.}
- diFloppy = 2; {Get number of floppy drives.}
- diCopro = 3; {Get number of FPU's installed (either 0 or 1).}
- diSubModel = 4; {??? System submodel type?}
- diModel = 5; {??? System model type?}
- diAdapter = 6; {0=Monochrome display, 1=other. ??? Does OS/2
- support monochrome displays?}
- {Get information about attached devices.
- DevInfo = Receives requested information.
- Item = One of the dixxxx constants.}
- function DosDevConfig(var DevInfo:byte;Item:cardinal):cardinal; cdecl;
- {****************************************************************************
- File handling related routines.
- ****************************************************************************}
- const MaxPathLength=260;
- MaxPathComponent=256;
- type TFileLock=record
- case boolean of
- false: (Offset, Range: longint);
- true: (lOffset, lRange: longint);
- end;
- PFileLock=^TFileLock;
- FileLock=TFileLock;
- {Lock or unlock an area of a file. Other processes may not access that part
- of the file.
- Unlock = Area to unlock. (0,0) = Do not unlock.
- Lock = Area to lock. (0,0) = Do not lock.
- Timeout = Number of miliseconds to wait if another process has locked
- the file.
- Flags = Bitfield:
- Bit 0: 0 = Other processes are denied access.
- 1 = Other processes may still read from the area.
- Bit 1: 0 = Normal locking mode.
- 1 = Atomic mode. Refer IBM's documentation.}
- function DosSetFileLocks(Handle:THandle;var Unlock,Lock:TFileLock;
- Timeout,Flags: cardinal):cardinal; cdecl;
- {Cancel a filelock area.
- Handle = File handle.
- Lock = Area that is locked now.}
- function DosCancelLockRequest(Handle:THandle;var Lock:TFileLock):cardinal;
- cdecl;
- {Data structures for extended attributes. Reading IBM's documentation is
- highly recommended before experimenting with EAs.}
- const fEA_needEA=$80;
- eaBinary = $fffe;
- eaASCII = $fffd;
- eaBitmap = $fffb;
- eaMetaFile = $fffa;
- eaIcon = $fff9;
- eaEA = $ffee;
- eaMVMT = $ffdf;
- eaMVST = $ffde;
- eaASN1 = $ffdd;
- type TgEA = record
- case byte of
- 1: (NameLen: byte;
- Name: array [0..0] of char);
- 2: (cbName: byte; { name length not including NULL }
- szName: char); { attribute name }
- end;
- PgEA = ^TgEA;
- GEA = TgEA;
- TgEAList = record
- ListLen: cardinal; { total bytes of structure including full list }
- List: array [0..0] of TgEA; { variable length GEA structures }
- end;
- PgEAList = ^TgEAList;
- GEAList = TgEAList;
- TfEA = record
- case byte of
- 1: (EA,
- NameLen: byte;
- Value: word);
- 2: (fEA: byte; { flags }
- cbName: byte; { name length not including NULL }
- cbValue: word); { value length }
- end;
- PfEA = ^TfEA;
- FEA=TfEA;
- TfEAList = record
- Size: cardinal; { total bytes of structure including full list }
- List: array [0..0] of TfEA; { variable length FEA structures }
- end;
- PfEAList = ^TfEAlist;
- FEAList = TfEAList;
- TEAOp = record
- case byte of
- 1: (gEAList: PgEAList;
- fEAList: PfEAList;
- Error: cardinal);
- 2: (fpGEAList: PGEAList; { general EA list }
- fpFEAList: PFEAList; { full EA list }
- oError: cardinal);
- end;
- PEAOp = ^TEAOp;
- EAOp = TEAOp;
- TfEA2 = record
- NextEntry: cardinal;
- Flags,
- NameLen: byte;
- Value: word;
- szName: array [0..0] of char;
- end;
- PfEA2 = ^TfEA2;
- FEA2 = TfEA2;
- TfEA2List = record
- ListLen: cardinal;
- List: array [0..0] of TfEA2;
- end;
- PfEA2List = ^TfEA2List;
- FEA2List = TfEA2List;
- TgEA2 = record
- case byte of
- 1: (NextEntry: cardinal;
- NameLen: byte;
- Name: array [0..0] of char);
- 2: (oNextEntryOffset: cardinal; { new field }
- cbName: byte;
- szName: array [0..0] of byte); { new field }
- end;
- PgEA2 = ^TgEA2;
- GEA2 = TgEA2;
- TgEA2list = record
- ListLen: cardinal;
- List: array [0..0] of TgEA2;
- end;
- PgEA2List = ^TgEA2List;
- GEA2List = TgEAList;
- TEAOp2 = record
- case byte of
- 1: (gEA2List: PgEA2List;
- fEA2List: PfEA2List;
- Error: cardinal);
- 2: (fpGEA2List: PGEA2List; { GEA set }
- fpFEA2List: PFEA2List; { FEA set }
- oError: cardinal); { offset of FEA error }
- end;
- PEAOp2 = ^TEAOp2;
- EAOp2 = TEAOp2;
- TEASizeBuf = record { struct for FSCTL fn 2 - max ea size }
- case byte of
- 1: (MaxEASize: word;
- MaxEAListSize: cardinal);
- 2: (cbMaxEASize: word; { max size of one EA }
- cbMaxEAListSize: cardinal);{ max size of the full EA list }
- end;
- PEASizeBuf = ^TEASizeBuf;
- EASizeBuf = TEASizeBuf;
- {*******************End of extented attribute datastructures.***************}
- {Usefull constanst for Action parameter.}
- { DosOpen() actions }
- const doOpened = 1;
- doCreated = 2;
- doOverwritten = 3;
- FILE_EXISTED = doOpened;
- FILE_CREATED = doCreated;
- FILE_TRUNCATED = doOverwritten;
- {Usefull constants for OpenFlags parameter.}
- { DosOpen() open flags }
- const doFail = 0;
- doOpen = 1;
- doOverwrite = 2;
- (*
- fixed by KO M.H. on 1999.07.04
- contents : Creation flags is 10 hex not 10 dec.
- *)
- doCreate = 16;
- FILE_OPEN = doOpen;
- FILE_TRUNCATE = doOverwrite;
- FILE_CREATE = doCreate;
- { this nibble applies if file already exists xxxx }
- OPEN_ACTION_FAIL_IF_EXISTS =doFail; { ---- ---- ---- 0000 }
- OPEN_ACTION_OPEN_IF_EXISTS =doOpen; { ---- ---- ---- 0001 }
- OPEN_ACTION_REPLACE_IF_EXISTS =doOverwrite; { ---- ---- ---- 0010 }
- { this nibble applies if file does not exist xxxx }
- OPEN_ACTION_FAIL_IF_NEW =doFail; { ---- ---- 0000 ---- }
- OPEN_ACTION_CREATE_IF_NEW =DoCreate; { ---- ---- 0001 ---- }
- {Useful constants for openmode parameter.}
- const doRead = 0;
- doWrite = 1;
- doReadWrite = 2;
- doDenyRW = 16;
- doDenyWrite = 32;
- doDenyRead = 48;
- doDenyNone = 64;
- doNoInherit = 128;
- doSequential = 256;
- doRandom = 512;
- doNoCache = 4096;
- doFailOnErr = 8192;
- doWriteThru = 16384;
- doDASD = 32768;
- { Dos(Protect)Open(L)/Dos(Protect)SetFHState flags }
- OPEN_ACCESS_READONLY =doRead; { ---- ---- ---- -000 }
- OPEN_ACCESS_WRITEONLY =doWrite; { ---- ---- ---- -001 }
- OPEN_ACCESS_READWRITE =doReadWrite; { ---- ---- ---- -010 }
- OPEN_SHARE_DENYREADWRITE =doDenyRW; { ---- ---- -001 ---- }
- OPEN_SHARE_DENYWRITE =doDenyWrite; { ---- ---- -010 ---- }
- OPEN_SHARE_DENYREAD =doDenyRead; { ---- ---- -011 ---- }
- OPEN_SHARE_DENYNONE =doDenyNone; { ---- ---- -100 ---- }
- OPEN_FLAGS_NOINHERIT =doNoInherit; { ---- ---- 1--- ---- }
- OPEN_FLAGS_NO_LOCALITY =$0000; { ---- -000 ---- ---- }
- OPEN_FLAGS_SEQUENTIAL =doSequential; { ---- -001 ---- ---- }
- OPEN_FLAGS_RANDOM =doRandom; { ---- -010 ---- ---- }
- OPEN_FLAGS_RANDOMSEQUENTIAL =doSequential
- or doRandom; { ---- -011 ---- ---- }
- OPEN_FLAGS_NO_CACHE =doNoCache; { ---1 ---- ---- ---- }
- OPEN_FLAGS_FAIL_ON_ERROR =doFailOnErr; { --1- ---- ---- ---- }
- OPEN_FLAGS_WRITE_THROUGH =doWriteThru; { -1-- ---- ---- ---- }
- OPEN_FLAGS_DASD =doDASD; { 1--- ---- ---- ---- }
- OPEN_FLAGS_NONSPOOLED =$00040000;
- OPEN_SHARE_DENYLEGACY =$10000000;
- OPEN_FLAGS_PROTECTED_HANDLE =$40000000;
- { Open a file.
- FileName = Name of file.
- Handle = Receives filehandle.
- Action = Receives result of opening.
- 1 = Existing file opened.
- 2 = File did not exist. Created.
- 3 = File existed. Overwritten.
- InitSize = Initial size of file when creating or overwriting.
- Ignored when you do not. Must be zero when the file is
- created or overwritten in read-only mode.
- Attrib = Attributes when creating or overwriting files.
- OpenFlags = Bitfield describing what to do when file exists or doesn't
- exist.
- OpenMode = Bitfield describing describing how to open a file.
- EA = Extended attributes to give file when created. Use a nil
- pointer if you don't want to give it extended attributes.
- Use it only when creating or overwriting file. Use nil
- when not. Only the FEA list will be used.
- The bits in the openflags parameter have the following meanings:
- Bit 0-3: Action to take when file exists. 0000 = Return with error.
- 0001 = Open it.
- 0010 = Overwrite it.
- Bit 4-7: Action to take when file does not 0000 = Return with error.
- exist. 0001 = Create it.
- The bits in the filemode parameter have the following meanings:
- Bit 0-2: Access mode: 000 = Read-only
- 001 = Write-only
- 010 = Read/Write
- Bit 3: Reserved.
- Bit 4-6: Sharing mode. 001 = Deny all
- 010 = Deny write
- 011 = Deny read
- 100 = Deny none
- Bit 7: Inheritance. 0 = Handle will be inherited by childs.
- 1 = Handle will not be inherited.
- Bit 8-11: Reserved.
- Bit 12: Cache flag. 0 = Use caching.
- 1 = Disable both read and write caching.
- Bit 13: Error handling. 0 = Use critical error handler.
- 1 = Return just an error code.
- Bit 14: Write cache flag. 0 = Write operations may be cached.
- 1 = Write operations must be executed
- before write operation functions return.
- Bit 15: DASD flag. 0 = Open a file or device.
- 1 = Open a drive as file.
- Bit 29: 32-bit access flag. 0 = Allow opening the file using DosOpen.
- 1 = Avoid file to be open using DosOpen as well.
- Bit 30: Protection flag. 0 = File handle is not protected.
- 1 = File handle is protected.
- When the DASD flag is set, the whole drive is read as a single file. The
- file starts with 512 bytes of bootsector, then 512 bytes of the second sector etc.
- The filename must consist of the driveletter followed by a semicolon.}
- function DosOpen(FileName:PChar;var Handle: longint; var Action:longint;
- InitSize:longint;Attrib,OpenFlags,FileMode:longint;
- EA:PEAOp2):cardinal; cdecl;
- function DosOpen(FileName:PChar;var Handle: THandle;var Action:cardinal;
- InitSize,Attrib,OpenFlags,FileMode:cardinal;
- EA:PEAOp2):cardinal; cdecl;
- {This variant of DosOpen always creates or overwrites a file.}
- function DosCreate(FileName:PChar;var Handle: THandle;
- Attrib,OpenMode:cardinal):cardinal;
- {This variant of DosOpen always opens an existing file.}
- function DosOpen(FileName:PChar;var Handle: THandle;
- Attrib,OpenMode:cardinal):cardinal;
- {There are also string variants.}
- function DosOpen(const FileName:string;var Handle: longint; var Action:longint;
- InitSize,Attrib,OpenFlags,OpenMode:longint;
- ea:PEAOp2):cardinal;
- function DosOpen(const FileName:string;var Handle: THandle;var Action:cardinal;
- InitSize,Attrib,OpenFlags,OpenMode:cardinal;
- ea:PEAOp2):cardinal;
- function DosCreate(const FileName:string;var Handle: THandle;
- Attrib,OpenMode:cardinal):cardinal;
- function DosOpen(const FileName:string;var Handle: THandle;
- Attrib,OpenMode:cardinal):cardinal;
- {Close a file.
- Cannot fail if handle does exist.}
- function DosClose (Handle: THandle): cardinal; cdecl;
- {Read from a file or other type of handle.
- Handle = File handle.
- Buffer = The read data is stored here.
- Count = Number of bytes to read.
- ActCount = Number of bytes actually read.}
- function DosRead (Handle: longint; var Buffer; Count: longint;
- var ActCount:longint):cardinal; cdecl;
- function DosRead (Handle: THandle; var Buffer; Count: cardinal;
- var ActCount:cardinal):cardinal; cdecl;
- {Write to a file or other type of handle.
- Handle = File handle.
- Buffer = The data to be written.
- Count = Number of bytes to write.
- ActCount = Number of bytes actually written.}
- function DosWrite (Handle: longint; const Buffer; Count: longint;
- var ActCount:longint):cardinal; cdecl;
- function DosWrite (Handle: THandle; const Buffer; Count: cardinal;
- var ActCount:cardinal):cardinal; cdecl;
- const dsZeroBased=0; {Set filepointer from begin of file.}
- dsRelative=1; {Set filepointer relative to the current one.}
- dsEndBased=2; {Set filepointer from end of file.}
- (* The following for compatibility only *)
- FILE_BEGIN = dsZeroBased; { Move relative to beginning of file }
- FILE_CURRENT = dsRelative; { Move relative to current fptr position }
- FILE_END = dsEndBased; { Move relative to end of file }
- {Change the filepointer of a file.}
- function DosSetFilePtr (Handle: longint; Pos: longint; Method: cardinal;
- var PosActual: longint): cardinal; cdecl;
- function DosSetFilePtr (Handle: THandle; Pos: longint; Method: cardinal;
- var PosActual: cardinal): cardinal; cdecl;
- {This variant seeks always from begin of file and does not return the
- actual position.}
- function DosSetFilePtr (Handle: THandle; Pos: longint): cardinal;
- {This variant returns the current filepointer.}
- function DosGetFilePtr (Handle: longint; var PosActual: longint): cardinal;
- function DosGetFilePtr (Handle: THandle; var PosActual: cardinal): cardinal;
- {Use DosQueryFileInfo or DosQueryPathInfo to get the size of a file.}
- {Change the size of a file.}
- function DosSetFileSize (Handle: THandle; Size: cardinal): cardinal; cdecl;
- {Flush update the changes to a file to disk.}
- function DosResetBuffer (Handle: THandle): cardinal; cdecl;
- {Duplicate or redirect a handle.
- To duplicate a handle: Fill handle with source handle and duplicate with -1.
- Copy of handle will be returned in duplicate.
- To redirect a handle: Fill handle with handle to which the handle to
- redirect will be redirected. The handle that will be
- redirected should be placed in duplicate.}
- function DosDupHandle (Handle: THandle; var Duplicate: THandle): cardinal;
- cdecl;
- {Return information about a specific handle. See DosOpen for a
- description of FileMode.}
- function DosQueryFHState (Handle: longint; var FileMode: longint): cardinal;
- cdecl;
- function DosQueryFHState (Handle: THandle; var FileMode: cardinal): cardinal;
- cdecl;
- {Set information about a specific handle. See DosOpen for a description
- of FileMode.}
- function DosSetFHState (Handle: THandle; FileMode: cardinal): cardinal; cdecl;
- {Useful constants for the handle type.}
- const dhFile = 0;
- dhDevice = 1;
- dhPipe = 2;
- dhNetwork = 8192;
- {Determine if a handle belongs to a file, a device or a pipe.
- Handle = Handle tp query info about.
- HandType = Bits 0-1: 00 = File
- 01 = Device
- 02 = Pipe
- Bit 15: 0 = Local.
- 1 = On network.}
- function DosQueryHType (Handle: longint; var HandType: longint;
- var Attr: longint): cardinal; cdecl;
- function DosQueryHType (Handle: THandle; var HandType:cardinal;
- var Attr:cardinal):cardinal; cdecl;
- {****************************************************************************
- File management related routines.
- ****************************************************************************}
- {Edit a filename using wildcard.
- Example editing CONFIG.SYS with *.BAK becomes CONFIG.BAK.
- Usefull when parsing commands like 'copy config.sys *.bak'.
- All filename characters are casemapped.'
- MetaLevel = 0 Use modern semantics
- MetaLevel = 1 Use OS/2 1.2 semantics
- Source = string to edit
- Edit = editstring
- Target = destination buffer
- TargetLen = size of the destination buffer}
- function DosEditName(MetaLevel:cardinal;Source,Edit:PChar;
- Target:PChar;TargetLen:cardinal):cardinal; cdecl;
- function DosEditName(MetaLevel:cardinal;const Source,Edit:string;
- var Target:string):cardinal;
- {Move or rename a file.
- OldFile = old name of file
- NewFile = new name of file}
- function DosMove(OldFile,NewFile:PChar):cardinal; cdecl;
- function DosMove(const OldFile,NewFile:string):cardinal;
- const dcExisting=1; {Overwrite existing files.}
- dcAppend=2; {Append to existing file.}
- dcFailEAs=4; {Discard EAs if not supported by target FS}
- {Copy a file.
- OldFile = source file
- NewFile = destination file}
- function DosCopy(OldFile,NewFile:PChar;Option:cardinal):cardinal; cdecl;
- function DosCopy(const OldFile,NewFile:string;Option:cardinal):cardinal;
- {Delete a file from disk.}
- function DosDelete(FileName:PChar):cardinal; cdecl;
- function DosDelete(const FileName:string):cardinal;
- {Destroy a file on disk. DosForceDelete makes sure that the file cannot
- be unerased anymore.}
- function DosForceDelete(FileName:PChar):cardinal; cdecl;
- function DosForceDelete(const FileName:string):cardinal;
- {Create a new directory.
- Name = Name of directory to create.
- EA = Extented attributes to give the directory. Use nil if you
- do not want do give it extented attributes. Only the FEA
- list is used.}
- function DosCreateDir(Name:PChar;EA:PEAOp2):cardinal; cdecl;
- function DosCreateDir(const Name:string;EA:PEAOp2):cardinal;
- {Variants without the EA parameter (nil is used).}
- function DosCreateDir(Name:PChar):cardinal;
- function DosCreateDir(const Name:string):cardinal;
- {Remove a directory.}
- function DosDeleteDir(Name:PChar):cardinal; cdecl;
- function DosDeleteDir(const Name:string):cardinal;
- {Set the current drive. Cannot fail if the driveletter is correct.}
- function DosSetDefaultDisk(DiskNum:cardinal):cardinal; cdecl;
- {Get the current drive. Because it cannot fail, it is declared as procedure.}
- procedure DosQueryCurrentDisk(var DiskNum:longint;var Logical:longint); cdecl;
- procedure DosQueryCurrentDisk(var DiskNum:cardinal;var Logical:cardinal); cdecl;
- {Set the current directory.}
- function DosSetCurrentDir(Name:PChar):cardinal; cdecl;
- function DosSetCurrentDir(const Name:string):cardinal;
- {Get the current directory.}
- function DosQueryCurrentDir(DiskNum:longint;var Buffer;
- var BufLen:longint):cardinal; cdecl;
- function DosQueryCurrentDir(DiskNum:cardinal;var Buffer:string):cardinal;
- function DosQueryCurrentDir(DiskNum:cardinal;var Buffer;
- var BufLen:cardinal):cardinal; cdecl;
- {Send/receive information to a device.
- Handle = A file handle to a device, instead of a file.
- Category = The category of functions the function is in.
- Func = Function to call.
- Params = Parameters for the function.
- ParamLen = Size of the params buffer.
- ParamSize = Size of the parametrs to send to the device
- Receives size of the returned parameters.
- Data = Data to send to device.
- DataLen = Size of your data buffer.
- DataSize = Size of the data to send to device.
- Receives size of the data returned by the device.}
- function DosDevIOCtl(Handle,Category,Func:longint;var Params;
- ParamLen:longint;var ParamSize:longint;
- var Data;DataLen:longint;var DataSize:
- longint):cardinal; cdecl;
- function DosDevIOCtl (Handle: THandle; Category,Func:cardinal;var Params;
- ParamLen:cardinal;var ParamSize:cardinal;
- var Data;DataLen:cardinal;var DataSize:cardinal):cardinal; cdecl;
- {****************************************************************************
- File searching related routines.
- ****************************************************************************}
- const faReadOnly = 1;
- faHidden = 2;
- faSystem = 4;
- faReserve = 8;
- faDirectory = 16;
- faArchive = 32;
- ilStandard = 1; (* Use TFileStatus3/TFindFileBuf3 *)
- ilQueryEASize = 2; (* Use TFileStatus4/TFindFileBuf4 *)
- ilQueryEAs = 3;
- ilQueryFullName = 5;
- ilStandardL = 11; (* Use TFileStatus3L/TFindFileBuf3L *)
- ilQueryEASizeL = 12; (* Use TFileStatus4L/TFindFileBuf4L *)
- ilQueryEAsL = 13;
- FIL_Standard = ilStandard;
- FIL_QueryEASize = ilQueryEASize;
- FIL_QueryEAsFromList = ilQueryEAs;
- FIL_StandardL = ilStandardL;
- FIL_QueryEASizeL = ilQueryEASizeL;
- FIL_QueryEAsFromListL = ilQueryEAsL;
- {Format of date records:
- Bit 0..4: day
- Bit 5..8: month
- Bit 9..15: year minus 1980
- Format of time records:
- Bit 0..4: seconds divided by 2
- Bit 5..10: minutes
- Bit 11..15: hours}
- type
- TFileStatus = object
- end;
- PFileStatus = ^TFileStatus;
- TFileStatus3 = object (TFileStatus)
- DateCreation, {Date of file creation.}
- TimeCreation, {Time of file creation.}
- DateLastAccess, {Date of last access to file.}
- TimeLastAccess, {Time of last access to file.}
- DateLastWrite, {Date of last modification of file.}
- TimeLastWrite:word; {Time of last modification of file.}
- FileSize, {Size of file.}
- FileAlloc:cardinal; {Amount of space the file really
- occupies on disk.}
- AttrFile:cardinal; {Attributes of file.}
- end;
- PFileStatus3=^TFileStatus3;
- TFileStatus4=object(TFileStatus3)
- cbList:cardinal; {Length of entire EA set.}
- end;
- PFileStatus4=^TFileStatus4;
- TFileStatus3L = object (TFileStatus)
- DateCreation, {Date of file creation.}
- TimeCreation, {Time of file creation.}
- DateLastAccess, {Date of last access to file.}
- TimeLastAccess, {Time of last access to file.}
- DateLastWrite, {Date of last modification of file.}
- TimeLastWrite:word; {Time of last modification of file.}
- FileSize, {Size of file.}
- FileAlloc:int64; {Amount of space the file really
- occupies on disk.}
- AttrFile:cardinal; {Attributes of file.}
- end;
- PFileStatus3L=^TFileStatus3L;
- TFileStatus4L=object(TFileStatus3L)
- cbList:cardinal; {Length of entire EA set.}
- end;
- PFileStatus4L=^TFileStatus4L;
- TFileFindBuf3=object(TFileStatus)
- NextEntryOffset: cardinal; {Offset of next entry}
- DateCreation, {Date of file creation.}
- TimeCreation, {Time of file creation.}
- DateLastAccess, {Date of last access to file.}
- TimeLastAccess, {Time of last access to file.}
- DateLastWrite, {Date of last modification of file.}
- TimeLastWrite:word; {Time of last modification of file.}
- FileSize, {Size of file.}
- FileAlloc:cardinal; {Amount of space the file really
- occupies on disk.}
- AttrFile:cardinal; {Attributes of file.}
- Name:string; {Also possible to use as ASCIIZ.
- The byte following the last string
- character is always zero.}
- end;
- PFileFindBuf3=^TFileFindBuf3;
- TFileFindBuf4=object(TFileStatus)
- NextEntryOffset: cardinal; {Offset of next entry}
- DateCreation, {Date of file creation.}
- TimeCreation, {Time of file creation.}
- DateLastAccess, {Date of last access to file.}
- TimeLastAccess, {Time of last access to file.}
- DateLastWrite, {Date of last modification of file.}
- TimeLastWrite:word; {Time of last modification of file.}
- FileSize, {Size of file.}
- FileAlloc:cardinal; {Amount of space the file really
- occupies on disk.}
- AttrFile:cardinal; {Attributes of file.}
- cbList:cardinal; {Size of the file's extended attributes.}
- Name:string; {Also possible to use as ASCIIZ.
- The byte following the last string
- character is always zero.}
- end;
- PFileFindBuf4=^TFileFindBuf4;
- TFileFindBuf3L=object(TFileStatus)
- NextEntryOffset: cardinal; {Offset of next entry}
- DateCreation, {Date of file creation.}
- TimeCreation, {Time of file creation.}
- DateLastAccess, {Date of last access to file.}
- TimeLastAccess, {Time of last access to file.}
- DateLastWrite, {Date of last modification of file.}
- TimeLastWrite:word; {Time of last modification of file.}
- FileSize, {Size of file.}
- FileAlloc:int64; {Amount of space the file really
- occupies on disk.}
- AttrFile:cardinal; {Attributes of file.}
- Name:string; {Also possible to use as ASCIIZ.
- The byte following the last string
- character is always zero.}
- end;
- PFileFindBuf3L=^TFileFindBuf3L;
- TFileFindBuf4L=object(TFileStatus)
- NextEntryOffset: cardinal; {Offset of next entry}
- DateCreation, {Date of file creation.}
- TimeCreation, {Time of file creation.}
- DateLastAccess, {Date of last access to file.}
- TimeLastAccess, {Time of last access to file.}
- DateLastWrite, {Date of last modification of file.}
- TimeLastWrite:word; {Time of last modification of file.}
- FileSize, {Size of file.}
- FileAlloc:int64; {Amount of space the file really
- occupies on disk.}
- AttrFile:cardinal; {Attributes of file.}
- cbList:cardinal; {Size of the file's extended attributes.}
- Name:string; {Also possible to use as ASCIIZ.
- The byte following the last string
- character is always zero.}
- end;
- PFileFindBuf4L=^TFileFindBuf4L;
- {Find first file matching a filemask. In contradiction to DOS, a search
- handle is returned which should be closed with FindClose when done.
- FileMask = Filemask to search.
- Handle = Search handle will be returned here, fill with -1 before
- call.
- Attrib = File attributes to search for.
- AFileStatus = Return buffer.
- FileStatusLen = Size of return buffer.
- Count = Fill with maximum number of files to search for, the
- actual number of matching files found is returned here.
- InfoLevel = One of the ilXXXX constants. Consult IBM documentation
- for exact meaning. For normal use: Use ilStandard and
- use PFileFindBuf3 for AFileStatus.}
- function DosFindFirst (FileMask: PChar; var Handle: THandle; Attrib: cardinal;
- AFileStatus: PFileStatus; FileStatusLen: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- cdecl;
- function DosFindFirst (const FileMask: string; var Handle: THandle;
- Attrib: cardinal; AFileStatus: PFileStatus;
- FileStatusLen: cardinal; var Count: cardinal;
- InfoLevel: cardinal): cardinal;
- {Find next matching file.}
- function DosFindNext (Handle: THandle; AFileStatus: PFileStatus;
- FileStatusLen: cardinal; var Count: cardinal): cardinal;
- cdecl;
- {Close a search handle. Cannot fail if handle does exist.}
- function DosFindClose (Handle: THandle): cardinal; cdecl;
- {Get info about a file.
- Handle = Handle of file.
- InfoLevel = One of the ilXXXX constants. Consult IBM documentation
- for exect meaning. For normal use: Use ilStandard and
- PFileFindBuf3 for AFileStatus.
- AFileStatus = An info return buffer.
- FileStatusLen = Size of info buffer.}
- function DosQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
- AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl;
- {Set info about a file. File must be opened with write permissions. See
- above fo the parameters.}
- function DosSetFileInfo (Handle: THandle; InfoLevel: cardinal;
- AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl;
- {Return info about a file. In contradiction to the above functions, the
- file does not have to be open.}
- function DosQueryPathInfo(FileName:PChar;InfoLevel:cardinal;
- AFileStatus:PFileStatus;FileStatusLen:cardinal):cardinal; cdecl;
- function DosQueryPathInfo(const FileName:string;InfoLevel:cardinal;
- AFileStatus:PFileStatus;FileStatusLen:cardinal):cardinal;
- {Set information about a file.}
- function DosSetPathInfo(FileName:PChar;InfoLevel:cardinal;
- AFileStatus:PFileStatus;FileStatusLen,
- Options:cardinal):cardinal; cdecl;
- {Get info about the names and lengths of the EA's for a file or directory.
- RefType = 0 = AFile is a pointer to a file-handle.
- 1 = AFile is a pointer to an ASCIIZ string.
- AFile = Pointer file's name or handle.
- Entry = Number of EA to query inof about. (1 = first EA).
- Buf = Buffer where requested info is returned. For InfoLevel
- 1, the buffer is a TfEA2 datastructure.
- BufLen = Size of buf in bytes.
- Count = Number of EA's to return info for. Number of EA's that
- actually fitted in buf is returned here.
- InfoLevel = Level of information to return. Only level 1 is
- currently allowed.}
- function DosEnumAttribute(RefType:longint;AFile:pointer;
- Entry:longint;var Buf;BufSize:longint;
- var Count:longint;InfoLevel:longint):cardinal; cdecl;
- function DosEnumAttribute(RefType:cardinal;AFile:pointer;
- Entry:cardinal;var Buf;BufSize:cardinal;
- var Count:cardinal;InfoLevel:cardinal):cardinal; cdecl;
- function DosEnumAttribute (RefType: cardinal; AFile: PChar;
- Entry: cardinal; var Buf; BufSize:cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal; cdecl;
- function DosEnumAttribute(RefType: cardinal; const AFile: THandle;
- Entry: cardinal; var Buf; BufSize: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal; cdecl;
- function DosEnumAttribute (Handle: longint; Entry: longint; var Buf;
- BufSize: longint; var Count: longint; InfoLevel: longint): cardinal;
- function DosEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
- BufSize: cardinal; var Count: cardinal; InfoLevel: cardinal): cardinal;
- function DosEnumAttribute (const FileName: string;
- Entry: cardinal; var Buf; BufSize: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- {Get an environment variable.
- Name = Name of environment variable to get.
- Value = Receives pointer to environment string.}
- function DosScanEnv(Name:PChar;var Value:PChar):cardinal; cdecl;
- {There is, of course a string variant.}
- function DosScanEnv(const Name:string;var Value:string):cardinal;
- const dsPathOnly = 0; {Do not search current dir. (Unless it is
- in the directory list.)}
- dsCurrentDir = 1; {Search in the current direcotry and in the
- directory list.}
- dsEnvironment = 2; {The dirlist parameter is not a directory
- list, but an environment variable
- containing one.}
- dsIgnoreNetErrs = 4; {Ignore network errors when searching.}
- {Search for a file in a given number of directories.
- Flags = A combination of the dsXXXX constants.
- DirList = Directory list or environment variable containing list
- to search in.
- FileName = Filename to search for. May contain wildcards.
- FullName = Receives filename found, including path.
- FullLen = Length of your fullname buffer.}
- function DosSearchPath(Flag:cardinal;DirList,FileName:PChar;
- FullName:PChar;FullLen:cardinal):cardinal; cdecl;
- function DosSearchPath(Flag:cardinal;const DirList,FileName:string;
- var FullName:string):cardinal;
- {****************************************************************************
- File system related routines.
- ****************************************************************************}
- type TFSInfo=record
- case word of
- 1:
- (File_Sys_ID,
- Sectors_Per_Cluster,
- Total_Clusters,
- Free_Clusters:cardinal;
- Bytes_Per_Sector:word);
- 2: {For date/time description,
- see file searching realted
- routines.}
- (Label_Date, {Date when volumelabel created.}
- Label_Time:word; {Time when volumelabel created.}
- VolumeLabel:string); {Volume label. Can also be used
- as ASCIIZ, because the byte
- following the last character of
- the string is always zero.}
- end;
- PFSInfo=^TFSInfo;
- TAttachData=record
- case integer of {Flag in [0,1,2].}
- 0,1: {Flag = 0.}
- (Count:word;
- Data:TCharArray);
- 2: {Flag = 2.}
- (PipeHandle: THandle;
- {Handle of named pipe opened by spooler.}
- SpoolName:string);
- {Name of spooler object. Can also be used
- as ASCIIZ, because the bute following
- the last character is always zero.}
- end;
- PAttachData=^TAttachData;
- TFSQBuffer2=record
- _Type:word;
- NameLen:word;
- FSDNameLen:word;
- FSADataLen:word;
- Name:char;
- Nul1:byte;
- FSDName:char;
- Nul2:byte;
- FSAData:char;
- Nul3:byte;
- end;
- PFSQBuffer2=^TFSQBuffer2;
- const fsAttach = 0; {Attach a drive.}
- fsDetach = 1; {Detach a drive.}
- fsSpoolAttach = 2; {Attach a spool device.}
- fsSpoolDetach = 3; {Detach a spool device.}
- {IBM DOCS: "DosFSAttach attaches or detaches a drive to or from a remote file
- system driver (FSD), or a pseudocharacter device name to or from a local or
- remote FSD."
- DevName = When flag is 0 or 1, the name of a drive or a pseudo-
- character device. When using a drivename use the drive-
- letter followed by a colon.
- When flag is 2 or 3, the name of a spooled device.
- FileSystem = Name of the driver that should be attached or detached
- to DevName. Use nil when flag is 2 or 3.
- Data = Should contain a number of ASCIIZ strings that will
- be passed to the filesystem driver when flag is 0 or 1.
- Should contain de pipehandle and spoolname when flag is
- 2. Should be nil when flag is 3.
- DataLen = Number of bytes in data parameter.
- Flag = One of the dsXXXX constants. See above}
- function DosFSAttach(DevName,FileSystem:PChar;var Data:TAttachData;
- DataLen,Flag:cardinal):cardinal; cdecl;
- function DosFSAttach(const DevName,FileSystem:string;var Data:TAttachData;
- DataLen,Flag:cardinal):cardinal;
- {IBMDOCS: "DosQueryFSAttach obtains information about an attached file system
- (local or remote), or about a character device or pseudocharacter device
- attached to the file system."
- DevName = Name info drive or pseudo character device to query
- info about. Ignored for InfoLevels 2 and 3.
- Ordinal = Index into list of character/pseudo-character
- devices. Starts at 1. Ignored for infolevel 1.
- InfoLevel = 1 = Return information about a drive or device named
- by DevName.
- 2 = Return information about a (pseudo) charachter
- device numbered by Ordinal.
- 3 = Return information about a drive numbered by
- Ordinal.
- Buffer = Will be filled with infomation.
- BufLen = Size of your buffer in bytes. Number of bytes filled
- in your buffer is returned here.}
- function DosQueryFSAttach(DevName:PChar;Ordinal,InfoLevel:longint;
- var Buffer:TFSQBuffer2;var BufLen:longint):cardinal; cdecl;
- function DosQueryFSAttach(const DevName:string;Ordinal,InfoLevel:longint;
- var Buffer:TFSQBuffer2;var BufLen:longint):cardinal;
- function DosQueryFSAttach(DevName:PChar;Ordinal,InfoLevel:cardinal;
- var Buffer:TFSQBuffer2;var BufLen:cardinal):cardinal; cdecl;
- function DosQueryFSAttach(const DevName:string;Ordinal,InfoLevel:cardinal;
- var Buffer:TFSQBuffer2;var BufLen:cardinal):cardinal;
- const FSCtl_Handle=1;
- FSCtl_PathName=2;
- FSCtl_FSDName=3;
- FSCtl_Error_Info=1;
- FSCtl_Max_EASize=2;
- {IBMDOCS: "DosFSCtl provides an extended standard interface between an
- application and a file-system driver (FSD).
- Consult IBM documentation about this function..}
- function DosFSCtl (Data: pointer; DataLen: longint; var ResDataLen: longint;
- Parms: pointer; ParmsLen: longint; var ResParmsLen: longint;
- _Function: longint; Route: PChar;
- Handle, Method: longint): cardinal; cdecl;
- function DosFSCtl (Data: pointer; DataLen: longint; var ResDataLen: longint;
- Parms: pointer;ParmsLen: longint; var ResParmsLen: longint;
- _Function: longint; const Route: string;
- Handle, Method: longint): cardinal;
- function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
- Parms: pointer; ParmsLen: cardinal; var ResParmsLen: cardinal;
- _Function: cardinal; Route: PChar;
- Handle: THandle;Method: cardinal): cardinal; cdecl;
- function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
- Parms: pointer; ParmsLen: cardinal; var ResParmsLen: cardinal;
- _Function: cardinal; const Route: string;
- Handle: THandle; Method: cardinal): cardinal;
- {Get information about a drive.
- InfoLevels:
- 1 Get total/free space etc.
- 2 Get volumelabel.}
- function DosQueryFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSInfo;
- BufLen: cardinal): cardinal; cdecl;
- {Set information about a drive.}
- function DosSetFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSinfo;
- BufLen: cardinal): cardinal; cdecl;
- {Check if verify mode is enabled.}
- function DosQueryVerify (var Enabled: longint): cardinal; cdecl;
- function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
- function DosQueryVerify (var Enabled: boolean): cardinal;
- {Turn the verify mode on or off.}
- function DosSetVerify (Enable: cardinal): cardinal; cdecl;
- function DosSetVerify (Enable: boolean): cardinal;
- {Change the number of filehandles our program can open. (Default=50). It
- won't hurt if there are files open when you are calling this.}
- function DosSetMaxFH (Count: cardinal): cardinal; cdecl;
- {Ask for more filehandles (or dump filehandles). It won't hurt if there are
- files open when you are calling this.
- ReqCount = Number of filehandles to ask for. (Negative to dump them.)
- CurMaxFH = Receives the total number of filehandles your program has
- access to.}
- function DosSetRelMaxFH (var ReqCount: longint; var CurMaxFH: longint):
- cardinal; cdecl;
- function DosSetRelMaxFH (var ReqCount: longint; var CurMaxFH: cardinal):
- cardinal; cdecl;
- const dsFull=0; {IBM DOCS: "Perform full system shutdown and
- file-system lock."}
- dsQuiescient=1; {IBM DOCS: "Perform buffer and cache flushing to
- make system quiescent."}
- {Prepare the system for shutdown.}
- function DosShutdown (Flags: cardinal): cardinal; cdecl;
- {Parameters (system variables) for DosQuerySysInfo.}
- const svMaxPathLength = 1; {Maximum length of a pathname.}
- svMaxTextSessions = 2; {Maximum number of text sessions.}
- svMaxPMSessions = 3; {Maximum number of PM sessions.}
- svMaxVDMSessions = 4; {Maximum number of DOS sessions.}
- svBootDrive = 5; {Get the boot drive. (A=1, B=2 etc.)}
- svDynPriVariation = 6; {Dynamic priority variation flag
- (0 = absolute priority, 1 means
- dynamic priority).}
- svMaxWait = 7; {Maximum wait time in seconds.}
- svMinSlice = 8; {Minimum time slice in milliseconds.}
- svMaxSlice = 9; {Maximum time slice in milliseconds.}
- svPageSize = 10; {Size of a page (always 4096 bytes for
- x86).}
- svVersionMajor = 11; {Major version number of kernel:
- 10 for OS/2 1.0 and 1.1,
- 20 for OS/2 2.0 .. OS/2 4.0.}
- svVersionMinor = 12; {Minor version of kernel:
- OS/2 2.0: 00, 2.1: 10, 2.11: 11,
- 3.0: 30, 4.0: 40.}
- svVersionRevision = 13; {Revision of kernel. Until now all
- OS/2 versions return 0.}
- svMsCount = 14; {Uptime in milliseconds.}
- svTimeLow = 15; {System time in seconds since
- 1 January 1970 0:00:00, low dword.}
- svTimeHigh = 16; {System time in seconds since
- 1 January 1970 0:00:00, high dword.}
- svTotPhysMem = 17; {Amount in bytes of physical memory
- in system.}
- svTotResMem = 18; {Amount in bytes of resident memory
- in system.}
- svTotAvailMem = 19; {Amount in bytes of available
- memory.}
- svMaxPrMem = 20; {Maximum amount of memory the current
- process can request for its
- private use.}
- svMaxShMem = 21; {Maximum amount of shared memory
- the current process can request.}
- svTimerInterval = 22; {Timer interval in tenths of a
- millisecond.}
- svMaxCompLength = 23; {Maximum length of a component in a
- pathname.}
- svForegroundFSSession = 24; {Session ID of the foreground
- full-screen session. Presentation
- Manager and all sessions running under
- PM (including PM, windowed VIO, VDM
- and seamless Win 3.x) return ID 1.}
- svForegroundProcess = 25; {Process ID of the current foreground
- process.}
- svNumProcessors = 26; {Number of CPUs in machine - supported
- since WarpServer Advanced SMP.}
- {The following parameters are only supported in WSeB/MCP/eCS
- or OS/2 Warp 4.0 with FP14 and above.}
- svMaxHPrMem = 27; {Maximum amount of high memory the
- process can request for its private
- use in total (not necessarily at once
- because of potential fragmentation).}
- svMaxHShMem = 28; {Maximum amount of high shared memory
- the process can request.}
- svMaxProcesses = 29; {Maximum number of concurrent processes
- supported.}
- svVirtualAddressLimit = 30; {Size of the user address space in MB
- (i.e. the value of the rounded
- VIRTUALADDRESSLIMIT as specified in
- CONFIG.SYS, or the default value of
- 512).}
- svMax = 30; {The maximum parameter number
- for WSeB/MCP/eCS.}
- {Aliases for compatibility...}
- QSV_MAX_PATH_LENGTH = svMaxPathLength;
- QSV_MAX_TEXT_SESSIONS = svMaxTextSessions;
- QSV_MAX_PM_SESSIONS = svMaxPMSessions;
- QSV_MAX_VDM_SESSIONS = svMaxVDMSessions;
- QSV_BOOT_DRIVE = svBootDrive;
- QSV_DYN_PRI_VARIATION = svDynPriVariation;
- QSV_MAX_WAIT = svMaxWait;
- QSV_MIN_SLICE = svMinSlice;
- QSV_MAX_SLICE = svMaxSlice;
- QSV_PAGE_SIZE = svPageSize;
- svMajorVersion = svVersionMajor;
- QSV_VERSION_MAJOR = svVersionMajor;
- svMinorVersion = svVersionMinor;
- QSV_VERSION_MINOR = svVersionMinor;
- svRevision = svVersionRevision;
- QSV_VERSION_REVISION = svVersionRevision;
- QSV_MS_COUNT = svMsCount;
- QSV_TIME_LOW = svTimeLow;
- QSV_TIME_HIGH = svTimeHigh;
- svPhysMem = svTotPhysMem;
- QSV_TOTPHYSMEM = svTotPhysMem;
- svResMem = svTotResMem;
- QSV_TOTRESMEM = svTotResMem;
- svAvailMem = svTotAvailMem;
- QSV_TOTAVAILMEM = svTotAvailMem;
- svPrMem = svMaxPrMem;
- svShMem = svMaxShMem;
- QSV_MAXPRMEM = svMaxPrMem;
- QSV_MAXSHMEM = svMaxShMem;
- QSV_TIMER_INTERVAL = svTimerInterval;
- QSV_MAX_COMP_LENGTH = svMaxCompLength;
- QSV_FOREGROUND_FS_SESSION = svForegroundFSSession;
- svForegroundSession = svForegroundFSSession;
- QSV_FOREGROUND_PROCESS = svForegroundProcess;
- QSV_NUMPROCESSORS = svNumProcessors;
- QSV_MAXHPRMEM = svMaxHPrMem;
- QSV_MAXHSHMEM = svMaxHShMem;
- QSV_MAXPROCESSES = svMaxProcesses;
- QSV_VIRTUALADDRESSLIMIT = svVirtualAddressLimit;
- QSV_MAX = svMax;
- {Get one or more system variables.
- First = First variable to get.
- Last = Last variable to get.
- Buf = Receives variables.
- BufSize = Size of the buffer (every system variable is a cardinal).}
- function DosQuerySysInfo(First,Last:cardinal;var Buf;BufSize:cardinal):cardinal;
- cdecl;
- type
- TQSVValues = array [1..svMax] of cardinal;
- PQSVValues = ^TQSVValues;
- function DosQuerySysInfo(First,Last:cardinal;Buf:PQSVValues;
- BufSize:cardinal):cardinal;cdecl;
- {Return information about a partitionable disk.}
- function DosPhysicalDisk(Func:cardinal;Buf:pointer;BufSize:cardinal;
- Params:pointer;ParamSize:cardinal):cardinal; cdecl;
- {****************************************************************************
- Memory allocation related routines.
- ****************************************************************************}
- const mfPag_Read = $00001; {Give read access to memory.}
- mfPag_Write = $00002; {Give write access to memory.}
- mfPag_Execute = $00004; {Allow code execution in memory.}
- mfPag_Guard = $00008; {Used for dynamic memory growing. Create
- uncommitted memory and make the first
- page guarded. Once it is accessed it
- will be made committed, and the next
- uncommitted page will be made guarded.}
- mfPag_Commit = $00010; {Make the memory committed.}
- mfPag_Decommit = $00020; {Decommit the page.}
- mfObj_Tile = $00040; {Also allocate 16-bit segments of 64k
- which map the memory. (Makes 16<>32 bit
- pointer conversion possible.}
- mfObj_Protected = $00080;
- mfObj_Gettable = $00100;
- mfObj_Giveable = $00200;
- mfObj_Any = $00400; {Allow using high memory (> 512 MB).}
- mfPag_Default = $00400;
- mfPag_Shared = $02000;
- mfPag_Free = $04000;
- mfPag_Base = $10000;
- mfSub_Init = $00001; {Use base, if not set, choose a base
- address yourself.}
- mfSub_Grow = $00002; {Grow the specified heap, instead of
- allocating it. Ignore mfSub_Init.}
- mfSub_Sparse = $00004;
- mfSub_Serialize = $00008;
- (* Plus a little bit compatibility... *)
- pag_Read = mfPag_Read;
- pag_Write = mfPag_Write;
- pag_Execute = mfPag_Execute;
- pag_Guard = mfPag_Guard;
- pag_Commit = mfPag_Commit;
- pag_Decommit = mfPag_Decommit;
- obj_Tile = mfObj_Tile;
- obj_Protected = mfObj_Protected;
- obj_Gettable = mfObj_Gettable;
- obj_Giveable = mfObj_Giveable;
- obj_Any = mfObj_Any;
- pag_Default = mfPag_Default;
- pag_Shared = mfPag_Shared;
- pag_Free = mfPag_Free;
- pag_Base = mfPag_Base;
- sub_Init = mfSub_Init;
- sub_Grow = mfSub_Grow;
- sub_Sparse = mfSub_Sparse;
- sub_Serialize = mfSub_Serialize;
- {Get some memory.
- P = Pointer to memory will be returned here.
- Size = Number of bytes to get. The size is rounded up to a multiple
- of 4096. This is probably not the case on non-intel 386
- versions of OS/2.
- Flags = One or more of the mfXXXX constants.}
- function DosAllocMem(var P:pointer;Size,Flag:cardinal):cardinal; cdecl;
- {Free a memory block.}
- function DosFreeMem(P:pointer):cardinal; cdecl;
- {Set settings for a block of memory.
- P = Pointer to the memory. Doesn't need to be the start of the
- memory block allocated with DosAllocMem, but must be a multiple
- of 4096.
- Size = Number of bytes to change settings for. Is rounded up to a
- multile of 4096.
- Flags = New flags for the memory.}
- function DosSetMem(P:pointer;Size,Flag:cardinal):cardinal; cdecl;
- {Give another process access to a shared memory block.
- P = Pointer to the shared memory object.
- PID = Process of destination process.
- Flag = Permissions the the destination process gets.}
- function DosGiveSharedMem(P:pointer;PID,Flag:cardinal):cardinal; cdecl;
- {Get access to a shared memory object.
- P = Pointer to shared memory object.
- Flag = Permissions to ask.}
- function DosGetSharedMem(P:pointer;Flag:cardinal):cardinal; cdecl;
- {Get access to a shared memory object that has a name.
- P = Pointer to shared memory object.
- Name = Name of the memory object. (Starting with '\SHAREMEM\'.
- Flag = Permissions to ask.}
- function DosGetNamedSharedMem(var P:pointer;Name:PChar;Flag:cardinal):cardinal;
- cdecl;
- function DosGetNamedSharedMem(var P:pointer;const Name:string;
- Flag:cardinal):cardinal;
- {Allocate memory so that it can later be shared with another program.
- P = Reveives pointer to memory.
- Name = Optional: name to give memory. Must start with '\SHAREMEM\'.
- Use nil for the PChar or '' for the string variant for no name.
- Size = Number of bytes to allocate.}
- function DosAllocSharedMem(var P:pointer;Name:PChar;
- Size,Flag:cardinal):cardinal; cdecl;
- function DosAllocSharedMem(var P:pointer;const Name:string;Size,
- Flag:cardinal):cardinal;
- {Get the size and flags of a block of memory.
- P = Pointer to the block of memory.
- Size = Receives block size.
- Flag = Receives the flags.}
- function DosQueryMem(P:pointer;var Size,Flag:longint):cardinal; cdecl;
- function DosQueryMem (P: pointer; var Size, Flag: cardinal): cardinal; cdecl;
- {Allocate a block of memory in a heap.
- Base = Pointer to the start of the heap.
- P = Receives pointer to the memory bock.
- Size = Number of bytes to allocate.}
- function DosSubAllocMem(Base:pointer;var P:pointer;Size:cardinal):cardinal;
- cdecl;
- {Free a block of memory in a heap.
- Base = Pointer to the start of the heap.
- P = Pointer to memory block to free.
- Size = Number of bytes to free.}
- function DosSubFreeMem(Base,P:pointer;Size:cardinal):cardinal; cdecl;
- {Turn a block of memory into a heap.
- Base = Pointer to memory block to turn into a heap.
- Flag = One or more of the mfSub_XXXX flags.
- Size = Size of the requested heap.}
- function DosSubSetMem(Base:pointer;Flag,Size:cardinal):cardinal; cdecl;
- {Destroy a heap. (Memory remains allocated).
- Base = Pointer to the heap to destroy.}
- function DosSubUnsetMem(Base:pointer):cardinal; cdecl;
- {****************************************************************************
- Semaphore related routines
- ****************************************************************************}
- const smShared = $0001; {Semaphore is shared.}
- smMWWaitAny = $0002; {MuxWait only: Wait until a semaphore
- is cleared.}
- smMWWaitAll = $0004; {MuxWait only: Wait until all semaphores
- are cleared.}
- Sem_Indefinite_Wait = cardinal (-1);
- {DosRequestMutExSem blocks the calling
- thread indefinitely.}
- Sem_Immediate_Return = 0; {DosRequestMutExSem returns immediately
- without blocking the calling thread.}
- (* The following two flag values are only available
- on Warp 3 FP 29, Warp 4 FP 5 and above. *)
- dce_AutoReset = $1000; {This will cause the (event) semaphore
- to be reset automatically at the time
- it is posted.}
- dce_PostOne = $0800; {This will cause only one thread to be
- posted where multiple threads are
- waiting on an event semaphore created
- with this attribute. dce_PostOne also
- causes the semaphore to be reset
- automatically when it is posted.}
- (* The following just for compatibility. *)
- dcMW_Wait_Any = smMWWaitAny;
- dcMW_Wait_All = smMWWaitAll;
- type PSemRecord=^TSemRecord;
- TSemRecord=record
- Semaphore: THandle; {Handle of semaphore to link.}
- User: cardinal;
- end;
- PSemArray=^TSemArray;
- TSemArray=array[0..$ffff] of TSemRecord;
- {Create an event semaphore.
- Name = Optional: Name of semaphore to create. Must start with '\SEM32\.
- Use nil for PChar or '' for string variant for noname. An
- unnamed semaphore is not shared unless the sm_Shared flag is
- set.
- Handle = Receives handle of semaphore.
- Attr = One or more of the smXXXX constants.
- State = Initial state: 0 = Reset (false), 1 = Posted (true).}
- function DosCreateEventSem (Name: PChar;var Handle: THandle;
- Attr, State: cardinal): cardinal; cdecl;
- function DosCreateEventSem (const Name: string; var Handle: THandle;
- Attr, State: cardinal): cardinal;
- function DosCreateEventSem (Name: PChar;var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- function DosCreateEventSem (const Name: string; var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- {Open a semaphore created by another process or thread.
- Name = Name of semaphore.
- Handle = Receives handle of semaphore.}
- function DosOpenEventSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
- function DosOpenEventSem (const Name: string; var Handle: THandle): cardinal;
- {Close an event semaphore.
- Handle = Handle of a semaphore to close.}
- function DosCloseEventSem (Handle: THandle): cardinal; cdecl;
- {Reset an event semaphore: *** probeer *** operation.
- Handle = Handle of semaphore.
- PostCount = Number of times DosPostEventSem has been called since last
- reset.
- Note: Returns errorcode 300 if semaphore is already reset.}
- function DosResetEventSem(Handle:longint;var PostCount:longint):cardinal;
- cdecl;
- function DosResetEventSem (Handle: THandle; var PostCount: cardinal): cardinal;
- cdecl;
- {Post an event semaphore: *** verhoog *** operation.
- Handle = Handle of semaphore.
- Note: Returns errorcode 299 if semaphore is already posted.}
- function DosPostEventSem (Handle: THandle): cardinal; cdecl;
- {Wait until an event semaphore is posted (wait until *** verhoog *** operation).
- Handle = Handle of semaphore.
- Timeout = Return with errorcode if timeout milliseconds have past and the
- semaphore is still reset. To return immediately use 0,
- to wait forever use -1.}
- function DosWaitEventSem (Handle: THandle; Timeout: cardinal): cardinal; cdecl;
- {Check if an event semaphore is posted (if a *** verhoog *** operation has been done).
- Handle = Handle of semaphore.
- Posted = Receives number of times DosPostEventSem was called since
- the last reset.}
- function DosQueryEventSem (Handle: longint; var Posted: longint): cardinal;
- cdecl;
- function DosQueryEventSem (Handle: THandle; var Posted: cardinal): cardinal;
- cdecl;
- {Create a Mutual Exclusion semaphore (mutex).
- Name = Optional: Name to give to semaphore. Must start with '\SEM32\'.
- Use nil for PChar or '' for string variant to use no name.
- If a name if used the semaphore is shared.
- Handle = Receives handle of semaphore.
- Attr = One or more of the smXXXX constants.
- State = Initial state: (0/false=Not owned, 1/true=Owned.)}
- function DosCreateMutExSem (Name: PChar; var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- function DosCreateMutExSem (const Name: string; var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- function DosCreateMutExSem (Name: PChar; var Handle: THandle;
- Attr, State: cardinal): cardinal; cdecl;
- function DosCreateMutExSem (const Name: string; var Handle: THandle;
- Attr, State: cardinal): cardinal;
- {Open a shared mutex semaphore.
- Name = Name of semaphore to open, always starts with '\SEM32\'.
- Handle = Receives handle to semaphore.}
- function DosOpenMutExSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
- function DosOpenMutExSem (const Name: string; var Handle: THandle): cardinal;
- {Close a mutex semaphore.
- handle = Handle of semaphore to close.}
- function DosCloseMutExSem (Handle: THandle): cardinal; cdecl;
- {Request ownership of a mutex semaphore. If the semaphore is already owned the
- process is halted until the semaphore is released.
- Handle = Handle of semaphore.
- Timeout = Return with errorcode if the semaphore is still owned after
- timeout milliseconds; special values are Sem_Indefinite_Wait
- and Sem_Immediate_Return.}
- function DosRequestMutExSem (Handle: THandle; Timeout: cardinal): cardinal;
- cdecl;
- {Release the ownership of a mutex semaphore.
- Handle = Handle of semaphore to release.}
- function DosReleaseMutExSem (Handle: THandle): cardinal; cdecl;
- {Query the PID and TIB of the owner of a mutex semaphore.
- Handle = Handle of semaphore.
- PID = Receives process ID of owner.
- TID = Receives thread ID of owner.
- Count = Number of threads (within and outside current process) waiting
- for ownership of semaphore.}
- function DosQueryMutExSem(Handle:longint;var PID,TID,Count:longint):
- cardinal; cdecl;
- function DosQueryMutExSem (Handle: THandle; var PID, TID, Count: cardinal):
- cardinal; cdecl;
- {Create a Multiple Wait (MuxWait) semaphore.
- Name = Optional: Name to give semaphore. Must start with '\SEM32\'.
- Use nil for PChar or '' for string variant to use no name.
- If a name if used the semaphore is shared.
- Handle = Receives handle of semaphore.
- CSemRec = Number of semaphores to link muxwait semaphore with.
- SemArray = Array of semaphore records to link with muxwait semaphore.
- Attr = One or more of the smXXXX constants.}
- function DosCreateMuxWaitSem (Name: PChar; var Handle: THandle;
- CSemRec: cardinal; var SemArray: TSemArray; Attr: cardinal): cardinal; cdecl;
- function DosCreateMuxWaitSem (Name: PChar; var Handle: THandle;
- CSemRec: cardinal; SemArray: PSemArray; Attr: cardinal): cardinal; cdecl;
- function DosCreateMuxWaitSem (const Name: string; var Handle: THandle;
- CSemRec: cardinal; var SemArray: TSemArray;
- Attr: cardinal): cardinal;
- {Open a MuxWait semaphore.
- Name = Name of semaphore to open.
- Handle = Receives handle of semaphore.}
- function DosOpenMuxWaitSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
- function DosOpenMuxWaitSem (const Name: string; var Handle: THandle): cardinal;
- {Close a MuxWait semaphore.}
- function DosCloseMuxWaitSem (Handle: THandle): cardinal; cdecl;
- {Wait for the MuxWait semaphore to be cleared.
- Handle = Handle of semaphore.
- Timeout = Timeout. See above.
- User = Receives user value of the semaphore that caused the muxwait
- semaphore to be cleared.}
- function DosWaitMuxWaitSem(Handle:longint;Timeout:longint;
- var User:longint):cardinal;cdecl;
- function DosWaitMuxWaitSem (Handle: THandle; Timeout: cardinal;
- var User: cardinal): cardinal; cdecl;
- {Add a semaphore to the MuxWait semaphore.
- Handle = Handle of semaphore.
- SemRec = The semaphore to add.}
- function DosAddMuxWaitSem (Handle: THandle; var SemRec: TSemRecord): cardinal;
- cdecl;
- {Remove a semaphore from the MuxWait semaphore.
- Handle = Handle of muxwait semaphore.
- Sem = Handle of semaphore to remove.}
- function DosDeleteMuxWaitSem (Handle, Sem: THandle): cardinal; cdecl;
- {Query the semaphores from a MuxWait semaphore.
- Handle = Handle of semaphore.
- CSemRec = Input: Size of our array. Output: Number of items in array.
- SemRecs = Array where TSemRecords are stored.
- Attr = Flags used by creation of semaphore.}
- function DosQueryMuxWaitSem (Handle: longint; var CSemRec: longint;
- var SemRecs: TSemArray; var Attr: longint): cardinal; cdecl;
- function DosQueryMuxWaitSem (Handle: THandle; var CSemRec: cardinal;
- var SemRecs: TSemArray; var Attr: cardinal): cardinal; cdecl;
- {****************************************************************************
- Timing related routines.
- ****************************************************************************}
- type TDateTime=packed record
- case byte of
- 1:
- (Hour,
- Minute,
- Second,
- Sec100,
- Day,
- Month: byte;
- Year: word;
- TimeZone: smallint;
- WeekDay: byte);
- 2: (* For compatibility *)
- (Hours,
- Minutes,
- Seconds,
- Hundredths,
- _Day,
- _Month: byte;
- _Year: word;
- _TimeZone: smallint;
- _WeekDay: byte);
- end;
- PDateTime=^TDateTime;
- {Get the date and time.}
- function DosGetDateTime(var Buf:TDateTime):cardinal; cdecl;
- {Set the date and time.}
- function DosSetDateTime(var Buf:TDateTime):cardinal; cdecl;
- {Start a one shot timer.
- MSec = Number of miliseconds the timer will run.
- HSem = Handle of event semaphore that is posted when time has expired.
- TimHandle = Receives timer handle.}
- function DosAsyncTimer (MSec: cardinal; HSem: THandle;
- var TimHandle: THandle): cardinal; cdecl;
- {Start a cyclic timer.
- MSec = Number of miliseconds the timer will run.
- HSem = Handle of event semaphore that is posted when time has expired.
- TimHandle = Receives timer handle.}
- function DosStartTimer (MSec: cardinal; HSem: THandle;
- var TimHandle: THandle): cardinal; cdecl;
- {Stop a timer and destroy its handle. There is no need to check for an
- error code if you know your timer handle is correct.}
- function DosStopTimer (TimHandle: THandle): cardinal; cdecl;
- {Get the frequency of the high resolution timer.}
- function DosTmrQueryFreq(var Freq:longint):cardinal; cdecl;
- function DosTmrQueryFreq(var Freq:cardinal):cardinal; cdecl;
- {Get the current value of the high resolution timer.}
- function DosTmrQueryTime(var Time:comp):cardinal; cdecl;
- function DosTmrQueryTime (var Time: QWord): cardinal; cdecl;
- {****************************************************************************
- DLL specific routines.
- ****************************************************************************}
- {Load a DLL in memory if it is not yet loaded.
- ObjName = When the DLL cannot be found, or one of the DLL's it needs
- cannot be found, the name of the DLL will be put here.
- ObjLen = Size of the ObjName result buffer.
- DLLName = Name of DLL to load. Do not give an extension or a path,
- just the name. OS/2 will automatically search through the
- LIBPATH for the DLL.
- Handle = Receives DLL handle.}
- function DosLoadModule (ObjName: PChar; ObjLen: cardinal; DLLName: PChar;
- var Handle: THandle): cardinal; cdecl;
- function DosLoadModule (var ObjName: string; ObjLen: cardinal;
- const DLLName: string; var Handle: THandle): cardinal;
- {Let OS/2 know that we do not need a DLL anymore. If we were the only process
- using the DLL, it is unloaded.}
- function DosFreeModule (Handle: THandle): cardinal; cdecl;
- {Get the address of a procedure.
- Handle = DLL handle,
- Ordinal = Procedure to get address for. 0=Use its name.
- ProcName = Name of the procedure to query address for. Must be nil
- for PChar or '' for string variant if Ordinal is nonzero.
- Address = Receives address of procedure.}
- function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal; ProcName: PChar;
- var Address: pointer): cardinal; cdecl;
- function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal;
- const ProcName: string; var Address: pointer): cardinal;
- {Get the handle of a loaded DLL or a loaded executable.
- DLLName = Name of DLL.
- Handle = Receives DLL handle if present.}
- function DosQueryModuleHandle (DLLName: PChar; var Handle: THandle): cardinal;
- cdecl;
- function DosQueryModuleHandle (const DLLName: string;
- var Handle: THandle): cardinal;
- {Get the pathname of a loaded DLL or a loaded executable.
- Handle = Handle of DLL.
- NameLen = Maximum length of char array.
- Name = PChar (or string) where name is returned.}
- function DosQueryModuleName (Handle: THandle; NameLen: cardinal;
- Name: Pchar): cardinal; cdecl;
- {function DosQueryModuleName(Handle:THandle;var Name:OpenString):cardinal;}
- const pt16bit=0;
- pt32bit=1;
- {Return if a procedure is either 16 or 32 bit.
- Handle = Handle of DLL.
- Ordinal = DLL index number. 0 means use Name.
- Name = Must be nil for PChar or '' for string variant if Ordinal
- is zero. Otherwise it contains the procedure name.
- ProcType = One of the ptXXXX constants.}
- function DosQueryProcType (Handle,Ordinal:longint;Name:PChar;
- var ProcType:longint):cardinal; cdecl;
- function DosQueryProcType(Handle,Ordinal:longint;const Name:string;
- var ProcType:longint):cardinal;
- function DosQueryProcType (Handle: THandle; Ordinal: cardinal; Name:PChar;
- var ProcType: cardinal): cardinal; cdecl;
- function DosQueryProcType (Handle: THandle; Ordinal: cardinal; const Name: string;
- var ProcType: cardinal): cardinal;
- {****************************************************************************
- Resource related routines.
- ****************************************************************************}
- {Possible resource types:}
- const rtPointer = 1; {Mouse pointer.}
- rtBitmap = 2; {Bitmap}
- rtMenu = 3; {Menu template.}
- rtDialog = 4; {Dialog template.}
- rtString = 5; {A string table.}
- rtFontDir = 6; {Font directory.}
- rtFont = 7; {A font.}
- rtAccelTable = 8; {Accelerator table.}
- rtRcData = 9; {Binary data.}
- rtMessage = 10; {Error message table.}
- rtDlgInclude = 11; {Dialog include filename.}
- rtVKeyTbl = 12; {Key to vkey tables.}
- rtKeyTbl = 13; {Key to ugl tables.}
- rtCharTbl = 14; {Glyph to character tables.}
- rtDisplayInfo = 15; {Screen display information.}
- rtFKAShort = 16; {Function key area short form.}
- rtFKALong = 17; {Function key area long form.}
- rtHelpTable = 18; {Help table.}
- rtHelpSubTable = 19; {Sub help table.}
- rtFDDir = 20; {DBCS unique/font driver directory.}
- rtFD = 21; {DBCS unique/font driver.}
- {Get the address of a resource object.
- Handle = Handle of DLL (or executable) to get resource from.
- ResType = One of the rtXXXX constants.
- ResName = Number associated to resource object by resource compiler.}
- function DosGetResource (Handle: THandle; ResType, ResName: cardinal;
- var P: pointer): cardinal; cdecl;
- {Remove a resource object from memory.
- P = Pointer to resource.}
- function DosFreeResource (P: pointer): cardinal; cdecl;
- {Get the size of a resource object.
- Handle = Handle to DLL (or executable).
- IDT = One of the rtXXXX constants.
- IDN = Number associated to resource object by resource compiler.
- Size = Receives resource size.}
- function DosQueryResourceSize (Handle,IDT,IDN:longint;var Size:longint):cardinal;
- cdecl;
- function DosQueryResourceSize (Handle: THandle; IDT, IDN: cardinal;
- var Size: cardinal): cardinal; cdecl;
- {****************************************************************************
- Country and codepage specific routines.
- ****************************************************************************}
- type TCountryCode=record
- Country, {Country to query info about (0=current).}
- CodePage:cardinal; {Code page to query info about (0=current).}
- end;
- PCountryCode=^TCountryCode;
- CountryCode=TCountryCode;
- TTimeFmt=(Clock12,Clock24);
- TCountryInfo=record
- Country,CodePage:cardinal; {Country and codepage requested.}
- case byte of
- 0:(
- DateFormat:cardinal; {1=ddmmyy 2=yymmdd 3=mmddyy}
- CurrencyUnit:array[0..4] of char;
- ThousandSeparator:char; {Thousands separator.}
- Zero1:byte; {Always zero.}
- DecimalSeparator:char; {Decimals separator,}
- Zero2:byte;
- DateSeparator:char; {Date separator.}
- Zero3:byte;
- TimeSeparator:char; {Time separator.}
- Zero4:byte;
- CurrencyFormat, {Bit field:
- Bit 0: 0=indicator before value
- 1=indicator after value
- Bit 1: 1=insert space after
- indicator.
- Bit 2: 1=Ignore bit 0&1, replace
- decimal separator with
- indicator.}
- DecimalPlace:byte; {Number of decimal places used in
- currency indication.}
- TimeFormat:TTimeFmt; {12/24 hour.}
- Reserve1:array[0..1] of word;
- DataSeparator:char; {Data list separator}
- Zero5:byte;
- Reserve2:array[0..4] of word);
- 1:(
- fsDateFmt:cardinal; {1=ddmmyy 2=yymmdd 3=mmddyy}
- szCurrency:array[0..4] of char; {null terminated currency symbol}
- szThousandsSeparator:array[0..1] of char;
- {Thousands separator + #0}
- szDecimal:array[0..1] of char; {Decimals separator + #0}
- szDateSeparator:array[0..1] of char;
- {Date separator + #0}
- szTimeSeparator:array[0..1] of char;
- {Time separator + #0}
- fsCurrencyFmt, {Bit field:
- Bit 0: 0=indicator before value
- 1=indicator after value
- Bit 1: 1=insert space after
- indicator.
- Bit 2: 1=Ignore bit 0&1, replace
- decimal separator with
- indicator}
- cDecimalPlace:byte; {Number of decimal places used in
- currency indication}
- fsTimeFmt:byte; {0=12,1=24 hours}
- abReserved1:array[0..1] of word;
- szDataSeparator:array[0..1] of char;
- {Data list separator + #0}
- abReserved2:array[0..4] of word);
- end;
- PCountryInfo=^TCountryInfo;
- CountryInfo=TCountryInfo;
- TDBCSRange=record
- Start,Stop:byte;
- end;
- TDBCSArray=array[0..$ffff] of TDBCSRange;
- PDBCSArray=^TDBCSArray;
- const CurrentCountry:TCountryCode=(Country:0;CodePage:0);
- {Get country specific information.
- Size = Size of our datastructure. (SizeOf(TCountryInfo))
- ActualSize = Size of OS/2's datastructure. ActualSize bytes of
- our TCountryInfo have been filled.}
- function DosQueryCtryInfo(Size:longint;var Country:TCountryCode;
- var Res:TCountryInfo;var ActualSize:longint):cardinal; cdecl;
- function DosQueryCtryInfo(Size:cardinal;var Country:TCountryCode;
- var Res:TCountryInfo;var ActualSize:cardinal):cardinal; cdecl;
- {Get info about a code page with a DBCS character set.}
- function DosQueryDBCSEnv(Size:cardinal;var Country:TCountryCode;
- Buf:PChar):cardinal; cdecl;
- {Convert a string to uppercase.
- Size = Length of string.
- Country = Country and codepage for converting.
- AString = String to convert.}
- function DosMapCase(Size:cardinal;var Country:TCountryCode;
- AString:PChar):cardinal; cdecl;
- function DosMapCase(var Country:TCountryCode;
- var AString:string):cardinal;
- {Get a collate table (a table for comparing which character is smaller and
- which one is greater).
- Size = Length of the databuffer the program has.
- Country = Country to query table for. (0,0) is default country and
- codepage.
- Buf = Buffer to return table in. It's filled with the sort
- weights of the ascii code. For example the 128th byte
- contains the weight for ascii code 128.
- TableLen = Length of collating table.}
- function DosQueryCollate(Size:longint;var Country:TCountryCode;
- Buf:PByteArray;var TableLen:longint):cardinal; cdecl;
- function DosQueryCollate (Size: cardinal; var Country: TCountryCode;
- Buf:PByteArray; var TableLen: cardinal): cardinal; cdecl;
- {Get the current codepage. The return buffer (CodePages) is filled with the
- current code page followed by the list of prepared codepages as specified in
- CONFIG.SYS - all of them returned as DWORDs, typically not more than 3 should
- be necessary. Return value of 473 indicates that not all values fit into the
- provided space.}
- function DosQueryCP(Size:longint; PCodePages: PWordArray;
- var ActSize:longint):cardinal; cdecl;
- function DosQueryCP(Size: cardinal; PCodePages: PWordArray;
- var ActSize:cardinal):cardinal; cdecl;
- function DosQueryCP (Size: cardinal; var CodePages;
- var ActSize: cardinal): cardinal; cdecl;
- {Change the codepage, but only for the current process.}
- function DosSetProcessCP (CP: cardinal): cardinal; cdecl;
- {****************************************************************************
- Exception handling related functions
- ****************************************************************************}
- {Exception constants.}
- const
- Xcpt_Continue_Search = $00000000;
- Xcpt_Continue_Execution = $ffffffff;
- Xcpt_Continue_Stop = $00716668;
- Xcpt_Signal_Intr = $1;
- Xcpt_Signal_KillProc = $3;
- Xcpt_Signal_Break = $4;
- Xcpt_Fatal_Exception = $c0000000;
- Xcpt_Severity_Code = $c0000000;
- Xcpt_Customer_Code = $20000000;
- Xcpt_Facility_Code = $1fff0000;
- Xcpt_Exception_Code = $0000ffff;
- Xcpt_Unknown_Access = $00000000;
- Xcpt_Read_Access = $00000001;
- Xcpt_Write_Access = $00000002;
- Xcpt_Execute_Access = $00000004;
- Xcpt_Space_Access = $00000008;
- Xcpt_Limit_Access = $00000010;
- Xcpt_Data_Unknown = $ffffffff;
- Xcpt_Guard_Page_Violation = $80000001;
- Xcpt_Unable_To_Grow_Stack = $80010001;
- Xcpt_Access_Violation = $c0000005;
- Xcpt_In_Page_Error = $c0000006;
- Xcpt_Illegal_Instruction = $c000001c;
- Xcpt_Invalid_Lock_Sequence = $c000001d;
- Xcpt_Noncontinuable_Exception = $c0000024;
- Xcpt_Invalid_Disposition = $c0000025;
- Xcpt_Unwind = $c0000026;
- Xcpt_Bad_Stack = $c0000027;
- Xcpt_Invalid_Unwind_Target = $c0000028;
- Xcpt_Array_Bounds_Exceeded = $c0000093;
- Xcpt_Float_Denormal_Operand = $c0000094;
- Xcpt_Float_Divide_By_Zero = $c0000095;
- Xcpt_Float_Inexact_Result = $c0000096;
- Xcpt_Float_Invalid_Operation = $c0000097;
- Xcpt_Float_Overflow = $c0000098;
- Xcpt_Float_Stack_Check = $c0000099;
- Xcpt_Float_Underflow = $c000009a;
- Xcpt_Integer_Divide_By_Zero = $c000009b;
- Xcpt_Integer_Overflow = $c000009c;
- Xcpt_Privileged_Instruction = $c000009d;
- Xcpt_Datatype_Misalignment = $c000009e;
- Xcpt_Breakpoint = $c000009f;
- Xcpt_Single_Step = $c00000a0;
- Xcpt_Process_Terminate = $c0010001;
- Xcpt_Async_Process_Terminate = $c0010002;
- Xcpt_Signal = $c0010003;
- Context_Control = $00000001; { SS:ESP, CS:EIP, EFLAGS and EBP set }
- Context_Integer = $00000002; { EAX, EBX, ECX, EDX, ESI and EDI set }
- Context_Segments = $00000004; { DS, ES, FS, and GS set }
- Context_Floating_Point = $00000008; { numeric coprocessor state set }
- Context_Full = Context_Control or
- Context_Integer or
- Context_Segments or
- Context_Floating_Point;
- const
- MaxExceptionParameters = 4; { Enough for all system exceptions. }
- type PExceptionRegistrationRecord=^TExceptionRegistrationRecord;
- PExceptionReportRecord=^TExceptionReportRecord;
- PContextRecord=^TContextRecord;
- TExceptionHandler = function (Report: PExceptionReportRecord;
- RegRec: PExceptionRegistrationRecord;
- Context: PContextRecord;
- DispContext: pointer): cardinal;
- cdecl;
- TExceptionRegistrationRecord=record
- Prev_Structure:PExceptionRegistrationRecord;
- ExceptionHandler:TExceptionHandler;
- end;
- TExceptionReportRecord=record
- Exception_Num,
- HandlerFlags:cardinal;
- Nested_RepRec:PExceptionReportRecord;
- Address:pointer;
- ParamCount:cardinal;
- Parameters:array [0..MaxExceptionParameters] of cardinal;
- end;
- TContextRecord=record
- ContextFlags:cardinal;
- Env:array[1..7] of cardinal;
- FPUStack:array[0..7] of extended;
- Reg_GS,
- Reg_FS,
- Reg_ES,
- Reg_DS,
- Reg_EDI,
- Reg_ESI,
- Reg_EAX,
- Reg_EBX,
- Reg_ECX,
- Reg_EDX,
- Reg_EBP,
- Reg_EIP,
- Reg_CS,
- Flags,
- Reg_ESP,
- Reg_SS:cardinal;
- end;
- {Warning!!! Never use Presentation Manager functions from exception
- handlers!}
- {Install an exceptionhandler. The Prev_Structure field of RegRec should be
- nil, it will be filled in be OS/2. RegRec must be on the stack: It must be a
- local variable.}
- function DosSetExceptionHandler(var RegRec:TExceptionRegistrationRecord):cardinal;
- cdecl;
- {Uninstall an exception handler.}
- function DosUnSetExceptionHandler(var RegRec:TExceptionRegistrationRecord
- ):cardinal; cdecl;
- {Trigger an exception.}
- function DosRaiseException(var Excpt:TExceptionReportRecord):cardinal; cdecl;
- {Send a signal to a process.}
- function DosSendSignalException(PID,Exception:cardinal):cardinal; cdecl;
- {Call and remove a set of exceptionhandlers}
- function DosUnwindException(var Handler:TExceptionRegistrationRecord;
- TargetIP:pointer;
- var RepRec:TExceptionReportRecord):cardinal; cdecl;
- {Full screen applications can get Ctrl-C and Ctrl-Break focus. For all
- processes sharing one screen, only one can have Ctrl-C focus.
- Enable = 0 = Release focus, 1 = Get focus.
- Times = Number of times focus has been get minus number of times it
- has been released.}
- function DosSetSignalExceptionFocus(Enable:longint;var Times:longint):cardinal;
- cdecl;
- function DosSetSignalExceptionFocus (Enable: cardinal;
- var Times: cardinal): cardinal; cdecl;
- function DosSetSignalExceptionFocus (Enable: boolean;
- var Times: cardinal): cardinal;
- {Tell OS/2 that if an exception occurs, it must queue it up, until a
- DosExitMustComplete follows. Urgent exceptions still occur. The only
- possible error is that the nesting becomes too high, so error checking
- is only needed in seldom cases.
- Nesting = Number of DosEnterMustComplete calls minus number of
- DosExitMustComplete calls.}
- function DosEnterMustComplete(var Nesting:longint):cardinal; cdecl;
- function DosEnterMustComplete(var Nesting:cardinal):cardinal; cdecl;
- {Tell OS/2 that it can send exceptions again. See above}
- function DosExitMustComplete(var Nesting:longint):cardinal; cdecl;
- function DosExitMustComplete(var Nesting:cardinal):cardinal; cdecl;
- {Tell we want further signal exceptions.
- SignalNum = Signal nummer to acknowlegde.}
- function DosAcknowledgeSignalException (SignalNum: cardinal): cardinal; cdecl;
- {****************************************************************************
- Queue related routines.
- ****************************************************************************}
- type
- TRequestData = record
- case boolean of
- false: (PID0:longint; {ID of process that wrote element.}
- Data0:longint); {Information from process
- writing the data.}
- true: (PID, Data: cardinal);
- end;
- PRequestData = ^TRequestData;
- {Useful constants for priority parameters.}
- const quFIFO=0;
- quLIFO=1;
- quPriority=2;
- quNoConvert_Address=0;
- quConvert_Address=4;
- {Close a queue. If the calling process has created the queue, it is
- destroyed. If you can guarantee the handle is correct, there is no need
- to check for error codes.}
- function DosCloseQueue (Handle: THandle): cardinal; cdecl;
- {Create a queue. The process that creates a queue, owns that queue, and is
- the only one who can read from that queue. Other processes can only write
- to that queue. The queuename must have the format '\QUEUES\name.ext' .
- Handle = Receives queue handle.
- Priority = 0 = Use FIFO system.
- 1 = Use LIFO system.
- 2 = Use priority system.
- Add 4 to convert addresses of data inserted by 16-bit
- processes to 32 bit pointers.
- Name = Name of queue to create.}
- function DosCreateQueue (var Handle: THandle; Priority: cardinal;
- Name: PChar): cardinal; cdecl;
- function DosCreateQueue (var Handle: THandle; Priority: cardinal;
- const Name: string): cardinal;
- {Open an existing queue. You cannot read from the queue unless you are the
- process that created it. The name must have the format '\QUEUES\name.ext'}
- function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
- Name:PChar):cardinal; cdecl;
- function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
- const Name:string):cardinal;
- function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
- Name: PChar): cardinal; cdecl;
- function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
- const Name: string): cardinal;
- {Read a record from a queue, but do not remove it from the queue.
- Handle = Handle of queue to read from.
- ReqBuffer = Receives information about read data.
- DataLen = Receives length of data read.
- DataPtr = Receives the address of the data.
- Element = 0 = Return first element in queue.
- 1 = Return next element in queue. Can be repeated.
- Current element number is returned here, for use
- with DosReadQueue.
- Wait = 0 = Wait until there is a queue element available.
- 1 = Return with an error when queue is empty.
- Priority = Receives priority of queue record (1..15).
- ASem = Use NIL if Wait=0, give a handle of a semaphore when
- Wait=1. The semaphore will be cleared when there is an
- element inserted it the queue.
- !! event queue}
- function DosPeekQueue(Handle:longint;var ReqBuffer:TRequestData;
- var DataLen:longint;var DataPtr:pointer;
- var Element:longint;Wait:longint;
- var Priority:byte;ASem:longint):cardinal; cdecl;
- function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- var Element: cardinal; Wait: boolean;
- var Priority: byte; ASem: THandle): cardinal;
- function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- var Element: cardinal; Wait: cardinal;
- var Priority: byte; ASem: THandle): cardinal; cdecl;
- {Empty a queue. You must be the process the created the queue.}
- function DosPurgeQueue (Handle: THandle): cardinal; cdecl;
- {Return the number of elements in the queue.}
- function DosQueryQueue(Handle:longint;var Count:longint):cardinal; cdecl;
- function DosQueryQueue (Handle: THandle; var Count: cardinal): cardinal; cdecl;
- {Read a record from a queue, but do not remove it from the queue.
- Handle = Handle of queue to read from.
- ReqBuffer = Receives information about read data.
- DataLen = Receives length of data read.
- DataPtr = Receives the address of the data.
- Element = 0 = Return first element in queue.
- Otherwise: Return the element numbered with this.
- Wait = 0 = Wait until there is a queue element available.
- 1 = Return with an error when queue is empty.
- Priority = Receives priority of queue record (1..15).
- ASem = Use NIL if Wait=0, give a handle of a semaphore when
- Wait=1. The semaphore will be cleared when there is an
- element inserted it the queue.
- !! event queue}
- function DosReadQueue(Handle:longint;var ReqBuffer:TRequestData;
- var DataLen:longint;var DataPtr:pointer;
- Element,Wait:longint;var Priority:byte;
- ASem:longint):cardinal; cdecl;
- function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- Element, Wait: cardinal; var Priority: byte;
- ASem: THandle): cardinal; cdecl;
- function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- Element: cardinal; Wait: boolean; var Priority: byte;
- ASem: THandle): cardinal;
- {Write a data record to a queue.
- Handle = Handle of queue to write to.
- Request = Value that will be inserted in the RequestData field when
- element is read from queue.
- DataLen = Size of data to write.
- DataBuf = Data to write.
- Priority = Priority of data in buffer. Only relevant when queue is
- created with priority support.}
- function DosWriteQueue (Handle: THandle; Request, Datalen: cardinal;
- var DataBuf; Priority: cardinal): cardinal; cdecl;
- {****************************************************************************
- Error handling related routines.
- ****************************************************************************}
- const deHardErr = 1; {Hard errors are enabled, to disable
- do not give this switch.}
- deDisableExceptions = 2; {Exceptions are disabled, to enable
- do not give this switch.}
- {For compatibility with VP:}
- ferr_DisableHardErr = 0; {Disable hard error popups.}
- ferr_EnableHardErr = deHardErr;
- ferr_EnableException = 0; {Enable exception popups.}
- ferr_DisableException = deDisableExceptions;
- {Disable the end user notification of hardware errors and exceptions. Users
- can overide this in config.sys. By default, notification is enabled.
- There is no need for error checking if you can guarantee the parameter is
- correct.}
- function DosError (Error: cardinal): cardinal; cdecl;
- {Get information about an error code.
- It cannot fail, so it is written as procedure.
- Code = Error code to get info about.
- _Class = Receives the error class.
- Action = Receives the recommended action you should take.
- Locus = Receives what could have caused the error.}
- procedure DosErrClass(Code:longint;var _Class,Action,Locus:longint); cdecl;
- procedure DosErrClass (Code: cardinal; var _Class, Action, Locus: cardinal);
- cdecl;
- {****************************************************************************
- Message file specific routines.
- ****************************************************************************}
- type PInsertTable=^TInsertTable;
- TInsertTable=array[1..9] of PChar;
- {Get a message from a messagefile.
- Table = Table of strings to insert.
- TableSize = Number of strings in table.
- Buf = Address of buffer to store message in.
- BufSize = Size of buffer to store message in.
- MsgNumber = Number of message to get.
- FileName = Name of file to get message from.
- MsgSize = The size of the message returned.}
- function DosGetMessage(Table:PInsertTable;TableSize:longint;Buf:PChar;
- BufSize,MsgNumber:longint;FileName:PChar;
- var MsgSize:longint):cardinal;
- function DosGetMessage (Table: PInsertTable; TableSize: cardinal; Buf: PChar;
- BufSize, MsgNumber: cardinal; FileName: PChar;
- var MsgSize: cardinal): cardinal; cdecl;
- {And a variant using strings and open arrays.
- function DosGetMessage(const Table:array of PString;var Buf:string;
- BufSize,MsgNumber:longint;const FileName:PChar):cardinal;}
- {And a variant using strings, but with a PChar buffer, because of long
- messages, and open arrays.
- function DosGetMessage(const Table:array of PString;Buf:PChar;
- BufSize,MsgNumber:longint;const FileName:string;
- MsgSize:longint):cardinal;}
- {Insert textstrings into a message. The message must be loaded before with
- DosGetMessage. This function is used when the insert strings are not yet
- known when the message was loaded.
- Table = Table of strings to insert.
- TableSize = Number of struings to insert.
- Message = Message to insert strings into.
- SrcMessageSize = Size of message to insert strings into.
- Buf = Receives adjusted message.
- BufSize = Size of your buffer.
- DstMessageSize = Receives size of adjusted message.}
- function DosInsertMessage(Table:PInsertTable;TableSize:longint;
- Message:PChar;SrcMessageSize:longint;
- Buf:PChar;BufSize:longint;
- var DstMessageSize:longint):cardinal; cdecl;
- function DosInsertMessage (Table: PInsertTable; TableSize: cardinal;
- Message: PChar; SrcMessageSize: cardinal;
- Buf: PChar; BufSize: cardinal;
- var DstMessageSize: cardinal): cardinal; cdecl;
- {And a variant using strings and open arrays.
- function DosInsertMessage(Table:array of PString;
- const Message:string;
- var Buf:openstring):cardinal;}
- {And a variant using strings, but with a PChar buffer, because of long
- messages, and open arrays.
- function DosInsertMessage(Table:array of PString;
- Message:PChar;SrcMessageSize:longint;
- Buf:PChar;BufSize:longint;
- var DstMessageSize:longint):cardinal;}
- {Write a message to a file.
- Handle = Handle of file.
- Size = Size of message.
- Buf = Buffer where message is located.}
- function DosPutMessage (Handle: THandle; Size: cardinal; Buf: PChar): cardinal;
- cdecl;
- function DosPutMessage (Handle: THandle; const Buf: string): cardinal;
- {Get info about which codepages and languages a messagefile supports.
- Buf = Receives information.
- BufSize = Size of buffer.
- FileName = Filename of message file.
- InfoSize = Receives size in bytes of the returned info.}
- function DosQueryMessageCP(var Buf;BufSize:longint;FileName:PChar;
- var InfoSize:longint):cardinal;
- function DosQueryMessageCP(var Buf;BufSize:longint;const FileName:string;
- var InfoSize:longint):cardinal;
- function DosQueryMessageCP (var Buf; BufSize: cardinal; FileName: PChar;
- var InfoSize: cardinal): cardinal;
- function DosQueryMessageCP (var Buf; BufSize: cardinal; const FileName: string;
- var InfoSize: cardinal): cardinal;
- {****************************************************************************
- Session specific routines.
- ****************************************************************************}
- const
- {Start the new session independent or as a child.}
- ssf_Related_Independent = 0; {Start new session independent
- of the calling session.}
- ssf_Related_Child = 1; {Start new session as a child
- session to the calling session.}
- {Start the new session in the foreground or in the background.}
- ssf_FgBg_Fore = 0; {Start new session in foreground.}
- ssf_FgBg_Back = 1; {Start new session in background.}
- {Should the program started in the new session
- be executed under conditions for tracing?}
- ssf_TraceOpt_None = 0; {No trace.}
- ssf_TraceOpt_Trace = 1; {Trace with no notification
- of descendants.}
- ssf_TraceOpt_TraceAll = 2; {Trace all descendant sessions.
- A termination queue must be
- supplied and Related must be
- ssf_Related_Child (=1).}
- {Will the new session inherit open file handles
- and environment from the calling process.}
- ssf_InhertOpt_Shell = 0; {Inherit from the shell.}
- ssf_InhertOpt_Parent = 1; {Inherit from the calling process.}
- {Specifies the type of session to start.}
- ssf_Type_Default = 0; {Use program's type.}
- ssf_Type_FullScreen = 1; {OS/2 full screen.}
- ssf_Type_WindowableVIO = 2; {OS/2 window.}
- ssf_Type_PM = 3; {Presentation Manager.}
- ssf_Type_VDM = 4; {DOS full screen.}
- ssf_Type_WindowedVDM = 7; {DOS window.}
- {Additional values for Windows programs}
- Prog_31_StdSeamlessVDM = 15; {Windows 3.1 program in its
- own windowed session.}
- Prog_31_StdSeamlessCommon = 16; {Windows 3.1 program in a
- common windowed session.}
- Prog_31_EnhSeamlessVDM = 17; {Windows 3.1 program in enhanced
- compatibility mode in its own
- windowed session.}
- Prog_31_EnhSeamlessCommon = 18; {Windows 3.1 program in enhanced
- compatibility mode in a common
- windowed session.}
- Prog_31_Enh = 19; {Windows 3.1 program in enhanced
- compatibility mode in a full
- screen session.}
- Prog_31_Std = 20; {Windows 3.1 program in a full
- screen session.}
- {Specifies the initial attributes for a OS/2 window or DOS window session.}
- ssf_Control_Visible = 0; {Window is visible.}
- ssf_Control_Invisible = 1; {Window is invisible.}
- ssf_Control_Maximize = 2; {Window is maximized.}
- ssf_Control_Minimize = 4; {Window is minimized.}
- ssf_Control_NoAutoClose = 8; {Window will not close after
- the program has ended.}
- ssf_Control_SetPos = 32768; {Use InitXPos, InitYPos,
- InitXSize, and InitYSize for
- the size and placement.}
- type TStatusData=record
- Length:word; {Length, in bytes, of datastructure.}
- SelectIND:word; {Determines if the session can be
- selected: Don't change/selectable/
- not selectable (0/1/2).}
- BondIND:word; {Determines which section will come
- to the foreground when it is
- selected: Don't change/child to
- foreground when parent selected/
- parent to foreground when parent
- selected.}
- end;
- PStatusData=^TStatusData;
- {Queue data structure for synchronously started sessions.}
- TChildInfo = record
- case boolean of
- false:
- (SessionID,
- Return: word); {Return code from the child process.}
- true:
- (usSessionID,
- usReturn: word); {Return code from the child process.}
- end;
- PChildInfo = ^TChildInfo;
- TStartData=record
- {Note: to omit some fields, use a length smaller than
- SizeOf(TStartData).}
- Length:word; {Length, in bytes, of datastructure
- (24/30/32/50/60).}
- Related:word; {Independent/child session (0/1).}
- FgBg:word; {Foreground/background (0/1).}
- TraceOpt:word; {No trace/trace this/trace all
- (0/1/2).}
- PgmTitle:PChar; {Program title.}
- PgmName:PChar; {Filename to program.}
- PgmInputs:PChar; {Command parameters (nil allowed).}
- TermQ:PChar; {System queue. (nil allowed).}
- Environment:PChar; {Environment to pass (nil allowed).}
- InheritOpt:word; {Inherit environment from shell/
- inherit environment from parent
- (0/1).}
- SessionType:word; {Auto/full screen/window/presentation
- manager/full screen Dos/windowed Dos
- (0/1/2/3/4/5/6/7).}
- Iconfile:PChar; {Icon file to use (nil allowed).}
- PgmHandle:cardinal; {0 or the program handle.}
- PgmControl:word; {Bitfield describing initial state
- of windowed sessions.}
- InitXPos,InitYPos:word; {Initial top coordinates.}
- InitXSize,InitYSize:word; {Initial size.}
- Reserved:word;
- ObjectBuffer:PChar; {If a module cannot be loaded, its
- name will be returned here.}
- ObjectBuffLen:cardinal; {Size of your buffer.}
- end;
- PStartData=^TStartData;
- StartData=TStartData;
- {Start a new session.
- AStartData = A startdata record.
- SesID = Receives session ID of session created.
- PID = Receives process ID of process created.}
- function DosStartSession(var AStartData:TStartData;
- var SesID,PID:longint):cardinal;cdecl;
- function DosStartSession (var AStartData: TStartData;
- var SesID, PID: cardinal): cardinal; cdecl;
- {Set the status of a child session.
- SesID = ID of session.
- AStatus = Status to set.}
- function DosSetSession (SesID: cardinal; var AStatus: TStatusData): cardinal;
- cdecl;
- {Bring a child session to the foreground.
- SesID = ID of session.}
- function DosSelectSession (SesID: cardinal): cardinal; cdecl;
- {Terminate (a) child session(s).
- Scope = 0 = Terminate specified session.
- 1 = Terminate all child sessions.
- SesID = ID of session to terminate (ignored when terminating
- all).}
- function DosStopSession (Scope, SesID: cardinal): cardinal; cdecl;
- {****************************************************************************
- Named/unnamed pipe specific routines.
- ****************************************************************************}
- type
- TAvailData = record
- cbPipe, {Number of bytes in pipe.}
- cbMessage: word; {Number of bytes in current message.}
- end;
- TPipeInfo = record
- cbOut: word; {Size of outbound data.}
- cbIn: word; {Size of inbound data.}
- MaxInst: byte; {Maximum number of instances.}
- CurInst: byte; {Current number of instances.}
- Name: string; {Name of the pipe. You can use @Name[1] if
- you need a PChar to the name; the string is
- always followed by a zero.}
- end;
- TPipeSemState = record
- case boolean of
- false: (Status: byte;
- Flag: byte;
- Key: word;
- Avail: word);
- true: (fStatus: byte;
- fFlag: byte;
- usKey: word;
- usAvail: word);
- end;
- PPipeSemState = ^TPipeSemState;
- TPipeSemStates = array [0..$FFFF] of TPipeSemState;
- {Create an unnamed pipe.
- ReadHandle = Receives handle for reading from pipe.
- WriteHandle = Receives handle to write to pipe.
- Size = Size of pipe to create. 0 means default size. If data is
- written into a pipe that is smaller than the sent data, the
- writing thread is suspended until the data has been read
- from the pipe, thus making room for more data to send.}
- function DosCreatePipe (var ReadHandle, WriteHandle: THandle;
- Size: cardinal): cardinal; cdecl;
- const {np_XXXX constants for openmode.}
- np_Access_Inbound = $0000; {Client to server connection.}
- np_Access_Outbound = $0001; {Server to client access.}
- np_Access_Duplex = $0002; {Two way access.}
- np_Inherit = $0000; {Pipe handle is inherited by
- child processes.}
- np_NoInherit = $0080; {Pipe handle is _not_ inherited by
- child processes.}
- np_No_Write_Behind = $4000; {Don't allow write behind for
- remote pipes.}
- {np_XXXX constants for pipemode.}
- np_Unlimited_Instances = $00ff; {Unlimited instances.}
- np_ReadMode_Mesg = $0100; {Read the pipe as a message
- stream instead of as a byte
- stream.}
- np_ReadMode_Message = np_ReadMode_Mesg;
- np_RMesg = np_ReadMode_Message;
- np_WriteMode_Mesg = $0400; {Write the pipe as a message
- stream instead of as a byte
- stream.}
- np_WriteMode_Message = np_WriteMode_Mesg;
- np_Type_Message = np_WriteMode_Mesg;
- np_WMesg = np_WriteMode_Mesg;
- np_Wait = 0; { For compatibility only }
- np_NoWait = $8000; {Dosread and Doswrite do not
- wait is no data can be read or
- written; they return with an
- error message.}
- {Create a named pipe.
- Name = Name of pipe to create.
- Handle = Receives handle to pipe.
- OpenMode = A combination of np_XXXX constants for openmode.
- PipeMode = A combination of np_XXXX constants for pipemode,
- plus a number within [1..254] which determines the number
- of instances that can be created to the pipe, or,
- np_Unlimited_Instance for an unlimited number of
- instances.
- OutBufSize = The number of bytes to allocate for the output buffer.
- InBufSize = The number of bytes to allocate for the input buffer.
- MSec = The maximum time to wait for an available instance.}
- function DosCreateNPipe (Name: PChar; var Handle: THandle; OpenMode, PipeMode,
- OutBufSize, InBufSize, MSec: cardinal): cardinal;
- cdecl;
- function DosCreateNPipe (const Name: string; var Handle: THandle; OpenMode,
- PipeMode, OutBufSize, InBufSize, MSec: cardinal):
- cardinal;
- {Makes a procedure call to a duplex message pipe.
- Name = Name of pipe.
- Input = Buffer that contains data to be written to the pipe.
- InputSize = Size of the inputdata.
- Output = Buffer that contains data to be read from the pipe.
- OutputSize = Size of the outputbuffer.
- ReadBytes = Receives number of bytes actually read.
- MSec = The maximum time to wait for an available instance.}
- function DosCallNPipe(Name:PChar;var Input;InputSize:longint;
- var Output;OutputSize:longint;var ReadBytes:longint;
- MSec:longint):cardinal; cdecl;
- function DosCallNPipe(const Name:string;var Input;InputSize:longint;
- var Output;OutputSize:longint;var ReadBytes:longint;
- MSec:longint):cardinal;
- function DosCallNPipe (Name: PChar; var Input; InputSize: cardinal;
- var Output; OutputSize: cardinal;
- var ReadBytes: cardinal; MSec: cardinal): cardinal;
- cdecl;
- function DosCallNPipe (const Name: string; var Input; InputSize: cardinal;
- var Output; OutputSize: cardinal;
- var ReadBytes: cardinal; MSec: cardinal): cardinal;
- {Prepare a named pipe for a client process.
- Handle = Handle that was returned when pipe was created.}
- function DosConnectNPipe (Handle: THandle): cardinal; cdecl;
- {Acknowledges that a client process has closed a named pipe.
- Handle = Handle that was returned when pipe was created.}
- function DosDisconnectNPipe (Handle: THandle): cardinal; cdecl;
- const np_State_Disconnected = 1; {Pipe is disconnected.}
- np_State_Listening = 2; {Pipe is listening.}
- np_State_Connected = 3; {Pipe is connected.}
- np_State_Closing = 4; {Pipe is closing.}
- {Preview data in a pipe: Read data without removing it.
- Handle = Handle to named pipe.
- Buffer = Buffer to receive data in.
- BufSize = Size of the buffer.
- ReadBytes = Receives number of bytes put in buffer.
- Avail = Receives size of available data.
- State = One of the np_xxxx constants for states.}
- function DosPeekNPipe(Handle:longint;var Buffer;BufSize:longint;
- var ReadBytes:longint;var Avail:TAvailData;
- var State:longint):cardinal; cdecl;
- function DosPeekNPipe (Handle: THandle; var Buffer; BufSize: cardinal;
- var ReadBytes: cardinal; var Avail: TAvailData;
- var State: cardinal): cardinal; cdecl;
- {Get information about a named pipe handle.
- Handle = Handle to pipe.
- State = A combination of np_XXXX constants for (!!!) pipemode.}
- function DosQueryNPHState(Handle:longint;var State:longint):cardinal; cdecl;
- function DosQueryNPHState (Handle: THandle; var State: cardinal): cardinal;
- cdecl;
- {Return information about a named pipe.
- Handle = Handle to pipe.
- InfoLevel = Level of information wanted (1 or 2 allowed).
- Buffer = TPipeInfo datastructure for level 1.
- Unique 4 byte identifier of the client for level 2. Only
- used for LAN based pipe servers.}
- function DosQueryNPipeInfo (Handle: THandle; InfoLevel: cardinal; var Buffer;
- BufSize: cardinal): cardinal; cdecl;
- {Return information of local named pipes that are attached to a semaphore.
- SemHandle = Handle to a shared event or MuxWait semaphore that is
- attached to a named pipe.
- SemArray = Array in which for each pipe attached to the semaphore.
- BufSize = Size of SemArray, in bytes.}
- function DosQueryNPipeSemState (SemHandle: THandle; var SemArray;
- BufSize: cardinal): cardinal; cdecl;
- function DosQueryNPipeSemState (SemHandle: THandle; SemArray: PPipeSemState;
- BufSize: cardinal): cardinal; cdecl;
- {Resets the blocking mode and state of a named pipe.
- Handle = Handle to named pipe.
- State = One of the np_XXXX constants for pipemode.}
- function DosSetNPHState (Handle: THandle; State: cardinal): cardinal; cdecl;
- {Attach a shared event semaphore to a local named pipe.
- PipeHandle = Handle to named pipe.
- SemHandle = Handle to semaphore.
- Key = A key that must be different for each named pipe that is
- attached to the semaphore.}
- function DosSetNPipeSem (PipeHandle, SemHandle: THandle; Key: cardinal):
- cardinal; cdecl;
- {Write to a duplex named pipe; then read from it.
- Handle = Handle to named pipe.
- OutBuf = The data to write.
- OutSize = Size of the data to write.
- InBuf = Receives the read data.
- InSize = Size of the input buffer.
- ReadBytes = Number of bytes read from the pipe.}
- function DosTransactNPipe(Handle:longint;var OutBuf;OutSize:longint;
- var InBuf;InSize:longint;
- var ReadBytes:longint):cardinal; cdecl;
- function DosTransactNPipe (Handle: THandle; var OutBuf; OutSize: cardinal;
- var InBuf; InSize: cardinal;
- var ReadBytes: cardinal): cardinal; cdecl;
- {Waits until an instance of a named pipe becomes available.
- Name = Name of named pipe (always starts with '\PIPE\').
- MSec = Return with an error code if this time has elapsed.}
- function DosWaitNPipe (Name: PChar; MSec: cardinal): cardinal; cdecl;
- function DosWaitNPipe (const Name: string; MSec: cardinal): cardinal;
- {****************************************************************************
- Virtual device driver related routines.
- ****************************************************************************}
- {Open a virtual device driver.
- Name = Name of virtual device driver.
- Handle = Receives handle to virtual device driver.}
- function DosOpenVDD (Name: PChar; var Handle: THandle): cardinal; cdecl;
- {Request to talk with a virtual device driver.
- Handle = Handle to virtual device driver.
- SGroup = Handle to the screen group of a DOS session (may be nil).
- Cmd = A number which indicates the service you call.
- InSize = Size of the data to send to the VDD.
- InBuffer = Buffer which contains the data to send to the VDD.
- OutSize = Size of the buffer in which the VDD will return data.
- OutBuffer = Receives the data that the VDD returns.}
- function DosRequestVDD (Handle: THandle; SGroup, Cmd: cardinal;
- InSize: cardinal; var InBuffer;
- OutSize: cardinal; var OutBuffer): cardinal; cdecl;
- {Close a virtual device driver.}
- function DosCloseVDD (Handle: THandle): cardinal; cdecl;
- {****************************************************************************
- 16 <=> 32 bit support related routines
- ****************************************************************************}
- {Convert a 16 bit far pointer to a 32 bit near pointer.
- This procedure needs to be called from assembler.
- This procedure works by mapping an area in your flat address space onto the
- same physical memory address as the selector of the 16 bit far pointer.
- In:
- eax Pointer to convert in selector:offset format.
- Out:
- eax Returned 32 bit near pointer.}
- procedure DosSelToFlat; cdecl;
- type
- TFarPtr = record
- Sel, Offset: word;
- end;
- function SelToFlat (AFarPtr: TFarPtr): pointer;
- function SelToFlat (AFarPtr: cardinal): pointer;
- {The second variant can make use of the register calling convention.}
- {Convert a 32 bit near pointer to a 16 bit far pointer.
- This procedure needs to be called from assembler.
- This procedure works by allocating a selector at the same physical address
- as the pointer you pass points to.
- In:
- eax Pointer to convert in 32 bit near format.
- Out:
- eax Returned 16 bit far pointer in selector:offset format.}
- procedure DosFlatToSel; cdecl;
- {typecast result to TFarPtr}
- function FlatToSel (APtr: pointer): cardinal;
- {Allocate Count dwords in a memory block unique in each thread. A maximum
- of 8 dwords can be allocated at a time, the total size of the thread local
- memory area is 128 bytes; FPC 1.1+ uses one dword from this for internal
- multi-threading support, leaving 124 bytes to programmers.}
- function DosAllocThreadLocalMemory (Count: cardinal; var P: pointer): cardinal;
- cdecl;
- {Deallocate a previously allocated space in the thread local memory area.}
- function DosFreeThreadLocalMemory (P: pointer): cardinal; cdecl;
- const
- { Values for DosQueryRASInfo Index parameter }
- sis_MMIOAddr = 0;
- sis_MEC_Table = 1;
- sis_Sys_Log = 2;
- { The following one for compatibility only }
- SPU_SIS_MEC_TABLE = sis_MEC_Table;
- { Bit flags for the SYSLOG status word. }
- lf_LogEnable = 1; { Logging enabled }
- lf_LogAvailable = 2; { Logging available }
- { DosQueryRASInfo returns information about active trace event recording
- and System Logging facility from the Global Information Segment (InfoSegGDT)
- dump.}
- { Parameters
- * Index - one of the sis_* values:
- sis_MEC_Table - return the address of the table of actively traced major
- event codes in the InfoSegGDT. The table is 32 bytes long, each bit
- represents each major event code from 0 to 255.
- sis_Sys_Log - return the address of the SYSLOG status word from
- the InfoSegGDT. The status may contain a combination of lf_Log* flags
- defined above.}
- { Possible return codes:
- 0 - No_Error
- 5 - Error_Access_Denied
- 87 - Error_Invalid_Parameter}
- function DosQueryRASInfo (Index: cardinal; var PBuffer: pointer): cardinal;
- cdecl;
- const
- { Logging constants }
- ErrLog_Service = 1;
- ErrLog_Version = 1;
- { LogRecord status bits }
- lf_Bit_ProcName = 1; {used to indicate whether the current error log}
- {entry packet contains space in which the error}
- {logging facility can place a long process name}
- {("on" indicates YES, "off" indicates NO) }
- lf_Bit_Origin_256 = 2; {used to indicate whether the current error log }
- {entry packet contains an 8 byte originator name}
- {or a 256 byte originator name ("on" indicates }
- {a 256 byte originator name, "off" indicates an }
- {8 byte originator name) }
- lf_Bit_DateTime = 4; {used to indicate that the caller has placed time}
- {and date values in the Error Log entry packet }
- {and does not wish to have those values modified }
- {during the logging process ("on" indicates that }
- {the error log entry packet already contains time}
- {and date values, "off" indicates the packet does}
- {not already contain time and date values) }
- lf_Bit_Suspend = 8;
- lf_Bit_Resume = 16;
- lf_Bit_Redirect = 32;
- lf_Bit_GetStatus = 64;
- lf_Bit_Register = 128;
- lf_Bit_Remote_Fail = 256;
- type
- { Log entry record header for OS/2 2.x and above used }
- { by 32-bit device drivers and callers of LogAddEntries. }
- TLogRecord = record
- Len: word; { length of this record (including the Len field) }
- Rec_ID: word; { record ID }
- Status: cardinal; { record status bits (see lf_Bit_* constants) }
- Qualifier: array [1..4] of char; { qualifier tag }
- Reserved: cardinal;
- Time: cardinal; { hours, minutes, seconds, hundreds }
- Date: cardinal; { day, month, year (stored as word) }
- case byte of
- 0: (Data: array [1..3400] of char); { variable data (up to 3400 bytes); }
- { beginning of this area must match }
- { one of the following patterns }
- 1: (Originator256: array [0..255] of char; {Originator - if the flag }
- {lf_Bit_Origin_256 is set }
- ProcessName_O256: array [1..260] of char; {if lf_Bit_ProcName is set}
- FormatDLLName_O256_ProcName: array [1..12] of char; {ASCIIZ DLL name}
- Data_O256_ProcName: array [1..3400] of char); {Variable data }
- 2: (Originator256b: array [0..255] of char;
- FormatDLLName_O256: array [1..12] of char;
- Data_O256: array [1..3400] of char);
- 3: (Originator8: array [0..7] of char; {Originator - if flag }
- {lf_Bit_Origin_256 clear }
- ProcessName_O8: array [1..260] of char; {if lf_Bit_ProcName is set}
- FormatDLLName_O8_ProcName: array [1..12] of char;
- Data_O8_ProcName: array [1..3400] of char);
- 4: (Originator8b: array [0..7] of char;
- FormatDLLName_O8: array [1..12] of char;
- Data_O8: array [1..3400] of char);
- end;
- LogRecord = TLogRecord;
- PLogRecord = ^TLogRecord;
- { Format of buffer sent to LogAddEntries }
- TLogEntryRec = record
- Version: word; {this version is 1}
- Count: word; {number of log records in this buffer}
- LogRec: array [0..0] of TLogRecord; {repeated count times}
- end;
- LogEntryRec = TLogEntryRec;
- PLogEntryRec = ^TLogEntryRec;
- { Logging facility functions }
- { Open a connection to the system error logging facility (through the system
- logging service device driver). }
- { Possible return codes:
- 0 .......... success
- non-zero ... facility not available }
- function LogOpen (var Handle: cardinal): cardinal; cdecl;
- { Close the connection to the to the system error logging facility. }
- { Possible return codes:
- 0 .......... success
- non-zero ... failure (possible reason - facility not open)}
- function LogClose (Handle: cardinal): cardinal; cdecl;
- { Add error log entries to the internal error log buffer maintained by
- the system logging service device driver.}
- { Parameters:
- Handle - handle returned by previous LogOpen
- Service - specifies the class of logging facility:
- 0 ........... reserved
- 1 ........... error logging
- 2 - $FFFF ... reserved
- LogEntries - buffer containing a variable length error log entry. The first
- word of the buffer contains the number of packets in the error log entry.
- Multiple error log packets (LogRec structure) can be included within
- a single error log entry buffer. If multiple packets are included within
- a buffer, each individual packet should be aligned on a double word
- boundary.
- Version - packet revision number. Can be used to distinguish error logging
- packets that are intended to be handled by different revisions
- of the LogAddEntries API. For the initial version of the API
- (all OS/2 versions from OS/2 v2.0 up to WSeB and eComStation),
- this field should be set to a value of 1. This field is included
- in the packet to support future backward compatibility.
- Count - number of separate error log entry packets contained within
- the user's buffer
- Len - length of this error log entry packet (LogRec) within the user's
- error log entry buffer in bytes (this length includes the length
- of all the error log entry packet control fields and the size
- of the error log entry text). To support efficient logging execution,
- this length should be a multiple of 4 bytes (i.e. if necessary
- the user should pad the error log entry packet).
- Rec_ID - error log record ID for the current error log entry
- (ID registration will be statically registered by the OS/2
- development organization)
- Status - status flags (two byte flag holder containing three single bit
- flags lf_Bit_* - all the other 29 bits in status flags
- are considered reserved at this time and will be zeroed by
- the LogAddEntries API)
- Qualifier - qualifier name is a secondary name field that is provided
- by the caller
- Reserved - four byte reserved field
- Time - time of logging, filled in by the system error logging facility
- (unless lf_Bit_DateTime status flag is set to "on", indicating
- that the caller has preset a time value)
- Date - date of logging, filled in by the system error logging facility
- (unless lf_Bit_DateTime status flag is set to "on", indicating
- that the caller has preset a date value)
- Originator* - originator name (8 or 256 characters depending on Status),
- a primary name field provided by the caller
- ProcName* - process name (0 or 260 characters), an optional long process
- name field that will be filled in by the error logging facility
- if the field is provided by the caller in the error log entry
- packet
- FormatDLLName* - formatting DLL module name (optional); the optional name
- of a DLL module that houses a formatting routine that
- recognizes this type of error log entry and can format it
- for display by the SYSLOG utility. The name is specified
- as an ASCIIZ string that can be up to eight characters
- in length. If no module name is specified in this field,
- then SYSLOG will display the data portion of the error log
- entry as a hexadecimal dump.
- Data* - error log entry data (up to 3400 characters / bytes); an optional
- variable length set of data that can be supplied by the caller
- (the format of the string is under the control of the caller)
- }
- { Possible return codes:
- 0 - success
- non-zero - failure (invalid log type, facility unavailable, facility
- suspended, facility not open, error log buffer temporarily full)
- }
- function LogAddEntries (Handle: cardinal; Service: cardinal;
- LogEntries: PLogEntryRec): cardinal; cdecl;
- function LogAddEntries (Handle: cardinal; Service: cardinal;
- var LogEntries: TLogEntryRec): cardinal; cdecl;
- function DosReplaceModule (OldModule, NewModule, BackupModule: PChar):
- cardinal; cdecl;
- const
- { Flags allowed for DosQuerySysState parameter EntityList
- (multiple flags may be combined together) and also values
- used as markers of records returned in the provided buffer:
- }
- qs_End = 0; { Marker for the last TFileSys record }
- qs_Process = 1; { Requests process information }
- qs_Semaphore = 2; { Requests semaphore information }
- qs_MTE = 4; { Requests module information }
- qs_FileSys = 8; { Requests file system information }
- qs_ShMemory = 16; { Requests shared memory information }
- qs_Disk = 32; { Not supported apparently? }
- qs_HwConfig = 64; { Not supported apparently? }
- qs_NamedPipe = 128; { Not supported apparently? }
- qs_Thread = 256; { Not supported apparently? }
- qs_ModVer = 512; { Requests module version information }
- qs_Supported = qs_Process or qs_Semaphore or qs_MTE or QS_FileSys or
- qs_ShMemory or qs_ModVer;
- type
- { Global record
- Holds all global system information. Placed first in user buffer
- }
- PQSGRec = ^TQSGRec;
- TQSGRec = record
- cThrds,
- c32SSem,
- cMFTNodes: cardinal;
- end;
- { Thread record
- Holds all per thread information.
- }
- PQSTRec = ^TQSTRec;
- TQSTRec = record
- RecType: cardinal; { Record type }
- TID: word; { Thread ID }
- Slot: word; { "Unique" thread slot number }
- SleepID: cardinal; { Sleep ID thread is sleeping on }
- case boolean of
- false: (
- Priority: cardinal; { Thread priority (class + level) }
- SysTime: cardinal; { Thread system time }
- UserTime: cardinal; { Thread user time }
- State: byte; { Thread state }
- Pad: array [1..3] of byte); { Padding for 32-bit alignment }
- true: (
- PrioLevel: byte; { Thread priority level only }
- PrioClass: byte; { Thread priority class only }
- Pad2: array [1..14] of byte);
- end;
- { Process record
- Holds all per process information.
- ________________________________
- | RecType |
- |-------------------------------|
- | pThrdRec |----|
- |-------------------------------| |
- | pid | |
- |-------------------------------| |
- | ppid | |
- |-------------------------------| |
- | type | |
- |-------------------------------| |
- | stat | |
- |-------------------------------| |
- | sgid | |
- |-------------------------------| |
- | hMte | |
- |-------------------------------| |
- | cTCB | |
- |-------------------------------| |
- | c32PSem | |
- |-------------------------------| |
- | p32SemRec |----|---|
- |-------------------------------| | |
- | c16Sem | | |
- |-------------------------------| | |
- | cLib | | |
- |-------------------------------| | |
- | cShrMem | | |
- |-------------------------------| | |
- | cFS | | |
- |-------------------------------| | |
- | p16SemRec |----|---|----|
- |-------------------------------| | | |
- | pLibRec |----|---|----|------|
- |-------------------------------| | | | |
- | pShrMemRec |----|---|----|------|----|
- |-------------------------------| | | | | |
- | pFSRec |----|---|----|------|----|-----|
- |-------------------------------| | | | | | |
- | 32SemPPRUN[0] |<---|---| | | | |
- | . | | | | | |
- | . | | | | | |
- | . | | | | | |
- | 32SemPPRUN[c32PSem-1] | | | | | |
- |-------------------------------| | | | | |
- | 16SemIndx[0] |<---|--------| | | |
- | . | | | | |
- | . | | | | |
- | . | | | | |
- | 16SemIndx[c16Sem-1] | | | | |
- |-------------------------------| | | | |
- | hmte[0] (or "name str") |<---|---------------| | |
- | . | | | |
- | . | | | |
- | . | | | |
- | hmte[cLib-1] | | | |
- |-------------------------------| | | |
- | hshmem[0] |<---|--------------------| |
- | . | | |
- | . | | |
- | . | | |
- | hshmem[cShrMem-1] | | |
- |-------------------------------| | |
- | fsinfo[0] |<---|--------------------------|
- | . | |
- | . | |
- | . | |
- | fsinfo[cFS-1] | |
- |-------------------------------| |
- <-----
- NOTE that the process name string will be stored in place of hmtes
- if MTE information is NOT being requested.
- NOTE that following this structure in the user buffer is
- an array c32Sems long of PRUN structures for 32 bit sems
- an array c16Sems long of indices for 16 bit sems
- the process name string
- }
- PQSPRec = ^TQSPRec;
- TQSPrec = record
- RecType: cardinal; { Type of record being processed }
- PThrdRec: PQSTRec; { (Far?) pointer to thread records for this process }
- PID: word; { Process ID }
- PPID: word; { Parent process ID }
- ProcType: cardinal; { Process type }
- Stat: cardinal; { Process status }
- SGID: cardinal; { Process screen group }
- hMte: word; { Program module handle for process }
- cTCB: word; { Number of TCBs (Thread Control Blocks) in use }
- c32PSem: cardinal; { Number of private 32-bit semaphores in use }
- p32SemRec: pointer; { (Far?) pointer to head of 32-bit semaphores info }
- c16Sem: word; { Number of 16 bit system semaphores in use }
- cLib: word; { Number of runtime linked libraries }
- cShrMem: word; { Number of shared memory handles }
- cFH: word; { Number of open files }
- { NOTE: cFH is size of active part of }
- { the handle table if QS_FILE specified }
- p16SemRec: word; { Far pointer? to head of 16-bit semaphores info }
- pLibRec: word; { Far pointer? to list of runtime libraries }
- pShrMemRec: word; { Far pointer? to list of shared memory handles }
- pFSRec: word; { Far pointer to list of file handles; }
- { 0xFFFF means it's closed, otherwise }
- { it's an SFN if non-zero }
- end;
- { 16-bit system semaphore record
- ________________________________
- | pNextRec |----|
- |-------------------------------| |
- |SysSemData : | |
- | SysSemOwner | |
- | SysSemFlag | |
- | SysSemRecCnt | |
- | SysSemProcCnt | |
- |-------------------------------| |
- |-------------------------------| |
- |-------------------------------| |
- | SysSemPtr | |
- |-------------------------------| |
- |SysSemName: | |
- | "pathname" | |
- |-------------------------------| |
- <-----
- }
- const
- { Values for SysSemFlag: }
- qs_SysSem_Waiting = 1; { A thread is waiting on the semaphore }
- qs_SysSem_MuxWaiting = 2; { A thread is muxwaiting on the semaphore }
- qs_SysSem_Owner_Died = 4; { The process/thread owning the sem died }
- qs_SysSem_Exclusive = 8; { Indicates an exclusive system semaphore }
- qs_SysSem_Name_Cleanup = 16; { Name table entry needs to be removed }
- qs_SysSem_Thread_Owner_Died = 32; { The thread owning the semaphore died }
- qs_SysSem_ExitList_Owner = 64; { The exitlist thread owns the semaphore }
- type
- PQSS16Rec = ^TQSS16Rec;
- TQSS16Rec = record
- NextRec: cardinal; { Offset to next record in buffer }
- { System Semaphore Table Structure }
- SysSemOwner: word; { Thread owning this semaphore }
- SysSemFlag: byte; { System semaphore flag bit field }
- SysSemRefCnt: byte; { Number of references to this system semaphore }
- SysSemProcCnt: byte; { Number of requests for this owner }
- SysSemPad: byte; { Pad byte to round structure up to word }
- Pad_sh: word; { Padding for 32-bit alignment }
- SemPtr: word; { RMP SysSemPtr field }
- SemName: array [0..0] of char; { Start of semaphore name string }
- end;
- PQSS16HeadRec = ^TQSS16HeadRec;
- TQSS16HeadRec = record
- SRecType: cardinal; { Offset of SysSemDataTable }
- SpNextRec:cardinal; { Overlays NextRec of 1st PQSS16Rec }
- S32SemRec: cardinal;
- S16TblOff: cardinal;
- pSem16Rec: cardinal;
- end;
- { System-wide shared memory information
- ________________________________
- | NextRec |
- |-------------------------------|
- | hMem |
- |-------------------------------|
- | Sel |
- |-------------------------------|
- | RefCnt |
- |-------------------------------|
- | Name |
- |_______________________________|
- }
- PQSMRec = ^TQSMRec;
- TQSMRec = record
- MemNextRec: cardinal; { Offset to next record in buffer }
- hMem: word; { Handle for shared memory }
- Sel: word; { Selector }
- RefCnt: word; { Reference count }
- MemName: array [0..0] of char; { Start of shared memory name string }
- end;
- { 32-bit system semaphore record
- ________________________________
- | pNextRec |----|
- |-------------------------------| |
- | QSHUN[0] | |
- |-------------------------------| |
- | MuxQ | |
- |-------------------------------| |
- | OpenQ | |
- |-------------------------------| |
- | SemName | |
- |-------------------------------|<---|
- | . |
- | . |
- |-------------------------------|<---|
- | pNextRec |----|
- |-------------------------------| |
- | QSHUN[c32SSem-1] | |
- |-------------------------------| |
- | MuxQ | |
- |-------------------------------| |
- | OpenQ | |
- |-------------------------------| |
- | SemName | |
- |-------------------------------|<---|
- }
- const
- { 32-bit semaphore flags }
- qs_dc_Sem_Shared = 1; { Shared Mutex, Event or MUX semaphore }
- qs_dcmw_Wait_Any = 2; { Wait on any event/mutex to occur }
- qs_dcmw_Wait_All = 4; { Wait on all events/mutexs to occur }
- qs_dcm_Mutex_Sem = 8; { Mutex semaphore }
- qs_dce_Event_Sem = 16; { Event semaphore }
- qs_dcmw_Mux_Sem = 32; { Muxwait semaphore }
- qs_dc_Sem_PM = 64; { PM Shared Event Semphore }
- qs_de_Posted = 64; { Event semaphore is in the posted state }
- qs_dm_Owner_Died = 128; { The owning process died }
- qs_dmw_Mtx_Mux = 256; { MUX contains mutex semaphores }
- qs_dho_Sem_Open = 512; { Device drivers have opened this semaphore }
- qs_de_16Bit_MW = 1024; { Part of a 16-bit MuxWait }
- qs_dce_PostOne = 2048; { Post one flag event semaphore }
- qs_dce_AutoReset = 4096; { Auto-reset event semaphore }
- type
- PQSOpenQ = ^TQSOpenQ;
- TQSOpenQ = record
- PidOpener: word; { Process ID of the opening process }
- OpenCt: word; { Number of opens for this process }
- end;
- PQSEvent = ^TQSEvent;
- TQSEvent = record
- pOpenQ: PQSOpenQ; { Pointer to open Queue entries }
- pName: PChar; { Pointer to semaphore name }
- pMuxQ: PCardinal; { Pointer to the mux queue }
- Flags: word;
- PostCt: word; { Number of posts }
- end;
- PQSMutex = ^TQSMutex;
- TQSMutex = record
- pOpenQ: PQSOpenQ; { Pointer to open queue entries }
- pName: PChar; { Pointer to semaphore name }
- pMuxQ: PCardinal; { Pointer to the mux queue }
- Flags: word;
- ReqCt: word; { Number of requests }
- SlotNum: word; { Slot number of the owning thread }
- Padding: word;
- end;
- PQSMux = ^TQSMux;
- TQSMux = record
- pOpenQ: PQSOpenQ; { Pointer to open queue entries }
- pName: PChar; { Pointer to semaphore name }
- pSemRec: PSemArray; { Array of semaphore record entries }
- Flags: word;
- cSemRec: word; { Count of semaphore records }
- WaitCt: word; { Number of threads waiting on the mux }
- Padding: word;
- end;
- PQSSHUN = ^TQSSHUN;
- TQSSHUN = record
- qsSEvt: PQSEvent; { Shared event semaphore }
- qsSMtx: PQSMutex; { Shared mutex semaphore }
- qsSMux: PQSMux; { Shared mux semaphore }
- end;
- PQSS32Rec = ^TQSS32Rec;
- TQSS32Rec = record
- pNextRec: PQSS32Rec; { Pointer to the next record in buffer }
- qsh: PQSSHUN; { QState version of SHUN record }
- end;
- { System wide MTE information
- ________________________________
- | pNextRec |----|
- |-------------------------------| |
- | hmte | |
- |-------------------------------| |
- | ctImpMod | |
- |-------------------------------| |
- | ctObj | |
- |-------------------------------| |
- | pObjInfo |----|----------|
- |-------------------------------| | |
- | pName |----|----| |
- |-------------------------------| | | |
- | imported module handles | | | |
- | . | | | |
- | . | | | |
- | . | | | |
- |-------------------------------| <--|----| |
- | "pathname" | | |
- |-------------------------------| <--|----------|
- | Object records | |
- | (if requested) | |
- |_______________________________| |
- <-----
- NOTE that if the level bit is set to qs_MTE, the base Lib record
- will be followed by a series of object records (TQSLObjRec); one for each
- object of the module.
- }
- PQSLObjRec = ^TQSLObjRec;
- TQSLObjRec = record
- OAddr: cardinal; { Object address }
- OSize: cardinal; { Object size }
- OFlags: cardinal; { Object flags }
- end;
- PQSLRec = ^TQSLRec;
- TQSLRec = record
- pNextRec: PQSLRec; { (Far?) pointer to the next record in buffer }
- hMTE: word; { Handle for this MTE }
- fFlat: word; { True if 32 bit module }
- ctImpMod: cardinal; { Number of imported modules in table }
- ctObj: cardinal; { Number of objects in module (MTE_ObjCnt) }
- pObjInfo: PQSLObjRec; { (Far?) pointer to per object information if any }
- pName: PChar; { (Far?) pointer to name string following record }
- end;
- PQSExLRec = ^TQSExLRec;
- TQSExLRec = record { Used for 9th bit (Extended Module Data Summary) }
- Next: PQSExLRec; { Pointer to next Extended Module Data }
- hndMod: word; { Module Handle }
- PID: word; { Process ID }
- ModType: word; { Type of Module }
- RefCnt: cardinal; { Size of reference array }
- SegCnt: cardinal; { Number of segments in module }
- _reserved_: pointer;
- Name: PChar; { (Far?) pointer to Module Name }
- ModuleVersion: cardinal;{ Module version value }
- ShortModName: PChar; { (Far?) new pointer to module short name }
- ModRef: cardinal; { Start of array of handles of module }
- end;
- { System wide FILE information
- ________________________________
- | RecType |
- |-------------------------------|
- | pNextRec |-------|
- |-------------------------------| |
- | ctSft | |
- |-------------------------------| |
- | pSft |---| |
- |-------------------------------| | |
- | name | | |
- |-------------------------------|<--| |
- | qsSft[0] | |
- |-------------------------------| |
- | ... | |
- |-------------------------------| |
- | qsSft[ctSft -1] | |
- |_______________________________| |
- | name | |
- |_______________________________| |
- <-------|
- }
- PQSSft = ^TQSSft;
- TQSSft = record
- SFN: word; { SFN sf_fsi.sfi_selfSFN }
- RefCnt: word; { sf_ref_count }
- Flags: word; { sf_flags }
- Flags2: word; { sf_flags2 }
- Mode: word; { sf_fsi.sfi_mode - mode of access }
- Mode2: word; { sf_fsi.sfi_mode2 - mode of access }
- Size: cardinal; { sf_fsi.sfi_size }
- hVPB: word; { sf_fsi.sfi_hVPB handle of volume }
- Attr: word; { sf_attr }
- Padding: word;
- end;
- PQSFRec = ^TQSFRec;
- TQSFRec = record
- RecType: cardinal; { Record Type }
- pNextRec: PQSFRec; { Pointer to the next record in buffer }
- ctSft: cardinal; { Number of SFT entries for this MFT entry }
- pSft: PQSSft; { Pointer to start of SFT entries in buffer }
- end;
- { Pointer record
- This structure is the first in the user buffer.
- It contains pointers to heads of record types that are loaded
- into the buffer.
- }
- PQSPtrRec = ^TQSPtrRec;
- TQSPtrRec = record
- PGlobalRec: PQSGRec;
- PProcRec: PQSPRec; { Pointer to head of process records }
- P16SemRec: PQSS16HeadRec; { Pointer to head of 16-bit semaphore records }
- P32SemRec: PQSS32Rec; { Pointer to head of 32-bit semaphore records }
- PMemRec: PQSMRec; { ???Pointer to head of shared memory records? }
- PLibRec: PQSLRec; { Pointer to head of MTE records }
- PShrMemRec: PQSMRec; { ???Pointer to head of shared memory records? }
- PFSRec: PQSFRec; { Pointer to head of file system records }
- end;
- {DosQuerySysState returns information about various resources in use
- by the system. The EntityList parameter determines which information
- is returned according to the bits set in this parameter.
- Note that this API is fairly low-level and it hasn't been part
- of the official IBM documentation until WSeB (and even then the documentation
- was highly incomplete, so}
- {Parameters:
- EntityList Determines what information is returned. May be a combination
- one or more qs_* flags.
- EntityLevel Determines the extent of information returned for a given
- entity. This applies to qs_MTE entities only. If EntityLevel is
- also set to qs_MTE, then module object information is returned.
- PID Restricts information to a particular process ID. If 0 is
- specified, then entities for all processes are returned.
- TID Restricts information to a particular thread ID. A value of zero
- only is supported, requesting all threads of a process.
- Buffer Buffer allocated by the user into which entity structures are
- returned. If the buffer is of insufficient size, then an
- Error_Buffer_Overflow is returned.
- BufLen Size of the buffer pointed to by Buffer in bytes.
- }
- function DosQuerySysState (EntityList, EntityLevel, PID, TID: cardinal;
- var Buffer; BufLen: cardinal): cardinal; cdecl;
- function DosQuerySysState (EntityList, EntityLevel, PID, TID: cardinal;
- PDataBuf: pointer; cbBuf: cardinal): cardinal; cdecl;
- {
- Creates a private Read/Write alias or an LDT code segment alias to part
- of an existing memory object. The alias object is accessible only to the
- process that created it. The original object must be accessible to the caller
- of DosAliasMem.
- An alias is removed by calling DosFreeMem with the alias address.
- Although it is possible to create a Read/Write alias to a code segment
- to allow code modification, this is not recommended. On Pentium processors,
- and later, pipe-lining techniques used by the processor might allow
- the processor not to be aware of the modified code, if appropriate
- pipe-line serialization is not performed by the programmer. For further
- information see the processor documentation.
- Possible return values:
- 0 No_Error
- 8 Error_Not_Enough_Memory
- 87 Error_Invalid_Parameter
- 95 Error_Interrupt
- 32798 Error_Crosses_Object_Boundary
- pMem = Pointer to the memory to be aliased. It must be on a page boundary
- (i.e. aligned to 4 kB), but may specify an address within a memory
- object.
- Size = Specifies size in bytes for the memory to alias. The entire range
- must lie within a single memory object and must be committed
- if OBJ_SELMAPALL is specified.
- Alias = Pointer where the address of the aliased memory is returned.
- The corresponding LDT selector is not explicitly returned but may be
- calculated by using the Compatibility Mapping Algorithm
- ((Alias shr 13) or 7).
- Flags = Combination of the following values:
- obj_SelMapAll = $800 (Create a Read/Write 32 bit alias
- to the address specified. The entire range
- must be committed, start on page boundary
- and be within the extent of a single memory
- object. An LDT selector is created to map
- the entire range specified. If obj_SelMapAll
- is not specified, then size is rounded up
- to a 4K multiple and the alias created
- inherits the permissions from the pages
- of the original object.)
- obj_Tile = $40 (Obj_Tile may be specified, but currently
- this is enforced whether or not specified.
- This forces LDT selectors to be based
- on 64K boundaries.)
- sel_Code = 1 (Marks the LDT alias selector(s)
- Read-Executable code selectors.)
- sel_Use32 = 2 (Used with obj_SelMapAll, otherwise ignored.
- Marks the first alias LDT selector
- as a 32 bit selector by setting the BIG/C32
- bit.)
- }
- function DosAliasMem (pMem: pointer; Size: cardinal; var Alias: pointer;
- Flags: cardinal): cardinal; cdecl;
- const
- PAG_INVALID = 0; (* Page is invalid. *)
- PAG_NPOUT = 0; (* Page is not present, not in core. *)
- PAG_PRESENT = 1; (* Page is present. *)
- PAG_NPIN = 2; (* Page is not present, in core. *)
- PAG_PRESMASK = 3; (* Present state mask. *)
- PAG_RESIDENT = 16; (* Page is resident. *)
- PAG_SWAPPABLE = 32; (* Page is swappable. *)
- PAG_DISCARDABLE = 48; (* Page is discardable. *)
- PAG_TYPEMASK = 48; (* Typemask *)
- {
- DosQueryMemState gets the status of a range of pages in memory. Its input
- parameters are an address and size. The address is rounded down to page
- boundary and size is rounded up to a whole number of pages. The status
- of the pages in the range is returned in the state parameter, and the size
- of the range queried is returned in the size parameter. If the pages
- in the range have conflicting states, then the state of the first page
- is returned.
- Parameters:
- PMem - Pointer to memory to be queried
- Size - Size of memory to be queried
- State - Flags (PAG_*) indicating state of the memory (or the first memory page
- if the states for the following pages differ):
- Possible return codes:
- 0 - NO_ERROR
- 87 - ERROR_INVALID_PARAMETER
- 487 - ERROR_INVALID_ADDRESS
- }
- function DosQueryMemState (PMem: pointer; var Size: cardinal;
- var State: cardinal): cardinal; cdecl;
- {***************************************************************************}
- implementation
- {***************************************************************************}
- function DosCreateThread(var TID:longint;Address:TThreadEntry;
- aParam:pointer;Flags:longint;
- StackSize:longint):cardinal; cdecl;
- external 'DOSCALLS' index 311;
- function DosCreateThread (var TID: cardinal; Address: TThreadEntry;
- aParam: pointer; Flags: cardinal;
- StackSize: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 311;
- function DosCreateThread(var TID:longint;Address:pointer;
- AParam:Pointer;Flags,StackSize:longint):cardinal;cdecl;
- external 'DOSCALLS' index 311;
- function DosCreateThread (var TID: cardinal; Address: pointer;
- AParam: Pointer; Flags, StackSize: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 311;
- function DosSuspendThread (TID:cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 238;
- function DosResumeThread (TID: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 237;
- function DosKillThread (TID: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 111;
- function DosWaitThread(var TID:longint;Option:longint):cardinal; cdecl;
- external 'DOSCALLS' index 349;
- function DosWaitThread (var TID: cardinal; Option: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 349;
- function DosEnterCritSec: cardinal; cdecl;
- external 'DOSCALLS' index 232;
- function DosExitCritSec: cardinal; cdecl;
- external 'DOSCALLS' index 233;
- procedure DosExit (Action, Result: cardinal); cdecl;
- external 'DOSCALLS' index 234;
- procedure DosGetInfoBlocks(var ATIB:PThreadInfoBlock;
- var APIB:PProcessInfoBlock); cdecl;
- external 'DOSCALLS' index 312;
- procedure DosGetInfoBlocks(PATIB:PPThreadInfoBlock;
- PAPIB:PPProcessInfoBlock); cdecl;
- external 'DOSCALLS' index 312;
- procedure DosSleep (MSec: cardinal); cdecl;
- external 'DOSCALLS' index 229;
- function DosBeep (Freq, MS: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 286;
- function DosDebug (DebugBuf: PDbgBuf): cardinal; cdecl;
- external 'DOSCALLS' index 317;
- function DosDebug (var APDbgBuf: TDbgBuf): cardinal; cdecl;
- external 'DOSCALLS' index 317;
- function DosExitList (OrderCode: cardinal; Proc: TExitProc): cardinal; cdecl;
- external 'DOSCALLS' index 296;
- function DosExecPgm (ObjName: PChar; ObjLen: longint; ExecFlag: cardinal;
- Args, Env: PByteArray; var Res: TResultCodes;
- FileName:PChar): cardinal; cdecl;
- external 'DOSCALLS' index 283;
- function DosExecPgm (var ObjName: string; Execflag: cardinal;
- Args, Env: PByteArray; var Res: TResultCodes;
- const FileName: string): cardinal;
- var T,T2:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosExecPgm:=DosExecPgm(@T2,SizeOf(T2),ExecFlag,Args,Env,Res,@T);;
- ObjName:=StrPas(@T2);
- end;
- function DosWaitChild(Action,Option:longint;var Res:TResultCodes;
- var TermPID:longint;PID:longint):cardinal; cdecl;
- external 'DOSCALLS' index 280;
- function DosWaitChild (Action, Option: cardinal; var Res: TResultCodes;
- var TermPID: cardinal; PID: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 280;
- function DosSetPriority (Scope, TrClass: cardinal; Delta: longint;
- PortID: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 236;
- function DosKillProcess (Action, PID: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 235;
- function DosQueryAppType(FileName:PChar;var Flags:longint):cardinal; cdecl;
- external 'DOSCALLS' index 323;
- function DosQueryAppType (FileName: PChar; var Flags: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 323;
- function DosDevConfig (var DevInfo: byte; Item: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 231;
- function DosSetFileLocks (Handle: THandle; var Unlock, Lock: TFileLock;
- Timeout, Flags: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 428;
- function DosCancelLockRequest (Handle: THandle; var Lock: TFileLock): cardinal;
- cdecl;
- external 'DOSCALLS' index 429;
- function DosOpen(FileName:PChar;var Handle,Action:longint;
- InitSize,Attrib,OpenFlags,FileMode:longint;
- EA:PEAOp2):cardinal; cdecl;
- external 'DOSCALLS' index 273;
- function DosOpen (FileName: PChar; var Handle: THandle; var Action: cardinal;
- InitSize, Attrib, OpenFlags, FileMode: cardinal;
- EA: PEAOp2): cardinal; cdecl;
- external 'DOSCALLS' index 273;
- function DosCreate (FileName: PChar; var Handle: THandle;
- Attrib, OpenMode: cardinal): cardinal;
- var Action: cardinal;
- begin
- DosCreate:=DosOpen(FileName,Handle,Action,0,Attrib,18,OpenMode,nil);
- end;
- function DosOpen (FileName: PChar; var Handle: THandle;
- Attrib, OpenMode: cardinal): cardinal;
- var Action: cardinal;
- begin
- DosOpen:=DosOpen(FileName,Handle,Action,0,Attrib,1,OpenMode,nil);
- end;
- function DosOpen(const FileName:string;var Handle,Action:longint;
- InitSize,Attrib,OpenFlags,OpenMode:longint;
- EA:PEAOp2):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosOpen:=DosOpen(@T,Handle,Action,InitSize,Attrib,OpenFlags,OpenMode,EA);
- end;
- function DosOpen (const FileName: string; var Handle: THandle;
- var Action: cardinal; InitSize, Attrib, OpenFlags: cardinal;
- OpenMode: cardinal; EA: PEAOp2): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosOpen:=DosOpen(@T,Handle,Action,InitSize,Attrib,OpenFlags,OpenMode,EA);
- end;
- function DosCreate (const FileName: string; var Handle: THandle;
- Attrib, OpenMode: cardinal): cardinal;
- var T:array[0..255] of char;
- Action:cardinal;
- begin
- StrPCopy(@T,FileName);
- DosCreate:=DosOpen(@T,Handle,Action,0,Attrib,18,OpenMode,nil);
- end;
- function DosOpen (const FileName: string; var Handle: THandle;
- Attrib, OpenMode: cardinal): cardinal;
- var T:array[0..255] of char;
- Action:cardinal;
- begin
- StrPCopy(@T,FileName);
- DosOpen:=DosOpen(@T,Handle,Action,0,Attrib,1,OpenMode,nil);
- end;
- function DosClose (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 257;
- function DosRead(Handle:longint;var Buffer;Count:longint;
- var ActCount:longint):cardinal; cdecl;
- external 'DOSCALLS' index 281;
- function DosRead (Handle: THandle; var Buffer; Count: cardinal;
- var ActCount: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 281;
- function DosWrite(Handle:longint;const Buffer;Count:longint;
- var ActCount:longint):cardinal; cdecl;
- external 'DOSCALLS' index 282;
- function DosWrite (Handle: THandle; const Buffer; Count: cardinal;
- var ActCount: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 282;
- function DosSetFilePtr(Handle:longint;Pos:longint;Method:cardinal;
- var PosActual:longint):cardinal; cdecl;
- external 'DOSCALLS' index 256;
- function DosSetFilePtr (Handle: THandle; Pos: longint; Method: cardinal;
- var PosActual: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 256;
- function DosSetFilePtr (Handle: THandle; Pos: longint): cardinal;
- var PosActual: cardinal;
- begin
- DosSetFilePtr:=DosSetFilePtr(Handle,Pos,0,PosActual);
- end;
- function DosGetFilePtr(Handle:longint;var PosActual:longint):cardinal;
- begin
- DosGetFilePtr:=DosSetFilePtr(Handle,0,1,PosActual);
- end;
- function DosGetFilePtr (Handle: THandle; var PosActual: cardinal): cardinal;
- begin
- DosGetFilePtr:=DosSetFilePtr(Handle,0,1,PosActual);
- end;
- function DosSetFileSize (Handle: THandle; Size: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 272;
- function DosResetBuffer (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 254;
- function DosDupHandle (Handle: THandle; var Duplicate: THandle): cardinal;
- cdecl;
- external 'DOSCALLS' index 260;
- function DosQueryFHState(Handle:longint;var FileMode:longint):cardinal; cdecl;
- external 'DOSCALLS' index 276;
- function DosQueryFHState (Handle: THandle; var FileMode: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 276;
- function DosSetFHState (Handle: THandle; FileMode: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 221;
- function DosQueryHType(Handle:longint;var HandType:longint;
- var Attr:longint):cardinal; cdecl;
- external 'DOSCALLS' index 224;
- function DosQueryHType (Handle: THandle; var HandType: cardinal;
- var Attr: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 224;
- function DosEditName (MetaLevel: cardinal; Source, Edit: PChar;
- Target: PChar; TargetLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 261;
- function DosEditName (MetaLevel: cardinal; const Source, Edit: string;
- var Target: string): cardinal;
- var T,T2,T3:array[0..255] of char;
- begin
- StrPCopy(@T,Source);
- StrPCopy(@T2,Edit);
- DosEditName:=DosEditName(MetaLevel,@T,@T2,@T3,SizeOf(T3));
- Target:=StrPas(@T3);
- end;
- function DosMove(OldFile,NewFile:PChar):cardinal; cdecl;
- external 'DOSCALLS' index 271;
- function DosMove(const OldFile,NewFile:string):cardinal;
- var T,T2:array[0..255] of char;
- begin
- StrPCopy(@T,OldFile);
- StrPCopy(@T2,NewFile);
- DosMove:=DosMove(@T,@T2);
- end;
- function DosCopy (OldFile, NewFile: PChar; Option: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 258;
- function DosCopy (const OldFile, NewFile: string; Option: cardinal): cardinal;
- var T,T2:array[0..255] of char;
- begin
- StrPCopy(@T,OldFile);
- StrPCopy(@T2,NewFile);
- DosCopy:=DosCopy(@T,@T2,Option);
- end;
- function DosDelete(FileName:PChar):cardinal; cdecl;
- external 'DOSCALLS' index 259;
- function DosDelete(const FileName:string):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosDelete:=DosDelete(@T);
- end;
- function DosForceDelete(FileName:PChar):cardinal; cdecl;
- external 'DOSCALLS' index 110;
- function DosForceDelete(const FileName:string):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosForceDelete:=DosForceDelete(@T);
- end;
- function DosCreateDir(Name:PChar;EA:PEAOp2):cardinal; cdecl;
- external 'DOSCALLS' index 270;
- function DosCreateDir(Name:PChar):cardinal;
- begin
- DosCreateDir:=DosCreateDir(Name,nil);
- end;
- function DosCreateDir(const Name:string;EA:PEAOp2):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosCreateDir:=DosCreateDir(@T,EA);
- end;
- function DosCreateDir(const Name:string):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosCreateDir:=DosCreateDir(@T,nil);
- end;
- function DosDeleteDir(Name:PChar):cardinal; cdecl;
- external 'DOSCALLS' index 226;
- function DosDeleteDir(const Name:string):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosDeleteDir:=DosDeleteDir(@T);
- end;
- function DosSetDefaultDisk(DiskNum:cardinal):cardinal; cdecl;
- external 'DOSCALLS' index 220;
- procedure DosQueryCurrentDisk(var DiskNum:longint;var Logical:longint); cdecl;
- external 'DOSCALLS' index 275;
- procedure DosQueryCurrentDisk (var DiskNum: cardinal; var Logical: cardinal);
- cdecl;
- external 'DOSCALLS' index 275;
- function DosSetCurrentDir(Name:PChar):cardinal; cdecl;
- external 'DOSCALLS' index 255;
- function DosSetCurrentDir(const Name:string):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosSetCurrentDir:=DosSetCurrentDir(@T);
- end;
- function DosQueryCurrentDir(DiskNum:longint;var Buffer;
- var BufLen:longint):cardinal; cdecl;
- external 'DOSCALLS' index 274;
- function DosQueryCurrentDir (DiskNum: cardinal; var Buffer;
- var BufLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 274;
- function DosQueryCurrentDir (DiskNum: cardinal; var Buffer: string): cardinal;
- var T:array[0..255] of char;
- L: cardinal;
- begin
- L:=255;
- DosQueryCurrentDir:=DosQueryCurrentDir(DiskNum,T,L);
- Buffer:=StrPas(@T);
- end;
- function DosDevIOCtl(Handle,Category,Func:longint;var Params;
- ParamLen:longint;var ParamSize:longint;
- var Data;DataLen:longint;var DataSize:longint):cardinal; cdecl;
- external 'DOSCALLS' index 284;
- function DosDevIOCtl (Handle: THandle; Category, Func: cardinal; var Params;
- ParamLen: cardinal; var ParamSize: cardinal;
- var Data; DataLen: cardinal; var DataSize: cardinal):
- cardinal; cdecl;
- external 'DOSCALLS' index 284;
- function DosFindFirst (FileMask: PChar; var Handle: THandle; Attrib: cardinal;
- AFileStatus: PFileStatus; FileStatusLen: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 264;
- function DosFindFirst (const FileMask: string; var Handle: THandle;
- Attrib: cardinal; AFileStatus: PFileStatus;
- FileStatusLen: cardinal; var Count: cardinal;
- InfoLevel: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileMask);
- DosFindFirst:=DosFindFirst(@T,Handle,Attrib,AFileStatus,FileStatusLen,
- Count,InfoLevel);
- end;
- function DosFindNext (Handle: THandle; AFileStatus: PFileStatus;
- FileStatusLen: cardinal; var Count: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 265;
- function DosFindClose (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 263;
- function DosQueryFileInfo (Handle: THandle; InfoLevel: cardinal;
- AFileStatus: PFileStatus;
- FileStatusLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 279;
- function DosSetFileInfo (Handle: THandle; InfoLevel: cardinal;
- AFileStatus: PFileStatus;
- FileStatusLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 218;
- function DosQueryPathInfo (FileName: PChar; InfoLevel: cardinal;
- AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 223;
- function DosQueryPathInfo (const FileName: string; InfoLevel: cardinal;
- AFileStatus: PFileStatus; FileStatusLen: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosQueryPathInfo:=DosQueryPathInfo(@T,InfoLevel,AFileStatus,
- FileStatusLen);
- end;
- function DosSetPathInfo (FileName: PChar; InfoLevel: cardinal;
- AFileStatus: PFileStatus; FileStatusLen,
- Options: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 219;
- function DosEnumAttribute(RefType:longint;AFile:pointer;
- Entry:longint;var Buf;BufSize:longint;
- var Count:longint;InfoLevel:longint):cardinal; cdecl;
- external 'DOSCALLS' index 372;
- function DosEnumAttribute (RefType: cardinal; AFile: pointer;
- Entry: cardinal; var Buf; BufSize: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 372;
- function DosEnumAttribute (RefType: cardinal; AFile: PChar;
- Entry: cardinal; var Buf; BufSize: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 372;
- function DosEnumAttribute (RefType: cardinal; const AFile: THandle;
- Entry: cardinal; var Buf; BufSize: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 372;
- function DosEnumAttribute (Handle: longint; Entry: longint; var Buf;
- BufSize: longint;
- var Count: longint; InfoLevel: longint): cardinal;
- begin
- DosEnumAttribute:=DosEnumAttribute(0,@Handle,Entry,Buf,BufSize,Count,
- InfoLevel);
- end;
- function DosEnumAttribute (Handle: THandle; Entry: cardinal; var Buf;
- BufSize: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- begin
- DosEnumAttribute:=DosEnumAttribute(0,@Handle,Entry,Buf,BufSize,Count,
- InfoLevel);
- end;
- function DosEnumAttribute (const FileName: string;
- Entry: cardinal;var Buf;BufSize: cardinal;
- var Count: cardinal; InfoLevel: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosEnumAttribute:=DosEnumAttribute(1,@T,Entry,Buf,BufSize,Count,
- InfoLevel);
- end;
- function DosScanEnv(Name:PChar;var Value:PChar):cardinal; cdecl;
- external 'DOSCALLS' index 227;
- function DosScanEnv(const Name:string;var Value:string):cardinal;
- var T:array[0..255] of char;
- P:PChar;
- begin
- StrPCopy(@T,Name);
- DosScanEnv:=DosScanEnv(@T,P);
- Value:=StrPas(P);
- end;
- function DosSearchPath (Flag: cardinal; DirList, FileName: PChar;
- FullName: PChar; FullLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 228;
- function DosSearchPath (Flag: cardinal; const DirList, FileName: string;
- var FullName: string): cardinal;
- var T1,T2,T3:array[0..255] of char;
- begin
- StrPCopy(@T1,DirList);
- StrPCopy(@T2,FileName);
- DosSearchPath:=DosSearchPath(Flag,@T1,@T2,@T3,SizeOf(T3));
- FullName:=StrPas(@T3);
- end;
- function DosFSAttach (DevName, FileSystem: PChar; var Data: TAttachData;
- DataLen, Flag: cardinal):cardinal; cdecl;
- external 'DOSCALLS' index 269;
- function DosFSAttach (const DevName, FileSystem: string; var Data: TAttachData;
- DataLen, Flag: cardinal): cardinal;
- var T1,T2:array[0..255] of char;
- begin
- StrPCopy(@T1,DevName);
- StrPCopy(@T2,FileSystem);
- DosFSAttach:=DosFSAttach(@T1,@T2,Data,DataLen,Flag);
- end;
- function DosQueryFSAttach(DevName:PChar;Ordinal,InfoLevel:longint;
- var Buffer:TFSQBuffer2;var BufLen:longint):cardinal; cdecl;
- external 'DOSCALLS' index 277;
- function DosQueryFSAttach (DevName: PChar; Ordinal, InfoLevel: cardinal;
- var Buffer: TFSQBuffer2; var BufLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 277;
- function DosQueryFSAttach(const DevName:string;Ordinal,InfoLevel:longint;
- var Buffer:TFSQBuffer2;var BufLen:longint):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,DevName);
- DosQueryFSAttach:=DosQueryFSAttach(@T,Ordinal,InfoLevel,Buffer,BufLen);
- end;
- function DosQueryFSAttach (const DevName: string; Ordinal, InfoLevel: cardinal;
- var Buffer: TFSQBuffer2; var BufLen: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,DevName);
- DosQueryFSAttach:=DosQueryFSAttach(@T,Ordinal,InfoLevel,Buffer,BufLen);
- end;
- function DosFSCtl(Data:pointer;DataLen:longint;var ResDataLen:longint;
- Parms:pointer;ParmsLen:longint;var ResParmsLen:longint;
- _Function:longint;Route:PChar;
- Handle,Method:longint):cardinal; cdecl;
- external 'DOSCALLS' index 285;
- function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
- Parms: pointer; ParmsLen: cardinal;
- var ResParmsLen: cardinal; _Function: cardinal;
- Route: PChar; Handle: THandle; Method: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 285;
- function DosFSCtl(Data:pointer;DataLen:longint;var ResDataLen:longint;
- Parms:pointer;ParmsLen:longint;var ResParmsLen:longint;
- _Function:longint;const Route:string;
- Handle,Method:longint):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Route);
- DosFSCtl:=DosFSCtl(Data,Datalen,ResDataLen,Parms,ParmsLen,ResParmsLen,
- _Function,Route,Handle,Method);
- end;
- function DosFSCtl (Data: pointer; DataLen: cardinal; var ResDataLen: cardinal;
- Parms: pointer; ParmsLen: cardinal;
- var ResParmsLen: cardinal; _Function: cardinal;
- const Route: string; Handle: THandle; Method: cardinal):
- cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Route);
- DosFSCtl:=DosFSCtl(Data,Datalen,ResDataLen,Parms,ParmsLen,ResParmsLen,
- _Function,Route,Handle,Method);
- end;
- function DosQueryFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSInfo;
- BufLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 278;
- function DosSetFSInfo (DiskNum, InfoLevel: cardinal; var Buffer: TFSInfo;
- BufLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 222;
- function DosQueryVerify(var Enabled:longint):cardinal; cdecl;
- external 'DOSCALLS' index 225;
- function DosQueryVerify (var Enabled: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 225;
- function DosQueryVerify (var Enabled: boolean): cardinal;
- var
- En: cardinal;
- RC: cardinal;
- begin
- RC := DosQueryVerify (En);
- Enabled := boolean (En);
- DosQueryVerify := RC;
- end;
- function DosSetVerify (Enable: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 210;
- function DosSetVerify (Enable: boolean): cardinal;
- begin
- DosSetVerify := DosSetVerify (cardinal (Enable));
- end;
- function DosSetMaxFH (Count: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 209;
- function DosSetRelMaxFH(var ReqCount,CurMaxFH:longint):cardinal; cdecl;
- external 'DOSCALLS' index 382;
- function DosSetRelMaxFH (var ReqCount: longint; var CurMaxFH: cardinal):
- cardinal; cdecl;
- external 'DOSCALLS' index 382;
- function DosShutDown (Flags: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 415;
- function DosQuerySysInfo (First, Last: cardinal; var Buf; BufSize: cardinal):
- cardinal; cdecl;
- external 'DOSCALLS' index 348;
- function DosQuerySysInfo(First,Last:cardinal;Buf:PQSVValues;
- BufSize:cardinal):cardinal;cdecl;
- external 'DOSCALLS' index 348;
- function DosPhysicalDisk (Func: cardinal; Buf: pointer; BufSize: cardinal;
- Params: pointer; ParamSize: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 287;
- function DosAllocMem (var P: pointer; Size, Flag: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 299;
- function DosFreeMem (P: pointer): cardinal; cdecl;
- external 'DOSCALLS' index 304;
- function DosSetMem (P: pointer; Size, Flag: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 305;
- function DosGiveSharedMem (P: pointer; PID, Flag: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 303;
- function DosGetSharedMem (P: pointer; Flag: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 302;
- function DosGetNamedSharedMem (var P: pointer; Name: PChar; Flag: cardinal):
- cardinal; cdecl;
- external 'DOSCALLS' index 301;
- function DosGetNamedSharedMem (var P: pointer; const Name: string;
- Flag: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosGetNamedSharedMem:=DosGetNamedSharedMem(P,@T,Flag);
- end;
- function DosAllocSharedMem (var P: pointer; Name: PChar;
- Size, Flag: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 300;
- function DosAllocSharedMem (var P: pointer; const Name: string;
- Size, Flag: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- if Name<>'' then
- begin
- StrPCopy(@T,Name);
- DosAllocSharedMem:=DosAllocSharedMem(P,@T,Size,Flag);
- end
- else
- DosAllocSharedMem:=DosAllocSharedMem(P,nil,Size,Flag);
- end;
- function DosQueryMem(P:pointer;var Size,Flag:longint):cardinal; cdecl;
- external 'DOSCALLS' index 306;
- function DosQueryMem (P: pointer; var Size, Flag: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 306;
- function DosSubAllocMem (Base: pointer; var P: pointer; Size: cardinal):
- cardinal; cdecl;
- external 'DOSCALLS' index 345;
- function DosSubFreeMem (Base, P: pointer; Size: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 346;
- function DosSubSetMem (Base: pointer; Flag, Size: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 344;
- function DosSubUnSetMem (Base: pointer): cardinal; cdecl;
- external 'DOSCALLS' index 347;
- function DosCreateEventSem (Name: PChar; var Handle: THandle;
- Attr, State: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 324;
- function DosCreateEventSem (Name: PChar; var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- begin
- DosCreateEventSem :=
- DosCreateEventSem (Name, Handle, Attr, cardinal (State));
- end;
- function DosCreateEventSem (const Name: string; var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- var T:array[0..255] of char;
- begin
- if Name<>'' then
- begin
- StrPCopy(@T,Name);
- DosCreateEventSem :=
- DosCreateEventSem (@T, Handle, Attr, cardinal (State));
- end
- else
- DosCreateEventSem :=
- DosCreateEventSem (nil, Handle, Attr, cardinal (State));
- end;
- function DosCreateEventSem (const Name: string; var Handle: THandle;
- Attr, State: cardinal): cardinal;
- begin
- DosCreateEventSem := DosCreateEventSem (Name, Handle, Attr, boolean (State));
- end;
- function DosOpenEventSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 325;
- function DosOpenEventSem (const Name: string; var Handle: THandle): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosOpenEventSem:=DosOpenEventSem(@T,Handle);
- end;
- function DosCloseEventSem (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 326;
- function DosResetEventSem(Handle:longint;var PostCount:longint):cardinal; cdecl;
- external 'DOSCALLS' index 327;
- function DosResetEventSem (Handle: THandle; var PostCount: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 327;
- function DosPostEventSem (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 328;
- function DosWaitEventSem (Handle: THandle; Timeout: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 329;
- function DosQueryEventSem(Handle:longint;var Posted:longint):cardinal; cdecl;
- external 'DOSCALLS' index 330;
- function DosQueryEventSem (Handle: THandle; var Posted: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 330;
- function DosCreateMutExSem (Name: PChar; var Handle: THandle;
- Attr, State: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 331;
- function DosCreateMutExSem (Name: PChar; var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- begin
- DosCreateMutExSem :=
- DosCreateMutExSem (Name, Handle, Attr, cardinal (State));
- end;
- function DosCreateMutExSem (const Name: string; var Handle: THandle;
- Attr: cardinal; State: boolean): cardinal;
- var T:array[0..255] of char;
- begin
- if Name<>'' then
- begin
- StrPCopy(@T,Name);
- DosCreateMutExSem :=
- DosCreateMutExSem (@T, Handle, Attr, cardinal (State));
- end
- else
- DosCreateMutExSem :=
- DosCreateMutExSem (nil, Handle, Attr, cardinal (State));
- end;
- function DosCreateMutExSem (const Name: string; var Handle: THandle;
- Attr, State: cardinal): cardinal;
- begin
- DosCreateMutExSem :=
- DosCreateMutExSem (Name, Handle, Attr, boolean (State));
- end;
- function DosOpenMutExSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 332;
- function DosOpenMutExSem (const Name: string; var Handle: THandle): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosOpenMutExSem:=DosOpenMutExSem(@T,Handle);
- end;
- function DosCloseMutExSem (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 333;
- function DosRequestMutExSem (Handle: THandle; Timeout: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 334;
- function DosReleaseMutExSem (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 335;
- function DosQueryMutExSem(Handle:longint;var PID,TID,Count:longint):cardinal;
- cdecl;
- external 'DOSCALLS' index 336;
- function DosQueryMutExSem (Handle: THandle; var PID, TID, Count: cardinal):
- cardinal; cdecl;
- external 'DOSCALLS' index 336;
- function DosCreateMuxWaitSem (Name: PChar; var Handle: THandle;
- CSemRec: cardinal; var SemArray: TSemArray;
- Attr: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 337;
- function DosCreateMuxWaitSem (Name: PChar; var Handle: THandle;
- CSemRec: cardinal; SemArray: PSemArray;
- Attr: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 337;
- function DosCreateMuxWaitSem (const Name: string; var Handle: THandle;
- CSemRec: cardinal; var SemArray: TSemArray;
- Attr: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- if Name<>'' then
- begin
- StrPCopy(@T,Name);
- DosCreateMuxWaitSem:=DosCreateMuxWaitSem(@T,Handle,CSemRec,
- SemArray,Attr);
- end
- else
- DosCreateMuxWaitSem:=DosCreateMuxWaitSem(nil,Handle,CSemRec,SemArray,
- Attr);
- end;
- function DosOpenMuxWaitSem (Name: PChar; var Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 338;
- function DosOpenMuxWaitSem (const Name: string; var Handle: THandle): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosOpenMuxWaitSem:=DosOpenMuxWaitSem(@T,Handle);
- end;
- function DosCloseMuxWaitSem (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 339;
- function DosWaitMuxWaitSem(Handle,Timeout:longint;var User:longint):cardinal;
- cdecl;
- external 'DOSCALLS' index 340;
- function DosWaitMuxWaitSem (Handle: THandle; Timeout: cardinal;
- var User: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 340;
- function DosAddMuxWaitSem (Handle: THandle; var SemRec: TSemRecord): cardinal;
- cdecl;
- external 'DOSCALLS' index 341;
- function DosDeleteMuxWaitSem (Handle, Sem: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 342;
- function DosQueryMuxWaitSem(Handle:longint;var CSemRec:longint;
- var SemRecs:TSemArray;var Attr:longint):cardinal; cdecl;
- external 'DOSCALLS' index 343;
- function DosQueryMuxWaitSem (Handle: THandle; var CSemRec: cardinal;
- var SemRecs: TSemArray; var Attr: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 343;
- function DosGetDateTime (var Buf: TDateTime): cardinal; cdecl;
- external 'DOSCALLS' index 230;
- function DosSetDateTime (var Buf: TDateTime): cardinal; cdecl;
- external 'DOSCALLS' index 292;
- function DosAsyncTimer (MSec: cardinal; HSem: THandle;
- var TimHandle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 350;
- function DosStartTimer (MSec: cardinal; HSem: THandle;
- var TimHandle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 351;
- function DosStopTimer (TimHandle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 290;
- function DosTmrQueryFreq(var Freq:longint):cardinal; cdecl;
- external 'DOSCALLS' index 362;
- function DosTmrQueryFreq (var Freq: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 362;
- function DosTmrQueryTime (var Time: comp): cardinal; cdecl;
- external 'DOSCALLS' index 363;
- function DosTmrQueryTime (var Time: qword): cardinal; cdecl;
- external 'DOSCALLS' index 363;
- function DosLoadModule (ObjName: PChar; ObjLen: cardinal; DLLName: PChar;
- var Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 318;
- function DosLoadModule (var ObjName: string; ObjLen: cardinal;
- const DLLName: string; var Handle: THandle): cardinal;
- var T1,T2:array[0..255] of char;
- begin
- StrPCopy(@T2,DLLName);
- DosLoadModule:=DosLoadModule(@T1,ObjLen,@T2,Handle);
- ObjName:=StrPas(@T1);
- end;
- function DosFreeModule (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 322;
- function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal; ProcName: PChar;
- var Address: pointer): cardinal; cdecl;
- external 'DOSCALLS' index 321;
- function DosQueryProcAddr (Handle: THandle; Ordinal: cardinal;
- const ProcName: string; var Address: pointer): cardinal;
- var T1:array[0..255] of char;
- begin
- if ProcName<>'' then
- begin
- StrPCopy(@T1,ProcName);
- DosQueryProcAddr:=DosQueryProcAddr(Handle,Ordinal,@T1,Address);
- end
- else
- DosQueryProcAddr:=DosQueryProcAddr(Handle,Ordinal,nil,Address);
- end;
- function DosQueryModuleHandle (DLLName: PChar; var Handle: THandle): cardinal;
- cdecl;
- external 'DOSCALLS' index 319;
- function DosQueryModuleHandle (const DLLName: string; var Handle: THandle):
- cardinal;
- var T1:array[0..255] of char;
- begin
- StrPCopy(@T1,DLLName);
- DosQueryModuleHandle:=DosQueryModuleHandle(@T1,Handle);
- end;
- function DosQueryModuleName (Handle: THandle; NameLen: cardinal; Name: PChar):
- cardinal; cdecl;
- external 'DOSCALLS' index 320;
- {function DosQueryModuleName(Handle:longint;var Name:openstring):cardinal;
- var T1:array[0..255] of char;
- begin
- DosQueryModuleName:=DosQueryModuleName(Handle,High(Name),@T1);
- Name:=StrPas(@T1);
- end;}
- function DosQueryProcType(Handle,Ordinal:longint;Name:PChar;
- var ProcType:longint):cardinal; cdecl;
- external 'DOSCALLS' index 586;
- function DosQueryProcType (Handle: THandle; Ordinal: cardinal; Name: PChar;
- var ProcType: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 586;
- function DosQueryProcType(Handle,Ordinal:longint;const Name:string;
- var ProcType:longint):cardinal;
- var T1:array[0..255] of char;
- begin
- if Name<>'' then
- begin
- StrPCopy(@T1,Name);
- DosQueryProcType:=DosQueryProcType(Handle,Ordinal,@T1,ProcType);
- end
- else
- DosQueryProcType:=DosQueryProcType(Handle,Ordinal,nil,ProcType);
- end;
- function DosQueryProcType (Handle: THandle; Ordinal: cardinal;
- const Name: string; var ProcType: cardinal): cardinal;
- var T1:array[0..255] of char;
- begin
- if Name<>'' then
- begin
- StrPCopy(@T1,Name);
- DosQueryProcType:=DosQueryProcType(Handle,Ordinal,@T1,ProcType);
- end
- else
- DosQueryProcType:=DosQueryProcType(Handle,Ordinal,nil,ProcType);
- end;
- function DosGetResource (Handle: THandle; ResType, ResName: cardinal;
- var P: pointer): cardinal; cdecl;
- external 'DOSCALLS' index 352;
- function DosFreeResource (P: pointer): cardinal; cdecl;
- external 'DOSCALLS' index 353;
- function DosQueryResourceSize(Handle,IDT,IDN:longint;var Size:longint):cardinal;
- cdecl;
- external 'DOSCALLS' index 572;
- function DosQueryResourceSize (Handle: THandle; IDT, IDN: cardinal;
- var Size: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 572;
- function DosQueryCtryInfo(Size:longint;var Country:TCountryCode;
- var Res:TCountryInfo;var ActualSize:longint):cardinal; cdecl;
- external 'NLS' index 5;
- function DosQueryCtryInfo (Size: cardinal; var Country: TCountryCode;
- var Res: TCountryInfo; var ActualSize: cardinal): cardinal; cdecl;
- external 'NLS' index 5;
- function DosQueryDBCSEnv (Size: cardinal; var Country: TCountryCode;
- Buf: PChar): cardinal; cdecl;
- external 'NLS' index 6;
- function DosMapCase (Size: cardinal; var Country: TCountryCode;
- AString: PChar): cardinal; cdecl;
- external 'NLS' index 7;
- function DosMapCase (var Country: TCountryCode; var AString: string): cardinal;
- var T1:string;
- begin
- StrPCopy(@T1,AString);
- DosMapCase:=DosMapCase(length(AString),Country,@T1);
- AString:=StrPas(@T1);
- end;
- function DosQueryCollate(Size:longint;var Country:TCountryCode;
- buf:PByteArray;var TableLen:longint):cardinal; cdecl;
- external 'NLS' index 8;
- function DosQueryCollate (Size: cardinal; var Country: TCountryCode;
- Buf: PByteArray; var TableLen: cardinal): cardinal; cdecl;
- external 'NLS' index 8;
- function DosQueryCP(Size:longint; PCodePages:PWordArray;
- var ActSize:longint):cardinal; cdecl;
- external 'DOSCALLS' index 291;
- function DosQueryCP (Size: cardinal; PCodePages: PWordArray;
- var ActSize: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 291;
- function DosQueryCP (Size: cardinal; var CodePages;
- var ActSize: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 291;
- function DosSetProcessCP (CP: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 289;
- function DosSetExceptionHandler (var RegRec: TExceptionRegistrationRecord):
- cardinal; cdecl;
- external 'DOSCALLS' index 354;
- function DosUnsetExceptionHandler (var RegRec: TExceptionRegistrationRecord):
- cardinal; cdecl;
- external 'DOSCALLS' index 355;
- function DosRaiseException (var Excpt: TExceptionReportRecord): cardinal;
- cdecl;
- external 'DOSCALLS' index 356;
- function DosSendSignalException (PID, Exception: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 379;
- function DosUnwindException (var Handler: TExceptionRegistrationRecord;
- TargetIP: pointer;
- var RepRec: TExceptionReportRecord): cardinal; cdecl;
- external 'DOSCALLS' index 357;
- function DosSetSignalExceptionFocus(Enable:longint;var Times:longint):cardinal;
- cdecl;
- external 'DOSCALLS' index 378;
- function DosSetSignalExceptionFocus (Enable: cardinal;
- var Times: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 378;
- function DosSetSignalExceptionFocus (Enable: boolean;
- var Times: cardinal): cardinal;
- begin
- DosSetSignalExceptionFocus :=
- DosSetSignalExceptionFocus (cardinal (Enable), Times);
- end;
- function DosEnterMustComplete(var Nesting:longint):cardinal; cdecl;
- external 'DOSCALLS' index 380;
- function DosEnterMustComplete (var Nesting: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 380;
- function DosExitMustComplete(var Nesting:longint):cardinal; cdecl;
- external 'DOSCALLS' index 381;
- function DosExitMustComplete (var Nesting: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 381;
- function DosAcknowledgeSignalException (SignalNum: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 418;
- function DosCloseQueue (Handle: THandle): cardinal; cdecl;
- external 'QUECALLS' index 11;
- function DosCreateQueue (var Handle: THandle; Priority: cardinal;
- Name: PChar): cardinal; cdecl;
- external 'QUECALLS' index 16;
- function DosCreateQueue (var Handle: THandle; Priority: cardinal;
- const Name: string): cardinal;
- var T1:array[0..255] of char;
- begin
- StrPCopy(@T1,Name);
- DosCreateQueue:=DosCreateQueue(Handle,Priority,@T1);
- end;
- function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
- Name:PChar):cardinal; cdecl;
- external 'QUECALLS' index 15;
- function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
- Name: PChar): cardinal; cdecl;
- external 'QUECALLS' index 15;
- function DosOpenQueue(var Parent_PID:longint;var Handle:longint;
- const Name:string):cardinal;
- var T1:array[0..255] of char;
- begin
- StrPCopy(@T1,Name);
- DosOpenQueue:=DosOpenQueue(Parent_PID,Handle,@T1);
- end;
- function DosOpenQueue (var Parent_PID: cardinal; var Handle: THandle;
- const Name: string): cardinal;
- var T1:array[0..255] of char;
- begin
- StrPCopy(@T1,Name);
- DosOpenQueue:=DosOpenQueue(Parent_PID,Handle,@T1);
- end;
- function DosPeekQueue(Handle:longint;var ReqBuffer:TRequestData;
- var DataLen:longint;var DataPtr:pointer;
- var Element:longint;Wait:longint;
- var Priority:byte;ASem:longint):cardinal; cdecl;
- external 'QUECALLS' index 13;
- function DosPeekQueue (Handle: THandle; var ReqBuffer:TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- var Element: cardinal; Wait: cardinal;
- var Priority: byte; ASem: THandle): cardinal; cdecl;
- external 'QUECALLS' index 13;
- function DosPeekQueue (Handle: THandle; var ReqBuffer: TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- var Element: cardinal; Wait: boolean;
- var Priority: byte; ASem: THandle): cardinal;
- begin
- DosPeekQueue := DosPeekQueue (Handle, ReqBuffer, DataLen, DataPtr, Element,
- cardinal (Wait), Priority, ASem);
- end;
- function DosPurgeQueue (Handle: THandle): cardinal; cdecl;
- external 'QUECALLS' index 10;
- function DosQueryQueue(Handle:longint;var Count:longint):cardinal; cdecl;
- external 'QUECALLS' index 12;
- function DosQueryQueue (Handle: THandle; var Count: cardinal): cardinal; cdecl;
- external 'QUECALLS' index 12;
- function DosReadQueue(Handle:longint;var ReqBuffer:TRequestData;
- var DataLen:longint;var DataPtr:pointer;
- Element,Wait:longint;var Priority:byte;
- ASem:longint):cardinal; cdecl;
- external 'QUECALLS' index 9;
- function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- Element, Wait: cardinal; var Priority: byte;
- ASem: THandle): cardinal; cdecl;
- external 'QUECALLS' index 9;
- function DosReadQueue (Handle: THandle; var ReqBuffer: TRequestData;
- var DataLen: cardinal; var DataPtr: pointer;
- Element: cardinal; Wait: boolean; var Priority: byte;
- ASem: THandle): cardinal;
- begin
- DosReadQueue := DosReadQueue (Handle, ReqBuffer, DataLen, DataPtr, Element,
- cardinal (Wait), Priority, ASem);
- end;
- function DosWriteQueue (Handle: THandle; Request, DataLen: cardinal;
- var DataBuf; Priority: cardinal): cardinal; cdecl;
- external 'QUECALLS' index 14;
- function DosError (Error: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 212;
- procedure DosErrClass(Code:longint;var _Class,Action,Locus:longint); cdecl;
- external 'DOSCALLS' index 211;
- procedure DosErrClass (Code: cardinal; var _Class, Action, Locus: cardinal);
- cdecl;
- external 'DOSCALLS' index 211;
- function DosTrueGetMessage (MsgSeg: pointer; Table: PInsertTable;
- TableSize: cardinal; Buf: PChar;
- BufSize, MsgNumber: cardinal; FileName: PChar;
- var MsgSize: cardinal): cardinal; cdecl;
- external 'MSG' index 6;
- function DosIQueryMessageCP (var Buf; BufSize: cardinal; FileName: PChar;
- var InfoSize: cardinal; MesSeg: pointer): cardinal; cdecl;
- external 'MSG' index 8;
- procedure MagicHeaderEnd; assembler; forward;
- {$ASMMODE INTEL}
- {start of _MSGSEG32 segment}
- procedure MagicHeaderStart; assembler;
- asm
- db $0FF
- db $4D,$53,$47,$53,$45,$47,$33,$32, 0 //'MSGSEG32'
- dd $8001
- dd MAGICHEADEREND
- end;
- function DosGetMessage (Table: PInsertTable; TableSize: cardinal; Buf: PChar;
- BufSize, MsgNumber: cardinal; FileName: PChar;
- var MsgSize: cardinal): cardinal; cdecl; assembler;
- nostackframe;
- asm
- pop eax
- push offset MagicHeaderStart
- push eax
- jmp DosTrueGetMessage
- end;
- function DosGetMessage (Table: PInsertTable; TableSize:longint;Buf:PChar;
- BufSize,MsgNumber:longint;FileName:PChar;
- var MsgSize:longint):cardinal;
- begin
- DosGetMessage := DosGetMessage (Table, cardinal (TableSize), Buf,
- cardinal (BufSize), cardinal (MsgNumber), FileName, cardinal (MsgSize));
- end;
- function DosQueryMessageCP (var Buf; BufSize: cardinal; FileName: PChar;
- var InfoSize: cardinal): cardinal;
- begin
- DosQueryMessageCP := DosIQueryMessageCP(Buf, BufSize, FileName, InfoSize,
- @MagicHeaderStart);
- end;
- function DosQueryMessageCP(var Buf;BufSize:longint;FileName:PChar;
- var InfoSize:longint):cardinal;
- begin
- DosQueryMessageCP := DosIQueryMessageCP(Buf, cardinal (BufSize), FileName,
- cardinal (InfoSize), @MagicHeaderStart);
- end;
- procedure MagicHeaderEnd; assembler;
- asm
- dd $0FFFF0000
- end;
- {$ASMMODE DEFAULT}
- (*function DosGetMessage(const Table:array of PString;var Buf:openstring;
- MsgNumber:longint;const FileName:string):cardinal;
- {Hmm. This takes too much stackspace. Let's use the
- heap instead.}
- type TTableBuffer=record
- IT:TinsertTable;
- Strings:TByteArray;
- end;
- PTableBuffer=^TTableBuffer;
- var Buffer:PTableBuffer;
- I,S:word;
- BufPtr:pointer;
- T1,T2:array[0..255] of char;
- begin
- {Check if there are more than nine items in the table.}
- if High(Table)>8 then
- DosGetMessage:=87
- else
- begin
- {Step 1: Calculate the space we need on the heap.}
- S:=SizeOf(TInsertTable);
- for I:=Low(Table) to High(Table) do
- S:=S+Length(Table[I])+1;
- {Step 2: Allocate the buffer.}
- GetMem(Buffer,S);
- {Step 3: Fill the buffer.}
- BufPtr:=@(S^.Strings);
- for I:=Low(Table) to High(Table) do
- begin
- S^.IT[I+1]:=bufptr;
- StrPCopy(BufPtr,Table[I]);
- Inc(longint(BufPtr),Length(Table[I])+1);
- end;
- {Step 4: Convert the filename.}
- StrPCopy(@T2,FileName);
- {Step 5: Get the message.}
- DosGetMessage:=DosGetMessage(@(S^.IT),High(Table)+1,@T1,
- High(Buf),MsgNumber,@T2,I);
- {Step 6: Convert the returned message.}
- Buf[0]:=Char(I);
- Move(T1,Buf[1],I);
- {Step 7: Free the memory.}
- FreeMem(Buffer,S);
- end;
- end;*)
- {function DosGetMessage(const Table:array of PString;Buf:PChar;
- BufSize,MsgNumber:longint;const FileName:string;
- MsgSize:longint):cardinal;}
- function DosQueryMessageCP(var Buf;BufSize:longint;const FileName:string;
- var InfoSize:longint):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosQueryMessageCP:=DosQueryMessageCP(Buf,BufSize,@T,InfoSize);
- end;
- function DosQueryMessageCP (var Buf; BufSize: cardinal; const FileName: string;
- var InfoSize: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,FileName);
- DosQueryMessageCP:=DosQueryMessageCP(Buf,BufSize,@T,InfoSize);
- end;
- function DosInsertMessage(Table:PInsertTable;TableSize:longint;
- Message:PChar;SrcMessageSize:longint;
- Buf:PChar;BufSize:longint;
- var DstMessageSize:longint):cardinal; cdecl;
- external 'MSG' index 4;
- function DosInsertMessage (Table: PInsertTable; TableSize: cardinal;
- Message: PChar; SrcMessageSize: cardinal;
- Buf: PChar; BufSize: cardinal;
- var DstMessageSize: cardinal): cardinal; cdecl;
- external 'MSG' index 4;
- {function DosInsertMessage(Table:array of PString;
- const Message:string;
- var Buf:openstring):cardinal;
- function DosInsertMessage(Table:array of PString;
- Message:PChar;SrcMessageSize:longint;
- Buf:PChar;BufSize:longint;
- var DstMessageSize:longint):cardinal;}
- function DosPutMessage (Handle: THandle; Size: cardinal; Buf: PChar): cardinal;
- cdecl;
- external 'MSG' index 5;
- function DosPutMessage (Handle: THandle; const Buf: string): cardinal;
- begin
- DosPutMessage:=DosPutMessage(Handle,Length(Buf),@Buf[1]);
- end;
- function DosStartSession (var AStartData:TStartData;
- var SesID,PID:longint):cardinal; cdecl;
- external 'SESMGR' index 37;
- function DosStartSession (var AStartData: TStartData;
- var SesID, PID: cardinal): cardinal; cdecl;
- external 'SESMGR' index 37;
- function DosSetSession (SesID: cardinal; var AStatus: TStatusData): cardinal;
- cdecl;
- external 'SESMGR' index 39;
- function DosSelectSession (SesID: cardinal): cardinal; cdecl;
- external 'SESMGR' index 38;
- function DosStopSession (Scope, SesID: cardinal): cardinal; cdecl;
- external 'SESMGR' index 40;
- function DosCreatePipe (var ReadHandle, WriteHandle: THandle;
- Size: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 239;
- function DosCreateNPipe (Name: PChar; var Handle: THandle; OpenMode, PipeMode,
- OutBufSize, InBufSize, MSec: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 243;
- function DosCreateNPipe (const Name: string; var Handle: THandle; OpenMode,
- PipeMode, OutBufSize, InBufSize, MSec: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosCreateNPipe:=DosCreateNPipe(@T,Handle,OpenMode,PipeMode,OutBufSize,
- InBufSize,MSec);
- end;
- function DosCallNPipe(Name:PChar;var Input;InputSize:longint;
- var Output;OutputSize:longint;var ReadBytes:longint;
- MSec:longint):cardinal; cdecl;
- external 'DOSCALLS' index 240;
- function DosCallNPipe (Name: PChar; var Input; InputSize: cardinal;
- var Output; OutputSize: cardinal;
- var ReadBytes: cardinal; MSec: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 240;
- function DosCallNPipe(const Name:string;var Input;InputSize:longint;
- var Output;OutputSize:longint;var ReadBytes:longint;
- MSec:longint):cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosCallNPipe:=DosCallNPipe(@T,Input,InputSize,Output,OutputSize,
- ReadBytes,MSec);
- end;
- function DosCallNPipe (const Name: string; var Input; InputSize: cardinal;
- var Output; OutputSize: cardinal;
- var ReadBytes: cardinal; MSec: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosCallNPipe:=DosCallNPipe(@T,Input,InputSize,Output,OutputSize,
- ReadBytes,MSec);
- end;
- function DosConnectNPipe (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 241;
- function DosDisconnectNPipe (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 242;
- function DosPeekNPipe(Handle:longint;var Buffer;BufSize:longint;
- var ReadBytes:longint;var Avail:TAvailData;
- var State:longint):cardinal; cdecl;
- external 'DOSCALLS' index 244;
- function DosPeekNPipe (Handle: THandle; var Buffer; BufSize: cardinal;
- var ReadBytes: cardinal; var Avail: TAvailData;
- var State: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 244;
- function DosQueryNPHState(Handle:longint;var State:longint):cardinal; cdecl;
- external 'DOSCALLS' index 245;
- function DosQueryNPHState (Handle: THandle; var State: cardinal): cardinal;
- cdecl;
- external 'DOSCALLS' index 245;
- function DosQueryNPipeInfo (Handle: THandle; InfoLevel: cardinal; var Buffer;
- BufSize: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 248;
- function DosQueryNPipeSemState (SemHandle: THandle; var SemArray;
- BufSize: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 249;
- function DosQueryNPipeSemState (SemHandle: THandle; SemArray: PPipeSemState;
- BufSize: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 249;
- function DosSetNPHState (Handle: THandle; State: cardinal):cardinal; cdecl;
- external 'DOSCALLS' index 250;
- function DosSetNPipeSem(PipeHandle,SemHandle: THandle; Key: cardinal):
- cardinal; cdecl;
- external 'DOSCALLS' index 251;
- function DosTransactNPipe(Handle:longint;var OutBuf;OutSize:longint;
- var InBuf;InSize:longint;
- var ReadBytes:longint):cardinal; cdecl;
- external 'DOSCALLS' index 252;
- function DosTransactNPipe (Handle: THandle; var OutBuf; OutSize: cardinal;
- var InBuf; InSize: cardinal;
- var ReadBytes: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 252;
- function DosWaitNPipe (Name: PChar; MSec: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 253;
- function DosWaitNPipe (const Name: string; MSec: cardinal): cardinal;
- var T:array[0..255] of char;
- begin
- StrPCopy(@T,Name);
- DosWaitNPipe:=DosWaitNPipe(@T,MSec);
- end;
- function DosOpenVDD (Name: PChar; var Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 308;
- function DosRequestVDD (Handle: THandle; SGroup, Cmd: cardinal;
- InSize: cardinal; var InBuffer;
- OutSize: cardinal; var OutBuffer): cardinal; cdecl;
- external 'DOSCALLS' index 309;
- function DosCloseVDD (Handle: THandle): cardinal; cdecl;
- external 'DOSCALLS' index 310;
- procedure DosSelToFlat; cdecl;
- external 'DOSCALLS' index 426;
- procedure DosFlatToSel; cdecl;
- external 'DOSCALLS' index 425;
- {$ASMMODE INTEL}
- function SelToFlat (AFarPtr: cardinal): pointer; assembler;
- asm
- push ebx
- push esi
- push edi
- {$IFNDEF REGCALL}
- mov eax, AFarPtr
- {$ENDIF REGCALL}
- call DosSelToFlat
- pop edi
- pop esi
- pop ebx
- end;
- function SelToFlat (AFarPtr: TFarPtr): pointer; assembler;
- asm
- push ebx
- push esi
- push edi
- mov eax, AFarPtr
- call DosSelToFlat
- pop edi
- pop esi
- pop ebx
- end;
- function FlatToSel (APtr: pointer): cardinal; assembler;
- asm
- push ebx
- push esi
- push edi
- {$IFNDEF REGCALL}
- mov eax, APtr
- {$ENDIF REGCALL}
- call DosFlatToSel
- pop edi
- pop esi
- pop ebx
- end;
- function DosAllocThreadLocalMemory (Count: cardinal; var P: pointer): cardinal;
- cdecl;
- external 'DOSCALLS' index 454;
- function DosFreeThreadLocalMemory (P: pointer): cardinal; cdecl;
- external 'DOSCALLS' index 455;
- function DosQueryRASInfo (Index: cardinal; var PBuffer: pointer): cardinal;
- cdecl; external 'DOSCALLS' index 112;
- function LogOpen (var Handle: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 430;
- function LogClose (Handle: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 431;
- function LogAddEntries (Handle: cardinal; Service: cardinal;
- LogEntries: PLogEntryRec): cardinal; cdecl; external 'DOSCALLS' index 432;
- function LogAddEntries (Handle: cardinal; Service: cardinal;
- var LogEntries: TLogEntryRec): cardinal; cdecl; external 'DOSCALLS' index 432;
- function DosQueryMemState (PMem: pointer; var Size: cardinal;
- var State: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 307;
- (* Todo:
- function DosRawReadNPipe (HPIPE hPipe,
- PVOID pBuffer,
- ULONG cbRead,
- PULONG pcbActual); cdecl;
- external 'DOSCALLS' index 246; - no documentation???
- function DosRawWriteNPipe (HPIPE hPipe,
- PVOID pBuffer,
- ULONG cbWrite,
- PULONG pcbActual); cdecl;
- external 'DOSCALLS' index 247; - no documentation???
- function DosSetCP ...; cdecl;
- external 'DOSCALLS' index 288; - no documentation???
- function DosDynamicTrace ...; cdecl;
- external 'DOSCALLS' index 316; - no documentation???
- function DosRegisterPerfCtrs (PBYTE pbDataBlk,
- PBYTE pbTextBlk,
- ULONG flFlags); cdecl;
- external 'DOSCALLS' index 367; - no documentation???
- function DosQueryDOSProperty (SGID sgid,
- PSZ pszName,
- ULONG cb,
- PSZ pch); cdecl;
- external 'DOSCALLS' index 373; - no documentation???
- function DosSetDOSProperty (SGID sgid,
- PSZ pszName,
- ULONG cb,
- PSZ pch); cdecl;
- external 'DOSCALLS' index 374; - no documentation???
- function DosProfile ...; cdecl;
- external 'DOSCALLS' index 377; - no documentation???
- *)
- function DosReplaceModule (OldModule, NewModule, BackupModule: PChar):
- cardinal; cdecl;
- external 'DOSCALLS' index 417;
- (*
- ??? function DosTIB ...; cdecl;
- external 'DOSCALLS' index 419;
- ??? function DosOpenChangeNotify ...; cdecl;
- external 'DOSCALLS' index 440;
- ??? function DosResetChangeNotify ...; cdecl;
- external 'DOSCALLS' index 441;
- ??? function DosCloseChangeNotify ...; cdecl;
- external 'DOSCALLS' index 442;
- ??? function DosInitializePorthole ...; cdecl;
- external 'DOSCALLS' index 580;
- ??? function DosQueryHeaderInfo ...; cdecl;
- external 'DOSCALLS' index 582;
- DosCreateThread2 2.45
- DosDumpProcess 2.10
- DosForceSystemDump - ???
- ??? function DosQueryPageUsage (...): cardinal; cdecl;
- external 'DOSCALLS' index 358;
- DosPerfSystemCall 2.40
- functionDosGetProcessorStatus (...): cardinal; cdecl;
- external 'DOSCALLS' index 447;
- DosSetProcessorStatus = DOSCALLS.448
- type
- TSpinLock = cardinal;
- HSpinLock = TSpinLock;
- PSpinLock = ^TSpinLock;
- PHSpinLock = PSpinLock;
- function DosCreateSpinLock (var SpinLock: TSpinLock): cardinal; cdecl;
- procedure DosAcquireSpinLock (SpinLock: TSpinLock); cdecl;
- procedure DosReleaseSpinLock (SpinLock: TSpinLock); cdecl;
- function DosFreeSpinLock (SpinLock: TSpinLock): cardinal; cdecl;
- DosCreateSpinLock = DOSCALLS.449
- DosAcquireSpinLock = DOSCALLS.450
- DosReleaseSpinLock = DOSCALLS.451
- DosFreeSpinLock = DOSCALLS.452
- DosListIO 2.45
- DosListIOL 2.45
- DosQueryABIOSSuport 2.10
- ___ functionDos16QueryModFromCS (...): ...
- external 'DOSCALLS' index 359;
- DosQueryModFromEIP 2.10
- *)
- function DosQuerySysState (EntityList, EntityLevel, PID, TID: cardinal;
- var Buffer; BufLen: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 368;
- function DosQuerySysState (EntityList, EntityLevel, PID, TID: cardinal;
- PDataBuf: pointer; cbBuf: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 368;
- function DosAliasMem (pMem: pointer; Size: cardinal; var Alias: pointer;
- Flags: cardinal): cardinal; cdecl;
- external 'DOSCALLS' index 298;
- (*
- DosQueryThreadAffinity
- DosSetThreadAffinity
- Dos16SysTrace
- DosVerifyPidTid 2.30
- *)
- end.
|