home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol028
/
recmake.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
8KB
|
342 lines
{Program to create the patient records used by DISKBILL. Copyright
1980 by Richard Yensen, Ph.D., 2403 Talbot Rd., Baltimore, MD 21216.
Distribution for profit is prohibited.}
(*$G+*)
PROGRAM RECMAKE;
TYPE
PATIENT=RECORD
NAME:STRING[32];
STREET,KEY:STRING[40];
CITYSTATE:STRING[40];
RATE:REAL;
RECEIVE, PERCENT:REAL;
CUT:BOOLEAN;
HARTMAN:ARRAY[1..2] OF ARRAY[1..18] OF INTEGER;
DIAGNOSIS:STRING[40];
SYMPTOMS:STRING[8];
INSURANCECO:STRING[40];
ACCTNUMBER:STRING[15];
SOCSECNUMBER:STRING[10];
EMPLOYER:STRING[40];
WKSTREET:STRING[40];
WKCTYSTATE:STRING[40];
FIRSTVISIT:STRING[8];
LASTVISIT:STRING[8];
BIRTHDATE:STRING[8];
WORKPHONE:STRING[12];
HOMEPHONE:STRING[12]
END;
VAR
RECNUM:INTEGER;
BUF:PATIENT;
TITLE:STRING;
FID:FILE OF PATIENT;
PROCEDURE WIPESCREEN;
BEGIN
WRITE(CHR(26));
END;
PROCEDURE PUTREAL(D:REAL);
VAR I:INTEGER;
B:INTEGER;
BEGIN
B:=ABS(ROUND((D-TRUNC(D))*100));
IF B<10 THEN
BEGIN
WRITE(TRUNC(D):3,'.0',B)
END
ELSE (* B>=10 *)
BEGIN
IF D>=1.0 THEN
BEGIN
WRITE(TRUNC(D):3,'.',B)
END;
IF D<1 THEN
BEGIN
I:=ROUND(D*100);
IF I>0 THEN (* D is positive *)
BEGIN
WRITE(' 0.',B);
END;
IF I<0 THEN (* D is negative *)
BEGIN
WRITE(' -0.');
IF B<10 THEN WRITE('0',B)
ELSE WRITE(B);
END;
IF I=0 THEN WRITE(' 0 ');
END;
END (* D>=1.0 *);
WRITELN;
END (* PUTREAL *);
PROCEDURE ZEROREC(VAR REC:PATIENT);
VAR SECTION, RATING : INTEGER;
BEGIN
WITH REC DO
BEGIN
NAME:='';
STREET:='';
CITYSTATE:='';
RECEIVE:=0;
RATE:=0;
CUT:=FALSE;
PERCENT:=0;
KEY:='';
INSURANCECO:='';
DIAGNOSIS:='';
SYMPTOMS:='';
ACCTNUMBER:='';
SOCSECNUMBER:='';
EMPLOYER:='';
WKSTREET:='';
WKCTYSTATE:='';
FIRSTVISIT:='';
LASTVISIT:='';
BIRTHDATE:='';
WORKPHONE:='';
HOMEPHONE:='';
FOR SECTION:=1 TO 2 DO
BEGIN
FOR RATING:=1 TO 18 DO
BEGIN
HARTMAN[SECTION,RATING]:=0;
END;
END;
END;
END(* ZEROREC *);
PROCEDURE LASTHALFOFRECORD(REC:PATIENT);
BEGIN
WITH REC DO
BEGIN
WRITELN('Key to sort: ',KEY);
WRITELN('Diagnosis: ',DIAGNOSIS);
WRITELN('Date of First Symptoms: ',SYMPTOMS);
WRITELN('Insurance Company: ',INSURANCECO);
WRITELN('Account Number: ',ACCTNUMBER);
WRITELN('Social Security #: ',SOCSECNUMBER);
WRITELN('Employer: ',EMPLOYER);
WRITELN(' Address: ',WKSTREET);
WRITELN(' City State: ',WKCTYSTATE);
WRITELN(' Telephone: ',WORKPHONE);
WRITELN('Birthdate: ',BIRTHDATE);
WRITELN('First Visit: ',FIRSTVISIT);
WRITELN('Last Visit: ',LASTVISIT);
WRITELN('Home Telephone: ',HOMEPHONE);
END;
END;(* LASTHALFOFRECORD *)
PROCEDURE SHOWREC(REC:PATIENT);
VAR ANSWER:CHAR;
BEGIN
WITH REC DO
BEGIN
WRITELN('Name: ',NAME);
WRITELN('Street: ',STREET);
WRITELN('City State: ',CITYSTATE);
WRITE('Hourly Rate: $');PUTREAL(RATE);WRITELN;
WRITE('Paid Each Visit In Cash: $');PUTREAL(RECEIVE);WRITELN;
WRITE('Professional Discount: ');
IF CUT THEN
BEGIN
WRITELN('Yes');
WRITE(' Amount: ');WRITELN (TRUNC(100*PERCENT),'%');
END
ELSE WRITELN('No');
LASTHALFOFRECORD(FID^);
WRITELN('<<<<<<< Press Any Character to Begin Entering Corrections >>>>>>>>');
READ(ANSWER);
END;
END; (*SHOWREC*)
PROCEDURE GETREC(VAR REC:PATIENT);
LABEL 1;
VAR ANSWER:CHAR;
S:STRING;
R:REAL;
Q:INTEGER;
FUNCTION READSTRING(VAR T:STRING):BOOLEAN;
BEGIN
WRITE(' <esc> Return to skip record');
FOR Q:=1 TO 60 DO
BEGIN
WRITE(CHR(8));
END;
READLN(S);
READSTRING:=FALSE;
IF LENGTH(S)>0 THEN
IF S[LENGTH(S)]=CHR(27(* ESC *)) THEN READSTRING:=TRUE
ELSE
T:=S;
END;(* READSTRING *)
FUNCTION READBOOL(VAR T:BOOLEAN):BOOLEAN;
BEGIN
READLN(S);
READBOOL:=FALSE;
IF LENGTH(S)>0 THEN
IF S[LENGTH(S)]=CHR(27(* ESC *)) THEN READBOOL:=TRUE
ELSE
BEGIN
CASE S[1] OF
'F','f','N','n':T:=FALSE;
'T','t','Y','y':T:=TRUE
END
END;
END;(* READBOOL *)
FUNCTION READREAL(VAR T:REAL): BOOLEAN;
BEGIN
WRITE('SKIP TO THE NEXT FIELD? <Yes or No>');
READ(ANSWER);
IF (ANSWER='N') OR (ANSWER='n') THEN
BEGIN
FOR Q :=1 TO 36 DO
BEGIN
WRITE(CHR(8));
END;
FOR Q :=1 TO 36 DO
BEGIN
WRITE(' ');
END;
FOR Q :=1 TO 36 DO
BEGIN
WRITE(CHR(8));
END;
WRITE('$ a minus entry will skip entire record');
FOR Q:=1 TO 50 DO
BEGIN
WRITE(CHR(8));
END;
READLN(R);
IF R<0 THEN READREAL:=TRUE
ELSE T:=R;
END;(* IF ANSWER = N *)
IF (ANSWER='Y')OR(ANSWER='y') THEN
WRITELN;
END;
FUNCTION READPCT(VAR T:REAL): BOOLEAN;
BEGIN
WRITE('SKIP TO THE NEXT FIELD? <Yes or No>');
READ(ANSWER);
IF (ANSWER='N') OR (ANSWER='n') THEN
BEGIN
FOR Q :=1 TO 36 DO
BEGIN
WRITE(CHR(8));
END;
FOR Q :=1 TO 36 DO
BEGIN
WRITE(' ');
END;
FOR Q :=1 TO 36 DO
BEGIN
WRITE(CHR(8));
END;
WRITE(' % a minus entry will skip entire record');
FOR Q:=1 TO 50 DO
BEGIN
WRITE(CHR(8));
END;
READLN(R);
IF R<0 THEN READPCT:=TRUE
ELSE T:=R/100;
END;(* IF ANSWER = N *)
IF (ANSWER='Y')OR(ANSWER='y') THEN
WRITELN;
END;
BEGIN(* GETREC *)
WRITELN('Entering a return will skip to next item without changing the present item');
WRITELN;
WITH REC DO
BEGIN
WRITE('Name: ');IF READSTRING(NAME) THEN GOTO 1;
WRITE('Street: ');IF READSTRING(STREET) THEN GOTO 1;
WRITE('City State: ');IF READSTRING(CITYSTATE) THEN GOTO 1;
WRITE('Hourly Rate: ');IF READREAL(RATE) THEN GOTO 1;
WRITE('Paid Each Session: ');IF READREAL(RECEIVE) THEN GOTO 1;
WRITE('Professional Discount:');IF READBOOL(CUT) THEN GOTO 1;
IF CUT THEN
BEGIN
WRITE(' Percent:');IF READPCT(PERCENT) THEN GOTO 1;
END
ELSE PERCENT:=0;
WRITE('Key to Sort by: ');IF READSTRING(KEY) THEN GOTO 1;
WRITE('Diagnosis: ');IF READSTRING(DIAGNOSIS) THEN GOTO 1;
WRITE(' First Symptoms: ');IF READSTRING(SYMPTOMS) THEN GOTO 1;
WRITE('Insurance Company: ');IF READSTRING(INSURANCECO) THEN GOTO 1;
WRITE('Account Number: ');IF READSTRING(ACCTNUMBER) THEN GOTO 1;
WRITE('Social Security #: ');IF READSTRING(SOCSECNUMBER) THEN GOTO 1;
WRITE('Employer: ');IF READSTRING(EMPLOYER) THEN GOTO 1;
WRITE(' Address: ');IF READSTRING(WKSTREET) THEN GOTO 1;
WRITE(' City State: ');IF READSTRING(WKCTYSTATE) THEN GOTO 1;
WRITE(' Telephone: ');IF READSTRING(WORKPHONE) THEN GOTO 1;
WRITE('Birthdate: ');IF READSTRING(BIRTHDATE) THEN GOTO 1;
WRITE('First Visit: ');IF READSTRING(FIRSTVISIT) THEN GOTO 1;
WRITE('Last Visit: ');IF READSTRING(LASTVISIT) THEN GOTO 1;
WRITE('Home Telephone: ');IF READSTRING(HOMEPHONE) THEN GOTO 1;
END;
1:
END;(* GETREC *)
BEGIN(* MAIN PROGRAM *)
WIPESCREEN;
WRITE('FILE TITLE:');
READLN(TITLE);
(*$I-*)
RESET(FID,TITLE);
IF IORESULT<>0 THEN
BEGIN
WRITELN('I am opening a new file: ',TITLE,' because it is not on this disk');
REWRITE(FID,TITLE);
END;
(*$I+*)
RECNUM:=0;
WHILE RECNUM>=0 DO
BEGIN
WRITELN;
WRITE('RECORD NUMBER:');
READLN(RECNUM);
IF RECNUM>=0 THEN
BEGIN
SEEK(FID,RECNUM);
GET(FID);
IF EOF(FID) THEN
BEGIN
WIPESCREEN;
WRITELN('ENTER NEW RECORD:');
ZEROREC(FID^);
END
ELSE
BEGIN
WIPESCREEN;
WRITELN('OLD RECORD:');
SHOWREC(FID^);
WRITELN;
WRITELN('ENTER CHANGES:');
END;
GETREC(FID^);
SEEK(FID,RECNUM);
PUT(FID);
END; (* IF RECNUM>=0 *)
END(* WHILE *);
CLOSE(FID,LOCK);
END.
*)
END(* WHILE *);
CLOSE(FID,LOCK);
END.