{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(' 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? '); 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? '); 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. .