home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol028 / receivab.pas < prev    next >
Pascal/Delphi Source File  |  1984-04-29  |  17KB  |  838 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11. PROGRAM ACCOUNTS_RECEIVABLE; {$P}
  12.  
  13. TYPE 
  14.  
  15.     MAILING = RECORD
  16.         NAME:ARRAY[1..30] OF CHAR;
  17.         STREET_NUMBER: ARRAY[1..6] OF CHAR;
  18.         STREET: ARRAY[1..20] OF CHAR;
  19.         CITY: ARRAY[1..10] OF CHAR;
  20.         STATE: ARRAY[1..10] OF CHAR;
  21.         ZIP: ARRAY[1..10] OF CHAR;
  22.         ATTENTION: ARRAY[1..30] OF CHAR;
  23.         ACCT_NUMBER: ARRAY[1..4] OF CHAR;
  24.         BLANKS: ARRAY[1..8] OF CHAR;
  25.         END;
  26.  
  27.     ENTRY = RECORD
  28.         MONTH:ARRAY[1..2] OF CHAR;
  29.         DAY:  ARRAY[1..2] OF CHAR;
  30.         YEAR: ARRAY[1..2] OF CHAR;
  31.         INVOICE_NUMBER: ARRAY[1..6] OF CHAR;
  32.         PURCHASE_ORDER_NUMBER: ARRAY[1..10] OF CHAR;
  33.         AMOUNT:REAL;
  34.         END;
  35.  
  36. FI = FILE OF ENTRY;
  37. FO = FILE OF CHAR;
  38. M = FILE OF MAILING;
  39.  
  40.     TR = ARRAY [1..10] OF CHAR;
  41.  
  42.     $STRING80 = STRING 80;
  43.     $STRING0 = STRING 0;
  44.     $STRING255 = STRING 255;
  45.     $STRING14 = STRING 14;
  46.     $STRING30 = STRING 30;
  47. $STR2 = STRING 2;
  48. $STR4 = STRING 4;
  49.  
  50.  
  51. VAR
  52. FIN: FI;
  53. INC,NUMBER_OF_RECORDS,COUNTER,I,N: INTEGER;
  54. NAME_AND_ADDRESS: MAILING;
  55. NAD:M;
  56. INFORMATION: ENTRY;
  57. FOUT:FO;
  58. COR,ANSWER,CONTINUE:CHAR;
  59. ACCOUNT_NAME:$STRING30;
  60. FILENAM,FILNAME:$STRING14;
  61. ACCTNAME: ARRAY[1..30] OF CHAR;
  62. FNAME:ARRAY[1..4] OF CHAR;
  63. STATEMENT,CONT,POST_TO_ANOTHER_ACCOUNT,NEWACCOUNT,RECURSIVE,NEWFILE:BOOLEAN;
  64. MO,DA,YR,INO,PNO,NA,ST_NO,ST,CIT,STA,ZI,ATT: $STRING80;
  65.  
  66. DRIVE:$STR2;
  67. ACN,EXTENSION:$STR4;
  68. BALANCE:REAL;
  69.  
  70.  
  71.  
  72.  
  73. PROCEDURE SETLENGTH(VAR X:$STRING0;Y:INTEGER);EXTERNAL;
  74. FUNCTION  LENGTH(X:$STRING255):INTEGER;EXTERNAL;
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81. PROCEDURE CLEAR_SCREEN;
  82. BEGIN
  83. WRITE(CHR(27),'*',CHR(0),CHR(0),CHR(0),CHR(0));
  84. END;
  85.  
  86.  
  87.  
  88.     
  89. PROCEDURE ERASE_LINES(STARTING_LINE,NUMBER_OF_LINES:INTEGER);
  90.  
  91. VAR
  92. I:INTEGER;
  93. BLANKS:STRING 80;
  94.  
  95. BEGIN
  96.  
  97. BLANKS:='                                                ';{40SPACES}
  98. FOR  I:= 1 TO NUMBER_OF_LINES DO
  99.     BEGIN
  100.     WRITE(CHR(27),'=',CHR(STARTING_LINE+31),CHR(32),BLANKS,BLANKS);
  101.     STARTING_LINE:=STARTING_LINE + 1;
  102.     END
  103. END;
  104.  
  105.  
  106.  
  107. PROCEDURE MOVE_CURSOR (X,Y:INTEGER);
  108. BEGIN
  109.     WRITE(CHR(27),'=',CHR(Y+31),CHR(X+31));
  110. END;
  111.  
  112.  
  113.  
  114.  
  115. PROCEDURE PROMPT (X,Y,LENGTH: INTEGER; P:$STRING80;
  116.              PROTECTED_FIELD_DESIRED:BOOLEAN);
  117.  
  118. VAR
  119. UNDERLINE: STRING 80;
  120. I:INTEGER;
  121. BEGIN
  122.     UNDERLINE:='_';
  123.     FOR  I:= 1 TO LENGTH DO APPEND (UNDERLINE,'_');
  124.     IF PROTECTED_FIELD_DESIRED = FALSE THEN
  125. WRITE  (CHR(27),'=',CHR(Y+31),CHR(X+31),P,UNDERLINE)
  126.     ELSE
  127. WRITE (CHR(27),'=',CHR(Y+31),CHR(X+31),CHR(27),')',P,
  128.     UNDERLINE,CHR(27),'(');
  129. END;
  130.  
  131.  
  132.  
  133.  
  134. FUNCTION INPUT_DATA(X,Y,LEN:INTEGER; ALPHANUMERIC:BOOLEAN;
  135.             MAXIMUM_VALUE,MINIMUM_VALUE:REAL):$STRING80;
  136.  
  137.  
  138. VAR
  139. DATA,BLANKS:$STRING80;
  140. I:INTEGER;
  141.  
  142.  
  143.  
  144.  
  145. PROCEDURE CORRECT(X,Y:INTEGER);
  146. VAR
  147. I,A,B:INTEGER;
  148.  
  149. BEGIN
  150.  
  151.     ERASE_LINES (20,2);
  152.     WRITE (CHR(7));
  153.     MOVE_CURSOR (1,20);
  154.  
  155.     IF (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) THEN
  156.        WRITE('TERM TOO LONG ');
  157.  
  158.     
  159.     MOVE_CURSOR(X,Y);
  160.     WRITE (' ');
  161.     A:=X;
  162.     B:=Y;
  163.  
  164.     FOR  I:=1 TO  LENGTH(DATA) DO
  165.     BEGIN
  166.         MOVE_CURSOR(A,B);
  167.         WRITE(' ');
  168.         A:=A+1;
  169.     END;
  170.  
  171.     MOVE_CURSOR(X,Y);
  172.     WRITE('_');
  173.     A:=X;
  174.     B:=Y;
  175.     FOR I:= 1 TO (LEN-1)  DO
  176.     BEGIN
  177.         MOVE_CURSOR(A,B);
  178.         WRITE('_');
  179.         A:=A+1;
  180.     END;
  181.  
  182.     MOVE_CURSOR(X,Y);
  183.     READ(DATA);
  184.     ERASE_LINES(20,1);
  185.  
  186.  
  187.  
  188.  
  189. END;
  190.  
  191.  
  192.  
  193.  
  194.  
  195. BEGIN
  196.     BLANKS:='                                         ';{40SPACES}
  197.  
  198. MOVE_CURSOR(X,Y);
  199. READ(DATA);
  200.  
  201.  
  202.  
  203.  
  204. WHILE (ALPHANUMERIC = TRUE) AND (LENGTH(DATA) > LEN) DO CORRECT(X,Y);
  205.     
  206.  
  207. IF   LENGTH(DATA) = 0 THEN
  208. BEGIN
  209.     DATA:=' ';    
  210.     FOR I:=  1 TO (LEN-1) DO  APPEND (DATA,' ');
  211. END;
  212.  
  213.  
  214. IF LENGTH(DATA) < LEN THEN
  215.     FOR I:= LENGTH(DATA) TO LEN DO     APPEND(DATA,' ');
  216.  
  217.  
  218.  
  219. INPUT_DATA:=DATA;
  220.  
  221.  
  222. END;
  223.  
  224. {************ PROCEDURE TO DETERMINE NUMBER OF RECORDS****}
  225.  
  226. PROCEDURE NUMBER_RECORDS (FILENAM:$STRING14);
  227. BEGIN
  228. RESET(FILENAM,FIN);
  229. WITH INFORMATION DO
  230. BEGIN
  231.  
  232. READ(FIN:1,INFORMATION);
  233. NUMBER_OF_RECORDS:=(((ORD(PURCHASE_ORDER_NUMBER[1])-48)*1000)+
  234.     ((ORD(PURCHASE_ORDER_NUMBER[2])-48)*100)+
  235.     ((ORD(PURCHASE_ORDER_NUMBER[3])-48)*10)+
  236.     ((ORD(PURCHASE_ORDER_NUMBER[4])-48)*1));
  237. END; {OF WITH}
  238.  
  239. END;    {OF  PROCEDURE}
  240.  
  241.  
  242.  
  243. PROCEDURE PRINT_FILE (FILENAM:$STRING14);  {*******************}
  244.  
  245. TYPE
  246. C = FILE OF CHAR;
  247.  
  248.  
  249. VAR
  250. SCROLLING:CHAR;
  251. ANSWER:CHAR;
  252. HARDCOPY:BOOLEAN;
  253. FOUT:C;
  254. MASK:$STRING80;
  255. PAGE,COUNTER:INTEGER;
  256.  
  257.  
  258. BEGIN      {BEGIN PROCEDURE}
  259.  
  260. CLEAR_SCREEN;
  261. REPEAT
  262. WRITE(' DO YOU WANT A HARDCOPY OF THE FILE? Y/N ');
  263. READ(ANSWER);
  264. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  265. IF ANSWER = 'Y' THEN 
  266.     BEGIN
  267.     HARDCOPY:=TRUE;
  268.     REWRITE('LST:',FOUT);
  269.     END;
  270. IF ANSWER = 'N' THEN HARDCOPY:=FALSE;
  271.  
  272.  
  273.  
  274. RESET (FILENAM,FIN);
  275. CLEAR_SCREEN;
  276. NUMBER_RECORDS(FILENAM);
  277.  
  278. WITH NAME_AND_ADDRESS DO
  279. BEGIN
  280. IF HARDCOPY = FALSE THEN
  281. BEGIN
  282. WRITELN(NAME);
  283. WRITELN(STREET_NUMBER,'   ',STREET);
  284. WRITELN(CITY,', ',STATE,'     ',ZIP);
  285. WRITELN;
  286. WRITELN(ATTENTION);
  287. END;
  288.  
  289. IF HARDCOPY = TRUE THEN
  290. BEGIN
  291. WRITELN(FOUT,CHR(12));
  292. WRITELN(FOUT,'   ');
  293. WRITELN(FOUT,NAME);
  294. WRITELN(FOUT,STREET_NUMBER,'   ',STREET);
  295. WRITELN(FOUT,CITY,', ',STATE,'     ',ZIP);
  296. WRITELN(FOUT,'   ');
  297. WRITELN(FOUT,ATTENTION);
  298. END;
  299. END; {OF WITH NAME AND ADDRESS}
  300.  
  301.  
  302.  
  303.  
  304. WITH INFORMATION DO
  305. BEGIN
  306. MASK:='DATE           INVOICE NO.     PURCHASE OR #            AMOUNT';
  307. IF HARDCOPY = FALSE THEN WRITELN(MASK);
  308. IF HARDCOPY =  TRUE THEN WRITELN(FOUT,MASK);
  309.  
  310. COUNTER:=7;
  311. PAGE := 1;
  312. BALANCE:=0.0;
  313.  
  314.  
  315. FOR I:= 2 TO NUMBER_OF_RECORDS DO
  316. BEGIN
  317. READ(FIN:I,INFORMATION);
  318.  
  319. BALANCE:=BALANCE+AMOUNT;
  320.  
  321. IF HARDCOPY = FALSE THEN 
  322. BEGIN
  323. IF COUNTER > 20 THEN 
  324.     BEGIN
  325.     PROMPT(1,22,0,'ENTER ANY CHARACTER TO CONTINUE',FALSE);
  326.     READ(SCROLLING);
  327.     ERASE_LINES(7,15);
  328.     MOVE_CURSOR(50,2);
  329.     PAGE:=PAGE + 1;
  330.     WRITE('PAGE ',PAGE);
  331.     ERASE_LINES(22,1);
  332.     MOVE_CURSOR(1,7);
  333.     COUNTER:=7;
  334.     END;
  335. WRITELN;
  336. WRITE(MONTH,'/',DAY,'/',YEAR,'           ',INVOICE_NUMBER,'          ');
  337. IF AMOUNT > 0.00 THEN
  338. WRITELN(PURCHASE_ORDER_NUMBER,'          ','$',AMOUNT:9:2);
  339. IF AMOUNT < 0.00 THEN
  340. WRITELN(PURCHASE_ORDER_NUMBER,'          ','$',AMOUNT:9:2,' CREDIT');
  341. COUNTER:=COUNTER + 2;
  342. END; {FOR HARDCOPY = FALSE}
  343.  
  344. IF HARDCOPY = TRUE THEN 
  345. BEGIN
  346. WRITELN(FOUT,' ');
  347. WRITE(FOUT,MONTH,'/',DAY,'/',YEAR,'         ',INVOICE_NUMBER,'            ');
  348. IF AMOUNT > 0.0 THEN
  349. WRITELN(FOUT,PURCHASE_ORDER_NUMBER,'            ','$',AMOUNT:9:2);
  350. IF AMOUNT < 0.0 THEN
  351. WRITELN(FOUT,PURCHASE_ORDER_NUMBER,'            ','$',AMOUNT:9:2,' CREDIT');
  352. IF COUNTER >  40 THEN
  353. BEGIN
  354. WRITELN(FOUT,CHR(12));
  355. WRITELN(FOUT,' ');
  356. WRITELN(FOUT,' ');
  357. WRITELN(FOUT,'                                  PAGE: ',PAGE);
  358. COUNTER:=1;
  359. PAGE:=PAGE + 1;
  360. END;
  361. END; {FOR HARDCOPY = TRUE}
  362.  
  363. END; {FOR LOOP}
  364.  
  365. END; {THIS IS FOR WITH STATEMENTS}
  366. ERASE_LINES(22,1);
  367. IF HARDCOPY = FALSE THEN
  368.     BEGIN
  369.     MOVE_CURSOR(1,22);
  370.     WRITELN('BALANCE DUE: ','$',BALANCE:9:2);
  371.     END;
  372.  
  373. IF HARDCOPY = TRUE THEN
  374.     BEGIN
  375.     WRITELN(FOUT,'  ');
  376.     WRITELN(FOUT,'  ');
  377.     WRITELN(FOUT,'BALANCE DUE:  ','$',BALANCE:9:2);
  378.     END;
  379.  
  380.  
  381. END; {PROCEDURE}
  382.  
  383.  
  384.  
  385. {**********************************************************}
  386.  
  387. PROCEDURE ENTER_FILE_NAME;  
  388.  
  389. BEGIN
  390. DRIVE:='B:';
  391. EXTENSION:='.INV';
  392. CLEAR_SCREEN;
  393. WRITELN('                    ACCOUNTS RECEIVABLE');
  394. WRITELN;
  395. WRITELN;
  396. WRITELN;
  397. IF RECURSIVE = TRUE THEN 
  398.     WRITELN('ACCOUNT WAS NOT FOUND IN FILE, PLEASE RE-ENTER');
  399.  
  400. IF (POST_TO_ANOTHER_ACCOUNT = FALSE) OR (STATEMENT = TRUE) THEN
  401. BEGIN
  402. WRITE('ENTER NAME & ADDRESS FILE AS  DRIVE:NAME.EXT   ');
  403. SETLENGTH(FILNAME,0);
  404. READLN(FILNAME);
  405. END; {OF IF POST..}
  406. WRITELN;
  407. WRITELN;
  408. PROMPT(1,8,30,'ENTER NAME OF ACCOUNT ',FALSE);
  409. ACCOUNT_NAME:=INPUT_DATA(23,8,30,TRUE,0,0);
  410. FOR I:= 1 TO 30 DO ACCTNAME[I]:=ACCOUNT_NAME[I];
  411.  
  412. WRITELN;
  413. WRITELN;
  414.  
  415. REPEAT
  416. MOVE_CURSOR (1,10);
  417. WRITE('IS THIS A NEW ACCOUNT? Y/N ');
  418. READ(ANSWER);
  419. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  420. IF ANSWER = 'Y' THEN NEWACCOUNT:= TRUE ELSE NEWACCOUNT:= FALSE;
  421. IF NEWACCOUNT = TRUE THEN 
  422.     BEGIN
  423.     CLEAR_SCREEN;
  424. PROMPT(10,12,0,'EXIT THIS PROGRAM AND ENTER ACCOUNT TO NAD FILE',FALSE);
  425.     END; {OF IF NEWACCOUNT = TRUE}
  426.  
  427. WRITELN;
  428. WRITELN;
  429. IF STATEMENT = FALSE THEN
  430. BEGIN
  431. REPEAT
  432. MOVE_CURSOR(1,12);
  433. WRITE('IS THIS THE FIRST INVOICE EVER  POSTED TO THIS ACCOUNT? Y/N ');
  434. READ(ANSWER);
  435. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  436. IF ANSWER = 'Y' THEN NEWFILE:= TRUE ELSE NEWFILE := FALSE;
  437. END;    {IF STATEMENT = FALSE}
  438.  
  439.  
  440.  
  441. IF NEWACCOUNT = FALSE THEN 
  442. BEGIN
  443. RESET(FILNAME,NAD);
  444. WITH NAME_AND_ADDRESS DO
  445.     BEGIN
  446.     COUNTER:=2;
  447.     REPEAT
  448.         READ(NAD:COUNTER,NAME_AND_ADDRESS);
  449.         COUNTER:=COUNTER +1;
  450.     UNTIL (EOF(NAD)) OR (ACCTNAME = NAME);
  451. SETLENGTH(ACN,0);
  452. FOR I:= 1 TO 4 DO APPEND(ACN,ACCT_NUMBER[I]);
  453.  
  454. IF EOF(NAD) = FALSE THEN
  455. BEGIN
  456. SETLENGTH(FILENAM,0);
  457. APPEND(FILENAM,DRIVE);
  458. APPEND(FILENAM,ACN);
  459. APPEND(FILENAM,EXTENSION);
  460.  
  461. END; {OF IF}
  462. END; {OF WITH NAME..}
  463.  
  464. IF EOF(NAD)=TRUE THEN 
  465. BEGIN
  466.     RECURSIVE := TRUE;
  467.     ENTER_FILE_NAME;
  468. END;
  469.  
  470. END; {OF BEGIN FOR IF NEWFILE = FALSE}
  471.  
  472.  
  473.  
  474. END; {PROCEDURE}
  475.  
  476. {**************  CALCULATE NUMBER OF RECORDS FOR FIRST RECORD***}
  477.  
  478. PROCEDURE CALC_FIRST_RECORD(CURRENT_NUMBER_OF_RECORDS:INTEGER);
  479. VAR
  480. ONES,TENS,HUNDREDS:CHAR;
  481. O,T,H: INTEGER;
  482.  
  483. BEGIN
  484. O:=0;
  485. T:=0;
  486. H:=0;
  487.  
  488. WITH  INFORMATION DO
  489. BEGIN
  490.  
  491. IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
  492. BEGIN
  493. ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48);
  494. PURCHASE_ORDER_NUMBER[1]:='0';
  495. PURCHASE_ORDER_NUMBER[2]:='0';
  496. PURCHASE_ORDER_NUMBER[3]:='0';
  497. PURCHASE_ORDER_NUMBER[4]:=ONES;
  498. FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' ';
  499. END; {IF}
  500.  
  501. IF CURRENT_NUMBER_OF_RECORDS = 10 THEN PURCHASE_ORDER_NUMBER:='0010      ';
  502. IF CURRENT_NUMBER_OF_RECORDS = 100 THEN PURCHASE_ORDER_NUMBER:= '0100      ';
  503.  
  504. IF (CURRENT_NUMBER_OF_RECORDS < 100) AND
  505.    (CURRENT_NUMBER_OF_RECORDS > 10) THEN
  506. BEGIN
  507.  
  508. WHILE (CURRENT_NUMBER_OF_RECORDS < 100 ) AND
  509.       (CURRENT_NUMBER_OF_RECORDS > 10 ) DO   {VALUES 1-99}
  510. BEGIN
  511.  
  512. CURRENT_NUMBER_OF_RECORDS:=CURRENT_NUMBER_OF_RECORDS - 10;
  513. T:=T+1;
  514. IF CURRENT_NUMBER_OF_RECORDS < 10 THEN
  515. BEGIN
  516. ONES:=CHR(CURRENT_NUMBER_OF_RECORDS + 48);
  517. TENS:=CHR(T +  48);
  518. PURCHASE_ORDER_NUMBER[1]:='0';
  519. PURCHASE_ORDER_NUMBER[2]:='0';
  520. PURCHASE_ORDER_NUMBER[3]:=TENS;
  521. PURCHASE_ORDER_NUMBER[4]:=ONES;
  522. FOR I:= 5 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=' ';
  523. END; {IF}
  524.  
  525. END; {WHILE}
  526. END;  {IF}
  527. END; {OF WITH}
  528.  
  529. END; {OF PROCEDURE}
  530.  
  531. {***********  WRITE THE FIRST RECORD   ********************}
  532.  
  533. PROCEDURE CREATE_FIRST_RECORD (ACTNO: TR);
  534. BEGIN
  535. IF NEWFILE = TRUE THEN REWRITE(FILENAM,FIN);
  536.  
  537. WITH INFORMATION DO
  538. BEGIN
  539. MONTH:='  ';
  540. DAY:='  ';
  541. YEAR:='  ';
  542. INVOICE_NUMBER:='FIRST ';
  543. AMOUNT:=0.0;
  544.  
  545. PURCHASE_ORDER_NUMBER:=ACTNO;
  546.  
  547. WRITE(FIN:1,INFORMATION);
  548. END; {WITH LOOP}
  549. END; {OF  PROCEDURE}
  550.  
  551.  
  552. {**********************  PROCEDURE TO CORRECT INCORRECT ENTRY ***}
  553.  
  554. PROCEDURE MISTAKE;
  555. VAR
  556. WRONG:CHAR;
  557.  
  558. BEGIN
  559. WITH INFORMATION DO
  560. BEGIN
  561. ERASE_LINES(10,12);
  562. PROMPT(1,12,0,'ENTER NUMBER OF INCORRECT INFORMATION',FALSE);
  563. PROMPT(1,14,0,'1-MONTH',FALSE);
  564. PROMPT(1,15,0,'2-DAY',FALSE);
  565. PROMPT(1,16,0,'3-YEAR',FALSE);
  566. PROMPT(1,17,0,'4-INVOICE NUMBER',FALSE);
  567. PROMPT(1,18,0,'5-PURCHASE ORDER NUMBER',FALSE);
  568. PROMPT(1,19,0,'6-AMOUNT',FALSE);
  569. PROMPT(1,21,0,'7-ALL INFORMATION IS CORRECT AS DISPLAYED',FALSE);
  570.  
  571. REPEAT
  572. MOVE_CURSOR(50,16);
  573. READ(WRONG);
  574.  
  575. CASE WRONG OF
  576.     '1': BEGIN
  577.         PROMPT(1,N,0,' ',FALSE);
  578.         MO:=INPUT_DATA(1,N,2,TRUE,0,0);
  579.          END;
  580.  
  581.     '2': BEGIN
  582.         PROMPT(4,N,0,' ',FALSE);
  583.         DA:=INPUT_DATA(4,N,2,TRUE,0,0);
  584.          END;
  585.  
  586.     '3': BEGIN
  587.         PROMPT(7,N,0,' ',FALSE);
  588.         YR:=INPUT_DATA(7,N,2,TRUE,0,0);
  589.          END;
  590.     '4':     BEGIN
  591.         PROMPT(12,N,0,'          ',FALSE);
  592.         INO:=INPUT_DATA(12,N,10,TRUE,0,0);
  593.         END;
  594.  
  595.     '5':     BEGIN
  596.         PROMPT(25,N,0,'          ',FALSE);
  597.         PNO:=INPUT_DATA(25,N,10,TRUE,0,0);
  598.         END;
  599.  
  600.     '6':    BEGIN
  601.         PROMPT(40,N,0,'         ',FALSE);
  602.         REPEAT
  603.         MOVE_CURSOR(40,N);
  604.         READ(AMOUNT);
  605.         UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99);
  606.         END;
  607.  
  608.  
  609.  
  610.     END; {OF CASE}
  611.  
  612. UNTIL WRONG = '7';
  613. END; {OF WITH INFORMATION}
  614. ERASE_LINES(10,12);
  615. END; { OF PROCEDURE}
  616.  
  617. {********* PROCEDURE TO POST TO ACCOUNT RECEIVABLE **************}
  618. PROCEDURE POST;
  619. BEGIN
  620.  
  621.  
  622. POST_TO_ANOTHER_ACCOUNT:=FALSE;
  623.  
  624. REPEAT
  625. RECURSIVE:=FALSE;
  626.  
  627. ENTER_FILE_NAME;
  628. N:=5;
  629.  
  630.  
  631. IF NEWFILE = TRUE THEN
  632. BEGIN
  633. CREATE_FIRST_RECORD('0001      ');
  634. COUNTER:=2;
  635. END;
  636.  
  637.  
  638. IF NEWFILE = FALSE THEN
  639. BEGIN
  640. NUMBER_RECORDS(FILENAM);
  641. RESET(FILENAM,FIN);
  642. COUNTER:=NUMBER_OF_RECORDS + 1;
  643. END;
  644.  
  645. CLEAR_SCREEN;
  646.         PROMPT(1,3,0,'MO/DY/YR',FALSE);
  647.     PROMPT(12,3,0,'INV #',FALSE);
  648.     PROMPT(25,3,0,'P.O.#',FALSE);
  649.     PROMPT(40,3,0,'AMOUNT',FALSE);
  650.     PROMPT(70,3,0,'CORRECT',FALSE);
  651.  
  652.  
  653.  
  654. WITH INFORMATION DO
  655. BEGIN
  656. REPEAT
  657.     MO:=INPUT_DATA(1,N,2,TRUE,0,0);
  658.     PROMPT(3,N,0,'/',FALSE);
  659.     DA:=INPUT_DATA(4,N,2,TRUE,0,0);
  660.     PROMPT(6,N,0,'/',FALSE);
  661.     YR:=INPUT_DATA(7,N,2,TRUE,0,0);
  662.     INO:=INPUT_DATA(12,N,10,TRUE,0,0);
  663.     PNO:=INPUT_DATA(25,N,10,TRUE,0,0);
  664.     REPEAT
  665.     MOVE_CURSOR(40,N);
  666.     READ(AMOUNT);
  667.     UNTIL (AMOUNT < 99999.99) AND (AMOUNT > -99999.99);
  668.     
  669.     REPEAT
  670.     MOVE_CURSOR(70,N);
  671.     READ(COR);
  672.     UNTIL (COR = 'Y') OR (COR = 'N');
  673.  
  674.  
  675.     IF COR = 'N' THEN MISTAKE;
  676.  
  677.  
  678. FOR I:= 1 TO 2 DO MONTH[I]:=MO[I];
  679. FOR I:= 1 TO 2 DO DAY[I]:=DA[I];
  680. FOR I:= 1 TO 2 DO  YEAR[I]:=YR[I];
  681. FOR I:= 1 TO 6 DO INVOICE_NUMBER[I]:=INO[I];
  682. FOR I:= 1 TO 10 DO PURCHASE_ORDER_NUMBER[I]:=PNO[I];
  683.  
  684.  
  685. IF MONTH <> '00' THEN
  686. BEGIN
  687.  
  688.  
  689. WRITE (FIN:COUNTER,INFORMATION);
  690. COUNTER:=COUNTER + 1;
  691. N:=N + 1;
  692.  
  693. IF N > 12 THEN
  694.     BEGIN
  695.     ERASE_LINES(5,20);
  696.     N:= 5;
  697.     END;
  698.  
  699. END; {OF IF  MONTH NOT 00}
  700.  
  701.  
  702. UNTIL (MONTH = '00') OR ((COUNTER = 5) AND (NEWFILE = TRUE));
  703. CALC_FIRST_RECORD(COUNTER-1);
  704. CREATE_FIRST_RECORD(PURCHASE_ORDER_NUMBER);
  705.  
  706.  
  707. END;
  708.  
  709.  
  710. ERASE_LINES(20,1);
  711. PROMPT(1,20,1,'DO YOU WANT A LISTING OF THE FILE? Y/N',FALSE);
  712. REPEAT
  713. MOVE_CURSOR(50,20);
  714. READ(ANSWER);
  715. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  716. IF ANSWER = 'Y' THEN   PRINT_FILE(FILENAM);
  717.  
  718. PROMPT(1,23,1,'DO YOU WISH TO POST TO ANOTHER ACCOUNT? Y/N',FALSE);
  719. REPEAT
  720. MOVE_CURSOR(60,23);
  721. READ(ANSWER);
  722. UNTIL (ANSWER = 'Y') OR (ANSWER =  'N');
  723.  
  724. IF ANSWER = 'Y' THEN POST_TO_ANOTHER_ACCOUNT := TRUE;
  725. IF ANSWER = 'N' THEN POST_TO_ANOTHER_ACCOUNT:=FALSE;
  726.  
  727. UNTIL POST_TO_ANOTHER_ACCOUNT = FALSE;
  728.  
  729. END; {OF PROCEDURE POST}
  730.  
  731.  
  732. {************ GENERATE A MONTHLY STATEMENT ******************}
  733. PROCEDURE STATMENT;
  734. TYPE
  735. $STR4 = STRING 4;
  736. $STR2 = STRING 2;
  737.  
  738. VAR
  739. COP:FI;
  740. MONTH_OF_STATEMENT:$STR4;
  741. MS:INTEGER;
  742. MO,DA,YR:$STR2;
  743. MONTHFIL:$STRING14;
  744.  
  745. BEGIN
  746. REPEAT
  747. RECURSIVE:=FALSE;
  748. ENTER_FILE_NAME;
  749.  
  750. PROMPT(1,19,0,'ENTER,NUMERICALLY, THE DATE OF THIS STATMENT',FALSE);
  751. PROMPT(1,20,0,'ENTER A CARRIAGE RETURN AFTER MONTH,DAY AND YEAR',FALSE);
  752. READ(MO);
  753. READ(DA);
  754. READ(YR);
  755. MS:=((ORD(MO[1]) - 48)*10)+(ORD(MO[2])-48);
  756. CASE MS OF
  757.     1:MONTH_OF_STATEMENT:='.JAN';
  758.     2:MONTH_OF_STATEMENT:='.FEB';
  759.     3:MONTH_OF_STATEMENT:='.MAR';
  760.     4:MONTH_OF_STATEMENT:='.APR';
  761.     5:MONTH_OF_STATEMENT:='.MAY';
  762.     6:MONTH_OF_STATEMENT:='.JUN';
  763.     7:MONTH_OF_STATEMENT:='.JUL';
  764.     8:MONTH_OF_STATEMENT:='.AUG';
  765.     9:MONTH_OF_STATEMENT:='.SEP';
  766.     10:MONTH_OF_STATEMENT:='.OCT';
  767.     11:MONTH_OF_STATEMENT:='.NOV';
  768.     12:MONTH_OF_STATEMENT:='.DEC';
  769.  
  770. END;  {OF CASE}
  771. PRINT_FILE(FILENAM);
  772.  
  773. SETLENGTH(MONTHFIL,0);
  774. APPEND(MONTHFIL,DRIVE);
  775. APPEND(MONTHFIL,ACN);
  776. APPEND(MONTHFIL,MONTH_OF_STATEMENT);
  777.  
  778. WITH INFORMATION DO
  779. BEGIN
  780. REWRITE(MONTHFIL,COP);
  781. RESET(FILENAM,FIN);
  782. FOR I:= 1 TO NUMBER_OF_RECORDS DO
  783.     BEGIN
  784.     READ(FIN:I,INFORMATION);
  785.     WRITE(COP:I,INFORMATION);
  786.     END;
  787.  
  788. REWRITE(FILENAM,FIN);
  789. CREATE_FIRST_RECORD('0002      ');
  790.  
  791.  
  792. FOR I:= 1 TO 2 DO MONTH[I]:=MO[I];
  793. FOR I:= 1 TO 2 DO DAY[I]:=DA[I];
  794. FOR I:= 1 TO 2 DO YEAR[I]:=YR[I];
  795. INVOICE_NUMBER:='PRIOR ';
  796. PURCHASE_ORDER_NUMBER:='BALANCE   ';
  797. AMOUNT:=BALANCE;
  798. WRITE(FIN:2,INFORMATION);
  799. END; {OF WITH INFORMATION DO}
  800.  
  801. PROMPT(1,23,1,'DO YOU WISH TO GENERATE ANOTHER STATEMENT? Y/N',FALSE);
  802. REPEAT
  803. MOVE_CURSOR(60,23);
  804. READ(ANSWER);
  805. UNTIL (ANSWER = 'Y') OR (ANSWER = 'N');
  806. IF ANSWER = 'Y' THEN STATEMENT:= TRUE ELSE STATEMENT:=FALSE;
  807.  
  808. UNTIL STATEMENT = FALSE;
  809. END; {OF PROCEDURE STATMENT}
  810.  
  811.  
  812. {******************** BEGIN THE MAIN PROGRAM HERE ****************}
  813.  
  814. BEGIN
  815. CLEAR_SCREEN;
  816. PROMPT(10,5,0,'ACCOUNTS RECEIVABLE PROGRAM PACKAGE',FALSE);
  817. PROMPT(10,9,0,'CHOOSE FROM EITHER:',FALSE);
  818. PROMPT(10,11,0,'1- POST TO AN ACCOUNT',FALSE);
  819. PROMPT(10,12,0,'2- GENERATE A STATEMENT',FALSE);
  820. PROMPT(10,14,0,'ENTER THE NUMBER OF YOUR CHOICE ',FALSE);
  821. REPEAT
  822. READ(I);
  823. UNTIL (I=1) OR (I=2);
  824.  
  825. IF I=2 THEN STATEMENT:=TRUE ELSE STATEMENT:=FALSE;
  826. POST_TO_ANOTHER_ACCOUNT:=TRUE;
  827.  
  828. WHILE (STATEMENT = FALSE) AND (POST_TO_ANOTHER_ACCOUNT = TRUE) DO POST;
  829.  
  830.  
  831.  
  832. WHILE STATEMENT = TRUE DO STATMENT;
  833.  
  834.  
  835.     
  836.  
  837. END.
  838.