00000000: 50 52 4F 47 52 41 4D 20 50 52 41 4E 44 43 52 28 |PROGRAM PRANDCR(|
00000010: 52 41 4E 44 4F 4D 20 46 49 4C 45 20 43 52 45 41 |RANDOM FILE CREA|
00000020: 54 45 2C 31 31 2F 31 32 2F 38 32 29 3B 0D 0D 43 |TE,11/12/82);..C|
00000030: 4F 4E 53 54 20 44 49 53 4B 55 4E 49 54 3D 38 3B |ONST DISKUNIT=8;|
00000040: 0D 20 20 20 20 20 20 44 41 54 41 43 48 41 4E 3D |. DATACHAN=|
00000050: 32 3B 0D 20 20 20 20 20 20 43 4D 44 43 48 41 4E |2;. CMDCHAN|
00000060: 3D 31 35 3B 0D 20 20 20 20 20 20 46 49 45 4C 44 |=15;. FIELD|
00000070: 53 45 50 3D 24 32 30 3B 0D 0D 56 41 52 20 52 45 |SEP=$20;..VAR RE|
00000080: 43 4F 52 44 53 49 5A 45 2C 20 46 49 4C 45 53 49 |CORDSIZE, FILESI|
00000090: 5A 45 3A 20 49 4E 54 45 47 45 52 3B 0D 20 20 20 |ZE: INTEGER;. |
000000A0: 20 44 41 54 41 4F 55 54 2C 20 43 4F 4D 4D 41 4E | DATAOUT, COMMAN|
000000B0: 44 49 4E 2C 20 43 4F 4D 4D 41 4E 44 4F 55 54 3A |DIN, COMMANDOUT:|
000000C0: 20 54 45 58 54 3B 0D 0D 50 52 4F 43 45 44 55 52 | TEXT;..PROCEDUR|
000000D0: 45 20 50 4F 53 49 54 49 4F 4E 28 43 48 41 4E 4E |E POSITION(CHANN|
000000E0: 45 4C 2C 20 52 45 43 4F 52 44 4E 55 4D 42 45 52 |EL, RECORDNUMBER|
000000F0: 2C 20 53 54 41 52 54 50 4F 53 49 54 49 4F 4E 3A |, STARTPOSITION:|
00000100: 20 49 4E 54 45 47 45 52 29 3B 0D 20 20 42 45 47 | INTEGER);. BEG|
00000110: 49 4E 0D 20 20 20 20 57 52 49 54 45 4C 4E 28 43 |IN. WRITELN(C|
00000120: 4F 4D 4D 41 4E 44 4F 55 54 2C 43 4F 4E 43 41 54 |OMMANDOUT,CONCAT|
00000130: 28 27 50 27 2C 0D 20 20 20 20 20 20 20 20 20 20 |('P',. |
00000140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000150: 20 20 20 20 43 48 52 28 43 48 41 4E 4E 45 4C 29 | CHR(CHANNEL)|
00000160: 2C 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |,. |
00000170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000180: 43 48 52 28 52 45 43 4F 52 44 4E 55 4D 42 45 52 |CHR(RECORDNUMBER|
00000190: 29 2C 43 48 52 28 52 45 43 4F 52 44 4E 55 4D 42 |),CHR(RECORDNUMB|
000001A0: 45 52 20 53 48 52 20 38 29 2C 0D 20 20 20 20 20 |ER SHR 8),. |
000001B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000001C0: 20 20 20 20 20 20 20 20 20 43 48 52 28 53 54 41 | CHR(STA|
000001D0: 52 54 50 4F 53 49 54 49 4F 4E 29 29 29 0D 20 20 |RTPOSITION))). |
000001E0: 45 4E 44 3B 0D 0D 46 55 4E 43 54 49 4F 4E 20 44 |END;..FUNCTION D|
000001F0: 49 53 4B 45 52 52 4F 52 3A 20 42 4F 4F 4C 45 41 |ISKERROR: BOOLEA|
00000200: 4E 3B 0D 20 20 56 41 52 20 45 52 52 4F 52 4E 55 |N;. VAR ERRORNU|
00000210: 4D 42 45 52 3A 20 49 4E 54 45 47 45 52 3B 0D 20 |MBER: INTEGER;. |
00000220: 20 20 20 20 20 4D 45 53 53 41 47 45 3A 20 53 54 | MESSAGE: ST|
00000230: 52 49 4E 47 3B 0D 20 20 46 55 4E 43 54 49 4F 4E |RING;. FUNCTION|
00000240: 20 54 45 58 54 4F 46 28 46 52 4F 4D 43 42 4D 3A | TEXTOF(FROMCBM:|
00000250: 20 53 54 52 49 4E 47 29 3A 20 53 54 52 49 4E 47 | STRING): STRING|
00000260: 3B 0D 20 20 20 20 56 41 52 20 43 4F 4D 4D 41 50 |;. VAR COMMAP|
00000270: 4F 53 3A 20 49 4E 54 45 47 45 52 3B 0D 20 20 20 |OS: INTEGER;. |
00000280: 20 42 45 47 49 4E 0D 20 20 20 20 20 20 43 4F 4D | BEGIN. COM|
00000290: 4D 41 50 4F 53 3A 3D 50 4F 53 28 27 2C 27 2C 46 |MAPOS:=POS(',',F|
000002A0: 52 4F 4D 43 42 4D 29 3B 0D 20 20 20 20 20 20 54 |ROMCBM);. T|
000002B0: 45 58 54 4F 46 3A 3D 43 4F 50 59 28 46 52 4F 4D |EXTOF:=COPY(FROM|
000002C0: 43 42 4D 2C 32 2C 43 4F 4D 4D 41 50 4F 53 2D 32 |CBM,2,COMMAPOS-2|
000002D0: 29 0D 20 20 20 20 45 4E 44 3B 0D 20 20 42 45 47 |). END;. BEG|
000002E0: 49 4E 0D 20 20 20 20 52 45 41 44 28 43 4F 4D 4D |IN. READ(COMM|
000002F0: 41 4E 44 49 4E 2C 45 52 52 4F 52 4E 55 4D 42 45 |ANDIN,ERRORNUMBE|
00000300: 52 2C 4D 45 53 53 41 47 45 29 3B 0D 20 20 20 20 |R,MESSAGE);. |
00000310: 49 46 20 45 52 52 4F 52 4E 55 4D 42 45 52 3C 32 |IF ERRORNUMBER<2|
00000320: 30 0D 20 20 20 20 20 20 20 20 54 48 45 4E 20 44 |0. THEN D|
00000330: 49 53 4B 45 52 52 4F 52 3A 3D 46 41 4C 53 45 0D |ISKERROR:=FALSE.|
00000340: 20 20 20 20 20 20 45 4C 53 45 20 49 46 20 45 52 | ELSE IF ER|
00000350: 52 4F 52 4E 55 4D 42 45 52 3D 35 30 0D 20 20 20 |RORNUMBER=50. |
00000360: 20 20 20 20 20 20 20 20 20 20 20 20 54 48 45 4E | THEN|
00000370: 20 42 45 47 49 4E 0D 20 20 20 20 20 20 20 20 20 | BEGIN. |
00000380: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 52 49 | WRI|
00000390: 54 45 4C 4E 28 54 45 58 54 4F 46 28 4D 45 53 53 |TELN(TEXTOF(MESS|
000003A0: 41 47 45 29 29 3B 0D 20 20 20 20 20 20 20 20 20 |AGE));. |
000003B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 49 53 | DIS|
000003C0: 4B 45 52 52 4F 52 3A 3D 46 41 4C 53 45 0D 20 20 |KERROR:=FALSE. |
000003D0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000003E0: 20 20 45 4E 44 0D 20 20 20 20 20 20 20 20 20 20 | END. |
000003F0: 20 20 20 45 4C 53 45 20 42 45 47 49 4E 0D 20 20 | ELSE BEGIN. |
00000400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000410: 20 20 57 52 49 54 45 4C 4E 28 54 45 58 54 4F 46 | WRITELN(TEXTOF|
00000420: 28 4D 45 53 53 41 47 45 29 29 3B 0D 20 20 20 20 |(MESSAGE));. |
00000430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000440: 44 49 53 4B 45 52 52 4F 52 3A 3D 54 52 55 45 3B |DISKERROR:=TRUE;|
00000450: 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00000460: 20 20 20 20 20 57 52 49 54 45 4C 4E 28 27 45 4E | WRITELN('EN|
00000470: 44 45 44 20 42 59 20 44 49 53 4B 20 45 52 52 4F |DED BY DISK ERRO|
00000480: 52 27 29 0D 20 20 20 20 20 20 20 20 20 20 20 20 |R'). |
00000490: 20 20 20 20 20 20 45 4E 44 0D 20 20 45 4E 44 3B | END. END;|
000004A0: 0D 0D 42 45 47 49 4E 0D 20 20 52 45 53 45 54 28 |..BEGIN. RESET(|
000004B0: 43 4F 4D 4D 41 4E 44 49 4E 2C 0D 20 20 20 20 20 |COMMANDIN,. |
000004C0: 20 20 20 44 49 53 4B 55 4E 49 54 2C 0D 20 20 20 | DISKUNIT,. |
000004D0: 20 20 20 20 20 43 4D 44 43 48 41 4E 29 3B 0D 20 | CMDCHAN);. |
000004E0: 20 52 45 57 52 49 54 45 28 43 4F 4D 4D 41 4E 44 | REWRITE(COMMAND|
000004F0: 4F 55 54 2C 0D 20 20 20 20 20 20 20 20 20 20 44 |OUT,. D|
00000500: 49 53 4B 55 4E 49 54 2C 0D 20 20 20 20 20 20 20 |ISKUNIT,. |
00000510: 20 20 20 43 4D 44 43 48 41 4E 2C 0D 20 20 20 20 | CMDCHAN,. |
00000520: 20 20 20 20 20 20 27 53 30 3A 52 41 4E 44 4F 4D | 'S0:RANDOM|
00000530: 27 29 3B 0D 20 20 52 45 50 45 41 54 0D 20 20 20 |');. REPEAT. |
00000540: 20 57 52 49 54 45 28 27 52 45 43 4F 52 44 20 53 | WRITE('RECORD S|
00000550: 49 5A 45 20 49 4E 20 43 48 41 52 41 43 54 45 52 |IZE IN CHARACTER|
00000560: 53 3F 20 27 29 3B 0D 20 20 20 20 52 45 41 44 4C |S? ');. READL|
00000570: 4E 28 52 45 43 4F 52 44 53 49 5A 45 29 3B 0D 20 |N(RECORDSIZE);. |
00000580: 20 20 20 49 46 20 52 45 43 4F 52 44 53 49 5A 45 | IF RECORDSIZE|
00000590: 3C 31 36 0D 20 20 20 20 20 20 20 20 54 48 45 4E |<16. THEN|
000005A0: 20 57 52 49 54 45 4C 4E 28 27 54 4F 4F 20 53 4D | WRITELN('TOO SM|
000005B0: 41 4C 4C 21 27 29 0D 20 20 20 20 20 20 45 4C 53 |ALL!'). ELS|
000005C0: 45 20 49 46 20 52 45 43 4F 52 44 53 49 5A 45 3E |E IF RECORDSIZE>|
000005D0: 32 35 34 0D 20 20 20 20 20 20 20 20 20 20 20 20 |254. |
000005E0: 20 20 20 54 48 45 4E 20 57 52 49 54 45 4C 4E 28 | THEN WRITELN(|
000005F0: 27 54 4F 4F 20 4C 41 52 47 45 21 27 29 0D 20 20 |'TOO LARGE!'). |
00000600: 55 4E 54 49 4C 20 28 52 45 43 4F 52 44 53 49 5A |UNTIL (RECORDSIZ|
00000610: 45 3E 31 35 29 20 41 4E 44 20 28 52 45 43 4F 52 |E>15) AND (RECOR|
00000620: 44 53 49 5A 45 3C 32 35 35 29 3B 0D 20 20 52 45 |DSIZE<255);. RE|
00000630: 57 52 49 54 45 28 44 41 54 41 4F 55 54 2C 0D 20 |WRITE(DATAOUT,. |
00000640: 20 20 20 20 20 20 20 20 20 44 49 53 4B 55 4E 49 | DISKUNI|
00000650: 54 2C 0D 20 20 20 20 20 20 20 20 20 20 44 41 54 |T,. DAT|
00000660: 41 43 48 41 4E 2C 0D 20 20 20 20 20 20 20 20 20 |ACHAN,. |
00000670: 20 43 4F 4E 43 41 54 28 27 30 3A 52 41 4E 44 4F | CONCAT('0:RANDO|
00000680: 4D 2C 4C 2C 27 2C 43 48 52 28 52 45 43 4F 52 44 |M,L,',CHR(RECORD|
00000690: 53 49 5A 45 29 29 29 3B 0D 20 20 49 46 20 44 49 |SIZE)));. IF DI|
000006A0: 53 4B 45 52 52 4F 52 0D 20 20 20 20 20 20 54 48 |SKERROR. TH|
000006B0: 45 4E 20 45 58 49 54 28 4D 41 49 4E 29 3B 0D 20 |EN EXIT(MAIN);. |
000006C0: 20 52 45 50 45 41 54 0D 20 20 20 20 57 52 49 54 | REPEAT. WRIT|
000006D0: 45 28 27 46 49 4C 45 20 53 49 5A 45 20 49 4E 20 |E('FILE SIZE IN |
000006E0: 4E 55 4D 42 45 52 20 4F 46 20 52 45 43 4F 52 44 |NUMBER OF RECORD|
000006F0: 53 3F 20 27 29 3B 0D 20 20 20 20 52 45 41 44 4C |S? ');. READL|
00000700: 4E 28 46 49 4C 45 53 49 5A 45 29 3B 0D 20 20 20 |N(FILESIZE);. |
00000710: 20 49 46 20 46 49 4C 45 53 49 5A 45 3C 32 0D 20 | IF FILESIZE<2. |
00000720: 20 20 20 20 20 20 20 54 48 45 4E 20 57 52 49 54 | THEN WRIT|
00000730: 45 4C 4E 28 27 54 4F 4F 20 53 4D 41 4C 4C 21 27 |ELN('TOO SMALL!'|
00000740: 29 0D 20 20 20 20 20 20 45 4C 53 45 20 49 46 20 |). ELSE IF |
00000750: 46 49 4C 45 53 49 5A 45 3E 4D 41 58 49 4E 54 0D |FILESIZE>MAXINT.|
00000760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 | T|
00000770: 48 45 4E 20 57 52 49 54 45 4C 4E 28 27 54 4F 4F |HEN WRITELN('TOO|
00000780: 20 4C 41 52 47 45 21 27 29 0D 20 20 55 4E 54 49 | LARGE!'). UNTI|
00000790: 4C 20 28 46 49 4C 45 53 49 5A 45 3E 31 35 29 20 |L (FILESIZE>15) |
000007A0: 41 4E 44 20 28 46 49 4C 45 53 49 5A 45 3C 4D 41 |AND (FILESIZE<MA|
000007B0: 58 49 4E 54 29 3B 0D 20 20 50 4F 53 49 54 49 4F |XINT);. POSITIO|
000007C0: 4E 28 44 41 54 41 43 48 41 4E 2C 46 49 4C 45 53 |N(DATACHAN,FILES|
000007D0: 49 5A 45 2C 31 29 3B 0D 20 20 49 46 20 44 49 53 |IZE,1);. IF DIS|
000007E0: 4B 45 52 52 4F 52 0D 20 20 20 20 20 20 54 48 45 |KERROR. THE|
000007F0: 4E 20 45 58 49 54 28 4D 41 49 4E 29 3B 0D 20 20 |N EXIT(MAIN);. |
00000800: 57 52 49 54 45 28 44 41 54 41 4F 55 54 2C 43 48 |WRITE(DATAOUT,CH|
00000810: 52 28 32 35 35 29 29 3B 0D 20 20 49 46 20 44 49 |R(255));. IF DI|
00000820: 53 4B 45 52 52 4F 52 0D 20 20 20 20 20 20 54 48 |SKERROR. TH|
00000830: 45 4E 20 45 58 49 54 28 4D 41 49 4E 29 3B 0D 20 |EN EXIT(MAIN);. |
00000840: 20 50 4F 53 49 54 49 4F 4E 28 44 41 54 41 43 48 | POSITION(DATACH|
00000850: 41 4E 2C 31 2C 31 29 3B 0D 20 20 49 46 20 44 49 |AN,1,1);. IF DI|
00000860: 53 4B 45 52 52 4F 52 0D 20 20 20 20 20 20 54 48 |SKERROR. TH|
00000870: 45 4E 20 45 58 49 54 28 4D 41 49 4E 29 3B 0D 20 |EN EXIT(MAIN);. |
00000880: 20 57 52 49 54 45 4C 4E 28 44 41 54 41 4F 55 54 | WRITELN(DATAOUT|
00000890: 2C 46 49 4C 45 53 49 5A 45 2C 46 49 45 4C 44 53 |,FILESIZE,FIELDS|
000008A0: 45 50 2C 52 45 43 4F 52 44 53 49 5A 45 29 3B 0D |EP,RECORDSIZE);.|
000008B0: 20 20 49 46 20 44 49 53 4B 45 52 52 4F 52 0D 20 | IF DISKERROR. |
000008C0: 20 20 20 20 20 54 48 45 4E 20 45 58 49 54 28 4D | THEN EXIT(M|
000008D0: 41 49 4E 29 0D 45 4E 44 2E 0D 03 |AIN).END... |
PROGRAM PRANDCR(RANDOM FILE CREATE,11/12
/82);..CONST DISKUNIT=8;. DATACHAN=
2;. CMDCHAN=15;. FIELDSEP=$20;
..VAR RECORDSIZE, FILESIZE: INTEGER;.
DATAOUT, COMMANDIN, COMMANDOUT: TEXT;..
PROCEDURE POSITION(CHANNEL, RECORDNUMBER
, STARTPOSITION: INTEGER);. BEGIN. W
RITELN(COMMANDOUT,CONCAT('P',.
CHR(CHANNEL),.
CHR(RECORDNUMBER
),CHR(RECORDNUMBER SHR 8),.
CHR(STARTPOSITION))).
END;..FUNCTION DISKERROR: BOOLEAN;. VAR
ERRORNUMBER: INTEGER;. MESSAGE: ST
RING;. FUNCTION TEXTOF(FROMCBM: STRING)
: STRING;. VAR COMMAPOS: INTEGER;.
BEGIN. COMMAPOS:=POS(',',FROMCBM);
. TEXTOF:=COPY(FROMCBM,2,COMMAPOS-2
). END;. BEGIN. READ(COMMANDIN,ER
RORNUMBER,MESSAGE);. IF ERRORNUMBER<2
0. THEN DISKERROR:=FALSE. EL
SE IF ERRORNUMBER=50. THEN
BEGIN. WRITELN(TEX
TOF(MESSAGE));. DIS
KERROR:=FALSE. END.
ELSE BEGIN.
WRITELN(TEXTOF(MESSAGE));.
DISKERROR:=TRUE;.
WRITELN('ENDED BY DISK ERROR').
END. END;..BEGIN. RESET(
COMMANDIN,. DISKUNIT,. CMD
CHAN);. REWRITE(COMMANDOUT,. D
ISKUNIT,. CMDCHAN,. 'S
0:RANDOM');. REPEAT. WRITE('RECORD S
IZE IN CHARACTERS? ');. READLN(RECORD
SIZE);. IF RECORDSIZE<16. THEN
WRITELN('TOO SMALL!'). ELSE IF REC
ORDSIZE>254. THEN WRITELN(
'TOO LARGE!'). UNTIL (RECORDSIZE>15) AN
D (RECORDSIZE<255);. REWRITE(DATAOUT,.
DISKUNIT,. DATACHAN,.
CONCAT('0:RANDOM,L,',CHR(RECORD
SIZE)));. IF DISKERROR. THEN EXIT(
MAIN);. REPEAT. WRITE('FILE SIZE IN
NUMBER OF RECORDS? ');. READLN(FILESI
ZE);. IF FILESIZE<2. THEN WRIT
ELN('TOO SMALL!'). ELSE IF FILESIZE
>MAXINT. THEN WRITELN('TOO
LARGE!'). UNTIL (FILESIZE>15) AND (FIL
ESIZE<MAXINT);. POSITION(DATACHAN,FILES
IZE,1);. IF DISKERROR. THEN EXIT(M
AIN);. WRITE(DATAOUT,CHR(255));. IF DI
SKERROR. THEN EXIT(MAIN);. POSITIO
N(DATACHAN,1,1);. IF DISKERROR. TH
EN EXIT(MAIN);. WRITELN(DATAOUT,FILESIZ
E,FIELDSEP,RECORDSIZE);. IF DISKERROR.
THEN EXIT(MAIN).END...
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL