DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦abb990b52⟧ TextFile

    Length: 17408 (0x4400)
    Types: TextFile
    Names: »TELEFON.PAS«

Derivation

└─⟦6032ef8bc⟧ Bits:30003298 Turbo Pascal 3.01A og diverse programmer til RC700
    └─ ⟦this⟧ »TELEFON.PAS« 

TextFile


PROGRAM TELEFON;  (*$A+,R-,C-*)
(* Rc702,703 piccolo *)
CONST
  version = 'Telefon-register,Main v.87.11.09 (C) JFP.';
  max = 255;   (* 255 Fil-poster,  (252 DATA-Poster). *)
  px = 32; ypos = 11;  (* Cur. XYpos, v.inddata, svar *)
  offset = 2; (* Fil-offset=2, post1 i UDSKRIFT= DataPost.3 *)
  level  = 4; (* 1..9,  Level= Max.  File-No uden Password. *)
  maxpas = 4; (* Password-Lengde, max 12 tegn. (Fil-acces). *)
  maxpen = 3; (* Password-Lengde, max 12 tegn. (Skrivning). *) 
  
TYPE
  str3  = STRING Æ3Å;                                             
  str12 = STRING Æ12Å;                                            
  str16 = STRING Æ16Å;                                               
  str21 = STRING Æ21Å;                                             
  str24 = STRING Æ24Å;                                            
  str26 = STRING Æ26Å;                                               
  filpost = RECORD                                                   
    flag,frik: CHAR;                                              
    grup: CHAR; (* Gruppe-Kode 0..9 *)                             
    telf,idnt: str12;  byno: str21;                                  
    navn,addr: str24;  stil: str26;                                        
  END;
                                                                
VAR
  prn: TEXT;
  modul,ch,svar,p_num,disp,UP,olpok:  CHAR;                
  nr: CHAR;  (* Index-Nr ved udskrift *)            
  pass,password: STRING ÆmaxpasÅ;              
  penn,pennword: STRING ÆmaxpenÅ;         
  listdev,udlist,filnavn,intxt,lede: str16;
  grup_kode: ARRAY Æ0..9Å OF str21;            
  files:     ARRAY Æ1..9Å OF str12;              
  txt,sbuf,fyld,txtcopy,sp:  str26;                        
  ok,indset,cont,clr,clear,fundet,dato_ok,nohead:  BOOLEAN;
  olp,lp_on,started,modul2,modul3,pass_ok,oprette: BOOLEAN;
  term, dato,fil_dato: str12;                             
  no,post: INTEGER;  (* Fil-pointere, nix pille! *)
  nul,startpost,nummer,line,tal,i,j,n: INTEGER;
  form,komp,norm,lintop,linfed: INTEGER;
  inryk,nlqon,nlqoff,labfed:  INTEGER; (* label-setup *)
  sp1,sp2,sp3: INTEGER; (* Special Print-Comm. *)
  setolp,setlab: str21;
  py,gempy,plx,skrift,nyside,side,filnum: BYTE;
  cmd_str: str12 AT $0080;
  fv: FILE OF filpost;
  fpo: filpost;
                                                          
PROCEDURE write_olp_string; 
VAR                                                 
 k: CHAR;                                               
 c1,c2,c3,c4,c5: str3;                                
BEGIN                                            
  STR(form,c1); STR(komp,c2); STR(norm,c3);
  k:=',';  STR(lintop,c4); STR(linfed,c5);
  setolp:=c1+k+c2+k+c3+k+c4+k+c5+'.';
  STR(inryk,c1);  STR(nlqon,c2);
  STR(nlqoff,c3); STR(labfed,c4);
  setlab:=c1+k+c2+k+c3+k+c4+'.';
END;                          

PROCEDURE opstart;
BEGIN
  UP:=CHR(26); (* Rc700-Cursor UP *)
  form:=12; komp:=15;  norm:=18;  lintop:=60; linfed:=12;
  inryk:=3; nlqon:=69; nlqoff:=70; labfed:=2; (* LP-Setup *)
  FOR i:=0 TO 8 DO grup_kodeÆiÅ:='-ikke oprettet- ';
  grup_kodeÆ9Å:='Diverse.'; nul:=3158; ch:=' ';
  fpo.frik:='F'; (* Reserved Future use *)
  fyld:='                          '; (* 26 spacer *)
  started:=FALSE;  clr:=FALSE;  clear:=FALSE;
  pass_ok:=FALSE;  olp:=FALSE;   cont:=FALSE;
  dato_ok:=TRUE; dato:='o'; fil_dato:='dato';
  skrift:=1; nul:=5+nul+nul; nr:='#';  no:=0;
  listdev:=' ';   lede:=' ';   udlist:=' /1';
  filnavn:=' *';  filnum:=0;      modul:='5';
  sp1:=0; sp2:=67; sp3:=36;  (* Print-Comm.*)
  modul2:=FALSE; modul3:=FALSE; (* G-Koder *)
  ASSIGN(prn,'CON:');   REWRITE(prn);
  filesÆ1Å:='NAVNEREG'; filesÆ2Å:='FIRMAREG';
  filesÆ3Å:='DATABASE'; filesÆ4Å:='FORENING';
  filesÆ5Å:='ARKIVREG'; filesÆ6Å:='SKOLEREG';
  filesÆ7Å:='KUNDEREG'; filesÆ8Å:='BUISNESS';
  filesÆ9Å:='UDLANDET';                      
  write_olp_string;                  
END;                           
                                              
PROCEDURE cleol;                                               
BEGIN
  CASE disp of
  '1': WRITE(CLREOL); (* Rc700 *)
  '2': BEGIN                             
         WRITE(CHR(27)); WRITE(CHR(84)); (* McTerm *)
       END;                                
  '3': WRITE(CHR(30)); (* Rc822 *)
  END;                        
END;                          
                                             
PROCEDURE cursor(dx,dy: INTEGER);
VAR  w,xof: INTEGER;
BEGIN
  CASE disp OF
  '1': GOTOXY(dx,dy);  (* Rc700 *)                       
  '2': BEGIN
         WRITE(CHR(27),CHR(61)); (* ESC=Y,X   YX-Adr for *)
         WRITE(CHR(dy+32)); WRITE(CHR(dx+32)); (* McTerm *)
       END;
  '3': BEGIN
         xof:=32; (* for dx in 32..63 *)
         IF dx<32 THEN xof:=96;
         IF dx>63 THEN xof:=(-32);
         WRITE(@6); (* XY-Adr, Rc822 *)
         WRITE(CHR(dx+xof)); WRITE(CHR(dy+96));
         FOR w:=1 TO 100 DO (* wait 3 msec *);
      END;                                  
  END;                               
END;                             

PROCEDURE getcmd;                                              
BEGIN                                                             
  disp:='1'; (* Rc700 *)                                           
  i:=1;  term:='';                                           
  j:=LEN(cmd_str);                                               
  IF j>1 THEN                                                       
  BEGIN                                                           
    WHILE cmd_strÆiÅ=' ' DO i:=i+1;                             
    term:=COPY(cmd_str,i,j+1-i);                            
    IF POS(term,'RC700')>0  THEN disp:='1';
    IF POS(term,'MCTERM')>0 THEN disp:='2';
    IF POS(term,'RC822')>0  THEN disp:='3';
    CASE disp OF
      '1':  term:='Rc700';   (* 'Home', 0,0: x,y=     0,0 *)
      '2':  term:='McTerm';  (* 'Home', 0,0: y,x(!)= 32,32 *)
      '3':  term:='Rc822';   (* 'Home', 0,0: x,y=    96,96 *)
    END;                                                    
  END;                                                       
  (* Rc822 x0=96 x31=127 x32=64 x63=94 x64=32 x79=47 y0=96 y23=119 *)
END;

PROCEDURE make_olp_setup;                   
VAR  k: CHAR;  c1: str3;  x,y: INTEGER;
BEGIN
  x:=1; y:=1;                                             
  WHILE setolpÆyÅ>='0' DO y:=y+1;  c1:=COPY(setolp,x,y-x);
  VAL(c1,form,n); y:=y+1; x:=y;                           
  WHILE setolpÆyÅ>='0' DO y:=y+1;  c1:=COPY(setolp,x,y-x);
  VAL(c1,komp,n); y:=y+1; x:=y;                           
  WHILE setolpÆyÅ>='0' DO y:=y+1;  c1:=COPY(setolp,x,y-x);
  VAL(c1,norm,n); y:=y+1; x:=y;                           
  WHILE setolpÆyÅ>='0' DO y:=y+1;  c1:=COPY(setolp,x,y-x);
  VAL(c1,lintop,n); y:=y+1; x:=y;                         
  WHILE setolpÆyÅ>='0' DO y:=y+1;  c1:=COPY(setolp,x,y-x);
  VAL(c1,linfed,n);                                         
  x:=1;  y:=1;                                            
  WHILE setlabÆyÅ>='0' DO y:=y+1;  c1:=COPY(setlab,x,y-x);
  VAL(c1,inryk,n); y:=y+1; x:=y;                          
  WHILE setlabÆyÅ>='0' DO y:=y+1;  c1:=COPY(setlab,x,y-x);
  VAL(c1,nlqon,n); y:=y+1; x:=y;                          
  WHILE setlabÆyÅ>='0' DO y:=y+1;  c1:=COPY(setlab,x,y-x);
  VAL(c1,nlqoff,n); y:=y+1; x:=y;                         
  WHILE setlabÆyÅ>='0' DO y:=y+1;  c1:=COPY(setlab,x,y-x);
  VAL(c1,labfed,n);                                        
END;

PROCEDURE menu;
BEGIN
  WRITE(CLRHOM,no-1);
  cursor(68,0); WRITELN(fil_dato);
  cursor(12,1);
  IF modul='5' THEN WRITELN(version,'  <',term,'>');
  cursor(25,3);
  WRITELN('Arkiv',filnum,' ',filnavn);
  WRITELN('===================':44);
  IF MODUL='0' THEN WRITELN('HOVED MENU (0)':41);
  IF MODUL='1' THEN WRITELN('NYOPRETTELSER':40);
  IF MODUL='2' THEN WRITELN('VEDLIGEHOLDELSE':41);
  IF MODUL='3' THEN WRITELN('SØGNINGER (3)':40);
  IF MODUL='5' THEN WRITELN('ARKIV-VALG (5)':41);
  IF MODUL='7' THEN WRITELN('GRUPPEKODER':39);
  WRITELN('-------------------':44);
END;               

PROCEDURE get_write_acces;                 
BEGIN               
  menu;         
  penn:=''; WRITELN(@10);
  WRITE('Password, tak. '); READ(KBD,penn);
  IF penn=pennword THEN
  BEGIN
    IF dato<>fil_dato THEN
    BEGIN
      WRITELN(@13,'Dato for indeværende Fil = ',fil_dato);
      WRITE('                                       >>>');
      WRITE(@13,'Ny dato, (max.12 tegn): <<<');
      READLN(intxt);  IF LEN(intxt)>1 THEN
      BEGIN
        WHILE LEN(intxt)<12 DO intxt:=intxt+' ';
        fil_dato:=intxt;  dato:=intxt;
        dato_ok:=FALSE;                     
      END ELSE dato:=fil_dato;             
    END;
  END ELSE modul:='?';
END;                                        

PROCEDURE tilladelse;
BEGIN
  pass:='';
  WRITE('Password, tak. '); READ(KBD,pass);
  IF pass<>password THEN
  BEGIN
    pass_ok:=FALSE; filnum:=0; filnavn:='?!';
  END;
END;                                          

PROCEDURE test_svar;
BEGIN
  IF svar='C' THEN                              
  BEGIN
    cont:=NOT cont;
    cursor(3,ypos+8);
    IF cont THEN WRITE('C-on ') ELSE WRITE('C-off');
    cursor(px-2,ypos+9);
  END;
  IF clr AND (svar='S') THEN
  BEGIN
    clear:=TRUE;  (* sletmerkning af post *)
    svar:='J'; 
  END;
END;                            

PROCEDURE janej;
BEGIN
  REPEAT
     READ(KBD,svar);
     IF svar>='a' THEN svar:=CHR(ORD(svar)-32);
     IF modul2   THEN test_svar;
     IF svar='R'  THEN svar:='N';
  UNTIL svar IN Æ'J','N'Å;
  WRITELN(svar);
END; (* janej *)
(*$I TELEPROC.PAS *)
                                                              
PROCEDURE set_gruppe;                                    
BEGIN                                                      
  (* Gruppekode-tekst-Nr. i fil-post 0..2  *)                   
  menu;                                                     
  viskode(7,0,18);                                       
  IF olp THEN print_gruppekoder;                     
  WRITE('Opret nye Gruppe-koder, j/n ? ');          
  janej;                                            
  IF svar='J' THEN  get_write_acces  ELSE modul:='?';
  IF modul='7' THEN                               
  BEGIN                                               
    opret_gruppekoder;                                   
    write_gruppekoder;                                    
    IF txt>'' THEN                                    
    BEGIN                                       
      menu;  WRITELN;                                       
      WRITELN(' ':19,'Følgende Filnavne kan anvendes:',@10);
      FOR j:=1 TO 9 DO  WRITELN(j:27,'.) ',filesÆjÅ,'.TLF');
      WRITE(' ':35,'return');  READ(KBD,ch);
    END;                                   
  END;                                    
END;                                            

PROCEDURE startadr;
BEGIN
  REPEAT
     cursor(25,18);
     WRITE('Udlæsning fra post no: '); cleol;
     (*$I-*) READLN(startpost); (*$I+*)
  UNTIL (IORES=0) AND (startpost>0);
  IF (startpost=nul) AND (nul>$4AF) THEN
  startpost:=offset-(offset+offset);
  startpost:=startpost+offset;
  IF (startpost>=0) AND (startpost<no) THEN
    modul:='4'
  ELSE BEGIN                                        
    startpost:=1+offset;
    WRITE(UP); cleol; cursor(48,17);
  END;
END;                                                     
                                                   
PROCEDURE hent(VAR iotal: INTEGER; yy: INTEGER);
BEGIN                                         
  REPEAT                              
     tal:=-1;                         
     cursor(47,yy);             
     WRITE(' '); cleol;          
    (*$I-*) READLN(tal) (*$I+*);
  UNTIL (IORES=0) AND (tal<=255);
  if tal>=0 THEN iotal:=tal;
END;                          

PROCEDURE printer_setup;
BEGIN
  WRITELN(CLRHOM);
  WRITELN(' ':9,'PRINTER SET-UP for ',filnavn,'.');       
  WRITELN(' ':8,'=================================',@10);
  WRITELN('  Form-/Line-Feed v.sideskift(12=FF,def= 12)',form:3);
  WRITELN('  Værdi for komprimeret udskrift,  (def= 15)',komp:3);
  WRITELN('  Værdi for normal udskrift,   (default= 18)',norm:3);
  WRITELN('  Antal linier pr. side i udskrift,     (60)',lintop:3);
  WRITELN('  Antal line-feed, udskr.-slut, (12=FF),(12)',linfed:3);
  WRITELN('  Venstre  margin  ved  print-Labels,    (3)',inryk:3);
  WRITELN('  NLQ-skrift =  ON, (default= ESC E   E= 69)',nlqon:3);
  WRITELN('  NLQ-skrift = OFF, (default= ESC F   F= 70)',nlqoff:3);
  WRITELN('  Antal line-feed mellem Labels          (2)',labfed:3);
  hent(form,4);
  hent(komp,5);  hent(norm,6);   hent(lintop,7);  hent(linfed,8);
  hent(inryk,9); hent(nlqon,10); hent(nlqoff,11); hent(labfed,12);
  WRITELN;
  WRITE(' ':14,'Gem ny printer-setup, j/n ? '); janej;
  if svar='J' THEN BEGIN
     write_olp_string;
     write_gruppekoder;
  END;
END; 

PROCEDURE spec_print;
BEGIN
  WRITELN(CLRHOM);
  WRITELN(' ':15,'Special Print.');
  WRITELN(' ':14,'===============',@10);
  WRITELN(' Denne ordre (max 3 char lang) gemmes ikke, men');
  WRITELN(' kan sendes direkte til printeren, hvis char1>0.',@10);
  WRITELN('  Bruges f.eks til Form-længde (ESC)  Char1=',sp1:3);
  WRITELN('  Line-spacing-kommando, NLQ, etc.    Char2=',sp2:3);
  WRITELN('  Eks. 27 67 72,  27 65 24 + 27 50    Char3=',sp3:3);
  svar:='*';  hent(sp1,7);   hent(sp2,8);  hent(sp3,9);
  WRITELN;
  IF sp1>0 THEN BEGIN
     WRITE(' ':14,'Kommando til printer, j/n ? ');  janej;
  END;
  IF svar='J' THEN BEGIN
     WRITE(lst,CHR(sp1));
     IF sp2>0 THEN WRITE(lst,CHR(sp2));
     IF sp3>0 THEN WRITE(lst,CHR(sp3));
  END;
END; 

PROCEDURE printctrl;                        
BEGIN
  olp:=NOT olp; ch:=' ';
  listdev:='';  modul:='?';
  IF olp THEN BEGIN
     ch:='6';  listdev:='Printer ON.';
  END;
  cursor(46,12); WRITE(listdev); cleol;
  cursor(48,17); WRITE(ch,@8);
END;

PROCEDURE listvalg;
BEGIN
  WRITE(modul);
  READ(KBD,ch);  WRITE(ch);
  IF ch='1' THEN udlist:='/1,Quick.     ';
  IF ch='2' THEN udlist:='/2,Total-Liste';
  IF ch='3' THEN udlist:='/3,Adr.Labels ';
  IF ch IN Æ'1'..'3'Å THEN skrift:=ORD(ch)-48;
  cursor(47,10); WRITE(udlist);
  cursor(48,17); cleol;
END; 

PROCEDURE new_file;
BEGIN
   WRITE(@7,' findes ikke.');
   WRITE(' -  NY-opret, j/n ? '); janej;
   IF svar='J' THEN
   BEGIN
      WRITELN(filnavn,' Oprettes');
      password:='PASSWORD....';
      pennword:='PASSWORD....';
      fil_dato:='Dato.';  dato:='o';
      REWRITE(fv);
      write_gruppekoder;
      WRITE(filnavn);
   END ELSE started:=FALSE;
END;

PROCEDURE filswap;
VAR fv: FILE;
BEGIN
  WRITELN('TELE.COM');
  ASSIGN(fv,'TELE.COM');
  WRITELN('hentes.');
  (*$I-*) EXECUTE(fv); (*$I+*)
  IF IORES>0 THEN WRITELN(UP,'findes ikke');
END;

PROCEDURE filename;               
BEGIN                                           
  menu;                                                 
  FOR j:=1 TO level DO WRITELN(j:27,'.) ',filesÆjÅ,'.TLF');
  WRITE(@10,'/  ':26,'Indtast Nummer: ');
  REPEAT
    READ(KBD,ch)
  UNTIL ch IN Æ'/','1'..'9'Å;
  WRITELN(ch,@10);
  IF ch>'/' THEN
  BEGIN
    filnum:=ORD(ch)-48;
    filnavn:=filesÆfilnumÅ+'.TLF';
    IF started THEN CLOSE(fv);
    WRITE(filnavn);
    ASSIGN(fv,filnavn);
    started:=TRUE;  no:=0;                      
    (*$I-*) RESET(fv) (*$I+*);
    IF IORES>0 THEN new_file;
    IF started THEN
      read_gruppekoder
    ELSE filnavn:=' ?';
  END;                                
END;                        

PROCEDURE modultekst;
BEGIN
   menu;
   WRITELN('1.) NYOPRETTELSER':42);
   WRITELN('2.) VEDLIGEHOLDELSE':44);
   WRITELN('3.) SØGNINGER':38);
   WRITELN('4.) UDSKRIVNING#/123':45,'  ',udlist);
   WRITELN('5.) NYT ARKIV-NAVN':43);
   WRITE  ('6.) PRINTER ON/OFF':43,'   ',listdev);
   cleol; WRITELN;
   WRITELN('7.) GRUPPE-KODER':41);
   WRITELN('8;) PRINTER SET-UP':43);
   WRITELN('9:) SLUT.':34,@10);
   WRITE('HVILKET MODUL ØNSKES ? ':48);
   REPEAT
      READ(KBD,modul);
      IF modul='6' THEN printctrl;
      IF started AND (modul='#') THEN startadr;
      IF modul='/' THEN listvalg;
   UNTIL modul IN Æ'1'..';'Å;
   WRITELN(modul);
END;

BEGIN                                                 
 opstart;  getcmd;
 filename;
 REPEAT
    modul:='0'; svar:='*'; gempy:=0;
    startpost:=1+offset; indset:=FALSE;
    modultekst;
    IF started AND pass_ok THEN
    BEGIN
       IF modul IN Æ'1','2'Å THEN get_write_acces;
       IF NOT dato_ok THEN write_gruppekoder;
       IF modul='1' THEN nyopret;
       IF modul='2' THEN rettelse;
       IF modul='4' THEN readout(startpost);
       IF modul='3' THEN kig_efter;
       IF modul='7' THEN set_gruppe;
       IF modul='8' THEN printer_setup;
    END ELSE
       IF modul IN Æ'1'..'4','7','8'Å THEN WRITE(@7);
    IF modul='5' THEN filename;
    IF modul=';' THEN spec_print;
 UNTIL modul IN Æ'9',':'Å;
 CLOSE(prn);
 IF started THEN CLOSE(fv);
 IF modul=':' THEN filswap;
END. (* TELEFON.PAS, 851115. Rev.9/11-1987. (C) JFP *)
«eof»