;
; =====================================
; InGrafik.TXT Bo Engborg 851231 20.58
; =====================================
;
PGMSTRT  ORG 63232
         JP BLOAD
         JP PRLOAD
;
ALLHEAPA LD A,D
         OR E
         RET Z                         ; Noll bytes
         LD (ANTAL),DE                 ; Spara f|r }terst{llande
         LD A,(ALLHEAP)
         CP 205
         JP Z,ALLHEAP                  ; Cs11273
         JP ALLHEAP-9                  ; Cs9913
;
NOHEAP   LD BC,(ANTAL)
         LD HL,(HEAP)
         AND A
         SBC HL,BC                     ; Minska
         LD (HEAP),HL
         RET
;
PRLOAD   CALL LOAD
         INC B
         CALL PLOAD1                   ; L{s in fil
         CALL NOHEAP
         RET
;
PLOAD1   PUSH BC                       ; Antal rader i B
         LD HL,(MBUFFW)
         LD A,(HL)
         CP 80
         LD A,14                       ; Kod stor text
         JR NZ,PLOAD1A
         LD A,20                       ; ]terst{ll stor text
PLOAD1A  LD (PRMOD),A                  ; Spara
         LD A,13
         LD BC,119
         CPIR
         PUSH HL
         PUSH IX
         LD HL,PRTXT
         LD A,1
         LD B,127
         CALL FIL\PPN                  ; Prep PR:
         POP IX
         POP HL
         POP BC                        ; HL-->Text som skall skrivas
         DEC B
;
PLOAD3   PUSH IX
         LD IX,FILBESK
PLOAD3A  PUSH BC
         LD (IX+15),1                  ; Radr{knare
         LD DE,TXTBUF1
         LD A,(PRMOD)
         LD (DE),A
         INC DE
         XOR A
         LD (PRMOD+1),A                ; Grafik off
PLOAD4   LD A,(HL)
         INC HL
         CP 13
         JP Z,PPRINT
         AND 127
         CP 8
         JR C,PLOAD4A
         CP 24
         JR C,PLOAD4B
         CP 32
         JR NC,PLOAD4C
PLOAD4D  LD A,32
         JR PLOAD4C
PLOAD4A  LD A,0
         LD (PRMOD+1),A                ; Grafik off
         LD A,32
         JR PLOAD4C
PLOAD4B  CP 17
         JR C,PLOAD4D
         LD A,1
         LD (PRMOD+1),A                ; Grafik on
         LD A,32
PLOAD4C  LD C,A
         LD A,(PRMOD+1)
         DEC A
         LD A,C
         JR NZ,PLOAD4E                 ; Ej grafmod
         CP 64
         JR NC,PLOAD4F
         SET 7,A
         JR PLOAD4E
PLOAD4F  CP 96
         JR C,PLOAD4E
         ADD A,96
;
PLOAD4E  LD (DE),A
         INC DE
         INC (IX+15)
         JR PLOAD4
;
PPRINT   LD (DE),A
         INC DE
         INC (IX+15)
         LD A,10
         LD (DE),A
         INC DE
         INC (IX+15)
         LD B,0
         LD C,(IX+15)
         PUSH HL
         LD HL,TXTBUF1
         LD DE,PRINTFIL
         CALL FILCONTR
         POP HL
         POP BC
         DJNZ PLOAD3A
         CALL GETFIL2                  ; Closefil
         POP IX
         RET
;
INSTR[NG LD B,69
         LD C,11110010B                ; E$
         CALL FIND
         RET NC                        ; Ej funnen?
         RST 16
         DEFB 128+21                   ; Hittar ej filen
;
;
BLOAD    CALL LOAD
         CALL BLOAD3
         CALL NOHEAP
         RET
;
LOAD     CALL INSTR[NG
         PUSH IX
         CALL GETFIL
         LD B,(IX+15)
         DEC B
         POP IX
         RET
;
BLOAD3   PUSH BC
         LD HL,(MBUFFW)
         LD A,(HL)                     ; Antal tecken
         CP 80
         LD C,3
         JR NZ,bload1a
         LD C,4
bload1a  IN A,(C)                      ; Byt radl{ngd
         CALL FORMFILL
         LD A,13
         LD BC,85
         CPIR                          ; R{kna f|rbi f|rsta raden ,Data
         POP BC                        ; Antal rader
         JR BLOAD1
;
BLOAD4   PUSH BC
         CALL CRLF
         POP BC
BLOAD1   PUSH BC
         PUSH HL
         LD BC,85
         LD A,13
         CPIR
         AND A
         LD HL,85
         SBC HL,BC
         PUSH HL
         POP BC
         POP HL
         CALL VIDEOW
         LDIR
         POP BC
         DJNZ BLOAD4
         RET
;
;
; =====================================
; OPEN,PREPARE,CLOSE
; HL-->filnamn avsluta med CR
; =====================================
;
;
GETFIL   XOR A
         LD B,127
         CALL FIL\PPN
         LD (MBUFFW),HL
         LD (BUFADR1),HL
;
GETFIL1  LD HL,(BUFADR1)
         LD BC,119
         PUSH HL
         LD DE,INPUTFIL
         CALL FILCONTR
         POP HL
         JR C,getfil1a
         LD BC,0
         LD A,13
         CPIR
         LD (BUFADR1),HL
         INC (IX+15)
         JR GETFIL1
getfil1a AND A
         JR Z,GETFIL2                  ; Slut p} filen
         POP IX
         LD (ERROR),A                  ; Felkod
         JP FELKOD                     ; Felkod i A (Basic)
;
GETFIL2  LD DE,CLOSEF1
         LD (IX+5),0
         CALL FILCONTR
         RET
;
;
;
FIL\PPN  LD IX,FILBESK                 ; HL-->filnamn+cr
         LD (IX+15),0                  ; R{knare antal rader
         LD (IX+2),B
         PUSH AF
         LD DE,OPENCMD
         CALL FILCONTR
         POP AF
         DEC A
         RET Z                         ; Kod f|r prepare ingen allokering
         LD HL,DOSBUF0+4               ; 245*256+5=storlek
         LD DE,0                       ; R{knare
FIL\PP1  LD A,(HL)
         INC HL
         INC A
         LD C,(HL)
         INC HL
         INC C
         ADD A,C
         JP Z,ALLHEAPA                 ; DE=antal sektorer
         LD A,C
         AND 31
         INC A
         ADD A,D
         LD D,A
         JR FIL\PP1
;
;
;
;
FILCONTR PUSH HL                       ; Rutinadress i DE
         LD HL,FELKOD
         EX (SP),HL
         LD (RUNSTACK),SP
         PUSH HL
         LD HL,feljmp
         PUSH AF
         XOR A
         LD (MIY14),A                  ; Run Mode
         LD (MIY14+1),A                  ; Notrace
         LD (MIY30),HL
         POP AF
         LD HL,filctr1
         EX (SP),HL
         PUSH DE
         RET
filctr1  POP HL
         RET                           ; Inga fel
feljmp   DEFB 4
         DEFB 0
         DEFB 1
         DEFB 145                      ; Basic-return
FELKOD   LD A,(MIY34)
         LD (ERROR),A
         LD SP,(RUNSTACK)
         RST 16                        ; Felrutin
ERROR    DEFB 128
;
;
FIND     LD HL,(VAROT)
         LD A,H
         OR L
         SCF
         RET Z                         ; Ingen variabellista finns
         PUSH IX
         LD IX,(VAROT)
FIND1    LD L,(IX+2)
         LD H,(IX+3)
         LD A,(IX+1)
         CP B
         JR NZ,FIND2
         LD A,(IX)
         CP C
         JR NZ,FIND2
         LD C,(IX+8)
         LD B,(IX+9)
         LD L,(IX+6)
         LD H,(IX+7)
         JR FOUND
FIND2    PUSH HL
         POP IX
         LD A,L
         OR H
         SCF
         JR Z,NOFOUND
         JR FIND1
FOUND    AND A
NOFOUND  POP IX
         RET
;
;
;
; =====================================
; VARIABLER I RAMAREA
; =====================================
;
;
VASTRT1  DEFB 255
BUFADR1  DEFS 2
FILBESK  DEFS 16                       ; Filbeskrivning
FILNR    DEFS 1
L[NGD    DEFW 0
ANTAL    DEFW 1                        ; Antal bytes i filen vid prep.
PRMOD    DEFW 0                        ; Prmod
MBUFFW   DEFS 2                        ; Adress till buffert
PRTXT    DEFM "PR:"
         DEFB 13
VAEND1   DEFB 255
;
; VARIABELEND
; =====================================
PGMEND   DEFB 255
;
;
; =====================================
; KONSTANTER :::::------>
; =====================================
;
; _____________________________________
TXTBUF1  EQU 65088                     ; Inmatningsbuffert
WRILIN   EQU 11                        ; Writeline
DOSBUF0  EQU 62720                     ; Dosbuf noll (245:
ALLHEAP  EQU 13172                     ; Allokera antal bytes i DE p} HEAP
CLOSEF1  EQU 2192
OPENCMD  EQU 62                        ; HL-->filnamn
                                       ; Fixa IX-reg 3 f|rsta bytes
CRLF     EQU 1858                      ; CrLf
VIDEOW   EQU 659                       ; Bildadress enl 65011,12
RADBRED  EQU 590                       ; 40/80 tkn
MIY14    EQU 65060                     ; IY+14
MIY30    EQU 65076
MIY34    EQU 65080
RUNSTACK EQU 65078
HEAP     EQU 65056                     ; Ledigt f|r tolken vid exekverbasic
VAROT    EQU 65065                     ; Variabelrot
TXTBUF3  EQU 65208                     ; Radcompilebuffert
FORMFILL EQU 630                       ; CHR$(12)
INPUTFIL EQU 2195                      ; Input BC=antal tecken,HL->>txtarea
PRINTFIL EQU 2198                      ; HL-->txt,BC=antal
BKONST21 EQU 32722                     ; Felmeddelande start
KONST1   EQU 37+128
KONST2   EQU 35+128
;
; =====================================
; KONSTANTER END
; =====================================
; ---->>>>>>
;
         END
