|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 5888 (0x1700) Types: TextFile Names: »TEGN007.PAS«
└─⟦29e35ddf2⟧ Bits:30003931/CCPM_Tegn.imd Disketter indleveret af Steffen Jensen (Piccolo/Piccoline) └─⟦this⟧ »TEGN007.PAS«
(* Procedures for initialization and use of the TELEDATA characterset *) TYPE NAME = STRINGÆ20Å; DWSTR = STRINGÆ2Å; DHSTR = STRINGÆ9Å; DWARRAY = ARRAYÆ0..127Å OF DWSTR; DHARRAY = ARRAYÆ0..127Å OF DHSTR; FUNCTION init_double_char(file_name: NAME; VAR dwa: DWARRAY; VAR dha: DHARRAY): INTEGER; (* The function reads a TELEDATA character-file, and initializes the alternative charactersets *) TYPE FONTTYPE = ARRAYÆ0..14Å OF INTEGER; VAR tdchar_file : FILE; font : FONTTYPE; i, n, index : INTEGER; result : INTEGER; buffer : ARRAYÆ1..64Å OF INTEGER; FUNCTION read_word: INTEGER; VAR c_count: INTEGER; BEGIN (* get next word from teledata char-file *) IF index = 64 THEN BEGIN (* buffer empty *) blockread(tdchar_file, buffer, 1, c_count); index := 1; END ELSE index := index + 1; read_word := bufferÆindexÅ; END; (*read_word *) FUNCTION rch: CHAR; BEGIN rch := CHAR(read_word - 256); END; PROCEDURE define_alt_font(font: FONTTYPE); CONST xios = $28; define_font = 52 ; VAR reg: RECORD ax,bx,cx,dx,bp,si,di,ds,es,flags: INTEGER; END; i, mask, ones : INTEGER; BEGIN reg.ax := define_font; (* xios function no *) reg.cx := 512 + fontÆ0Å; reg.dx := ofs(fontÆ1Å); reg.ds := seg(fontÆ1Å); swint(xios, reg); (* call xios extra function: define_font *) END; (* define_alt_font *) BEGIN (* Body of "init_double_char" *) (*$I-*) assign(tdchar_file, file_name); reset(tdchar_file); result := iores; IF result = 0 THEN BEGIN blockread(tdchar_file, buffer, 1, i); (* dummy block *) index := 64; (* force blockread in first read_word *) FOR i := 0 TO 31 DO BEGIN dwaÆiÅ := ' '; dhaÆiÅ := @27'A '@10@8@8' '; END; dwaÆ10Å := @10 ; dwaÆ13Å := @13; dwaÆ8Å := @8@8; dhaÆ10Å := @10@10; dhaÆ13Å := @13; dhaÆ8Å := @8@8; FOR i := 32 TO 127 DO BEGIN dwaÆiÅ := CHAR(i) + CHAR(i+128); dhaÆiÅ := @27'A' + rch + rch + @8@8@10 + rch + rch; END; fontÆ0Å := read_word; REPEAT FOR i := 1 TO 14 DO fontÆiÅ := read_word; define_alt_font(font); fontÆ0Å := read_word; UNTIL (fontÆ0Å = 0) OR (iores <> 0); close(tdchar_file); END; init_double_char := result; (*$I+*) END; (* init_double_char *) (* Programmet skriver en tekst med en given størrelse et givent sted *) (* på skærmen *) (* N.C.Andersen Frit efter Jørgen Sachariasen RC Århus *) (* programmet skal kaldes med mindst 7 parametre *) (* 1:xkoordinat 2:ykoordinat 3:forgrundsfarve 4:baggrundsfarve*) (* 5:størrelse 6:blink (1=ja 0=nej) 7: Mindst et ord tekst *) (* i hovedprogrammet skal includes tdchr*) TYPE STR255 = STRINGÆ255Å; STR80 = STRINGÆ80Å; VAR result : INTEGER; antal,max : INTEGER; file_name : NAME; line : STRINGÆ255Å; double_width : DWARRAY; double_size : DHARRAY; stor : INTEGER; ffarve,bfarve: CHAR; blink,test : INTEGER; FUNCTION monitor22khz: BOOLEAN; VAR regs: RECORD ax,bx,cx,dx,bp,si,di,ds,es,flags: INTEGER; END; nvm : ^BYTE; BEGIN regs.cx := 109; regs.dx := 4; swint(224,regs); (* set console rawout *) regs.ax := 4; swint($28, regs); nvm := PTR(regs.es, regs.si + 18); monitor22khz := nvm^ >= 2; END; PROCEDURE writeblk(s: STR255); VAR regs: RECORD ax,bx,cx,dx,bp,si,di,ds,es,flags: INTEGER; END; s_blk:RECORD ssoff,sseg,ssize: INTEGER; END; BEGIN WITH s_blk DO BEGIN ssoff := OFS(sÆ1Å); sseg := SEG(sÆ1Å); ssize := LEN(s); regs.cx := 111; (* c_writeblk *) regs.dx := OFS(s_blk); regs.ds := SEG(s_blk); swint(224, regs); END; END; procedure init; begin REPEAT IF monitor22khz THEN file_name := 'tdchr22.def' ELSE file_name := 'tdchr15.def'; result := init_double_char(file_name, double_width, double_size); IF result <> 0 THEN writeln(@7@27'Q'@27'h', (*vælg standard tegnsæt+stop understregning*) 'Fejl nr. ',result , ' under indlæsning fra TELEDATA tegnsættet: ', file_name) UNTIL result = 0; end; procedure skriv(x,y:integer;ffarve,bfarve:char;stor,blink:integer;x7:str80); BEGIN streng:=''; for i:=1 to len(x7) do streng:=streng+x7(.i.)+' '; (*$I-*) n := 0; GOTOXY(X,Y); WRITE (@27'b',ffarve,@27'c',bfarve); if (blink=1) THEN write (@27's'); CASE stor OF 0: BEGIN write(@27'Q'@27'h'); n := 0; END; 1: BEGIN write(@27'P'@27'h'); n := 1; END; 2: BEGIN write(@27'P'@27'g'@27@246); n := 2; END; END; max:=len(streng); antal:=0; repeat begin; antal:=antal+1; ch:=copy(streng,antal,1); CASE stor OF 0: writeblk(ch); 1: writeblk(double_widthÆORD(ch)Å); 2: writeblk(double_size ÆORD(ch)Å); END; end; until antal=max; write(@27'Q'@27'h'@27'b6'@27'c0'); END; (*procedure skriv*) (* Ud over ovenstående 2 programmer skal filerne tdchr22.def og tdchr15.def være på disketten *) (*Herefter kan proceduren skriv kaldes med 7 parametre: 1: x-koordinat for overskriftens start 2: y-koordinat for overskriftens start 3: tekstens forgrundsfarve 4: tekstens baggrundsfarve 5: tekstens størrelse (0-2) 6: blink (1) ingen blink (0) 7: teksten *) «eof»