а`рLг­Й° iЌж=L\Ж©Ќx© …©Ђ…?…©…©…©…© яўN ±ЩРр'Ґi…ђжКРйЖРМ ш­иАўЅБ эыиаРхрюИАРН­ЃА­ЃА©Р…?©0… ±…И± я­‰А©Р…?©… ±i…И±i я­ЂАlшяНХУФ ВППФ ЖТПН УМПФ ¶ОП ЖЙМЕ УЩУФЕН®БРРМЕ  SYSTEM.APPLEЅ€А шўЅ¬ эыиаРхрю© L$ьккJPMONEY2ЈPAYROLLR‹юЫчў* FD.PART3.TEXTюЫЉЎ*1 FD.INTRO.CODEюЫъ 1M FD.PART1.TEXTюЫzЎMi FD.PART2.TEXTюЫЉЎi‘ FILEDEMO.TEXTюЫЉЎ‘Ґ FILEDEMO.CODEюЫЉЎҐЇ FD.INTRO.TEXTюЫь ж&руЅЊАыЙХРркЅЊАыЙЄРт ЅЊАыЙ–Рз©…'ЅЊАы*…&ЅЊАы%&™,E'€зЁР·ЅЊАыЙЮР®кЅЊАыЙЄР¤`†+…*НxрH©…&­x…'8е*р7°IяоxђiюОxЕ&ђҐ&Й °Ё § №И · Ґ') +ЄЅЂА№Ф · ж&Рї · ­x) +ЄЅЃА¦+`кўКРэжFРжG8йРр`0($ p,&"Ґ) …Ґ(jJJ…р©…>L+ ¦р"Жж?жҐIР…жр¤№> …сўдр N ђЪ`  ў`Ґр x V Nx ъ °ы¤.ЊxДрРжҐ-ЕсРм ’ °з z ` ўVК0ы№^*^*‘>ИРн`  €рaЅЊАыIХРфкЅЊАыЙЄРт VЅЊАыЙ­Рз©€„&јЊАыYЦ¤&™Ро„&јЊАыYЦ¤&™ИРојЊАыЩЦРЅЊАыЙЮР кЅЊАыЙЄр\8` ь„&ИРN N1 N2 N3 R1 R2 Х Q —R—ёN^ЩЎЉЎ  IF SELECTION = 'T' THEN TWELVEMO; "END(*IF*);  END(*LISTONE*); &  PROCEDURE MENU2;  BEGIN "WRITELN(HOME,ERASE); "PROMPTAT(4,' LIST'); "PROMPTAT(5,' ********'); "PROMPTAT(7,' A(LL RECORDS'); "PROMPTAT(9,' O(NE RECORD'); "PROMPTAT(11ENDING UPON 'SELECTION', EITHER *)  (* UP TO TWELVE MONTHS OF PAY HISTORY *)  (* IS LISTED OR THE PROCEDURE IS *)  (* TERMINATED. *)  (* *)  (***************************************) $PROMPTAT(17,' N(EXT EMPLOYEE'); $PROMPTAT(19,' Q(UIT LIST'); $PROMPTAT(22,' ***** SELECT ONE *****'); $SELECTION:= GETCHAR(['N','T','Q']); $  (***************************************)  (* *)  (* DEP *)  (***************************************)   BEGIN  PRINTPAGE;  IF NOT EOF(PAYROLL) THEN "BEGIN $POST; $WITH PAYROLL^ DO &BEGIN (PROMPTAT(12,REMARKS); &END; $PROMPTAT(15,' T(WELVE MONTH PAY HISTORY'); *)  (* *)  (* DEPENDING ON THE ANSWER TO N(EXT, *)  (* T(WELVE MONTH PAY OR Q(UIT THE *)  (* PROCEDURE MAY OR MAY NOT CALL *)  (* TWELVEMO. *)  (* (*TWELVEMO*); "  PROCEDURE LISTONE;   (***************************************)  (* *)  (* LISTS ONE INDIVIDUAL RECORD BY 1ST *)  (* PRINTING THE PAGE FORMAT (PRINT- *)  (* PAGE) THEN THE INDIVIDUAL'S DATA.&BEGIN (**LISTS ONE MONTH'S PAY 5HISTORY**) (WRITELN(I:2,' ',PAY:9:2,' ',SOCSEC:8:2,' ', 6DEDUCTIONS:9:2,' ',WORKHOURS:4); &END(*WITH*); $END(*IF*); "END(*FOR*); "PROMPTAT(23,'ENTER C(ONTINUE WHEN READY'); "SELECTION := GETCHAR(['C']);  ENDEGIN $IF PAYROLL^.YEARSPAY[I].WORKHOURS <> 0 THEN '(** IF THE INDEXED MONTH'S WORK- )HOURS IS = TO 0 THEN THAT MONTH )WAS NOT ENTERED AND THE FOLLOW- )ING MONTHS ARE ALSO NOT ENTERED.**) ) $BEGIN &WITH PAYROLL^.YEARSPAY[I] DO ;  BEGIN "WRITELN(HOME,ERASE); "PROMPTAT(2,' TWELVE MONTH PAY HISTORY FOR '); "GOTOXY(12,4);WRITE(PAYROLL^.HISTORY.NAME); "PROMPTAT(6,'MO PAY SOCSEC DEDUCTIONS HRS'); "PROMPTAT(7,BORDER); "GOTOXY(0,9); "FOR I := 1 TO MONTHS DO "B LISTS UP TO TWELVE MONTHS*)  (* OF PAYDATA FOR EACH INDIVIDUAL *)  (* ONLY IF REQUESTED BY USER. *)  (* *)  (***************************************)   PROCEDURE TWELVEMO;  VAR MO,I,WRKHRS: INTEGER PROCEDURE LIST;   (***************************************)  (* *)  (* LISTS ALL RECORDS ALPHABETICALLY *)  (* BY NAME OR BY SPECIFIC RECORD. *)  (* *)  (* TWELVEMO:,' Q(UIT'); "PROMPTAT(15,' ****SELECT ONE**** ');  SELECTION:= GETCHAR(['A','O','Q']);  END(*MENU2*);   PROCEDURE LISTALL;   (***************************************)  (* *)  (* LISTS ONE RECORD'S GENERAL DATA *)  (* *)  (* THEN ASK IF USER WANTS TWELVE *)  (* *)  (* MONTHS OF PAYROLL DATA HISTORY *)  (*  (* IF THE USER ONLY KNOWS THE EMPLOYEE*)  (* NAME AND NOT THE RECORD NUMBER, HE *)  (* CAN FIND THE RECORD NUMBER BY USING*)  (* THE N(AME CASE OF SELECTION AND *)  (* ENTERING THE COMPLETE NAME WHEN *)  (* ASKED: MPTAT(23,'ENTER C(ONTINUE OR E(XIT LIST'); +SELECTION := GETCHAR(['C','E']); +IF SELECTION = 'E' THEN EXIT(LIST); +UNTIL EOF(PAYROLL); +END(*'H'*); $'N': BEGIN +  (***************************************)  (* *) 5C(ONTINUE. **) + -GOTOXY(0,3);WRITELN(ERASEOS); -FOR I := 1 TO 15 DO -BEGIN /IF NOT EOF(PAYROLL) THEN /BEGIN 1WRITELN(RECNUM,' ',PAYROLL^.HISTORY.NAME); 1RECNUM:= RECNUM+1; 1GET(PAYROLL); /END(*IF*); -END(*FOR*); +PROMPTAT(22,BORDER); +PRO *)  (***************************************)  +PAGE(OUTPUT); +PROMPTAT(1,'REC NAME'); +GET(PAYROLL); +RECNUM:= 1; +REPEAT (**PRINTS A PAGE OF 15 5NAMES AT ONE TIME 5THEN ASKS IF USER 5WANTS TO E(XIT OR *******************)  (* *)  (* IF USER SELECTS H(ELP, THIS CASE *)  (* OF SELECTION WILL LIST THE NAMES *)  (* OF ALL EMPLOYEES ON THE FILE IN *)  (* ALPHABETICAL ORDER. *)  (* (* IF REC WAS 0 THEN USER 0DID NOT KNOW THE RECORD 0NUMBER AND HAD TO EXIT 0TO 'SEARCH' OR 'HELP' OF 0'LIST','ONE'. **) 0 +SEEK(PAYROLL,REC); +GET(PAYROLL); +LISTONE; +READ(CH); +EXIT(ONEREC); )END(*'I'*); $'H': BEGIN +  (******************** (* I( KNOW THE RECORD NUMBER *)  (* *)  (***************************************)   GOTOXY(0,18); +WRITE('ENTER THE RECORD NUMBER NOW: '); +REC := GETINT(30,18,5); +IF REC = 0 THEN EXIT(ONEREC); . .ECORD NUMBER *)  (* THIS CASE OF SELECTION WILL LIST *)  (* THAT ONE RECORD AND THE TWELVE *)  (* MONTH PAYROLL HISTORY IF DESIRED. *)  (* SELECTED BY PRESSING: *)  (* *) ','H','N','Q']);  END(*SONEREC*); $  BEGIN(*ONEREC*)  REPEAT "SONEREC; (*PUTS MENU ABOVE ON SCREEN*) "CASE SELECTION OF $'I': BEGIN +  (***************************************)  (* *)  (* IF USER KNOWS THE RCH RECORD NUMBER'); "PROMPTAT(10,' H(ELP ME FIND THE RECORD NUMBER'); "PROMPTAT(12,' N(AME KNOWN'); "PROMPTAT(14,' Q(UIT'); "PROMPTAT(16,' E(XIT PROGRAM'); "PROMPTAT(18,' ***** SELECT ONE *****'); "SELECTION:=GETCHAR(['I','E PROCEDURE SONEREC; (*PUTS MENU ON SCREEN*)  BEGIN (*FOR 'ONEREC' BELOW*)  RESET(PAYROLL); "WRITELN(HOME,ERASE); "PROMPTAT(5,' MENU FOR LIST ONE RECORD'); "PROMPTAT(6,' ****************************'); "PROMPTAT(8,' I( KNOW WHIE RECORD WHEN GIVEN THE *)  (* RECORD NUMBER. *)  (* *)  (***************************************)   VAR RECNUM,REC,I:INTEGER;  S:STRING[NAMELEN]; $ ROCEDURE ONEREC;   (***************************************)  (* *)  (* EITHER SEARCHES FOR A RECORD BY *)  (* EMPLOYEE NAME, LISTS ALL *)  (* NAMES ALPHABETICALLY OR LISTS *)  (* A SINGL *)  (***************************************)   BEGIN "RESET(PAYROLL); "GET(PAYROLL); "REPEAT $LISTONE; $CASE SELECTION OF &'Q': EXIT(LISTALL); &'T': TWELVEMO; $END(*CASE*); $GET(PAYROLL);  UNTIL EOF(PAYROLL);  END(*LISTALL*);  &  P *)  (* *)  (* SMITH, JOHNATHAN S. *)  (* -------------------- *)  (* *)  (***************************************)   WRITELN(HOME,ERASE); +PROMPTAT(1,'ENTER THE NAME: '); +GOTOXY(4,6); +WRITELN('YOU HAVE ',NAMELEN,' SPACES AS SHOWN: '); +GOTOXY(10,11); +WRITELN('--------------------'); +GOTOXY(10,10); +READLN(S); (* UNDERLINING WAS 6PUT ON SCREEN 6FIRST THEN CURSOR 6MOVED OVER FIRIN PAYROLL. THE NEXT LINE CREATES *)  (* REC-1 RECORD SPACES IN THE NEW *)  (* PAYROLL FILE SINCE ONE HAS BEEN *)  (* DELETED. *)  (* *)  (****************************************) "RESET(PAYBUF); "GET(PAYBUF); "REWRITE(PAYROLL,'PAYROLL:PAYROLL.DATA'); &(***CREATES A NEW PAYROLL FILE***)   (***************************************)  (* *)  (* REC IS NOW THE NUMBER OF RECORDS *)  (* $(* IF YOU HAVE READ AND WRITTEN UP 'TO THE RECORD TO BE DELETED THIS 'STATEMENT SIMPLY READS ANOTHER 'RECORD WITHOUT PUTTING IT TO ''PAYBUF' THUS EFFECTIVELY 'DELTEING IT*) "UNTIL EOF(PAYROLL); "CLOSE(PAYROLL,PURGE); (***DESTROYS 9FILE PAYROLL** AND REWRITE BOTH PUT 'RECORDS IN THE WINDOW. STMT ABOVE 'SETS THE FIRST RECORD OF PAYBUF 'EQUAL TO THE FIRST RECORD OF 'PAYROLL. *) $PUT(PAYBUF); $REC := REC + 1; $GET(PAYROLL); $IF REC = RECNUM THEN GET(PAYROLL); *)  (* *)  (***************************************)   RESET(PAYROLL); "REWRITE(PAYBUF,'PAY.DATA'); (*CREATES " 'PAYBUF'*) "REPEAT $PAYBUF^ := PAYROLL^; $(* RESET *)  (* NOW KNOWING THE RECORD NUMBER THE *)  (* PROCEDURE CREATES A TEMPORARY FILE *)  (* 'PAYBUF' AND WRITES ALL THE RECORDS*)  (* EXCEPT THE DELETED RECORD TO IT. *)  (* 'PAYBUF' IS THEN RESET AND WRITTEN *)  (* TO 'PAYROLL'. "PROMPTAT(23,' USE THE L(IST FUNCTION TO FIND IT'); "GOTOXY(12,12); "WAIT(4000); "WRITE('RECORD #: '); "RECNUM := GETINT(22,12,5); "IF RECNUM = 0 THEN EXIT(DELETE); "REC:=0; "  (***************************************)  (* ITELN(HOME,ERASE); "PROMPTAT(2,' ENTER THE RECORD NUMBER TO BE DELETED'); "PROMPTAT(3,BORDER); "PROMPTAT(20,BORDER); "PROMPTAT(21,'IF YOU DO NOT KNOW THE RECORD NUMBER'); "PROMPTAT(22,' ENTER 0 FOR THE RECORD NUMBER AND'); LE BY ONE RECORD. *)  (* *)  (* RCD# 0 WILL EXIT THE PROCEDURE. *)  (* *)  (***************************************)   VAR REC,RECNUM:INTEGER;  BEGIN "FILESTATUS; "WR (******************)  PROCEDURE DELETE;   (***************************************)  (* *)  (* GIVEN A RECORD NUMBER WILL SEARCH *)  (* FOR AND DELETE THAT RECORD AND *)  (* CRUNCH THE FI"CASE SELECTION OF (******************) $'Q': EXIT(LIST); (* *) $'A': LISTALL; (* EXITS, LISTS *) $'O': ONEREC; (* ALL RCDS, OR *)  END(*SELECT*); (* JUST ONE RCD. *)  END(*LIST*); (* *)  "END(*CASE*); (* PROGRAM!!!*)  UNTIL FALSE; $ $(* IMPORTANT!!- 'FALSE' WILL NEVER ,BE TRUE. THE ONLY WAY TO ,GET OUT IS TO ENTER A 'Q' ,OR 'E' AND 'EXIT'. **) ,  END(*ONEREC*); & &  BEGIN(*LIST*) "FILESTATUS; "MENU2; FOR '); 1WRITELN(' ',S,' IS: ',REC,ERASEOL); /END(*ELSE*); /PROMPTAT(22,BORDER); /PROMPTAT(23,'ENTER C(ONTINUE WHEN READY '); /SELECTION := GETCHAR(['C']); )END(*'N'*); %'Q': EXIT(ONEREC);(* GOES TO LIST*) %'E': THATSALL; (*EXITS THE ENTIRE*) ST 6'-' FOR ENTRY. **) + +REC:=0; +REPEAT -GET(PAYROLL); -REC:= REC + 1; +UNTIL (PAYROLL^.HISTORY.NAME = S) OR EOF(PAYROLL); +GOTOXY(4,10); +IF EOF(PAYROLL) THEN -WRITELN('RECORD FOR ',S,' NOT FOUND') /ELSE /BEGIN 1WRITELN('THE RECORD NUMBER )   SEEK(PAYROLL,REC-1); "PUT(PAYROLL); "RESET(PAYROLL);   (***************************************)  (* *)  (* NOW WE SIMPLY READ FROM 'PAYBUF' *)  (* AND WRITE(PUT) TO 'PAYROLL'. NOTE *)  (* THAT PUT GOES FIRST BECAUSE THE *)  (* INITIAL RESET(PAYBUF) PLACED THE *)  (* FIRST RECORD IN THE WINDOW AND IT *)  (* MUST BE WRITTEN TO 'PAYROLL' BEFORE*)  (* THE FIRST GET. *)  (* OLL FILE DEMONSTRATION'); "PROMPTAT(3,' I(NSTRUCTIONS'); "PROMPTAT(5,' E(NTER'); "PROMPTAT(7,' U(PDATE'); "PROMPTAT(9,' L(IST'); "PROMPTAT(11,' D(ELETE'); "PROMPTAT(13,' S(EARCH'); "PROMPTAT(15,' P(ROCESS'); "PROMPTAT(17,' QOT RETURN UNTIL *)  (* ON OF THE APPROPRIATE KEYS IS *)  (* PRESSED. *)  (* *)  (***************************************)   BEGIN "WRITELN(HOME,ERASE); "PROMPTAT(1,' PAYR"CLOSE(PAYROLL,PURGE); "CLOSE(PAYROLL,LOCK); "THATSALL;  END(*PURGEIT*);   PROCEDURE MENU;   (***************************************)  (* *)  (* PUTS MENU TO SELECT FROM ON THE *)  (* SCREEN AND WILL N*****)  (* *)  (* DESTROYS FILE 'PAYROLL' AND IF *)  (* ACCESSED AGAIN IT WILL BE EMPTY. *)  (* *)  (***************************************)   BEGIN AT(16,' DISK HANDLING');  PROMPTAT(22,BORDER);  PROMPTAT(23,'ENTER C(ONTINUE OR E(XIT PROGRAM');  SELECTION := GETCHAR(['C','E']);  IF SELECTION = 'E' THEN THATSALL;  END(*PROCESS*);   PROCEDURE PURGEIT;   (**********************************) )(* *) )(*****************************) )  WRITELN(HOME,ERASE);  PROMPTAT(10,'YOUR PROCESS WOULD GO HERE;');  PROMPTAT(12,' HOWEVER, THE PURPOSE OF THIS');  PROMPTAT(14,' PROGRAM IS ONLY TO DEMONSTRATE');  PROMPT PROMPTAT(23,'ENTER C(ONTINUE TO EXIT');  SELECTION := GETCHAR(['C']);  END(*SEARCH*);   PROCEDURE PROCESS;  BEGIN )(*****************************) )(* *) )(* YOUR PROCESSING OF THE *) )(* DATA WOULD OCCUR HERE *F(PAYROLL) THEN "BEGIN $GOTOXY(0,14); $WRITELN('RECORD IS NOT IN FILE'); "END(*IF*)  ELSE "BEGIN $PROMPTAT(14,'THE RECORD NUMBER FOR EMPLOYEE'); $GOTOXY(5,16); $WRITELN(FULLNAME,' IS: ',REC); "END(*ELSE*);  PROMPTAT(22,BORDER); SINCE MOST (NAMES ARE OVER TWO CHARACTERS (THIS PROTECTS AGAINST THE (PROBLEM. LET ME KNOW IF YOU (FIGURE OUT WHY!!!! ***) (  REC:= 0;  REPEAT "REC:= REC + 1; "GET(PAYROLL);  UNTIL EOF(PAYROLL) OR (FULLNAME = PAYROLL^.HISTORY.NAME);  IF EOOXY(10,10); "READLN(FULLNAME);  UNTIL LENGTH(FULLNAME) > 2;  $(***FOR SOME REASON THIS WAS NECESSARY (BECAUSE A CHARACTER WAS OFTEN (PASSED TO THIS ROUTINE FROM (SOMEWHERE, CAUSING 'READLN(FULL- (NAME) TO PRESS ON WITHOUT THE (NAME BEING ENTERED. PAGE(OUTPUT);  PROMPTAT(2,' WHAT IS THE INDIVIDUAL''S NAME?');  PROMPTAT(4,' ENTER: LAST, FIRST MIDDLE INITIAL');  GOTOXY(4,6);  WRITELN('YOU HAVE ',NAMELEN,' SPACES AS SHOWN: ');  GOTOXY(10,11);  WRITELN('--------------------');  REPEAT "GOT *)  (* STARTED AT ZERO AND WHEN A MATCH *)  (* IS FOUND PRINTED OUT AS THE RECORD *)  (* NUMBER. *)  (* *)  (***************************************)   BEGIN  FILESTATUS; **************************************)  (* *)  (* ASKS FOR THE FULLNAME OF THE *)  (* EMPLOYEE TO BE FOUND AND THEN *)  (* SEARCHES THE FILE SEQUENTIALLY *)  (* UNTIL A MATCH IS FOUND. REC IS *)  (***************************************)  "REPEAT $PAYROLL^ := PAYBUF^; $PUT(PAYROLL); $GET(PAYBUF); "UNTIL EOF(PAYBUF); "CLOSE(PAYBUF,PURGE);  END(*DELETE*);   PROCEDURE SEARCH;  VAR REC:INTEGER; $FULLNAME:STRING[NAMELEN];   (*(UIT'); "PROMPTAT(19,' R(EMOVE >>ENTIRE<< FILE'); "PROMPTAT(21,'***** SELECT BY FIRST LETTER *****'); "PROMPTAT(23,' WHICH ONE?:'); "SELECTION:= GETCHAR(['I','E','L','U','D','S','P','Q','R']);  END(*MENU*);   BEGIN(*MAIN PROGRAM*) #  (***************************************)  (* *)  (* GOES TO THE APPROPRIATE PROCEDURE *)  (* DEPENDING UPON THE SELECTION FROM *)  (* THE MENU ABOVE. *)  (* AND COMMENTSЧНћ¶Нћ¶¦(****************************************ЧНћ¶Нћ¶Нћ¶¦(THE PROGRAM FILEDEMO IS VERY LARGE AND ЧНћ¶Нћ¶¦& HAD TO BE BROKEN DOWN INTO THREE ЧНћ¶Нћ¶¦' PARTS BEFORE COMMENTS COULD BE ADDADDITIONAL RECORDS AREЧНћ¶Нћ¶Ч¦( ENTERED ALPHABETICALLY BY LAST NAMEНћ¶НћН¶¦)*****************************************ЧНћ¶Нћ¶Ч¦PRESS ANY KEY TO CONTINUEНћ¶ҐНћ­b¶ Нћ¶¦ REMARKSЧ¦& PROMPT C(ONTINUE MEANS TO ENTER AНћ¶Нћ¶Ч¦ 'C' IF YOU WISH TO CONTINUE.Нћ¶Нћ­t¶¦'A CORRECTION PROCEDURE WAS DEVELOPED TOЧНћ¶Нћ¶Ч¦% HANDLE INCORRECT INTEGER OR REALНћ¶Нћ¶¦% ENTRIES. PAYROLL.DATA FILE MUST ALWAYS BEЧНћ¶Нћ¶Ч¦' THE LAST FILE ON THE DISK OR ADDEDНћ¶Нћ¶¦' RECORDS MIGHT OVER WRITE FOLLOWINGЧНћ¶Нћ¶Ч¦ FILES.Нћ¶Нћ¶¦%ALL ENTRIES ARE DONE WITH MENUS. THEЧНћ¶Нћ¶AL.ЧНћ¶Нћ¶¦#THIS SPECIAL DISK TITLED: 'PAYROLL'ЧНћ¶Нћ¶Ч¦& HAS THE FILEDEMO.TEXT FILE FIRST,Нћ¶Нћ¶Ч¦' THEN THE FILEDEMO.CODE, AND THEN AНћ¶Нћ¶¦$ SAMPLE FILE: PAYROLL.DATA. THEЧНћ¶Нћ¶¦% ¶ Нћ¶¦ INSTRUCTIONSЧНћ¶Нћ¶¦)*****************************************ЧНћ¶Нћ¶Нћ¶Ч¦(THIS PROGRAM IS MEANT TO DEMONSTRATE THEНћ¶Нћ¶Ч¦% FILE HANDLING CHARACTERISTICS OFНћ¶Нћ¶¦ PASCНћ¶Ч¦% TO 'PAYROLL:PAYROLL.DATA'Нћ¶Нћ¶Нћ¶¦)*****************************************ЧНћ¶Нћ¶Нћ¶Ч¦NOW EX(ECUTE 'PAYROLL:FILEDEMO'Нћ¶НћН¶Ч¦PRESS ANY KEY WHEN READYНћ¶ҐНћ­ьћ¶Ч¦DISK NAMED 'PAYROLL:'Нћ¶Нћ¶Нћ¶¦ FILEDEMO.CODEЧНћ¶Нћ¶Ч¦ FILEDEMO.TEXTНћ¶Нћ¶¦ SAMPLE.DATAЧНћ¶Нћ¶Нћ¶Ч¦$THEN T(RANSFER 'PAYROLL:SAMPLE.DATA'Нћ¶¶ Нћ¶¦#THE PROGRAM FILEDEMO IS DESIGNED TOЧНћ¶Нћ¶Нћ¶Ч¦#RUN ON A DISKETTE CALLED 'PAYROLL:'Нћ¶Нћ¶¦)*****************************************ЧНћ¶Нћ¶Нћ¶Ч¦"LOAD THE FOLLOWING PROGRAMS ONTO AНћ¶Нћ¶Н"® FDINSTRU ASE SELECTION OF ''I': INSTRUCTIONS; ''E': ENTER; ''U': ENTER; ''L': LIST; ''R': PURGEIT; ''D': DELETE; ''S': SEARCH; ''P': PROCESS; ''Q': STOP := TRUE; %END(*CASE*); #UNTIL STOP; #CLOSE(PAYROLL,LOCK); #THATSALL;  END. *)  (* *)  (***************************************)  #ERASEOL:=CHR(16);ERASEOS:=CHR(11); #ERASE:=CHR(12);HOME:=CHR(25); #ENTERING := FALSE; #STOP := FALSE; #ONCETHRU := FALSE; #REPEAT; %MENU; %C *)  (* ERASE TO END OF LINE (ERASEOL), *)  (* ERASE TO END OF SCREEN (ERASEOS), *)  (* CLEARSCREEN (ERASE) AND HOME ARE *)  (* INITIALIZED BELOW. BOOLEANS STOP, *)  (* ENTERING AND ONCETHRU ARE SET TO *)  (* FALSE. EDЧНћ¶Нћ¶Нћ¶Ч¦#TO SEE EXTENSIVE REMARKS WITHIN THEНћ¶Нћ¶¦% PROGRAM PLACE THE FOLLOWING THREE ЧНћ¶Нћ¶Ч¦% TEXT FILES INTO 'SYSTEM.WRK.TEXT',Нћ¶Нћ¶¦# THEN LIST THEM WITH THE E(DITOR.ЧНћ¶Нћ¶Нћ¶Ч¦ FD.PART1.TEXTНћ¶Нћ¶Нћ¶Ч¦ FD.PART2.TEXTНћ¶Нћ¶Нћ­ О¶¦ FD.PART3.TEXTЧНћ¶Нћ¶Нћ¶¦!THESE PROGRAMS CANNOT BE COMPILEDЧНћ¶Нћ¶Нћ¶Н-REMARKS: STRING; %END(*PAYDATA*); %  VAR  PAYROLL,PAYBUF: FILE OF PAYDATA; *P: INTERACTIVE; (*P WILL REPRESENT EITHER CONSOLE: OR PRINTER:*) )CH: CHAR; 'STOP: BOOLEAN; #ENTERING: BOOLEAN; #ONCETHRU: BOOLEAN; "ERASEOL,ERASEOS,HOME,ERASE:CHAR; THE *)  (* APPROPRIATE CLASS.' *)  (* *)  (***************************************)   PAYDATA = PACKED RECORD -HISTORY: PERSONALDATA; ,YEARSPAY: PACKED ARRAY [1..MONTHS] OF PAYYEARHISTORY; )  (* BOTH OF THESE RECORDS CONTAIN *)  (* STRING, INTEGER AND REAL DATA WHICH *)  (* CAN BE MIXED IN ANY WAY. THE *)  (* RECORD MUST BE DEFINED AS A FILE IN *)  (* THE VARIABLE SECTION OR YOU WILL *)  (* GET THE ERROR MESSAGE 'NOT OFTEGER; %END(*PAYYEARHISTORY*); + #  (***************************************)  (* *)  (* NOTE THAT PAY DATA IS A RECORD *)  (* WHICH CONTAINS BOTH THE RECORD *)  (* PAYYEARHISTORY AND PERSONALDATA. */STATE: STRING[STATELEN]; 1ZIP: STRING[5]; *DEPENDENTS: INTEGER; )YEARSWITHUS: INTEGER; ,PAYGRADE: INTEGER; *ALLOTMENTS: REAL; %END(*PERSONALDATA*); * #PAYYEARHISTORY = PACKED RECORD 1PAY: REAL; .SOCSEC: REAL; *DEDUCTIONS: REAL; +WORKHOURS: IN#STATELEN = 2; #MONTHS = 12; #MAXINT = 300; #MININT = 0; #MAXREAL = 9999.99; #MINREAL = 0.0; $  TYPE $ #SETOFCHAR = SET OF CHAR; #PERSONALDATA = PACKED RECORD 0NAME: STRING[NAMELEN]; .STREET: STRING[STREETLEN]; 0CITY: STRING[CITYLEN]; YOUR APPLICATION. *)  (* *)  (***************************************)   CONST #BORDER = '****************************************'; #NULL = ''; #NAMELEN = 20; #STREETLEN = 25; #CITYLEN = 17; , EDITING OF INPUT, AND *)  (* RECORDS WITHIN RECORDS. HOPEFULLY *)  (* THE EXTENSIVE REMARKS INCLUDED IN *)  (* FD.REM1.TEXT, FD.REM2.TEXT AND *)  (* FD.REM3.TEXT SHOULD PROVIDE SOME *)  (* GUIDE TO USING PASCAL FILES FOR *)  (*  PROGRAM FILEDEMO;   (***************************************)  (* *)  (* THIS PROGRAM DEMONSTRATES METHODS*)  (* OF HANDLING FILES IN PASCAL TO *)  (* INCLUDE: FILE CREATION, INSERTION, *)  (* DELETIONN N1 N2 N3 R1 R2 ›0°0°0°0°0°0N^ЩЎzЎћ¶Ч¦(****************************************Нћ¶Нћ¶Ч¦ PRESS ANY KEY TO C(ONTINUEНћ¶ЖНћ¶ Нћ­ ЧЧООООБ И0Є TEXT',Нћ¶Нћ¶¦# THEN LIST THEM WITH THE E(DITOR.ЧНћ¶Нћ¶Нћ"SELECTION: CHAR; " I: INTEGER; % PRINT: STRING[10]; * *  PROCEDURE OPENFILE;   (***************************************)  (* *)  (* THIS PROCEDURE ATTEMPTS TO OPEN *)  (* THE FILE 'PAYROLL'. IT THE FILE IS *)  (* ALREADY OPEN THE FILE IS CREATED. *)  (* THE COMPILER INSTRUCTION (*$I-*) *)  (* TURNS OFF AUTOMATIC ERROR CHECHING *)  (* AND ALLOWS THE USER TO CHECK THE *)  (* ERRORS WHILE PROCESSING CONTINUES. *)  (* ALSO INITIATES TH&GOTOXY(30,5);WRITE(STATE:2); &GOTOXY(34,5);WRITE(ZIP:5); &GOTOXY(13,8);WRITE(PAYGRADE); &GOTOXY(32,8);WRITE(ALLOTMENTS:6:2); &GOTOXY(13,10);WRITE(DEPENDENTS); &GOTOXY(31,10);WRITE(YEARSWITHUS); % END(*WITH*);  END(*POST*); $  PROCEDURE GOOFED(VA*)  (* *)  (***************************************)   BEGIN  WITH PAYROLL^.HISTORY DO &BEGIN &GOTOXY(18,1);WRITE(NAME); &GOTOXY(11,3);WRITE(STREET); &GOTOXY(11,5);WRITE(CITY:17); PROCEDURE WRITES THE INDIVIDUAL'S *)  (* DATA TO THE OUTLINE PREVIOUSLY *)  (* PLACED ON THE SCREEN BY PRINTPAGE. *)  (* EACH WRITE IS PRECEEDED BY A *)  (* GOTOXY(X,Y) TO THE EXACT POSITION *)  (* AT WHICH THE DATA IS TO BE WRITTEN. N OKSET; $IF NOT GOOD THEN WRITE(CHR(7),CHR(7)) 'ELSE IF CH IN [' '..'Z'] THEN WRITE(CH); "UNTIL GOOD; "GETCHAR:=CH;  END(*GETCHAR*);   PROCEDURE POST;   (***************************************)  (* *)  (*  (* CORRECT CHAR IS INPUT. *)  (* *)  (***************************************)   VAR CH: CHAR; $GOOD:BOOLEAN;  BEGIN "REPEAT $READ(KEYBOARD,CH); $IF EOLN(KEYBOARD) THEN CH:=CHR(13); $GOOD:= CH IE BOOLEAN GETCHAR*)  (* IS RETURNED. THE PROCEDURE LOOPS *)  (* UNTIL ONE OF THE CHARACTERS IN THE *)  (* OKSET IS SELECTED. IF AN INCORRECT *)  (* CHARACTER IS SELECTED THE BELL WILL*)  (* RING TWICE. ECHOS CHAR ONLY WHEN *) ): CHAR;   (***************************************)  (* *)  (* EXCELLENT ROUTINE FROM APPLE3: *)  (* DISKIO. THE CHARACTERS FROM WHICH *)  (* THE USER IS TO SELECT IS SENT TO *)  (* THIS ROUTINE AND THTOP *)  (* OF THE SCREEN. *)  (* *)  (***************************************)   BEGIN #GOTOXY(0,J); #WRITE(S); #WRITELN(ERASEOL);  END(*PROMPTAT*); *  FUNCTION GETCHAR (OKSET: SETOFCHAR (* AND THE MESSAGE TO BE PRINTED (S) *)  (* ARE PASSED TO THIS ROUTINE. FOR *)  (* EXAMPLE: PROMPTAT(5,' HELLO'); *)  (* THIS PRINTS TWO SPACES AND THE *)  (* MESSAGE 'HELLO' ON LINE 5. LINES *)  (* ARE NUMBERED 0 TO 23, FROM THE ING);   (***************************************)  (* *)  (* VERY IMPORTANT PROCEDURE. USED *)  (* TO PRINT ANY WHERE ON THE SCREEN. *)  (* THE LINE NUMBER ON THE SCREEN (J) *) 'END; 'PAYROLL^.REMARKS := NULL; 'PUT(PAYROLL); $END(*REWRITE*);  (*$I+*)  ONCETHRU := TRUE;  END(*OPEN FILE*); ,  PROCEDURE WAIT(TIME:INTEGER);  VAR DELAY:INTEGER;  BEGIN "FOR DELAY:=1 TO TIME DO;  END; "  PROCEDURE PROMPTAT(J:INTEGER; S:STR1STATE:= NULL; 3ZIP:= NULL; ,DEPENDENTS:=0; +YEARSWITHUS:=0; .PAYGRADE:=0; ,ALLOTMENTS:= 0.0; 'END; 'FOR I:= 1 TO MONTHS DO 'BEGIN )WITH PAYROLL^.YEARSPAY[I] DO )BEGIN 2PAY := 0.0; /SOCSEC := 0.0; +DEDUCTIONS := 0.0; ,WORKHOURS := 0; )END; $RESET(PAYROLL,'PAYROLL:PAYROLL.DATA'); $IF IORESULT <> 0 THEN $BEGIN 'REWRITE(PAYROLL,'PAYROLL:PAYROLL.DATA'); '(*$I+*) 'WITH PAYROLL^.HISTORY DO 'BEGIN 2NAME:= NULL;(* NULL DEFINED*) 0STREET:= NULL;(* AS '' UNDER*) 2CITY:= NULL;(* CONSTANTS*) E 0 RECORD TO A *)  (* NIL RECORD. *)  (* *)  (***************************************)   BEGIN $PRINT:='CONSOLE:'; $RESET(P,PRINT); $STOP:=FALSE; $(*$I-*) $CLOSE(PAYROLL,LOCK); R H:INTEGER);   (***************************************)  (* *)  (* PROCEDURE INVOKED WHEN EITHER *)  (* GETINT OR GETREAL DETECT AN ERROR *)  (* IN THE NUMERICAL INPUT. MERELY *)  (* WAITS UNTIL THE USER ACKNOWLEDGES *)  (* THAT HE PROBABLY MADE A MISTAKE BY *)  (* PRESSING 'G'. *)  (* *)  (***************************************)   BEGIN #GOTOXY(0,19); #WRITELN('YOU PROBABLY MADE&POST; &GOTOXY(X,Y); &WRITE(' ':A); $END(*ELSE*); $GOTOXY(X,Y); $READITI(INUM); "UNTIL GOODNUM;  GETINT := INUM;  END(*GETINT *); $  PROCEDURE PRINTPAGE;   (***************************************)  (* *) )GOOFED(H); &END(*IF*); "X:=Y; "IF H = 0 THEN GOODNUM := TRUE &ELSE GOODNUM := FALSE;  END(*READITI*); *  BEGIN(*GETINT *) "GOODNUM := FALSE; "REPEAT $IF NOT ENTERING THEN $BEGIN &GOTOXY(X,Y); &WRITELN(ERASEOS); $END(*IF*) $ELSE $BEGIN *******************************)   VAR GOODNUM:BOOLEAN; 'INUM:INTEGER; $ "  PROCEDURE READITI(VAR X:INTEGER);   VAR Y,H:INTEGER;   BEGIN $(*$I-*) $READ(Y); $(*$I+*) $H:=IORESULT; $IF (H <> 0) OR (Y < MININT) OR (Y > MAXINT) THEN &BEGINY,A:INTEGER):INTEGER;   (***************************************)  (* *)  (* PROCEDURE ALMOST IDENTICAL TO *)  (* GETREAL EXCEPT THAT RANGE IS 0 TO *)  (* 32767. *)  (********$IF NOT ENTERING THEN $BEGIN &GOTOXY(X,Y); &WRITELN(ERASEOS); $END(*IF*) $ELSE $BEGIN &POST; &GOTOXY(X,Y); &WRITE(' ':A); &END(*ELSE*); $GOTOXY(X,Y); $READITR(RNUM); "UNTIL GOODNUM;  GETREAL := RNUM;  END(*GETREAL*); $  FUNCTION GETINT(X,EAL) OR (Y > MAXREAL) THEN $BEGIN (* IF LOOKS FOR ERROR OR OUT*) &GOOFED(H); (*OF RANGE VARIABLE*) $END(*IF*); "IF H = 0 THEN GOODNUM := TRUE &ELSE GOODNUM := FALSE;  X:=Y;  END(*READITR*); $  BEGIN(*GETREAL*) "GOODNUM := FALSE; "REPEAT *)  (***************************************)   VAR Y: REAL; $H: INTEGER;  BEGIN $(*$I-*) (*STOPS COMPILER I/O ERROR*) $READ(Y);(* CHECKING AND READS THE*) $(*$I+*) (* INPUT VARIABLE *) $H:=IORESULT; $IF (H<>0) OR (Y < MINRNPUT.*)  (* IF IT IS NOT IMPORTANT TO RETAIN *)  (* THE SCREEN DISPLAY THE CURSOR GOES *)  (* TO THE X,Y POSITION AND ERASES THE *)  (* REST OF THE LINE BEFORE AWAITING *)  (* THE CORRECT INPUT. *)  (*  (* IF IT IS IMPORTANT TO RETAIN THE *)  (* INTEGRETITY OF THE SCREEN DISPLAY, *)  (* THE CURSOR MOVES TO THE APPROPRIATE *)  (* X,Y POSITION THEN ERASES 'A' SPACES.*)  (* CURSOR THEN RETURNS TO THE X,Y *)  (* POSITION TO RECEOVE A CORRECT I *)  (* PROCEDURE FIRST CHECKS FOR AN *)  (* I/O ERROR, THEN CHECKS FOR A VALUE *)  (* RANGE. IN THIS CASE THE RANGE IS *)  (* 0 TO 9999.99. IF AN ERROR IS MADE *)  (* THE GOOFED PROCEDURE IS INVOKED. *) *)  (* *)  (***************************************)   VAR GOODNUM:BOOLEAN; $RNUM:REAL;    PROCEDURE READITR(VAR X:REAL);   (***************************************)  (* *)  (* *)  (* *)  (* *)  (* *)  (* *)  (*  (***************************************)  (* *)  (* PROCEDURE INSURES AN INPUT OF *)  (* A REAL VARIALBLE AT SCREEN POSITION *)  (* X,Y OF CHARACTER LENGTH A. *)  (* AN I/O ERROR'); #WRITELN(ERASEOS); #WRITELN(' G(OOFED WILL ASK FOR ANOTHER ENTRY'); #SELECTION := GETCHAR(['G']); #READ(CH); #H:=14; #GOTOXY(0,19); #WRITELN(ERASEOS);  END(*GOOFED*);   FUNCTION GETREAL(X,Y,A:INTEGER):REAL;   (* PROCEDURE PRINTS A PAGE FORMAT *)  (* WHICH IS LATER FILLED IN BY *)  (* PROCEDURE POST ABOVE. WHEN THIS *)  (* PROCEDURE IS DONE ALL HEADINGS ARE *)  (* ON THE PAGE BUT NO DATA IS THERE. *)  (* *)  (***************************************)   BEGIN "PAGE(OUTPUT); "PROMPTAT(1,' PAYROLL FILE FOR'); "PROMPTAT(3,' ADDRESS:'); "PROMPTAT(5,' CITY'); "GOTOXY(28,5); "WRITELN(', ST ZIP'); "PROMPTAT(8,' PAYGRADE: '); "GOTOXY PROCEDURE ENTER;   (***************************************)  (* *)  (* PROCEDURES VARIES WHAT IT DOES *)  (* DEPENDING UPON WHETHER ADD, INSERT *)  (* OR UPDATE ARE REQUIRED. VARIABLES *)  (* ARE ACCEPN N1 N2 N3 R1 R2 ±1±1±1в ±1N^ЩЎЉЎGETCHAR(['E','C']); #IF SELECTION = 'E' THEN THATSALL;  END(*INSTRUCTIONS*);  #PROMPTAT(8,'FOR INSTRUCTION EX(ECUTE THE PROGRAM:'); #PROMPTAT(10,' LIB1:FD.INTRO '); #PROMPTAT(12,' OR PAYROLL:FD.INTRO '); #GOTOXY(0,22); #WRITELN(BORDER); #WRITE('ENTER E(XIT TO INFO OR C(ONTINUE'); #SELECTION := *********)   BEGIN "PAGE(OUTPUT); "PROMPTAT(12,' .....THAT''S ALL FOLKS'); "EXIT(PROGRAM);  END(*THATSALL*);   PROCEDURE INSTRUCTIONS;  BEGIN #PAGE(OUTPUT); #WRITELN(' INSTRUCTIONS'); #WRITELN(BORDER);   (***************************************)  (* *)  (* PRINTS A CLOSING MESSAGE AND *)  (* EXITS THE PROGRAM. *)  (* *)  (******************************ESS- *)  (* ING. *)  (* *)  (***************************************)   BEGIN #IF ONCETHRU = FALSE THEN OPENFILE &ELSE RESET(PAYROLL);  END(*FILESTATUS*); "  PROCEDURE THATSALL;  (* IF ANY OTHER PROCEDURE HAS *)  (* BEEN RUN THEN 'ONCETHRU' WILL BE *)  (* TRUE AND THE FILE PAYROLL WILL BE *)  (* RESET. IT THIS IS THE FIRST TIME *)  (* ONCETHRU WILL BE FALSE AND THE FILE *)  (* WILL HAVE TO BE OPENED FOR PROC(19,8); "WRITELN('ALLOTMENTS: $'); "PROMPTAT(10,' DEPENDENTS:'); "GOTOXY(19,10); "WRITELN('IN SERVICE: YRS');  END(*PRINTPAGE*); "  PROCEDURE FILESTATUS;   (***************************************)  (* *) TED THROUGH THE EDITING *)  (* ROUTINES 'GETINT' AND 'GETREAL'. *)  (* *)  (***************************************)   VAR FULLNAME: STRING[20]; $REC,W,I,NUM:INTEGER; $SUCCESSFUL:BOOLEAN;   PROCEDURE INITTWELVE;   (***************************************)  (* *)  (* INITIALIZES TWELVE MONTHS OF *)  (* PAYROLL HISTROY TO ZERO(0). *)  (* *)  (********************* (* USING THE EDITING 'GETINT' AND *)  (* 'GETREAL' PROCEDURES. *)  (* *)  (***************************************)   ENTERING := FALSE; $WRITELN(HOME,ERASE); $PROMPTAT(1,'MO PAY SOCVES 0 TO 12 *)  (* MONTHS OF PAYROLL HISTORY. IF AN *)  (* ENTRY YEAR IS DESIRED USER IS *)  (* PROMPTED ONE AT A TIME FOR PAY, *)  (* SOCSEC DEDUCTION, ALLOTMENTS, AND *)  (* WORKHOURS. EACH VARIABLE IS INPUT *) (*** EXITS PROCEDURE IF *) 0(* ENTRY WAS IN ERROR *) +SUCCESSFUL := FALSE; +EXIT(ENTERIT); )END(*'E'*); "END(*CASE*);  END(*WITH*); $  (***************************************)  (* *)  (* NEXT LOOP RECEI,10,3); "READ(CH); "GOTOXY(0,12); "WRITE('ENTER REMARKS: '); "READLN(PAYROLL^.REMARKS); "GOTOXY(0,12); "WRITELN(PAYROLL^.REMARKS,ERASEOL); "PROMPTAT(23,' ENTER C(ORRECT OR E(RROR'); "SELECTION := GETCHAR(['C','E']); "CASE SELECTION OF $'E': BEGIN (* TO ACCEPTING ANOTHER INPUT. *)  (* *)  (***************************************)  "PAYGRADE := GETINT(13,8,3); "ALLOTMENTS:= GETREAL(32,8,8); "DEPENDENTS := GETINT(13,10,3); "YEARSWITHUS := GETINT(31ON THE PAGE *)  (* FROM WHICH THE VARIABLE SHOULD BE *)  (* TAKEN AND THE MAXIMUM SPACES *)  (* ALLOCATED TO THE VARIABLE. THE *)  (* SPACES ARE USED TO ERASE PREVIOUS *)  (* VARIABLE IF IT WAS INCORRECT PRIOR *) (ZIP); "  (***************************************)  (* *)  (* PROCEDURE 'GETINT' AND 'GETREAL'*)  (* USED BELOW EDITS THE INPUT REAL *)  (* OR INTEGER VARIABLE. PARAMETERS *)  (* ARE THE X,Y POSITION TH PAYROLL^.HISTORY DO  BEGIN "NAME:=FULLNAME; "GOTOXY(11,3); "READLN(STREET); "GOTOXY(11,5); "READ(CITY); "READLN; (* WAS REQUIRED BECAUSE CHAR *) *(* IS LEFT IN KEYBOARD BUFFER *) "GOTOXY(30,5); "READ(STATE); "READLN; "GOTOXY(34,5); "READLN (* *)  (***************************************)   BEGIN  PRINTPAGE; (* PUTS PAGE FORMAT ON SCREEN*)  GOTOXY(18,1);  WRITE(FULLNAME);  PROMPTAT(22,BORDER);  PROMPTAT(23,'ENTER ITEM ASKED FOR AT CURSOR ');  WICURS THE INCORRECT ENTRY IS *)  (* ERASED AND THE USER IS PROMPTED FOR *)  (* ANOTHER ENTRY. USE OF THE *)  (* PROCEDURE EXIT IS CONVENIENT WHEN *)  (* THE OBJECTIVES OF A PROCEDURE HAVE *)  (* BEEN MET AT USER'S DISCRETION. *) ,Y) FOLLOWED BY A *)  (* STRING READ LEAVES SOMETHING IN THE *)  (* INPUT BUFFER. A READ SOLVED IT BUT *)  (* REAL REASON AND BETTER SOLUTION IS *)  (* DESIREABLE. VARIABLES ARE READ *)  (* WITH EDITING PROCEDURES. IF AN *)  (* ERROR OC THE SCREEN,*)  (* THEN PROMPTS AT EACH APPROPRIATE *)  (* POSITION FOR THE STRING OR VARIABLE.*)  (* AFTER STRING INPUTS AN ADDITIONAL *)  (* READLN OR READ(CH) WAS REQUIRED. *)  (* REASON FOR THIS UNKNOWN, HOWEVER, *)  (* SUSPECT GOTOXY(X&WORKHOURS := 0; $END(*WITH*); "END(*FOR*);  END(*INITTWELVE*);   PROCEDURE ENTERIT;   (***************************************)  (* *)  (* ENTERS ONE EMPLOYEE RECORD. *)  (* FIRST PUTS BLANK PAGE ON******************)   VAR NUM: INTEGER;   BEGIN "FOR NUM := 1 TO MONTHS DO "BEGIN $WITH PAYROLL^.YEARSPAY[NUM] DO 4(* YEARSPAY[NUM] *) 4(* IS AN ARRAY 12 *) 4(* MONTHS LONG *) $BEGIN &PAY := 0.0; &SOCSEC := 0.0; &DEDUCTIONS := 0.0; SEC DEDUCTIONS HRS'); $PROMPTAT(22,BORDER); $PROMPTAT(23,'ENTER M(ONTH, Q(UIT'); $W := 3; (*** W IS LINE NUMBER FOR *) -(* GOTYXY(X,W) *) $INITTWELVE;  FOR NUM := 1 TO MONTHS DO  BEGIN(*FOR*) "WITH PAYROLL^.YEARSPAY[NUM] DO "BEGIN(*WITH*) $SELECTION := GETCHAR(['M','Q']); $CASE SELECTION OF &'M': BEGIN -PROMPTAT(22,BORDER); -PROMPTAT(23,'ENTER M(ONTH, Q(UIT'); -PROMPTAT(15,'ENTER PAY: '); -PAY := GETREAL(18,15,8); -PROMPTAT(15,' SOCSEC: '); -SOCSEC := GETREAL(1 PROCEDURE UPDATE(RECNUM:INTEGER);   (***************************************)  (* *)  (* UPDATES EMPLOYEE RECORD BY 1ST *)  (* PLACING A BLANK PAGE ON THE SCREEN *)  (* THEN OVERWRITING THE CURRENT INFO. EMP := TEMP2; -PUT(PAYROLL); -GET(PAYROLL); -REC := REC + 1; +END(*WHILE*); +PAYROLL^ := TEMP; +PUT(PAYROLL); +CLOSE(PAYROLL,LOCK); +RESET(PAYROLL,'PAYROLL:PAYROLL.DATA'); +END(*'I'*); &'Q': EXIT(INSERT); $END(*CASE*);  END(*INSERT*); $ NTIL *)  (* END OF FILE CONDITION. AT THAT TIME *)  (* THE LAST RECORD STILL HAS TO BE *)  (* WRITTEN BECAUSE THE FILE IS ONE *)  (* RECORD LONGER *)  -SEEK(PAYROLL,REC); -TEMP2 := PAYROLL^; -PAYROLL^ := TEMP; -T:= TRUE; +WHILE NOT EOF(PAYROLL) DO +BEGIN -IF FIRSTTIME THEN -BEGIN (* GOES TO NEXT *) 3(* RECORD IF INSERT *) 3(* HAPPENED *) - /SEEK(PAYROLL,REC); /GET(PAYROLL); /FIRSTTIME := FALSE; -END(*IF*);  (* READS AND WRITES RECORDS BELOW U+SEEK(PAYROLL,REC); +ENTERIT; ,(* USER INDICATES IN ENTERIT *) + (* IF THE ENTRY RECORD WAS *) ,(* CORRECT OR NOT AND WAS *) ,(* CORRECT IF SUCCESSFUL *) + +IF SUCCESSFUL THEN PUT(PAYROLL) .ELSE EXIT(INSERT); +REC := REC + 1; +FIRSTTIMECE TO CHANGE MIND*) "REC := 0; "SELECTION := GETCHAR(['I','Q']); "CASE SELECTION OF $'I': BEGIN +RESET(PAYROLL); +WHILE (PNAME > PAYROLL^.HISTORY.NAME) DO +BEGIN -GET(PAYROLL); -REC := REC + 1; +END(*WHILE*); +TEMP := PAYROLL^; "PAGE(OUTPUT); "GOTOXY(4,6); "WRITELN('THE INDIVIDUAL TO BE INSERTED IS '); "GOTOXY(10,11); "WRITELN('--------------------'); "GOTOXY(10,10); "WRITELN(PNAME); "PROMPTAT(22,BORDER); "PROMPTAT(23,'ENTER I(NSERT OR Q(UIT'); $(* GIVES USER CHANT IS *)  (* WRITTEN TO DISK THEN REOPENS IT. *)  (* *)  (***************************************)   VAR REC :INTEGER; $FIRSTTIME : BOOLEAN; $TEMP,TEMP2: PAYDATA;  BEGIN "FILESTATUS; (* OPENS FILE IF NEEDED*) (* THE PREVIOUS TEMP RECORD WRITTEN TO *)  (* THE FILE IN TRIANGULAR FASHION UNTIL*)  (* THE COMPLETE FILE HAS BEEN WRITTEN *)  (* LEAVING THE NEW RECORD INSERTED *)  (* ALPHABETICALLY. THEN CLOSES AND *)  (* LOCKS THE FILE TO ENSURE THAT IY STORE *)  (* THE RECORD THERE, USES THE PROCEDURE*)  (* 'ENTERIT' TO GET NEW RECORDS INPUT *)  (* DATA, AND WRITES THE NEW RECORD TO *)  (* THE INSERT POSITION. EACH RECORD *)  (* IS THEN READ INTO TEMP STORAGE AND *) *)  (* OPENS IF NOT YET OPEN. SHOWS THE *)  (* NAME OF EMPLOYEE TO BE INSERTED. *)  (* SEARCHES FILE UNTIL EMPLOYEES NAME *)  (* IS LESS THAN THE LAST NAME READ. *)  (* AT THIS POINT GOES TO THAT POSITION *)  (* IN THE FILE AND TEMPORARIL'*); $END(*CASE*); "END(*WITH*); !END(*FOR*); !SUCCESSFUL := TRUE;  END(*ENTERIT*);   PROCEDURE INSERT(PNAME:STRING);   (***************************************)  (* *)  (* CHECKS TO SEE IF FILE OPEN AND-W := W +1; -PROMPTAT(22,BORDER); -PROMPTAT(23,'ENTER M(ONTH, Q(UIT'); +END(*'M'*); &'Q': BEGIN (*** EXITS PROCEDURE *) 2(* WHEN USER HAS *) 2(* ENTERED ALL THE *) 2(* MONTHS DESIRED *) -SUCCESSFUL := TRUE; -EXIT(ENTERIT); +END(*'Q8,15,8); -PROMPTAT(15,' DEDUCTIONS: '); -DEDUCTIONS := GETREAL(18,15,8); -PROMPTAT(15,' WORKHOURS: '); -WORKHOURS := GETINT(18,15,3); -GOTOXY(0,W); -WRITELN(NUM:2,' ',PAY:9:2,' ',SOCSEC:8:2,' ', 5DEDUCTIONS:9:2,' ',WORKHOURS:4); *)  (* A MENU IS SHOWN AT THE BOTTOM OF *)  (* THE SCREEN AND THE USERS ASKED TO *)  (* SELECT THE ITEM TO BE CHANGED. THEN *)  (* DEPENDING UPON HIS SELECTION (CASE *)  (* STATEMENT BELOW) THE CURSOR IS *)  (* POSITIONED AND A STRING, INTEGER OR *)  (* REAL READ. INT AND REAL INPUT WITH *)  (* EDITING PROCEDURES 'GETREAL' AND *)  (* 'GETINT'. CONTINUES UPDATING UNTIL *)  (* USER INDICATES HE IS FINISHED AND *)  (* BOOLEAN 'DONE' IS SET TO TRUE. AT *)  (* THAT TIME A SEEK TO  UNTIL (EOF(PAYROLL)) OR (FULLNAME <= PAYROLL^.HISTORY.NAME);  IF EOF(PAYROLL) THEN #BEGIN %ENTERIT; %IF SUCCESSFUL THEN (BEGIN *PUT(PAYROLL); *EXIT(ENTER); ' END(*IF*); #END(*IF*);  IF FULLNAME < PAYROLL^.HISTORY.NAME THEN #BEGIN %INSERT(FULIAL');  GOTOXY(4,6);  WRITELN('YOU HAVE ',NAMELEN,' SPACES AS SHOWN: ');  GOTOXY(10,11);  WRITELN('--------------------');  GOTOXY(10,10);  READLN(FULLNAME);  REC:= 0;  REPEAT "REC:= REC + 1; "GET(PAYROLL); *)  (* *)  (***************************************)   ENTERING := TRUE;  FILESTATUS;  PAGE(OUTPUT);  PROMPTAT(2,' WHAT IS THE INDIVIDUAL''S NAME?');  PROMPTAT(4,' ENTER: LAST, FIRST MIDDLE INITTINUE*)  (* BY UPDATING THE EXISTING RECORD OR *)  (* QUIT. IN THE THIRD CASE THE NAME *)  (* IS FOUND TO FALL WITHIN THE EXIST- *)  (* ING FILE AND THE PROCEDURE INSERT *)  (* IS INVOKED IF THE USER WANTS TO *)  (* CONTINUE.  (* IF 'A' AND 'B' ARE THE CURRENT *)  (* FILE AND 'F' THE NEW RECORD IT *)  (* WOULD BE PLACED AT THE END GIVING *)  (* A NEW FILE 'A','B','F'. IF THAT *)  (* EMPLOYEE ALREADY EXISTS IT TELLS *)  (* YOU AND ASKS IF YOU WANT TO CONHE *)  (* SEQUENCE ALREADY IN BEING OR COULD *)  (* BE PLACED AT THE END OF THE EXIST- *)  (* ING FILE. IF THE LATTER PROCEDURE *)  (* ENTERIT IS INVOKED AND THE RECORD *)  (* PUT AT THE END OF THE FILE (EX: *)  (***************************************)  (* *)  (* ASKS USER FOR THE NAME OF *)  (* EMPLOYEE TO BE ENTERED. THEN *)  (* SEARCHES THE FILE TO SEE IF THEY *)  (* ALREADY EXIST, WOULD LIE IN TTH NEW DATA *) $END(*WITH*); $PROMPTAT(20,' D(ONE OR M(ORE'); $SELECTION := GETCHAR(['D','M']); $IF SELECTION = 'D' THEN DONE := TRUE (ELSE DONE := FALSE;  UNTIL DONE; "SEEK(PAYROLL,RECNUM); "PUT(PAYROLL);  END(*UPDATE*);   BEGIN(*ENTER*) ('5': BEGIN 1GOTOXY(34,5); 1READLN(ZIP); /END(*5*); ('6': PAYGRADE := GETINT(13,8,3); ('7': ALLOTMENTS := GETREAL(32,8,8); ('8': DEPENDENTS := GETINT(13,10,3); ('9': YEARSWITHUS := GETINT(31,10,3); &END(*CASE*);  POST; (* OVERWRITES WIE SELECTION OF ('1': BEGIN 1GOTOXY(18,1); 1READ(NAME); /END(*1*); ('2': BEGIN 1GOTOXY(11,3); 1READ(STREET); /END(*2*); ('3': BEGIN 1GOTOXY(11,5); 1READ(CITY); /END(*3*); ('4': BEGIN 1GOTOXY(30,5); 1READ(STATE); /END(*4*); ','4','5', :'6','7','8','9']); $READ(CH);(* CH USED BECAUSE PROCEDURE *) -(* GETCHAR WORKS ON CHAR *) -(* ONLY *) $ $GOTOXY(0,12); (* ERASES *) $WRITELN(ERASEOS); (* MENU *) $WITH PAYROLL^.HISTORY DO $BEGIN &CAS 4: STATE 7: ALLOTMENTS'); $PROMPTAT(16,'2: STREET 5: ZIP 8: DEPENDENTS'); $PROMPTAT(18,'3: CITY 6: PAYGRADE 9: YEARSWITHUS');  WRITELN; $WRITELN; $WRITE('WHICH ENTRY REQUIRES CHANGE: ',ERASEOS); $SELECTION := GETCHAR(['1','2','3"RESET(PAYROLL); "SEEK(PAYROLL,RECNUM); "GET(PAYROLL); "REPEAT $PRINTPAGE;(*FORMATTED PAGE DISPLAYED *) $POST;(*EMPLOYEE DATA OVERWRITTEN *) )(* MENU CREATED BELOW *) $ $PROMPTAT(12,'ENTER THE ITEM NUMBER TO CHANGE'); $PROMPTAT(14,'1: NAME THE RECORD IS *)  (* ACCOMPLISHED AND THE NEW (REVISED) *)  (* RECORD IS WRITTEN. *)  (* *)  (***************************************)   VAR DONE: BOOLEAN;  BEGIN "PAGE(OUTPUT); LNAME); %EXIT(ENTER); #END(*IF*);  IF FULLNAME = PAYROLL^.HISTORY.NAME THEN #BEGIN %PROMPTAT(12,' FILE FOR THIS INDIVIDUAL EXISTS'); %PROMPTAT(22,BORDER); %PROMPTAT(23,' ENTER U(PDATE OR Q(UIT'); %SELECTION := GETCHAR(['U','Q']); %CASE SELECTION OF ''U': UPDATE(REC); ''Q': EXIT(ENTER); %END(*CASE*); #END(*IF*);  ENTERING := FALSE;  END(*ENTER*);  #WRITELN(ERASEOL);  END(*PROMPTAT*); *  FUNCTION GETCHAR (OKSET: SETOFCHAR): CHAR;  VAR CH: CHAR; $GOOD:BOOLEAN;  BEGIN "REPEAT $READ(KEYBOARD,CH); $IF EOLN(KEYBOARD) THEN CH:=CHR(13); $GOOD:= CH IN OKSET; $IF NOT GOOD THEN WRITE(CHR(7),CHR(7))ITE*);  (*$I+*)  ONCETHRU := TRUE;  END(*OPEN FILE*); ,  PROCEDURE WAIT(TIME:INTEGER);  VAR DELAY:INTEGER;  BEGIN "FOR DELAY:=1 TO TIME DO;  END; "  PROCEDURE PROMPTAT(J:INTEGER; S:STRING);  BEGIN #GOTOXY(0,J); #WRITE(S); 0; .PAYGRADE:=0; ,ALLOTMENTS:= 0.0; 'END; 'FOR I:= 1 TO MONTHS DO 'BEGIN )WITH PAYROLL^.YEARSPAY[I] DO )BEGIN 2PAY := 0.0; /SOCSEC := 0.0; +DEDUCTIONS := 0.0; ,WORKHOURS := 0; )END; 'END; 'PAYROLL^.REMARKS := NULL; 'PUT(PAYROLL); $END(*REWRL,'PAYROLL:PAYROLL.DATA'); $IF IORESULT <> 0 THEN $BEGIN 'REWRITE(PAYROLL,'PAYROLL:PAYROLL.DATA'); '(*$I+*) 'WITH PAYROLL^.HISTORY DO 'BEGIN 2NAME:= NULL; 0STREET:= NULL; 2CITY:= NULL; 1STATE:= NULL; 3ZIP:= NULL; ,DEPENDENTS:=0; +YEARSWITHUS:=#ONCETHRU: BOOLEAN; "ERASEOL,ERASEOS,HOME,ERASE:CHAR; "SELECTION: CHAR; " I: INTEGER; % PRINT: STRING[10]; * *  PROCEDURE OPENFILE;  BEGIN $PRINT:='CONSOLE:'; $RESET(P,PRINT); $STOP:=FALSE; $(*$I-*) $CLOSE(PAYROLL,LOCK); $RESET(PAYROLNTHS] OF PAYYEARHISTORY; -REMARKS: STRING; %END(*PAYDATA*); %  VAR  PAYROLL,PAYBUF: FILE OF PAYDATA; *P: INTERACTIVE; (*P WILL REPRESENT EITHER CONSOLE: OR PRINTER:*) )CH: CHAR; 'STOP: BOOLEAN; %ADDING: BOOLEAN; #ENTERING: BOOLEAN; LOTMENTS: REAL; %END(*PERSONALDATA*); * #PAYYEARHISTORY = PACKED RECORD 1PAY: REAL; .SOCSEC: REAL; *DEDUCTIONS: REAL; +WORKHOURS: INTEGER; %END(*PAYYEARHISTORY*); + #PAYDATA = PACKED RECORD -HISTORY: PERSONALDATA; ,YEARSPAY: PACKED ARRAY [1..MO$ #SETOFCHAR = SET OF CHAR; #PERSONALDATA = PACKED RECORD 0NAME: STRING[NAMELEN]; .STREET: STRING[STREETLEN]; 0CITY: STRING[CITYLEN]; /STATE: STRING[STATELEN]; 1ZIP: STRING[5]; *DEPENDENTS: INTEGER; )YEARSWITHUS: INTEGER; ,PAYGRADE: INTEGER; *AL PROGRAM FILEDEMO;  CONST #BORDER = '****************************************'; #NULL = ''; #NAMELEN = 20; #STREETLEN = 25; #CITYLEN = 17; #STATELEN = 2; #MONTHS = 12; #MAXINT = 300; #MININT = 0; #MAXREAL = 9999.99; #MINREAL = 0.0; $  TYPE N N1 N2 N3 R1 R2 $2ђ&:9| 9N^ЩЎЉЎ 'ELSE IF CH IN [' '..'Z'] THEN WRITE(CH); "UNTIL GOOD; "GETCHAR:=CH;  END(*GETCHAR*);   PROCEDURE POST;  BEGIN  WITH PAYROLL^.HISTORY DO &BEGIN &GOTOXY(18,1);WRITE(NAME); &GOTOXY(11,3);WRITE(STREET); &GOTOXY(11,5);WRITE(CITY:17); &GOTOXY(30,5);WRITE(STATE:2); &GOTOXY(34,5);WRITE(ZIP:5); &GOTOXY(13,8);WRITE(PAYGRADE); &GOTOXY(32,8);WRITE(ALLOTMENTS:6:2); &GOTOXY(13,10);WRITE(DEPENDENTS); &GOTOXY(31,10);WRITE(YEARSWITHUS); % END(*WITH*);  END(*POST*); $  PROCEDURE GOOFED(VAR H:INTEGER) PROMPTAT(23,'ENTER ITEM ASKED FOR AT CURSOR ');  WITH PAYROLL^.HISTORY DO  BEGIN "NAME:=FULLNAME; "GOTOXY(11,3); "READLN(STREET); "GOTOXY(11,5); "READ(CITY); "READLN; "GOTOXY(30,5); "READ(STATE); "READLN; "GOTOXY(34,5); "READLN(ZIP); "PAYGR= 0.0; &SOCSEC := 0.0; &DEDUCTIONS := 0.0; &WORKHOURS := 0; $END(*WITH*); "END(*FOR*);  END(*INITTWELVE*);   PROCEDURE ENTERIT;  BEGIN  PRINTPAGE;  GOTOXY(18,1);  WRITE(FULLNAME);  PROMPTAT(22,BORDER); D(*INSTRUCTIONS*);   PROCEDURE ENTER;  VAR FULLNAME: STRING[20]; $REC,W,I,NUM:INTEGER; $SUCCESSFUL:BOOLEAN;   PROCEDURE INITTWELVE;  VAR NUM: INTEGER;   BEGIN "FOR NUM := 1 TO MONTHS DO "BEGIN $WITH PAYROLL^.YEARSPAY[NUM] DO $BEGIN &PAY :MPTAT(10,' LIB1:FD.INTRO '); #PROMPTAT(12,' OR PAYROLL:FD.INTRO '); #GOTOXY(0,22); #WRITELN(BORDER); #WRITE('ENTER E(XIT TO INFO OR C(ONTINUE'); #SELECTION := GETCHAR(['E','C']); #IF SELECTION = 'E' THEN THATSALL;  EN"PROMPTAT(12,' .....THAT''S ALL FOLKS'); "EXIT(PROGRAM);  END(*THATSALL*);   PROCEDURE INSTRUCTIONS;  BEGIN #PAGE(OUTPUT); #WRITELN(' INSTRUCTIONS'); #WRITELN(BORDER); #PROMPTAT(8,'FOR INSTRUCTION EX(ECUTE THE PROGRAM:'); #PRO DEPENDENTS:'); "GOTOXY(19,10); "WRITELN('IN SERVICE: YRS');  END(*PRINTPAGE*); "  PROCEDURE FILESTATUS;  BEGIN #IF ONCETHRU = FALSE THEN OPENFILE &ELSE RESET(PAYROLL);  END(*FILESTATUS*); "  PROCEDURE THATSALL;  BEGIN "PAGE(OUTPUT); GE;  BEGIN "PAGE(OUTPUT); "PROMPTAT(1,' PAYROLL FILE FOR'); "PROMPTAT(3,' ADDRESS:'); "PROMPTAT(5,' CITY'); "GOTOXY(28,5); "WRITELN(', ST ZIP'); "PROMPTAT(8,' PAYGRADE: '); "GOTOXY(19,8); "WRITELN('ALLOTMENTS: $'); "PROMPTAT(10,'(PAYROLL^.HISTORY.PAYGRADE:=0; (PAYROLL^.HISTORY.ALLOTMENTS:= 0.0; (ADDING := FALSE; &END; &POST; &GOTOXY(X,Y); &WRITE(' ':A); $END(*ELSE*); $GOTOXY(X,Y); $READITI(INUM); "UNTIL GOODNUM;  GETINT := INUM;  END(*GETINT *); $  PROCEDURE PRINTPA END(*READITI*); *  BEGIN(*GETINT *) "GOODNUM := FALSE; "REPEAT $IF NOT ENTERING THEN $BEGIN &GOTOXY(X,Y); &WRITELN(ERASEOS); $END(*IF*) $ELSE $BEGIN &IF ADDING THEN &BEGIN (PAYROLL^.HISTORY.DEPENDENTS:=0; (PAYROLL^.HISTORY.YEARSWITHUS:=0; NTEGER);   VAR Y,H:INTEGER;   BEGIN $(*$I-*) $READ(Y); $(*$I+*) $H:=IORESULT; $IF (H <> 0) OR (Y < MININT) OR (Y > MAXINT) THEN &BEGIN )GOOFED(H); &END(*IF*); "X:=Y; "IF H = 0 THEN GOODNUM := TRUE &ELSE GOODNUM := FALSE; &POST; &GOTOXY(X,Y); &WRITE(' ':A); &END(*ELSE*); $GOTOXY(X,Y); $READITR(RNUM); "UNTIL GOODNUM;  GETREAL := RNUM;  END(*GETREAL*); $  FUNCTION GETINT(X,Y,A:INTEGER):INTEGER;  VAR GOODNUM:BOOLEAN; 'INUM:INTEGER; $ "  PROCEDURE READITI(VAR X:IN &GOOFED(H); $END(*IF*); "IF H = 0 THEN GOODNUM := TRUE &ELSE GOODNUM := FALSE;  X:=Y;  END(*READITR*); $  BEGIN(*GETREAL*) "GOODNUM := FALSE; "REPEAT $IF NOT ENTERING THEN $BEGIN &GOTOXY(X,Y); &WRITELN(ERASEOS); $END(*IF*) $ELSE $BEGIN  FUNCTION GETREAL(X,Y,A:INTEGER):REAL;  VAR GOODNUM:BOOLEAN; $RNUM:REAL;    PROCEDURE READITR(VAR X:REAL);  VAR Y: REAL; $H: INTEGER;  BEGIN $(*$I-*) $READ(Y); $(*$I+*) $H:=IORESULT; $IF (H<>0) OR (Y < MINREAL) OR (Y > MAXREAL) THEN $BEGI;  BEGIN #GOTOXY(0,19); #WRITELN('YOU PROBABLY MADE AN I/O ERROR'); #WRITELN(ERASEOS); #WRITELN(' G(OOFED WILL ASK FOR ANOTHER ENTRY'); #SELECTION := GETCHAR(['G']); #READ(CH); #H:=14; #GOTOXY(0,19); #WRITELN(ERASEOS);  END(*GOOFED*);  ADE := GETINT(13,8,3); "ALLOTMENTS:= GETREAL(32,8,8); "DEPENDENTS := GETINT(13,10,3); "YEARSWITHUS := GETINT(31,10,3); "READ(CH); "GOTOXY(0,12); "WRITE('ENTER REMARKS: '); "READLN(PAYROLL^.REMARKS); "GOTOXY(0,12); "WRITELN(PAYROLL^.REMARKS,ERASEOL); "PROMPTAT(23,' ENTER C(ORRECT OR E(RROR'); "SELECTION := GETCHAR(['C','E']); "CASE SELECTION OF $'E': BEGIN +SUCCESSFUL := FALSE; +EXIT(ENTERIT); )END(*'E'*); "END(*CASE*);  END(*WITH*); $ENTERING := FALSE; $WRITELN(HOME,ERASE); $PROMPTAT(1,$PROMPTAT(20,' D(ONE OR M(ORE'); $SELECTION := GETCHAR(['D','M']); $IF SELECTION = 'D' THEN DONE := TRUE (ELSE DONE := FALSE;  UNTIL DONE; "SEEK(PAYROLL,RECNUM); "PUT(PAYROLL);  END(*UPDATE*);   BEGIN(*ENTER*)  ENTERING := TRUE;  FILESTATU5': BEGIN 1GOTOXY(34,5); 1READLN(ZIP); /END(*5*); ('6': PAYGRADE := GETINT(13,8,3); ('7': ALLOTMENTS := GETREAL(32,8,8); ('8': DEPENDENTS := GETINT(13,10,3); ('9': YEARSWITHUS := GETINT(31,10,3); &END(*CASE*); &POST; $END(*WITH*); N &CASE SELECTION OF ('1': BEGIN 1GOTOXY(18,1); 1READ(NAME); /END(*1*); ('2': BEGIN 1GOTOXY(11,3); 1READ(STREET); /END(*2*); ('3': BEGIN 1GOTOXY(11,5); 1READ(CITY); /END(*3*); ('4': BEGIN 1GOTOXY(30,5); 1READ(STATE); /END(*4*); (' 6: PAYGRADE 9: YEARSWITHUS');  WRITELN; $WRITELN; $WRITE('WHICH ENTRY REQUIRES CHANGE: ',ERASEOS); $SELECTION := GETCHAR(['1','2','3','4','5', :'6','7','8','9']); $READ(CH); $GOTOXY(0,12); $WRITELN(ERASEOS); $WITH PAYROLL^.HISTORY DO $BEGI"SEEK(PAYROLL,RECNUM); "GET(PAYROLL); "REPEAT $PRINTPAGE; $POST; $PROMPTAT(12,'ENTER THE ITEM NUMBER TO CHANGE'); $PROMPTAT(14,'1: NAME 4: STATE 7: ALLOTMENTS'); $PROMPTAT(16,'2: STREET 5: ZIP 8: DEPENDENTS'); $PROMPTAT(18,'3: CITY YROLL); +CLOSE(PAYROLL,LOCK); +RESET(PAYROLL,'PAYROLL:PAYROLL.DATA'); +END(*'I'*); &'Q': EXIT(INSERT); $END(*CASE*);  END(*INSERT*); $  PROCEDURE UPDATE(RECNUM:INTEGER);  VAR DONE: BOOLEAN;  BEGIN "PAGE(OUTPUT); "RESET(PAYROLL); EN -BEGIN /SEEK(PAYROLL,REC); /GET(PAYROLL); /FIRSTTIME := FALSE; -END(*IF*); -SEEK(PAYROLL,REC); -TEMP2 := PAYROLL^; -PAYROLL^ := TEMP; -TEMP := TEMP2; -PUT(PAYROLL); -GET(PAYROLL); -REC := REC + 1; +END(*WHILE*); +PAYROLL^ := TEMP; +PUT(PAREC + 1; +END(*WHILE*); +TEMP := PAYROLL^; +SEEK(PAYROLL,REC); +ADDING:=TRUE; +ENTERIT; +ADDING:=FALSE; +IF SUCCESSFUL THEN PUT(PAYROLL) .ELSE EXIT(INSERT); +REC := REC + 1; +FIRSTTIME:= TRUE; +WHILE NOT EOF(PAYROLL) DO +BEGIN -IF FIRSTTIME TH"WRITELN(PNAME); "PROMPTAT(22,BORDER); "PROMPTAT(23,'ENTER I(NSERT OR Q(UIT'); "REC := 0; "SELECTION := GETCHAR(['I','Q']); "CASE SELECTION OF $'I': BEGIN +RESET(PAYROLL); +WHILE (PNAME > PAYROLL^.HISTORY.NAME) DO +BEGIN -GET(PAYROLL); -REC := :STRING);  VAR REC :INTEGER; $FIRSTTIME : BOOLEAN; $TEMP,TEMP2: PAYDATA;  BEGIN "FILESTATUS; "PAGE(OUTPUT); "GOTOXY(4,6); "WRITELN('THE INDIVIDUAL TO BE INSERTED IS '); "GOTOXY(10,11); "WRITELN('--------------------'); "GOTOXY(10,10); +1; -PROMPTAT(22,BORDER); -PROMPTAT(23,'ENTER M(ONTH, Q(UIT'); +END(*'M'*); &'Q': BEGIN -SUCCESSFUL := TRUE; -EXIT(ENTERIT); +END(*'Q'*); $END(*CASE*); "END(*WITH*); !END(*FOR*); !SUCCESSFUL := TRUE;  END(*ENTERIT*);   PROCEDURE INSERT(PNAME; -PROMPTAT(15,' DEDUCTIONS: '); -DEDUCTIONS := GETREAL(18,15,8); -PROMPTAT(15,' WORKHOURS: '); -WORKHOURS := GETINT(18,15,3); -GOTOXY(0,W); -WRITELN(NUM:2,' ',PAY:9:2,' ',SOCSEC:8:2,' ', 5DEDUCTIONS:9:2,' ',WORKHOURS:4); -W := W $SELECTION := GETCHAR(['M','Q']); $CASE SELECTION OF &'M': BEGIN -PROMPTAT(22,BORDER); -PROMPTAT(23,'ENTER M(ONTH, Q(UIT'); -PROMPTAT(15,'ENTER PAY: '); -PAY := GETREAL(18,15,8); -PROMPTAT(15,' SOCSEC: '); -SOCSEC := GETREAL(18,15,8)'MO PAY SOCSEC DEDUCTIONS HRS'); $PROMPTAT(22,BORDER); $PROMPTAT(23,'ENTER M(ONTH, Q(UIT'); $W := 3; $INITTWELVE;  FOR NUM := 1 TO MONTHS DO  BEGIN(*FOR*) "WITH PAYROLL^.YEARSPAY[NUM] DO "BEGIN(*WITH*) S;  PAGE(OUTPUT);  PROMPTAT(2,' WHAT IS THE INDIVIDUAL''S NAME?');  PROMPTAT(4,' ENTER: LAST, FIRST MIDDLE INITIAL');  GOTOXY(4,6);  WRITELN('YOU HAVE ',NAMELEN,' SPACES AS SHOWN: ');  GOTOXY(10,11);  WRITELN('--------------------');  GOTOXY(10,10);  READLN(FULLNAME);  REC:= 0;  REPEAT "REC:= REC + 1; "GET(PAYROLL);  UNTIL (EOF(PAYROLL)) OR (FULLNAME <= PAYROLL^.HISTORY.NAME);  IF EOF(PAYROLL) THEN #BEGIN %ADDING:=TRUE; %ENTERIT; %ADDING:=FALSE; %IF SUCCESSFUL THEN PUT(PAYROLL); %E+PROMPTAT(23,'ENTER C(ONTINUE OR E(XIT LIST'); +SELECTION := GETCHAR(['C','E']); +IF SELECTION = 'E' THEN EXIT(LIST); +UNTIL EOF(PAYROLL); +END(*'H'*); $'N': BEGIN +WRITELN(HOME,ERASE); +PROMPTAT(1,'ENTER THE NAME: '); +GOTOXY(4,6); +WRITELN('YOUITELN(ERASEOS); -FOR I := 1 TO 15 DO -BEGIN /IF NOT EOF(PAYROLL) THEN /BEGIN 1WRITELN(RECNUM,' ',PAYROLL^.HISTORY.NAME); 1RECNUM:= RECNUM+1; 1GET(PAYROLL); /END(*IF*); -END(*FOR*); +PROMPTAT(22,BORDER); GETINT(30,18,5); +IF REC = 0 THEN EXIT(ONEREC); +SEEK(PAYROLL,REC); +GET(PAYROLL); +LISTONE; +READ(CH); +EXIT(ONEREC); )END(*'I'*); $'H': BEGIN +PAGE(OUTPUT); +PROMPTAT(1,'REC NAME'); +GET(PAYROLL); +RECNUM:= 1; +REPEAT -GOTOXY(0,3);WRGRAM'); "PROMPTAT(18,' ***** SELECT ONE *****'); "SELECTION:=GETCHAR(['I','E','H','N','Q']);  END(*SONEREC*); $  BEGIN(*ONEREC*)  REPEAT "SONEREC; "CASE SELECTION OF $'I': BEGIN +GOTOXY(0,18); +WRITE('ENTER THE RECORD NUMBER NOW: '); +REC := "PROMPTAT(6,' ****************************'); "PROMPTAT(8,' I( KNOW WHICH RECORD NUMBER'); "PROMPTAT(10,' H(ELP ME FIND THE RECORD NUMBER'); "PROMPTAT(12,' N(AME KNOWN'); "PROMPTAT(14,' Q(UIT'); "PROMPTAT(16,' E(XIT PROEND(*LISTALL*);  &  PROCEDURE ONEREC;  VAR RECNUM,REC,I:INTEGER;  S:STRING[NAMELEN]; $  PROCEDURE SONEREC;  BEGIN  RESET(PAYROLL); "WRITELN(HOME,ERASE); "PROMPTAT(5,' MENU FOR LIST ONE RECORD');  SELECTION:= GETCHAR(['A','O','Q']);  END(*MENU2*);   PROCEDURE LISTALL;  BEGIN "RESET(PAYROLL); "GET(PAYROLL); "REPEAT $LISTONE; $CASE SELECTION OF &'Q': EXIT(LISTALL); &'T': TWELVEMO; $END(*CASE*); $GET(PAYROLL);  UNTIL EOF(PAYROLL);  END(*LISTONE*); &  PROCEDURE MENU2;  BEGIN "WRITELN(HOME,ERASE); "PROMPTAT(4,' LIST'); "PROMPTAT(5,' ********'); "PROMPTAT(7,' A(LL RECORDS'); "PROMPTAT(9,' O(NE RECORD'); "PROMPTAT(11,' Q(UIT'); "PROMPTAT(15,' ****SELECT ONE**** '); $PROMPTAT(15,' T(WELVE MONTH PAY HISTORY'); $PROMPTAT(17,' N(EXT EMPLOYEE'); $PROMPTAT(19,' Q(UIT LIST'); $PROMPTAT(22,' ***** SELECT ONE *****'); $SELECTION:= GETCHAR(['N','T','Q']); $IF SELECTION = 'T' THEN TWELVEMO; "END(*IF*);  D(*FOR*); "PROMPTAT(23,'ENTER C(ONTINUE WHEN READY'); "SELECTION := GETCHAR(['C']);  END(*TWELVEMO*); "  PROCEDURE LISTONE;  BEGIN  PRINTPAGE;  IF NOT EOF(PAYROLL) THEN "BEGIN $POST; $WITH PAYROLL^ DO &BEGIN (PROMPTAT(12,REMARKS); &END; OTOXY(0,9); "FOR I := 1 TO MONTHS DO "BEGIN $IF PAYROLL^.YEARSPAY[I].WORKHOURS <> 0 THEN $BEGIN &WITH PAYROLL^.YEARSPAY[I] DO &BEGIN (WRITELN(I:2,' ',PAY:9:2,' ',SOCSEC:8:2,' ', 6DEDUCTIONS:9:2,' ',WORKHOURS:4); &END(*WITH*); $END(*IF*); "ENDURE TWELVEMO;  VAR MO,I,WRKHRS: INTEGER;  BEGIN "WRITELN(HOME,ERASE); "PROMPTAT(2,' TWELVE MONTH PAY HISTORY FOR '); "GOTOXY(12,4);WRITE(PAYROLL^.HISTORY.NAME); "PROMPTAT(6,'MO PAY SOCSEC DEDUCTIONS HRS'); "PROMPTAT(7,BORDER); "G%PROMPTAT(22,BORDER); %PROMPTAT(23,' ENTER U(PDATE OR Q(UIT'); %SELECTION := GETCHAR(['U','Q']); %CASE SELECTION OF ''U': UPDATE(REC); ''Q': EXIT(ENTER); %END(*CASE*); #END(*IF*);  ENTERING := FALSE;  END(*ENTER*);   PROCEDURE LIST;   PROCEXIT(ENTER); #END(*IF*);  IF FULLNAME < PAYROLL^.HISTORY.NAME THEN #BEGIN %INSERT(FULLNAME); %EXIT(ENTER); #END(*IF*);  IF FULLNAME = PAYROLL^.HISTORY.NAME THEN #BEGIN %PROMPTAT(12,' FILE FOR THIS INDIVIDUAL EXISTS'); HAVE ',NAMELEN,' SPACES AS SHOWN: '); +GOTOXY(10,11); +WRITELN('--------------------'); +GOTOXY(10,10); +READLN(S); +REC:=0; +REPEAT -GET(PAYROLL); -REC:= REC + 1; +UNTIL (PAYROLL^.HISTORY.NAME = S) OR EOF(PAYROLL); +GOTOXY(4,10); +IF EOF(PAYROLL) THEN -WRITELN('RECORD FOR ',S,' NOT FOUND') /ELSE /BEGIN 1WRITELN('THE RECORD NUMBER FOR '); 1WRITELN(' ',S,' IS: ',REC,ERASEOL); /END(*ELSE*); /PROMPTAT(22,BORDER); /PROMPTAT(23,'ENTER C(ONTINUE WHEN READY '); /SELECTION := GETCHAR(['C'])"SELECTION:= GETCHAR(['I','E','L','U','D','S','P','Q','R']);  END(*MENU*);   BEGIN(*MAIN PROGRAM*) #ERASEOL:=CHR(16);ERASEOS:=CHR(11); #ERASE:=CHR(12);HOME:=CHR(25); #ENTERING := FALSE; #STOP := FALSE; #ONCETHRU := FALSE; #REPEAT; %MENU; %CASEE'); "PROMPTAT(13,' S(EARCH'); "PROMPTAT(15,' P(ROCESS'); "PROMPTAT(17,' Q(UIT'); "PROMPTAT(19,' R(EMOVE >>ENTIRE<< FILE'); "PROMPTAT(21,'***** SELECT BY FIRST LETTER *****'); "PROMPTAT(23,' WHICH ONE?:'); RGEIT*);   PROCEDURE MENU;  BEGIN "WRITELN(HOME,ERASE); "PROMPTAT(1,' PAYROLL FILE DEMONSTRATION'); "PROMPTAT(3,' I(NSTRUCTIONS'); "PROMPTAT(5,' E(NTER'); "PROMPTAT(7,' U(PDATE'); "PROMPTAT(9,' L(IST'); "PROMPTAT(11,' D(ELETTAT(22,BORDER);  PROMPTAT(23,'ENTER C(ONTINUE OR E(XIT PROGRAM');  SELECTION := GETCHAR(['C','E']);  IF SELECTION = 'E' THEN THATSALL;  END(*PROCESS*);   PROCEDURE PURGEIT;  BEGIN "CLOSE(PAYROLL,PURGE); "CLOSE(PAYROLL,LOCK); "THATSALL;  END(*PU)(*****************************) )  WRITELN(HOME,ERASE);  PROMPTAT(10,'YOUR PROCESS WOULD GO HERE;');  PROMPTAT(12,' HOWEVER, THE PURPOSE OF THIS');  PROMPTAT(14,' PROGRAM IS ONLY TO DEMONSTRATE');  PROMPTAT(16,' DISK HANDLING');  PROMPC']);  END(*SEARCH*);   PROCEDURE PROCESS;  BEGIN )(*****************************) )(* *) )(* YOUR PROCESSING OF THE *) )(* DATA WOULD OCCUR HERE *) )(* *) RECORD IS NOT IN FILE'); "END(*IF*)  ELSE "BEGIN $PROMPTAT(14,'THE RECORD NUMBER FOR EMPLOYEE'); $GOTOXY(5,16); $WRITELN(FULLNAME,' IS: ',REC); "END(*ELSE*);  PROMPTAT(22,BORDER);  PROMPTAT(23,'ENTER C(ONTINUE TO EXIT');  SELECTION := GETCHAR(['----');  REPEAT "GOTOXY(10,10); "READLN(FULLNAME);  UNTIL LENGTH(FULLNAME) > 2;  REC:= 0;  REPEAT "REC:= REC + 1; "GET(PAYROLL);  UNTIL EOF(PAYROLL) OR (FULLNAME = PAYROLL^.HISTORY.NAME);  IF EOF(PAYROLL) THEN "BEGIN $GOTOXY(0,14); $WRITELN(' BEGIN  FILESTATUS;  PAGE(OUTPUT);  PROMPTAT(2,' WHAT IS THE INDIVIDUAL''S NAME?');  PROMPTAT(4,' ENTER: LAST, FIRST MIDDLE INITIAL');  GOTOXY(4,6);  WRITELN('YOU HAVE ',NAMELEN,' SPACES AS SHOWN: ');  GOTOXY(10,11);  WRITELN('----------------"SEEK(PAYROLL,REC-1); "PUT(PAYROLL); "RESET(PAYROLL); "REPEAT $PAYROLL^ := PAYBUF^; $PUT(PAYROLL); $GET(PAYBUF); "UNTIL EOF(PAYBUF); "CLOSE(PAYBUF,PURGE);  END(*DELETE*);   PROCEDURE SEARCH;  VAR REC:INTEGER; $FULLNAME:STRING[NAMELEN]; BUF,'PAY.DATA'); "REPEAT $PAYBUF^ := PAYROLL^; $PUT(PAYBUF); $REC := REC + 1; $GET(PAYROLL); $IF REC = RECNUM THEN GET(PAYROLL); "UNTIL EOF(PAYROLL); "CLOSE(PAYROLL,PURGE); "RESET(PAYBUF); "GET(PAYBUF); "REWRITE(PAYROLL,'PAYROLL:PAYROLL.DATA'); T(22,' ENTER 0 FOR THE RECORD NUMBER AND'); "PROMPTAT(23,' USE THE L(IST FUNCTION TO FIND IT'); "GOTOXY(12,12); "WAIT(8000); "WRITE('RECORD #: '); "RECNUM := GETINT(22,12,5); "IF RECNUM = 0 THEN EXIT(DELETE); "REC:=0; "RESET(PAYROLL); "REWRITE(PAY PROCEDURE DELETE;  VAR REC,RECNUM:INTEGER;  BEGIN "FILESTATUS; "WRITELN(HOME,ERASE); "PROMPTAT(2,' ENTER THE RECORD NUMBER TO BE DELETED'); "PROMPTAT(3,BORDER); "PROMPTAT(20,BORDER); "PROMPTAT(21,'IF YOU DO NOT KNOW THE RECORD NUMBER'); "PROMPTA; )END(*'N'*); %'Q': EXIT(ONEREC); %'E': THATSALL; "END(*CASE*);  UNTIL FALSE;  END(*ONEREC*); & &  BEGIN(*LIST*) "FILESTATUS; "MENU2; "CASE SELECTION OF $'Q': EXIT(LIST); $'A': LISTALL; $'O': ONEREC;  END(*SELECT*);  END(*LIST*);  SELECTION OF ''I': INSTRUCTIONS; ''E': ENTER; ''U': ENTER; ''L': LIST; ''R': PURGEIT; ''D': DELETE; ''S': SEARCH; ''P': PROCESS; ''Q': STOP := TRUE; %END(*CASE*); #UNTIL STOP; #CLOSE(PAYROLL,LOCK); #THATSALL;  END. П¦(****************************************ЧП¦ENTER M(ONTH, Q(UITЧПё®ё М¶ ШИЎт©ЃЧў+¶  €•¤Мі  П«„б©„б№цЧ¦(****************************************ПЧ¦ENTER M(ONTH, Q(UITП¦ENTER PAY: ЧПЩПЅЧ¦ Нћ Н¶¦ENTER REMARKS: ЧНћ¶©ЃЧўPНћ¶Нћ Н¶©ЃЧўНћ¶©„аНћ¶Нћ¦ ENTER C(ORRECT OR E(RRORЧПіU( П«„б©„б№ ёћ№ ¬EE№«„Ы¶©„ЮНћ¶©„ЭНћ¶Нћ¦(MO PAY SOCSEC DEDUCTIONS HRSЧІНћЧ¦(****************************************ПЧ¦ENTER ITEM ASKED FOR AT CURSOR П©ЃЧМШІЄ Н¶Шў Нћ¶Нћ Н¶ШўНћ¶НћН¶Шў!Нћ¶Нћ"Н¶Шў#Нћ¶НћШў( П љШў) ПЅШў& П љШў' П љ¶Ґ„ШTRO ПН¶¦(****************************************ЧНћ¶Нћ¶¦ ENTER E(XIT TO INFO OR C(ONTINUEЧНћі( П«„б©„бEГЎП­„М МШЩИЎ=©ЃЧў+Ш €•¤МЪіIЅЪўіЧЅЪўіЅЪўљШ‚М№ц­DRП Н¶ FOLKSЧПћ­¦8¶ Нћ¶¦ INSTRUCTIONSЧНћ¶Нћ¶¦(****************************************ЧНћ¶Нћ¦%FOR INSTRUCTION EX(ECUTE THE PROGRAM:ЧП Ч¦" LIB1:FD.INTRO П Ч¦" OR PAYROLL:FD.INП¦ CITYЧПН¶Ч¦ , ST ZIPНћ¶Нћ¦ PAYGRADE: ЧПН¶¦ ALLOTMENTS: $ЧНћ¶Нћ Ч¦ DEPENDENTS:П Н¶¦IN SERVICE: YRSЧНћ¶Нћ­и ©„ЬЇЎП№ҐЃЧНћ­ ¶ Нћ ¦ .....THAT'S ALLЖјЅ­I T¶ЖН ћ"МЩЛЪЙЌЪЗ,ЕЌЎЖПШЪљЩГЎё№ё­ћ: М©„Ы“ЎЬЫН¶©„ЯНћ¶Нћ№=©„ЪЎ'©ЃЧў&љ©ЃЧў'љ©ЃЧў(љ©ЃЧў)іјЅ«„ЪПЬЫН¶ ЪНћЬЫНЖО ЭЎцЮМ­o z ¶ Нћ¦ PAYROLL FILE FORЧПЧ¦ ADDRESS: FOR ANOTHER ENTRYНћ¶НћіЂ П«„б¶Ґ„ШНћШљН¶©„ЯНћ¶Нћ­ўК¶ЖНћ"МЫЛЖјіLµЌЖјі Fц?±ЌЎЖПЫГЎё№ёШЖјЅ­ћP М©„Ы“ЎЬЫН¶©„ЯНћ¶Нћ№ПЬЫН¶ ЪНћЬЫНЖО ЭЎцЖћ Н¶Шў Нћ Н¶ШўНћН¶Шў!Нћ"Н¶Шў#Нћ Н¶ШЈ(Н ћ Н¶Шў)јНћ Н¶ШЈ&Н ћ Н¶ШЈ'Н ћ­ШЁН¶Ч¦YOU PROBABLY MADE AN I/O ERRORНћ¶Нћ¶©„ЯНћ¶Нћ¶Ч¦% G(OOFED WILL ASKц©ЃЧўЧ¦ЄPҐЃЧНћ«„Ь­Ec $МШМЩЪИЎЩ‚М№ц­ЖШЄPЩН¶ЖНћ¶©„аНћ¶Нћ­¦R2¶ЖНћ¶Н Ў МКЖј‹МК“Ў¶Нћ¶Нћ№Кіяяяяяяя‹Ў ¶КНћКЎцКМ­Tf$ n©ЃЧМН¶ШНҐ„г¦CONSOLE:ЧЄ Ґѓ«Ґ„гНћ«„ЩҐЃЧНҐЃЧ¦PAYROLL:PAYROLL.DATAЧНћ"ЛЎфҐЃЧЧ¦PAYROLL:PAYROLL.DATAН©ЃЧМШЧ¦ЄШў Ч¦ЄШўЧ¦ЄШў!Ч¦ЄШў#Ч¦ЄШў&љШў'љШў(љШў)іXЅ«„в М©„вШИЎA©ЃЧў+©„в €•¤МЩіЅЩўі)ЅЩўі(ЅЩўљ©„в‚«„в№"Ђ* $ FILEDEMO SOCSEC: ПЩўПЅ¦ DEDUCTIONS: ЧПЩўПЅЧ¦ WORKHOURS: ПЩўП љ¶Н¶¶ Н ћ¶ Нћ¶Щј Нћ¶ Нћ¶ЩўјНћ¶¦ ЧНћ¶Щўј Нћ¶¦ ЧНћ¶ЩюН ћ¶Нћ¶‚ёЧ¦(****************************************ПЧ¦ENTER M(ONTH, Q(UITП№ёћ№¬;MQ№ µ¶ ‚ё №фё­& nЖШЄPП ¶ НћН¶¦&THE INDIVIDUAL TO BE INSERTED IS ЧНћ¶Нћ Н¶Ч¦--------------------Нћ¶Нћ Н¶ЖНћ¶Нћћ¶Нћ Н¶ЖНћ¶НћМҐЃЧНћЩ‚М©ЃЧЖЇҐЃЧН ЌЎт НҐЃЧН ЎB¶Ч¦ RECORD FOR Нћ¶ЖНћ¶Ч¦ NOT FOUNDНћ¶Нћ№t¶Ч¦THE RECORD NUMBER FOR Нћ¶Нћ¶Ч¦ Нћ¶ЖНћ¶¦ IS: ЧНћ¶ЩН ћ¶©„аНћ***********ПЧ¦ENTER C(ONTINUE OR E(XIT LISTПі( П«„б©„бEГЎћҐЃЧН Ўф№о¶©„ЮНћ¶©„ЭНћ¶НћЧ¦ENTER THE NAME: ПН¶¦ YOU HAVE ЧНћ¶Н ћ¶Ч¦ SPACES AS SHOWN: Нћ¶Нћ Н¶¦--------------------ЧНER NOW: ЧНћП МЩГЎћҐЃЧЩНћҐЃЧНћ®¶Ґ„ШНћћ№о¶ НћЧ¦REC NAMEПҐЃЧНћМН¶©„ЯНћ¶НћММШжИЎLҐЃЧН “Ў:¶ЪН ћ¶¦ ЧНћ¶©ЃЧНћ¶НћЪ‚МҐЃЧНћШ‚М№цЧ¦(*****************************" I( KNOW WHICH RECORD NUMBERЧП ¦& H(ELP ME FIND THE RECORD NUMBERЧП ¦ N(AME KNOWNЧП¦ Q(UITЧП¦ E(XIT PROGRAMЧП¦ ***** SELECT ONE *****ЧПі C П«„б­FО©„б№рН¶¦ENTER THE RECORD NUMBЧ¦ ****SELECT ONE**** Пі@Ђ П«„б­ІҐЃЧНћҐЃЧНћ®©„б№ ћ№®№¬QT№ҐЃЧНћҐЃЧН Ўц­4LҐЃЧНћ¶©„ЮНћ¶©„ЭНћ¶Нћ¦ MENU FOR LIST ONE RECORDЧП¦ ****************************ЧП¦HISTORYЧП¦ N(EXT EMPLOYEEЧПЧ¦ Q(UIT LISTП¦ ***** SELECT ONE *****ЧПі*@ П«„б©„бTГЎ®­* є¶©„ЮНћ¶©„ЭНћ¶Нћ¦ LISTЧПЧ¦ ********П¦ A(LL RECORDSЧП Ч¦ O(NE RECORDП Ч¦ Q(UITП¶ЩН ћ¶ Нћ¶Ьј Нћ¶Ч¦ Нћ¶ЬўјНћ¶¦ ЧНћ¶Ьўј Нћ¶¦ ЧНћ¶ЬюН ћ¶НћЩ‚М№ф¦ENTER C(ONTINUE WHEN READYЧПі П«„б­8дC °П ҐЃЧН “ЎцП©ЃЧМ ШўП¦ T(WELVE MONTH PAY «„Ы­ ¶©„ЮНћ¶©„ЭНћ¶Нћ¦% TWELVE MONTH PAY HISTORY FOR ЧП Н¶©ЃЧНћ¦'MO PAY SOCSEC DEDUCTIONS HRSЧПЧ¦(****************************************П НМ МЩЫИЎт©ЃЧў+Щ €•¤юЛЎц©ЃЧў+Щ €•¤МћҐЃЧН Ж©ЃЧґЌЎцҐЃЧН Ў«„ЪО«„ЪзЎҐЃЧНћћЖ©ЃЧµЎЖОћЖ©ЃЧЇЎф Ч¦' FILE FOR THIS INDIVIDUAL EXISTSП¦(****************************************ЧП¦ ENTER U(PDATE OR Q(UITЧПіў" П«„б©„б№ жО№ћ№¬ћQU№ «„ЫП ¶ Нћ¦! WHAT IS THE INDIVIDUAL'S NAME?ЧПЧ¦$ ENTER: LAST, FIRST MIDDLE INITIALПН¶¦ YOU HAVE ЧНћ¶Н ћ¶Ч¦ SPACES AS SHOWN: Нћ¶Нћ Н¶¦--------------------ЧНћ¶Нћ Н¶ЖНћ¶НћМж‚МҐЃЧНў Нћ№ф Н¶ЪўНћ№}Н¶Ъў!Нћ№j"Н¶Ъў#Нћ¶Нћ№OЪў( П љ№BЪў) ПЅ№4Ъў& П љ№'Ъў' П љ№¬ћ19№ў“‚q`G<0%П¦ D(ONE OR M(OREЧПі*  П«„б©„бDГЎМ№МЩЎтҐЃЧШНћҐЃЧНћ­Ш?Zv nENTSЧПЧ¦%2: STREET 5: ZIP 8: DEPENDENTSП¦&3: CITY 6: PAYGRADE 9: YEARSWITHUSЧП¶Нћ¶Нћ¶¦WHICH ENTRY REQUIRES CHANGE: ЧНћ¶©„ЯНћію П«„б¶Ґ„ШНћ Н¶©„ЯНћ¶Нћ©ЃЧМ©„б№цН¶ЪНћ№ф Н¶ЪЂЁЖЂХЖ-ЁЂЁҐЃЧНћҐЃЧНћК+‚М+№ф©ЃЧЖЂХЁЂЁҐЃЧНћҐЃЧНћҐЃЧ¦PAYROLL:PAYROLL.DATAЧНћ№ћ№¬IQ№ ­їц "¶ НћҐЃЧНћҐЃЧШНћҐЃЧНћП П Ч¦ENTER THE ITEM NUMBER TO CHANGEП¦%1: NAME 4: STATE 7: ALLOTMЧ¦(****************************************ПЧ¦ENTER I(NSERT OR Q(UITПМ+і П«„б©„б№тҐЃЧНћЖ©ЃЧ±ЎҐЃЧНћК+‚М+№цЖЂХ©ЃЧЁЂЁҐЃЧК+Нћ«„Ъ®«„Ъ¶Ў ҐЃЧНћ№ћК+‚М+М,ҐЃЧН “ЎTК,ЎҐЃЧК+НћҐЃЧНћМ,ҐЃЧК+НћЖ-©ЃЧЁЂЁ©ЃЧЖЂХЁ¶НћЧ¦(****************************************ПЧ¦ENTER C(ONTINUE WHEN READY Пі П«„б№,ћ№&П№"¬НEQ№ C© 7*Ўм­¦И,ѓ;ЪП О©„б№ћ№1О№-О№)¬AQ№" ' 5­HП ¶©„ЮНћ¶©„ЭНћ¶Нћ¦& ENTER THE RECORD NUMBER TO BE DELETEDЧП¦(****************************************ЧП¦(****************************************ЧП¦$IF YOU DO NOT KNOW THE RECORD NUMBERЧП¦" ENTER 0 FOR THE RECORD NUMBER ANDЧПPROGRAM FDINSTRUCTIONS;  VAR CH:CHAR;   PROCEDURE PAGEONE;  BEGIN #PAGE(OUTPUT); #WRITELN('THE PROGRAM FILEDEMO IS DESIGNED TO'); #WRITELN; #WRITELN('RUN ON A DISKETTE CALLED ''PAYROLL:'''); #WRITELN('*****************************************'); N^§џь /ЗЁНҐЃЧҐѓЗЁН№ф«„а «„Я «„Э«„Ю«„Ы«„Щ«„ЬО ©„б№&О№NО№JО№FО№BО№>О№:О№6О№2«„Щ№,¬DU№$, 82*(:4"H©„ЩЎцҐЃЧНћОҐѓ«НҐНҐЃЧНћ№ћ№тБҐ ЌМ *ФЪ6X„ћь J њ TЮвV~тФLЦ6ў&< ж” d!"†"ѕ"а"@ U(PDATEЧП Ч¦ L(ISTП ¦ D(ELETEЧП Ч¦ S(EARCHП¦ P(ROCESSЧП¦ Q(UITЧПЧ¦ R(EMOVE >>ENTIRE<< FILEП¦"***** SELECT BY FIRST LETTER *****ЧП¦ WHICH ONE?:ЧПі/0 П«„б­V Ґѓ«Ґ„ЧНҐҐЃ/ЗЁНҐЃЧҐѓЗЁН№ф«„а «„Я «„Э«„Ю«„Ы«„Щ«„ЬО ©„б№&О№NО№JО№FО№BО№>О№:О№6О№2«„Щ№,¬DU№$, 82*(:4"H©„ЩЎцҐЃЧНћОҐѓ«НҐНҐЃЧНћ№ћ№тБҐ ЌМ *ФЪ6X„ћь J њ TЮвV~тФLЦ6ў&< ж” d!TERЧП¦ U(PDATEЧП Ч¦ L(ISTП ¦ D(ELETEЧП Ч¦ S(EARCHП¦ P(ROCESSЧП¦ Q(UITЧПЧ¦ R(EMOVE >>ENTIRE<< FILEП¦"***** SELECT BY FIRST LETTER *****ЧП¦ WHICH ONE?:ЧПі/0 П«„б­V Ґѓ«Ґ„ЧНҐҐЃ***********************************ПЧ¦ ENTER C(ONTINUE OR E(XIT PROGRAMПіН( П«„б©„бEГЎП­0&ҐЃЧНћҐЃЧНћП­¶©„ЮНћ¶©„ЭНћ¶Нћ¦! PAYROLL FILE DEMONSTRATIONЧПЧ¦ I(NSTRUCTIONSП¦ E(N*********ПЧ¦ENTER C(ONTINUE TO EXITПі П«„б­8 ¶©„ЮНћ¶©„ЭНћ¶Нћ ¦YOUR PROCESS WOULD GO HERE;ЧП Ч¦! HOWEVER, THE PURPOSE OF THISП¦# PROGRAM IS ONLY TO DEMONSTRATEЧПЧ¦ DISK HANDLINGПЧ¦(*****ћ¶Нћ Н¶ЖНћ¶НћЖѕЕЎцМШ‚МҐЃЧНћҐЃЧН Ж©ЃЧЇЌЎфҐЃЧН Ў0Н¶Ч¦RECORD IS NOT IN FILEНћ¶Нћ№W¦THE RECORD NUMBER FOR EMPLOYEEЧПН¶ЖНћ¶¦ IS: ЧНћ¶ШН ћ¶НћЧ¦(*******************************ЧкЁЂЁҐЃЧНћҐНћҐН ЎфҐНћ­Н*± .П ¶ Нћ¦! WHAT IS THE INDIVIDUAL'S NAME?ЧПЧ¦$ ENTER: LAST, FIRST MIDDLE INITIALПН¶¦ YOU HAVE ЧНћ¶Н ћ¶Ч¦ SPACES AS SHOWN: Нћ¶Нћ Н¶¦--------------------ЧН¦" USE THE L(IST FUNCTION TO FIND ITЧП НЗ@П¶¦ RECORD #: ЧНћ П МШГЎћМҐЃЧНћҐ¦PAY.DATAЧНћк©ЃЧЁЂЁҐНћЩ‚МҐЃЧНћЩШГЎҐЃЧНћҐЃЧН ЎцҐЃЧНћҐНћҐНћҐЃЧ¦PAYROLL:PAYROLL.DATAЧНћҐЃЧЩ•НћҐЃЧНћҐЃЧНћ©Ѓ#WRITELN; #WRITELN('LOAD THE FOLLOWING PROGRAMS ONTO A'); #WRITELN; #WRITELN('DISK NAMED ''PAYROLL:'''); #WRITELN; #WRITELN(' FILEDEMO.CODE'); #WRITELN(' FILEDEMO.TEXT'); #WRITELN(' SAMPLE.DATA'); #WRITELN; #WRITELN('THEN T(RANSFER ''PAYROLL:SAMPLE.DATA'''); #WRITELN(' TO ''PAYROLL:PAYROLL.DATA'''); #WRITELN; #WRITELN('*****************************************'); #WRITELN; #WRITELN('NOW EX(ECUTE ''PAYROLL:FILEDEMO'''); #GOTOXY(4,23); оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо#WRITE(' PRESS ANY KEY TO C(ONTINUE'); #READ(CH); #PAGE(OUTPUT);  END(*PAGETHREE*);   BEGIN #PAGEONE; #PAGETWO; #PAGETW2; #PAGETHREE;  END.  END(*THREE1*);   BEGIN(*PAGE3 *) #THREE1; #WRITELN(' FD.PART3.TEXT'); #WRITELN; #WRITELN('THESE PROGRAMS CANNOT BE COMPILED'); #WRITELN; #WRITELN; #WRITELN('****************************************'); M PLACE THE FOLLOWING THREE '); #WRITELN(' TEXT FILES INTO ''SYSTEM.WRK.TEXT'','); #WRITELN(' THEN LIST THEM WITH THE E(DITOR.'); #WRITELN; #WRITELN(' FD.PART1.TEXT'); #WRITELN; #WRITELN(' FD.PART2.TEXT'); #WRITELN;; #WRITELN; #WRITELN('THE PROGRAM FILEDEMO IS VERY LARGE AND '); #WRITELN(' HAD TO BE BROKEN DOWN INTO THREE '); #WRITELN(' PARTS BEFORE COMMENTS COULD BE ADDED'); #WRITELN; #WRITELN('TO SEE EXTENSIVE REMARKS WITHIN THE'); #WRITELN(' PROGRA#WRITE('PRESS ANY KEY TO CONTINUE'); #READ(CH);  END(*PAGETW2*);   PROCEDURE PAGETHREE;  VAR CH:CHAR;   PROCEDURE THREE1;  BEGIN #PAGE(OUTPUT); #WRITELN(' REMARKS AND COMMENTS'); #WRITELN('****************************************')WAS DEVELOPED TO'); #WRITELN(' HANDLE INCORRECT INTEGER OR REAL'); #WRITELN(' ENTRIES. ADDITIONAL RECORDS ARE'); #WRITELN(' ENTERED ALPHABETICALLY BY LAST NAME'); #GOTOXY(0,22); #WRITELN('*****************************************'); N(' FILES.'); #WRITELN('ALL ENTRIES ARE DONE WITH MENUS. THE'); #WRITELN(' PROMPT C(ONTINUE MEANS TO ENTER A'); #WRITELN(' ''C'' IF YOU WISH TO CONTINUE.');  END(*PAGETWO*);   PROCEDURE PAGETW2;  BEGIN #WRITELN('A CORRECTION PROCEDURE HEN THE FILEDEMO.CODE, AND THEN A'); #WRITELN(' SAMPLE FILE: PAYROLL.DATA. THE'); #WRITELN(' PAYROLL.DATA FILE MUST ALWAYS BE'); #WRITELN(' THE LAST FILE ON THE DISK OR ADDED'); #WRITELN(' RECORDS MIGHT OVER WRITE FOLLOWING'); #WRITEL#WRITELN('THIS PROGRAM IS MEANT TO DEMONSTRATE THE'); #WRITELN(' FILE HANDLING CHARACTERISTICS OF'); #WRITELN(' PASCAL.'); #WRITELN('THIS SPECIAL DISK TITLED: ''PAYROLL'''); #WRITELN(' HAS THE FILEDEMO.TEXT FILE FIRST,'); #WRITELN(' T#WRITE('PRESS ANY KEY WHEN READY'); #READ(CH);  END(*PAGEONE*); "  PROCEDURE PAGETWO;  BEGIN #PAGE(OUTPUT); #WRITELN(' INSTRUCTIONS'); #WRITELN('*****************************************'); #WRITELN; оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо