|
|
DataMuseum.dkPresents historical artifacts from the history of: Ohio Scientific Inc. |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Ohio Scientific Inc. Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 8176 (0x1ff0)
Notes: OS65UFile, OSU65U-BASIC
Names: »DBMDIR«
└─⟦2f57871a3⟧ Bits:30009355 Ohio Scientific OS-OMS Nucleus, delvist oversat til dansk
└─⟦this⟧ »DBMDIR«
00001 PRINT"** PROGRAM NOT EXECUTABLE FROM CONSOLE **":RUN"DBMSYS","PASS 00002 CLOSE:CLEAR:REM 1/79 OS-DMS MODIFIED VERISION OF OS-65U DIR (DBMDIR) 00005 POKE 2888,0: REM PERMIT <CR> ONLY IN RESPONSE TO INPUT STATEMENT 00010 REM OS-65U DIR (C) OSI 1978 00022 FOR I=1 TO 27:PRINT:NEXT I 00030 INPUT"\NSKES UDSKRIFT P] PRINTER (P) ELLER KONSOL (K)";KK$ 00035 IF LEFT$(KK$,1)="P" GOTO 42 00040 DV = PEEK(11665): REM OUTPUT DEVICE 00041 GOTO 51 00042 INPUT "HVILKEN PORT";DV 00051 DV(1)=PEEK(9832):IF DV(1)>127 THEN DV(1)=DV(1)-128+4 00052 DV$(1)=CHR$(DV(1)+65) 00053 PRINT: INPUT"INDTAST HVILKEN STATION";DV$(2) 00054 DV$(2)=LEFT$(DV$(2),1): IF DV$(2)="" THEN DV$(2)=DV$(1) 00055 IF DV$(2)=>"A" OR DV$(2)<="E" GOTO 60 00056 PRINT:PRINT"FORKERT !!!":PRINT:GOTO 53 00060 HS=72898560: REM HARD SIZE 00070 FS = 275968: REM FLOPPY SIZE 00075 DEV DV$(2) 00078 GOSUB 740: REM GO SETUP FOR XFRS 00080 MS$(1)="DB-2 DATA FILER KATALOG" 00082 MS$(2)="DB-2 PROGRAM FILER KATALOG" 00084 MS$(3)="DB-2 KOMPLET KATALOG" 00086 PRINT: PRINT "(1) ";MS$(1): PRINT "(2) ";MS$(2): PRINT "(3) ";MS$(3); 00088 INPUT" ";QA$: IF QA$="" THEN SW=3: GOTO 96 00089 FOR X=1 TO LEN(QA$): T$=MID$(QA$,X,1) 00090 IF T$<"1" OR T$>"3" THEN PRINT:PRINT"FORKERT !!!": GOTO 86 00092 NEXT X: SW=VAL(QA$) 00094 IF SW<1 OR SW>3 OR SW<>INT(SW) THEN PRINT: PRINT"WHAT": GOTO 86 00096 FOR X=1 TO 33: PRINT: NEXT X 00098 PP=INT((50-LEN(MS$(SW)))/2) 00100 GOSUB 3040: CNT=0: REM GOTO PRINT HEADING 00160 OF = 16: REM SKIP OVER EMBEDDED HEADER 00180 REM READ A PAGE OF THE DIR 00200 DH = INT(EA/16777216): RM = EA-DH*16777216 00210 DM = INT(RM/65536): RM = RM-DM*65536 00220 DL = INT(RM/256): RM = RM-DL*256 00230 DB = RM 00240 POKE CB+1,DB: POKE CB+2,DL: POKE CB+3,DM: POKE CB+4,DH 00250 ER = USR(0): IF ER<>0 THEN GOTO 900 00270 RT = RA+OF: REM RAM ADR OF CURRENT ENTRY 00280 EC = EC+1: REM ENTRY NO. 00290 IF PEEK(RT) = 0 THEN GOTO 950: REM EMPTY DE 00310 REM READ NAME FROM DE 00330 N$ = "": FOR I=0 TO 5: N$ = N$+CHR$(PEEK(RT+I)): NEXT 00340 REM READ DIR BIT 00350 TM = PEEK(RT+8) 00360 D$ = " ": IF (TM AND 128)<>0 THEN D$ = "DIR" 00380 REM TYPE 00400 TM = INT((TM AND 28)/4): TY$ = "OTHER" 00410 IF TM=0 THEN TY$ = "DATA " 00420 IF TM=1 THEN TY$ = "BASIC " 00440 REM ACCESS 00460 TM = PEEK(RT+8) AND 3 00470 AR$ = "NONE " 00480 IF TM=1 THEN AR$ = "READ " 00490 IF TM=2 THEN AR$ = "WRITE " 00500 IF TM=3 THEN AR$ = "R/W " 00520 REM READ DISK ADR OF THIS FILE 00540 DA = 256*(PEEK(RT+9) + 256*(PEEK(RT+10) + 256*PEEK(RT+11))) 00560 REM READ SIZE OF THIS FILE 00580 SZ = 256*(PEEK(RT+12) + 256*(PEEK(RT+13) + 256*PEEK(RT+14))) 00600 REM PRINT ENTRY 00620 IF PEEK(RT) = 1 THEN RE = RE+SZ: GOTO 650 00622 KK$=RIGHT$(N$,1): IF TYPE$="OTHER" GOTO 660 00623 IF LEFT$(TYPE$,5)="BASIC" THEN PF=PF+1 00624 NF=NF+1: REM # OF FILE(S) CNTR 00625 ON SW GOTO 628,632,638 00628 IF LEFT$(TYPE$,4)<>"DATA" GOTO 660 00630 GOTO 638 00632 IF LEFT$(TYPE$,4)="DATA" GOTO 660 00638 PRINT #DV, TAB(1);N$; TAB(11);D$; TAB(16);TY$; TAB(24);AR$; 00640 PRINT #DV, TAB(32);DA; TAB(43);SZ;: PN=POS(X) 00645 GOSUB 5020: REM PRINT MA/KY TYPE 00650 GOSUB 3020: REM GOTO PAGING CNTRL SUB 00660 IF DA+SZ > HA THEN HA = DA+SZ: REM UPDATE HIGHEST ADR 00670 OF = OF+16: REM POINT TO NEXT ENTRY 00680 IF OF<256 THEN GOTO 270 00690 EA = EA+256: REM DA OF NEXT PAGE OF DIR 00700 OF = 0: REM OFFSET INTO SCRBUF 00710 IF EA < EN THEN GOTO 200 00720 GOTO 950: REM GO EXIT 00740 REM XFR SETUP SUBR 00760 POKE 8778,192: POKE 8779,36: REM POINT USR TO INTERF SUBR 00770 POKE 9435,232: POKE 9436,40: REM INTERF SUBR GET$ 00780 RA = 9970: REM SCRBUF 00790 CB=9889: REM XFR CONTROL BLOCK 00800 POKE CB+5,0: POKE CB+6,1: REM XFR 256 BYTES 00810 POKE CB+7,RA-INT(RA/256)*256: POKE CB+8,RA/256: REM RAM ADR 00820 A = 9899: REM LOC OF DIR DA 00830 EA = 256*(PEEK(A) + 256*(PEEK(A+1) + 256*PEEK(A+2))) 00840 S = 9902: REM LOC OF DIR SIZE 00850 ES = 256*(PEEK(S) + 256*(PEEK(S+1) + 256*PEEK(S+2))) 00860 EN = EA+ES: REM END OF DIR DA 00870 HA = EN: REM HIGHEST FILE ADR FOUND 00880 RETURN 00900 REM ERROR PRINTER 00920 T = PEEK(9832): IF T>127 THEN T = T-128+4 00930 PRINT "*** STATION ";CHR$(65+T);" L[SE FEJL";ER;"P] ADRESSE";DA 00932 GOTO 1010 00940 REM 00950 REM COMMON EXIT 00960 REM 00970 SS = FS 00980 IF PEEK(9832) > 3 THEN SS = HS 00990 REM R1* 01000 GOSUB 4020: REM GOSUB TO PRINT # FILE(S) COUNT 01010 POKE 8778,208: POKE 8779,16: REM USR=FCERR 01020 POKE 2888,0: IF DV<3 THEN INPUT"TAST RETURN, HVIS FORS[TTELSE";QA$ 01030 FOR X=1 TO PEEK(15908): PRINT #DV: NEXT 01034 FOR X=1 TO PEEK(15908): PRINT #DV: NEXT 01040 DEV DV$(1):RUN"DBMSYS","PASS" 01050 REM 01060 REM 01070 REM 03000 REM PAGING CNTRL SUB 03020 CNT=CNT+1: IF CNT<15 OR DV>2 THEN RETURN 03030 PRINT:INPUT" TAST RETURN, HVIS FORS[TTELSE";QA$ 03035 CNT=0: FOR X=1 TO 33: PRINT: NEXT 03040 PRINT #DV,TAB(PP); MS$(SW): PRINT #DV 03050 PRINT #DV, TAB(2);"NAVN"; TAB(17);"TYPE"; TAB(24);"TILGANG"; 03060 PRINT #DV, TAB(33);"ADRESSE"; TAB(44);"L[NGDE" 03070 FOR I=0 TO 50: PRINT #DV, "-";: NEXT: PRINT #DV 03080 RETURN: REM BAC WE GO 04000 REM SUB TO PRINT # FILES ON DIR (I.E. 10 DATA FILES, ETC.) 04020 PRINT #DV: IF DV<3 THEN INPUT"TAST RETURN, HVIS FORS[TTELSE";QA$ 04030 IF DV<3 THEN FOR X=1 TO 33: PRINT: NEXT 04040 ON SW GOTO 4400,4200,4050 04045 REM SECTION TO PRINT ALL 04050 PRINT #DV, "MASTER"; TAB(10); "N\GLE"; TAB(20); "ARBEJDS"; 04060 PRINT #DV, TAB(30); "PROGRAM"; TAB(40); "TOTAL" 04070 FOR X=0 TO 40 STEP 10:PRINT#DV,TAB(X);"FIL(ER)";:NEXT:PRINT#DV 04080 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04090 PRINT #DV, MF; TAB(10); KF; TAB(20); SF; TAB(30); PF; TAB(40); NF 04100 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04105 PRINT #DV 04110 FOR X=0 TO 40 STEP 25: PRINT #DV, TAB(X); "BYTE(S)";: NEXT: PRINT #DV 04120 PRINT #DV, "FRI"; TAB(25); "TILBAGE" 04130 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04140 PRINT #DV, SS-HA; TAB(25); RE 04150 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04160 RETURN: REM BAC WE GO 04170 REM 04190 REM SECTION TO PRINT PROGS ONLY 04200 PRINT #DV, "PROGRAM"; TAB(25); "TOTAL" 04210 FOR X=0 TO 40 STEP 25:PRINT#DV,TAB(X);"FIL(ER)";:NEXT:PRINT#DV 04220 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04225 PRINT #DV, PF; TAB(25); NF 04227 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04229 PRINT #DV 04230 FOR X=0 TO 40 STEP 25: PRINT #DV, TAB(X); "BYTE(S)";: NEXT: PRINT #DV 04240 PRINT #DV, "FRI"; TAB(25); "TILBAGE" 04250 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04260 PRINT #DV, SS-HA; TAB(25); RE 04270 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04280 RETURN: REM BAC WE GO 04290 REM 04390 REM SECTION TO PRINT DATA FILE(S) ONLY 04400 PRINT #DV, "MASTER"; TAB(12); "N\GLE"; TAB(24); "ARBEJDS"; 04410 PRINT #DV, TAB(36); "TOTAL" 04420 FOR X=0 TO 44 STEP 12: PRINT #DV, TAB(X); "FILE(S)";: NEXT: PRINT #DV 04430 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04440 PRINT #DV, MF; TAB(12); KF; TAB(24); SF; TAB(36); NF 04450 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04455 PRINT #DV 04460 FOR X=0 TO 44 STEP 25: PRINT #DV, TAB(X); "BYTE(S)";: NEXT: PRINT #DV 04470 PRINT #DV, "FRI"; TAB(25); "TILBAGE" 04480 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04490 PRINT #DV, SS-HA; TAB(25); RE 04500 FOR X=0 TO 50: PRINT #DV, TAB(X); "-";: NEXT: PRINT #DV 04510 RETURN: REM BAC WE GO 04520 REM 04530 REM 05000 REM DATA FILE TYPE PRINT SUB (MASTER KEY NON-DMS) 05010 REM 05020 PN=PN+1: IF PN<52 THEN PN=52: REM ARE WE OUT FAR ENOUGH 05025 IF DV=2 OR LEFT$(TYPE$,4)<>"DATA" GOTO 5060 05030 IF KK$="0" THEN PRINT #DV, TAB(PN); "MASTER FIL": MF=MF+1: RETURN 05040 IF KK$<"1" OR KK$>"9" GOTO 5050 05045 PRINT #DV,TAB(PN); "N\GLE FIL": KF=KF+1: RETURN 05050 PRINT #DV, TAB(PN); "ARBEJDS FIL": SF=SF+1:RETURN 05060 PRINT #DV: RETURN: NOT A DATA FILE SO RETURN 05070 REM 05080 REM 05090 REM 50000 REM ERROR HANDLER 50010 ER=PEEK(10226): EL=PEEK(11774)+PEEK(11775)*256 50080 ERR$="DISK FEJL KODE "+STR$(ER)+" P] LINIE "+STR$(EL) 50094 EA=0: FOR I=4 TO 1 STEP -1: EA=EA*256+PEEK(9889+1): NEXT I 50096 DV(3)=PEEK(9832): IF DV(3)>127 THEN DV(3)=DV(3)-128+4 50098 PRINT"FEJL P] STATION "+CHR$(DV(3)+65)+" P] DISK ADRESSE";EA 51020 CLOSE 51050 PRINT:PRINT:PRINT"***** FEJL *****":PRINT:PRINT 51060 PRINTERR$ 51110 DEV DV$(1): REM SELECT ORGINAL DEVICE 51120 FLAG 6: REM ENABLE PROGRAM ABORT ON EOF HIT ERROR 51150 PRINT 51155 IF ER>0 THEN INPUT "TAST RETURN, HVIS FORS[TTELSE";QA$ 51160 CLOSE: RUN"DBMSYS","PASS"