1 REM Ins{nd av Kristoffer Eriksson SYSOP <5357> 1987-01-05 00.56.39 (DUMP) ; Fil: ENDREL(6).ASM ; Av: Kristoffer Eriksson, "SKE", 1984 ; ;-Ver--/-Datum----/-Sign-/-Kommentar----------------------------- ; 1.1 / 84-09-28 / SKE / ; 1.2 / 84-10-24 / SKE / Filnamn f|r CHAIN h{mtas vid 63747 (dosbuf 4). ; 1.25 / 84-11-21 / SKE / (?) ; 1.3 / 85-03-12 / SKE / Patchbart filnamn "HARDFILE", Flytta 63747 lite. ; 1.4 / 85-03-12 / SKE / HARDFILE utbytt mot ST[LLPAR:s PARM:-metod. ; 1.5 / 86-05-23 / SKE / Filnamn i dosbuf0, ej 4. F|r CLINEPAR. ; 1.6 / 86-12-12 / SKE / Filnamn kvar i input-buf, refereras med pekare. ; ; ; Inneh}ller kontroll av filnamn utpekat av CHAINFILE, och CHAIN. ; Filnamnet kan ocks} st{llas in med ST[LLPAR, vilket i s} fall anv{nds ; i andra hand. ; ; CHAINFILE {r adressen f|r en pekare till ett filnamn, en l{ngdangivelse, ; och ett kontrolltal, vilka initieras i ENDINIT.ASM ver 1.1. Denna pekar ; vanligtvis p} den del av input-bufferten ((Y.CMDSP)-160) d{r den avslutande ; CHAIN-filen finns angiven bland kommandoradsparametrarna. ; ; VARNING: F|rst|r inte inneh}llet i bufferten, och g|r inget som f}r andra ; rutiner att tro att det utrymmet {r ledigt (som att {ndra Y.CMDSP), utan ; att flytta pekaren och dess text f|rst. ; ; Det filnamn som utpekas kan {ven f|ljas av ytterligare parametrar f|r det ; programmet, om de f|reg}s av ett kommatecken, eftersom CHAIN (eller snarare ; OPNCMD) bara anv{nder texten fram till komma. ; ; Dessa parametrar kommer att fungera i det anropade programmet, eftersom ; BASIC-CHAIN alltid kopierar den utpekade filnamnsstr{ngen till aktuell ; (som den f}s av (Y.CMDSP)-160) input-buffert. Detta betyder ocks} att ; bufferten inte f}r flyttas s} att den b|rjar inne i filnamnsstr{ngen, f|r ; d} blir f|rst}s LDIR-kopieringen virrig. ; ; Eftersom CHAINFILE l{ggs p} en fast adress annan {n en dosbuffert numera, ; {r det fritt fram att anv{nda alla dosbuffertar vad ENDREL anbelangar. ; (Gl|m dock inte sj{lva relokeringsrutinen.) ; EXTERN CHAINFILE, CHAINCHECK Y.RND: = 65351 CHAINFILE: = Y.RND+1 ; Placeras i slutet av slumptalsbuffert. CHAINCHECK: = 165 ; CHAINFILE: DEFW Pointer to text ; +0 ; DEFB Lengt of text ; +2 ; DEFW Check-number ; +3 BEGIN: LD A,(CHAINFILE+3) ; Kolla korrekt initierat. CP CHAINCHECK JR NZ HARD LD HL,(CHAINFILE) ; Kolla pekarna till filnamnet ur LD A,H ; kommandoparametrarna. AND A JR Z HARD LD A,(CHAINFILE+2) AND A JR Z HARD CP 158 JR C RETUR HARD: LD A,(HARDFILE.LEN) ; Kolla inbyggt (patchbart) filnamn. LD HL,HARDFILE AND A JR NZ RETUR ; L{ngden 0 = inget inbyggt filnamn. NULCHAIN: LD HL,NULLFILE ; Sista alternativet: NUL. LD A,NULLFILE.LEN RETUR: POP DE ; Lyft upp returadressen fr}n stacken. PUSH HL ; Namnets adress LD C,A LD B,0 PUSH BC ; Namnets l{ngd PUSH DE RET ; Retur NULLFILE: DEFM "NUL:" NULLFILE.LEN: = * - NULLFILE DEFB 255 ; Signal f|r parameterst{llning. DEFM "PARM:Fil som chainas efter exekvering:" DEFB 0,0,0,16 ; Str{ngslut, Typ, Min l{ngd, Max l{ngd, HARDFILE.LEN: DEFB 0 ; L{ngd HARDFILE: DEFS 16+1,0 ; Utrymme f|r filnamnet. DEFB 255 DEFM "PARM:" DEFB 255 ; Inga fler parametrar i denna programfil. REL PUSH BEGIN REL CALL REL CHAIN REL PUSH NULLFILE ; CHAIN "NUL:" om den f|rra misslyckades REL PUSH 4 REL CHAIN